aboutsummaryrefslogtreecommitdiff
path: root/gcc/testsuite/g++.dg
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/testsuite/g++.dg')
-rw-r--r--gcc/testsuite/g++.dg/abi/layout2.C2
-rw-r--r--gcc/testsuite/g++.dg/align-test-1.C347
-rw-r--r--gcc/testsuite/g++.dg/altivec-1.C12
-rw-r--r--gcc/testsuite/g++.dg/altivec-2.C15
-rw-r--r--gcc/testsuite/g++.dg/altivec-3.C21
-rw-r--r--gcc/testsuite/g++.dg/altivec-4.C129
-rw-r--r--gcc/testsuite/g++.dg/altivec-5.C19
-rw-r--r--gcc/testsuite/g++.dg/apple-altivec-1.C9
-rw-r--r--gcc/testsuite/g++.dg/charset/asm1.c14
-rw-r--r--gcc/testsuite/g++.dg/charset/asm2.c33
-rw-r--r--gcc/testsuite/g++.dg/charset/asm3.c10
-rw-r--r--gcc/testsuite/g++.dg/charset/asm4.c8
-rw-r--r--gcc/testsuite/g++.dg/charset/attribute1.c10
-rw-r--r--gcc/testsuite/g++.dg/charset/attribute2.c8
-rw-r--r--gcc/testsuite/g++.dg/charset/extern1.cc15
-rw-r--r--gcc/testsuite/g++.dg/charset/extern2.cc5
-rw-r--r--gcc/testsuite/g++.dg/charset/string.c5
-rw-r--r--gcc/testsuite/g++.dg/const-cfstring-1.C26
-rw-r--r--gcc/testsuite/g++.dg/debug/debug8.C29
-rw-r--r--gcc/testsuite/g++.dg/eh/spec7.C35
-rw-r--r--gcc/testsuite/g++.dg/expr/align68k-1.C46
-rw-r--r--gcc/testsuite/g++.dg/expr/align68k-2.C38
-rw-r--r--gcc/testsuite/g++.dg/expr/cast-ptr-1.C15
-rw-r--r--gcc/testsuite/g++.dg/expr/fieldref1.C23
-rw-r--r--gcc/testsuite/g++.dg/ext/anon-struct4.C3
-rw-r--r--gcc/testsuite/g++.dg/ext/attrib14.C13
-rw-r--r--gcc/testsuite/g++.dg/init/ctor3.C6
-rw-r--r--gcc/testsuite/g++.dg/init/ref11.C13
-rw-r--r--gcc/testsuite/g++.dg/init/union1.C5
-rw-r--r--gcc/testsuite/g++.dg/kext1.C11
-rw-r--r--gcc/testsuite/g++.dg/kext2.C13
-rw-r--r--gcc/testsuite/g++.dg/kext3.C18
-rw-r--r--gcc/testsuite/g++.dg/lookup/enum1.C5
-rw-r--r--gcc/testsuite/g++.dg/lookup/struct2.C7
-rw-r--r--gcc/testsuite/g++.dg/opt/eh1.C21
-rw-r--r--gcc/testsuite/g++.dg/overload/ref1.C21
-rw-r--r--gcc/testsuite/g++.dg/parse/builtin2.C5
-rw-r--r--gcc/testsuite/g++.dg/parse/crash14.C20
-rw-r--r--gcc/testsuite/g++.dg/parse/non-dependent3.C17
-rw-r--r--gcc/testsuite/g++.dg/parse/template14.C17
-rw-r--r--gcc/testsuite/g++.dg/pascal-strings-1.C44
-rw-r--r--gcc/testsuite/g++.dg/pascal-strings-2.C43
-rw-r--r--gcc/testsuite/g++.dg/preserve-PPC-CR.C41
-rw-r--r--gcc/testsuite/g++.dg/template/spec12.C18
-rw-r--r--gcc/testsuite/g++.dg/warn/Wunused-7.C12
45 files changed, 899 insertions, 328 deletions
diff --git a/gcc/testsuite/g++.dg/abi/layout2.C b/gcc/testsuite/g++.dg/abi/layout2.C
index fb4e1e5d9ff..d9ccda8a074 100644
--- a/gcc/testsuite/g++.dg/abi/layout2.C
+++ b/gcc/testsuite/g++.dg/abi/layout2.C
@@ -1,5 +1,7 @@
// Red Hat bugzilla 65210
// { dg-do run }
+// APPLE LOCAL Apple has specific long double warning message then FSF
+// { dg-options "-Wno-long-double" { target *-apple-darwin* } }
struct A {
int a;
diff --git a/gcc/testsuite/g++.dg/align-test-1.C b/gcc/testsuite/g++.dg/align-test-1.C
new file mode 100644
index 00000000000..e3df21d6d3b
--- /dev/null
+++ b/gcc/testsuite/g++.dg/align-test-1.C
@@ -0,0 +1,347 @@
+/* APPLE LOCAL file Macintosh alignment */
+
+/* { dg-do run } */
+/* { dg-options "-Wno-long-long" } */
+
+/*
+ * Macintosh compiler alignment test for C++.
+ * Fred Forsman
+ * Apple Computer, Inc.
+ * (C) 2000-2001.
+ * Last modified 2002-5-24.
+ */
+
+ /* Check whether we are testing GCC 3 or later. If so, it has a
+ different scheme for laying out classes: members of a derived
+ class can be laid out starting in the padding at the end of the
+ base class. */
+#ifdef __GNUC__
+#if __GNUC__ >= 3
+ #define GCC3 1
+#endif
+#endif
+
+#include <stdio.h>
+#include <stddef.h>
+#include <string.h>
+
+extern "C" void abort (void);
+
+#define Q(x) #x, x
+
+typedef unsigned char UINT8;
+typedef unsigned short UINT16;
+typedef unsigned long UINT32;
+
+static int bad_option = 0;
+static int flag_verbose = 0;
+static int nbr_failures = 0;
+
+/* === classes === */
+
+class C1 {
+ static const int f1 = 1;
+ UINT8 f2;
+};
+
+class C2 {
+ static int f1;
+ UINT8 f2;
+};
+
+class C3 {
+ public:
+ enum E1 {
+ f1 = 1
+ };
+ protected:
+ UINT8 f2;
+};
+
+class C4 {
+ UINT8 f1;
+ static const int f2 = 1;
+};
+
+class C5 {
+ UINT8 f2;
+ static int f1;
+};
+
+class C6 {
+ UINT8 f1;
+ enum E1 {
+ f2 = 1
+ };
+};
+
+class C7 {
+ /* empty base class */
+};
+
+#pragma options align=mac68k
+
+class C8 {
+ /* empty base class */
+};
+
+class C9: public C8 {
+ public:
+ UINT8 f1;
+};
+
+#pragma options align=reset
+
+/* What is offset of first field after an empty base class? */
+class C10: public C7 {
+ public:
+ UINT8 f1;
+};
+
+/* GCC3 starts layout of derived class in padding at end of base class. */
+class C11 {
+ public:
+ UINT32 f1;
+ UINT8 f2;
+};
+
+class C12: public C11 {
+ public:
+ UINT8 f3;
+};
+
+/* Check whether compiler will reorder members to take advantage of
+ padding. If the compiler did this (which it does not appear to
+ do), f3 and f4 in C14 would be reordered to take advantage of the
+ padding at the end of the base class. */
+class C13 {
+ public:
+ UINT32 f1;
+ UINT16 f2;
+};
+
+class C14: public C13 {
+ public:
+ UINT32 f3;
+ UINT16 f4;
+};
+
+/* Tests for double aligned base class */
+
+class C15 {
+ public:
+ double f1;
+ long f2;
+};
+
+class C16: public C15 {
+};
+
+class C17: public C15 {
+ public:
+ long f3;
+};
+
+class C18: public C16 {
+ public:
+ char f3;
+};
+
+class C19: public C17 {
+ public:
+ char f4;
+};
+
+/* Tests for alignment in class with v-table pointer */
+
+class C20 {
+ public:
+ double f1;
+ virtual void func1(void);
+};
+
+/* === vectors === */
+
+#ifdef __VEC__
+class VC1 {
+ public:
+ vector signed short f1;
+ UINT8 f2;
+};
+
+typedef struct VS1 {
+ VC1 f1;
+ UINT8 f2;
+} VS1;
+
+class VC2: public VC1 {
+ public:
+ UINT8 f1;
+};
+
+typedef struct VS2 {
+ UINT8 f1;
+ VC2 f2;
+ UINT8 f3;
+} VS2;
+
+class VC3 {
+ public:
+ vector signed short f1;
+ virtual void func1(void);
+};
+
+#endif
+
+/* === bools === */
+
+typedef struct B1 {
+ bool f1;
+ UINT8 f2;
+} B1;
+
+typedef struct B2 {
+ UINT8 f1;
+ bool f2;
+} B2;
+
+
+static void check(char * rec_name, int actual, int expected, char * comment)
+{
+ if (flag_verbose || (actual != expected)) {
+ printf("%-20s = %2d (%2d) ", rec_name, actual, expected);
+ if (actual != expected) {
+ printf("*** FAIL");
+ nbr_failures++;
+ } else
+ printf(" PASS");
+ printf(": %s\n", comment);
+ }
+}
+
+static void check_option(char *option)
+{
+ if (*option == '-') {
+ if (strcmp(option, "-v") == 0)
+ flag_verbose = 1;
+ else {
+ fprintf(stderr, "*** unrecognized option '%s'.\n", option);
+ bad_option = 1;
+ }
+ } else {
+ fprintf(stderr, "*** unrecognized option '%s'.\n", option);
+ bad_option = 1;
+ }
+}
+
+int main(int argc, char *argv[])
+{
+ int i;
+
+ for (i = 1; i < argc; i++)
+ check_option(argv[i]);
+
+ if (bad_option)
+ return 1;
+
+ check(Q(sizeof(C1)), 1, "const as 1st field");
+ check(Q(sizeof(C2)), 1, "static as 1st field");
+ check(Q(sizeof(C3)), 1, "enum as 1st field");
+ check(Q(sizeof(C4)), 1, "const as 2nd field");
+ check(Q(sizeof(C5)), 1, "static as 2nd field");
+ check(Q(sizeof(C6)), 1, "enum as 2nd field");
+ check(Q(sizeof(C7)), 1, "empty class, power mode");
+ check(Q(sizeof(C8)), 2, "empty class, mac68k mode");
+ check(Q(sizeof(C9)), 2, "class with empty base class and one char, mac68k");
+ check(Q(offsetof(C9, f1)), 0, "offset of 1st field after empty base class"); /* { dg-warning "invalid access" "" } */
+ /* { dg-warning "macro was used incorrectly" "" { target *-*-* } 256 } */
+ check(Q(sizeof(C10)), 1, "class based on an empty class, power mode");
+ check(Q(sizeof(C11)), 8, "class with long, char");
+#ifdef GCC3
+ check(Q(sizeof(C12)), 8, "class with base class with long, char and its own char");
+#else
+ check(Q(sizeof(C12)), 12, "class with base class with long, char and its own char");
+#endif
+#ifdef GCC3
+ check(Q(offsetof(C12, f3)), 5, "offset of 1st field in class with a base class with a long, char"); /* { dg-warning "invalid access" "" } */
+ /* { dg-warning "macro was used incorrectly" "" { target *-*-* } 266 } */
+#else
+ check(Q(offsetof(C12, f3)), 8, "offset of 1st field in class with a base class with a long, char");
+#endif
+ check(Q(sizeof(C13)), 8, "class with long, short");
+ check(Q(sizeof(C14)), 16, "derived class with short, long");
+ check(Q(offsetof(C14, f3)), 8, "offset of 1st field after base class with padding"); /* { dg-warning "invalid access" "" } */
+ /* { dg-warning "macro was used incorrectly" "" { target *-*-* } 273 } */
+ check(Q(offsetof(C14, f4)), 12, "offset of 2nd field after base class with padding"); /* { dg-warning "invalid access" "" } */
+ /* { dg-warning "macro was used incorrectly" "" { target *-*-* } 275 } */
+
+ check(Q(sizeof(C15)), 16, "base class with double, long");
+ check(Q(sizeof(C16)), 16, "empty derived class with base with double, long");
+#ifdef GCC3
+ check(Q(sizeof(C17)), 16, "derived class with base with double, long and its own long");
+#else
+ check(Q(sizeof(C17)), 24, "derived class with base with double, long and its own long");
+#endif
+#ifdef GCC3
+ check(Q(sizeof(C18)), 16, "derived class based on empty derived class with base with double, long");
+#else
+ check(Q(sizeof(C18)), 24, "derived class based on empty derived class with base with double, long");
+#endif
+#ifdef GCC3
+ check(Q(sizeof(C19)), 24, "derived class based on derived class with base with double, long and its own long");
+#else
+ check(Q(sizeof(C19)), 32, "derived class based on derived class with base with double, long and its own long");
+#endif
+#ifdef GCC3
+ check(Q(sizeof(C20)), 16, "class with double and v-table ptr");
+ check(Q(offsetof(C20, f1)), 8, "offset of double 1st field in class with v-table ptr"); /* { dg-warning "invalid access" "" } */
+ /* { dg-warning "macro was used incorrectly" "" { target *-*-* } 297 } */
+#else
+ check(Q(sizeof(C20)), 16, "class with double and v-table ptr");
+ check(Q(offsetof(C20, f1)), 0, "offset of 1st field in class with v-table ptr");
+#endif
+
+ /* Vector tests */
+#ifdef __VEC__
+ check(Q(sizeof(VC1)), 32, "class with vector as 1st field");
+ check(Q(sizeof(VS1)), 48, "struct with a class with a vector as 1st field");
+#ifdef GCC3
+ check(Q(sizeof(VC2)), 32, "class with base class containing a vector");
+#else
+ check(Q(sizeof(VC2)), 48, "class with base class containing a vector");
+#endif
+#ifdef GCC3
+ check(Q(offsetof(VC2, f1)), 17, "offset of 1st field after base class with vector, char, and padding");
+#else
+ check(Q(offsetof(VC2, f1)), 32, "offset of 1st field after base class with vector, char, and padding");
+#endif
+#ifdef GCC3
+ check(Q(sizeof(VS2)), 64, "struct with a char, class with a vector, char");
+#else
+ check(Q(sizeof(VS2)), 80, "struct with a char, class with a vector, char");
+#endif
+ check(Q(offsetof(VS2, f2)), 16, "offset of class with a vector in a struct with char, class...");
+#ifdef GCC3
+ check(Q(offsetof(VS2, f3)), 48, "offset of 2nd char in a struct with char, class, char");
+#else
+ check(Q(offsetof(VS2, f3)), 64, "offset of 2nd char in a struct with char, class, char");
+#endif
+#ifdef GCC3
+ check(Q(sizeof(VC3)), 32, "class with a vector and v-table ptr");
+ check(Q(offsetof(VC3, f1)), 16, "offset vector in class with a vector and v-table ptr");
+#else
+ check(Q(sizeof(VC3)), 32, "class with a vector and v-table ptr");
+ check(Q(offsetof(VC3, f1)), 0, "offset vector in class with a vector and v-table ptr");
+#endif
+#endif
+
+ /* bool tests */
+ check(Q(sizeof(bool)), 4, "bool data type");
+ check(Q(sizeof(B1)), 8, "struct with bool, char");
+ check(Q(sizeof(B2)), 8, "struct with char, bool");
+
+ if (nbr_failures > 0)
+ return 1;
+ else
+ return 0;
+}
diff --git a/gcc/testsuite/g++.dg/altivec-1.C b/gcc/testsuite/g++.dg/altivec-1.C
new file mode 100644
index 00000000000..6bda7094db0
--- /dev/null
+++ b/gcc/testsuite/g++.dg/altivec-1.C
@@ -0,0 +1,12 @@
+/* APPLE LOCAL file AltiVec */
+/* Test for static_cast<...> among AltiVec types. */
+/* { dg-do compile { target powerpc*-*-* } } */
+/* { dg-options "-faltivec" } */
+
+struct Foo2 {
+ vector unsigned int vui;
+ vector signed int As_vsi() {
+ return static_cast<vector signed int>(vui); /* { dg-bogus "invalid static_cast" } */
+ }
+};
+
diff --git a/gcc/testsuite/g++.dg/altivec-2.C b/gcc/testsuite/g++.dg/altivec-2.C
new file mode 100644
index 00000000000..0b2f3751a24
--- /dev/null
+++ b/gcc/testsuite/g++.dg/altivec-2.C
@@ -0,0 +1,15 @@
+/* APPLE LOCAL file AltiVec */
+/* Test for distinguishing 'vector bool ...' from 'vector unsigned ...'
+ types by the front-end. */
+/* { dg-do compile { target powerpc*-*-* } } */
+/* { dg-options "-faltivec" } */
+
+struct Foo1 {
+ void foo(vector unsigned char) { }
+ void foo(vector bool char) { } /* { dg-bogus "has already been declared" } */
+ void bar(vector unsigned short) { }
+ void bar(vector bool short) { } /* { dg-bogus "has already been declared" } */
+ void baz(vector unsigned int) { }
+ void baz(vector bool int) { } /* { dg-bogus "has already been declared" } */
+};
+
diff --git a/gcc/testsuite/g++.dg/altivec-3.C b/gcc/testsuite/g++.dg/altivec-3.C
new file mode 100644
index 00000000000..77084a1d824
--- /dev/null
+++ b/gcc/testsuite/g++.dg/altivec-3.C
@@ -0,0 +1,21 @@
+/* APPLE LOCAL file AltiVec */
+/* { dg-do run { target powerpc*-*-* } } */
+/* { dg-options "-faltivec -Wall" } */
+
+/* This test checks if AltiVec builtins accept const-qualified
+ arguments. */
+
+int main (int argc, const char * argv[])
+{
+ int i;
+ const float cf = 1.0;
+ vector float v;
+ const vector float cv = (vector float)(1.0, 2.0, 3.0, 4.0);
+
+ vec_dst(&cv, i, 0);
+ v = vec_ld(0, &cv);
+ v = vec_lde(0, &cf);
+ vec_lvsl(0, &cf);
+
+ return 0;
+}
diff --git a/gcc/testsuite/g++.dg/altivec-4.C b/gcc/testsuite/g++.dg/altivec-4.C
new file mode 100644
index 00000000000..1b33365408b
--- /dev/null
+++ b/gcc/testsuite/g++.dg/altivec-4.C
@@ -0,0 +1,129 @@
+/* APPLE LOCAL file AltiVec */
+/* { dg-do run { target powerpc*-*-* } } */
+/* { dg-options "-faltivec -Wno-long-double" } */
+
+/* Test for correct handling of AltiVec constants passed
+ through '...' (va_arg). */
+
+#include <stdarg.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+#define CHECK_INVARIANT(expr) \
+ if (!(expr)) { \
+ printf ("ASSERT FAILED: %d: %s\n", __LINE__, #expr); \
+ abort (); \
+ }
+
+struct foo { int x; int y; };
+struct vfoo { int x; __vector signed int v; int y; };
+union u { __vector signed int v; signed int i[4]; };
+
+struct foo x_g = { 3, 4};
+struct vfoo vx_g = { 10, (vector signed int)(11, 12, 13, 14), 15 };
+__vector signed int v_g = (vector signed int) (22, 23, 24, 25);
+struct vfoo vx2_g = { 30, (vector signed int)(31, 32, 33, 34), 35 };
+__vector signed int v2_g = (vector signed int)(40, 41, 42, 43);
+int i_1 = 99, i_2 = 33;
+double d_2 = 1.5, d_3 = 1.75;
+long double ld_1 = 1.25;
+
+void bar (int i, ... )
+{
+ struct foo xi;
+ double d;
+ long double ld;
+ float f;
+ char c;
+ short s;
+ va_list ap;
+ va_start(ap, i);
+ xi = va_arg(ap, struct foo);
+ s = (short)va_arg(ap, int);
+ f = (float)va_arg(ap, double);
+ ld = va_arg(ap, long double);
+ c = (char)va_arg(ap, int);
+ d = va_arg(ap, double);
+ va_end(ap);
+
+ CHECK_INVARIANT (xi.x == x_g.x && xi.y == x_g.y);
+ CHECK_INVARIANT (s == (short)i_2);
+ CHECK_INVARIANT (f == (float)d_2);
+ CHECK_INVARIANT (ld == ld_1);
+ CHECK_INVARIANT (c == (char)i_1);
+ CHECK_INVARIANT (d == d_3);
+}
+
+void baz (int i, ... )
+{
+ struct vfoo vx, vx2;
+ __vector signed int v_i, v2_i;
+ int j, k, l;
+ va_list ap;
+ va_start(ap, i);
+ v_i = va_arg(ap, __vector signed int); /* { dg-bogus "non-POD type" } */
+ j = va_arg(ap, int);
+ vx = va_arg(ap, struct vfoo); /* { dg-bogus "non-POD type" } */
+ k = va_arg(ap, int);
+ v2_i = va_arg(ap, __vector signed int); /* { dg-bogus "non-POD type" } */
+ l = va_arg(ap, int);
+ vx2 = va_arg(ap, struct vfoo); /* { dg-bogus "non-POD type" } */
+ va_end(ap);
+
+ CHECK_INVARIANT (vec_all_eq (v_i, v_g));
+ CHECK_INVARIANT (j == i_1);
+ CHECK_INVARIANT (vx.x == vx_g.x && vec_all_eq(vx.v, vx_g.v) && vx.y == vx_g.y);
+ CHECK_INVARIANT (k == i_1);
+ CHECK_INVARIANT (vec_all_eq (v2_i, v2_g));
+ CHECK_INVARIANT (l == i_1);
+ CHECK_INVARIANT (vx2.x == vx2_g.x && vec_all_eq(vx2.v, vx2_g.v) && vx2.y == vx2_g.y);
+}
+
+void quux (int i, ... )
+{
+ __vector signed int v_i, v2_i;
+ union u vi, v2i;
+ va_list ap;
+ va_start(ap, i);
+ v_i = va_arg(ap, __vector signed int);
+ v2_i = va_arg(ap, __vector signed int);
+ va_end(ap);
+ vi.v = v_i;
+ v2i.v = v2_i;
+
+ CHECK_INVARIANT (vec_all_eq (v_i, v_g));
+ CHECK_INVARIANT (vec_all_eq (v2_i, v_g));
+ CHECK_INVARIANT (vec_all_eq (vi.v, v_g));
+ CHECK_INVARIANT (vec_all_eq (v2i.v, v_g));
+}
+
+void baz2 (int i, ... )
+{
+ struct vfoo vx;
+ union u vxi;
+ va_list ap;
+ va_start(ap, i);
+ vx = va_arg(ap, struct vfoo);
+ va_end(ap);
+ vxi.v = vx.v;
+
+ CHECK_INVARIANT (vx.x == vx_g.x && vec_all_eq(vx.v, vx_g.v) && vx.y == vx_g.y);
+ CHECK_INVARIANT (vec_all_eq (vxi.v, vx_g.v));
+}
+
+int main(void)
+{
+ CHECK_INVARIANT (sizeof(struct foo) == 8 && sizeof(struct vfoo) == 48);
+
+ bar(i_1, x_g, (short)i_2, (float)d_2, ld_1, (char)i_1, d_3);
+ baz(i_1, v_g, /* { dg-bogus "non-POD type" "" { target *-*-* } 122 } */
+ i_1, vx_g, /* { dg-bogus "non-POD type" "" { target *-*-* } 122 } */
+ i_1, v2_g, /* { dg-bogus "non-POD type" "" { target *-*-* } 122 } */
+ i_1, vx2_g); /* { dg-bogus "non-POD type" } */
+ quux(i_1, v_g, /* { dg-bogus "non-POD type" "" { target *-*-* } 124 } */
+ v_g); /* { dg-bogus "non-POD type" } */
+ baz2(i_1, vx_g); /* { dg-bogus "non-POD type" } */
+
+ return 0;
+}
+
diff --git a/gcc/testsuite/g++.dg/altivec-5.C b/gcc/testsuite/g++.dg/altivec-5.C
new file mode 100644
index 00000000000..4c5a21ad46f
--- /dev/null
+++ b/gcc/testsuite/g++.dg/altivec-5.C
@@ -0,0 +1,19 @@
+/* APPLE LOCAL file AltiVec */
+/* Test for AltiVec type overloading. */
+/* { dg-do compile { target powerpc*-*-* } } */
+/* { dg-options "-faltivec" } */
+ void foo(vector unsigned char) { }
+ void foo(vector signed char) { }
+ void foo(vector bool char) { }
+ void foo(vector unsigned short) { }
+ void foo(vector signed short) { }
+ void foo(vector bool short) { }
+ void foo(vector unsigned long) { }
+ void foo(vector signed long) { }
+ void foo(vector bool long) { }
+ void foo(vector float) { }
+ void foo(vector pixel) { }
+ void foo(int) { }
+ void foo(unsigned int) { }
+ void foo(float) { }
+ void foo(bool) { }
diff --git a/gcc/testsuite/g++.dg/apple-altivec-1.C b/gcc/testsuite/g++.dg/apple-altivec-1.C
new file mode 100644
index 00000000000..c070de43f6c
--- /dev/null
+++ b/gcc/testsuite/g++.dg/apple-altivec-1.C
@@ -0,0 +1,9 @@
+/* APPLE LOCAL file AltiVec */
+/* { dg-do compile { target powerpc*-*-* } } */
+/* { dg-options "-faltivec" } */
+
+void foo() {
+ vector bool int boolVector = (vector bool int) vec_splat_u32(3);
+ boolVector = vec_sld( boolVector, boolVector,
+ 1 ); /* { dg-bogus "no instance of overloaded" } */
+}
diff --git a/gcc/testsuite/g++.dg/charset/asm1.c b/gcc/testsuite/g++.dg/charset/asm1.c
deleted file mode 100644
index 9c0ff2866b0..00000000000
--- a/gcc/testsuite/g++.dg/charset/asm1.c
+++ /dev/null
@@ -1,14 +0,0 @@
-/* { dg-do compile { target *-*-* } }
- { dg-require-iconv "IBM-1047" }
- { dg-final { scan-assembler ".ascii bar" } }
- { dg-final { scan-assembler ".ascii foo" } }
- */
-extern int x, y;
-
-asm (".ascii bar");
-
-int foo (void)
-{
- __asm__ (".ascii foo");
- return 0;
-}
diff --git a/gcc/testsuite/g++.dg/charset/asm2.c b/gcc/testsuite/g++.dg/charset/asm2.c
deleted file mode 100644
index 8d8dbbb524d..00000000000
--- a/gcc/testsuite/g++.dg/charset/asm2.c
+++ /dev/null
@@ -1,33 +0,0 @@
-/* Test for complex asm statements. Make sure it compiles
- then test for some of the asm statements not being translated. */
-/* { dg-do compile { target i?86-*-* } }
- { dg-require-iconv "IBM-1047" }
- { dg-final { scan-assembler "std" } }
- { dg-final { scan-assembler "cld" } }
- { dg-final { scan-assembler "rep" } }
- { dg-final { scan-assembler "movsb" } } */
-#define size_t int
-void *
-memmove (void *__dest, __const void *__src, size_t __n)
-{
- register unsigned long int __d0, __d1, __d2;
- if (__dest < __src)
- __asm__ __volatile__
- ("cld\n\t"
- "rep\n\t"
- "movsb"
- : "=&c" (__d0), "=&S" (__d1), "=&D" (__d2)
- : "0" (__n), "1" (__src), "2" (__dest)
- : "memory");
- else
- __asm__ __volatile__
- ("std\n\t"
- "rep\n\t"
- "movsb\n\t"
- "cld"
- : "=&c" (__d0), "=&S" (__d1), "=&D" (__d2)
- : "0" (__n), "1" (__n - 1 + (const char *) __src),
- "2" (__n - 1 + (char *) __dest)
- : "memory");
- return __dest;
-}
diff --git a/gcc/testsuite/g++.dg/charset/asm3.c b/gcc/testsuite/g++.dg/charset/asm3.c
deleted file mode 100644
index cd850c3e81f..00000000000
--- a/gcc/testsuite/g++.dg/charset/asm3.c
+++ /dev/null
@@ -1,10 +0,0 @@
-/* Simple asm test. */
-/* { dg-do compile }
- { dg-require-iconv "IBM-1047" }
- { dg-final { scan-assembler "foo" } } */
-extern int bar;
-
-int main (void)
-{
- asm ("foo %0" : "=r" (bar));
-}
diff --git a/gcc/testsuite/g++.dg/charset/asm4.c b/gcc/testsuite/g++.dg/charset/asm4.c
deleted file mode 100644
index fa93f40fdaf..00000000000
--- a/gcc/testsuite/g++.dg/charset/asm4.c
+++ /dev/null
@@ -1,8 +0,0 @@
-/* Test for string translation. */
-/* { dg-do compile }
- { dg-require-iconv "IBM-1047" }
- { dg-final { scan-assembler-not "translate" } } */
-void foo (void)
-{
- asm ("xx" : : "r"("translate") : "cc");
-}
diff --git a/gcc/testsuite/g++.dg/charset/attribute1.c b/gcc/testsuite/g++.dg/charset/attribute1.c
deleted file mode 100644
index 993c7934c80..00000000000
--- a/gcc/testsuite/g++.dg/charset/attribute1.c
+++ /dev/null
@@ -1,10 +0,0 @@
-/* Test for attribute non-translation. */
-/* { dg-do compile }
- { dg-require-iconv "IBM-1047" }
- { dg-final { scan-assembler "foo" } } */
-int walrus __attribute__ ((section (".foo")));
-
-int main (void)
-{
- return 0;
-}
diff --git a/gcc/testsuite/g++.dg/charset/attribute2.c b/gcc/testsuite/g++.dg/charset/attribute2.c
deleted file mode 100644
index 3cb766aa63a..00000000000
--- a/gcc/testsuite/g++.dg/charset/attribute2.c
+++ /dev/null
@@ -1,8 +0,0 @@
-/* Test to make sure that invalid attributes aren't translated.
- If error recovery is ever testable then "foobar" should be
- translated. */
-/* { dg-do compile }
- { dg-require-iconv "IBM-1047" }
-*/
-int foo __attribute__ ((walrus)); /* { dg-error "walrus" "ignored" } */
-char x[] = "foobar";
diff --git a/gcc/testsuite/g++.dg/charset/extern1.cc b/gcc/testsuite/g++.dg/charset/extern1.cc
deleted file mode 100644
index 2a68ab7cf78..00000000000
--- a/gcc/testsuite/g++.dg/charset/extern1.cc
+++ /dev/null
@@ -1,15 +0,0 @@
-/* Test extern statments not being translated. */
-/* { dg-do compile }
- { dg-require-iconv "IBM-1047" }
-*/
-
-extern "C" {
-
-
-int testbug (void) {
-
- return 0;
-
-}
-
-} //extern block
diff --git a/gcc/testsuite/g++.dg/charset/extern2.cc b/gcc/testsuite/g++.dg/charset/extern2.cc
deleted file mode 100644
index 82157a6fea4..00000000000
--- a/gcc/testsuite/g++.dg/charset/extern2.cc
+++ /dev/null
@@ -1,5 +0,0 @@
-/* Check that we push the declaration and then continue translation. */
-/* { dg-do compile }
- { dg-require-iconv "IBM-1047" }
- { dg-final { scan-assembler-not "foobar" } } */
-extern "C" { char *foo = "foobar"; }
diff --git a/gcc/testsuite/g++.dg/charset/string.c b/gcc/testsuite/g++.dg/charset/string.c
deleted file mode 100644
index 375e28a2ed6..00000000000
--- a/gcc/testsuite/g++.dg/charset/string.c
+++ /dev/null
@@ -1,5 +0,0 @@
-/* Simple character translation test. */
-/* { dg-do compile }
- { dg-require-iconv "IBM-1047" }
- { dg-final { scan-assembler-not "string foobar" } } */
-char *foo = "string foobar";
diff --git a/gcc/testsuite/g++.dg/const-cfstring-1.C b/gcc/testsuite/g++.dg/const-cfstring-1.C
new file mode 100644
index 00000000000..ff1e2665540
--- /dev/null
+++ b/gcc/testsuite/g++.dg/const-cfstring-1.C
@@ -0,0 +1,26 @@
+/* APPLE LOCAL file constant cfstrings */
+/* Test whether the __builtin__CFStringMakeConstantString
+ "function" fails gracefully when handed a non-constant
+ argument. This will only work on MacOS X 10.1.2 and later. */
+/* Developed by Ziemowit Laski <zlaski@apple.com>. */
+
+/* { dg-do compile { target powerpc-apple-darwin* } } */
+/* { dg-options "-fconstant-cfstrings" } */
+
+#import <CoreFoundation/CFString.h>
+
+#ifdef __CONSTANT_CFSTRINGS__
+#undef CFSTR
+#define CFSTR(STR) ((CFStringRef) __builtin___CFStringMakeConstantString (STR))
+#endif
+
+extern int cond;
+extern const char *func(void);
+
+int main(void) {
+ CFStringRef s1 = CFSTR("Str1");
+ CFStringRef s2 = CFSTR(cond? "Str2": "Str3"); /* { dg-error "CFString literal expression not constant" } */
+ CFStringRef s3 = CFSTR(func()); /* { dg-error "CFString literal expression not constant" } */
+
+ return 0;
+}
diff --git a/gcc/testsuite/g++.dg/debug/debug8.C b/gcc/testsuite/g++.dg/debug/debug8.C
index 1f8a18ac8ac..4a4b55a190d 100644
--- a/gcc/testsuite/g++.dg/debug/debug8.C
+++ b/gcc/testsuite/g++.dg/debug/debug8.C
@@ -1,2 +1,27 @@
-struct t{};
-struct g : public t{};
+// Check -gstabs
+// Contributed by Devang Patel dpatel@apple.com
+// { dg-do compile }
+class LcBase
+{
+public:
+ virtual ~LcBase();
+protected:
+ LcBase();
+};
+
+class LcDerive : public LcBase
+{
+public:
+ LcDerive();
+ ~LcDerive();
+};
+
+LcDerive::LcDerive()
+: LcBase()
+{
+}
+
+LcDerive::~LcDerive()
+{
+}
+
diff --git a/gcc/testsuite/g++.dg/eh/spec7.C b/gcc/testsuite/g++.dg/eh/spec7.C
deleted file mode 100644
index 08586a2af75..00000000000
--- a/gcc/testsuite/g++.dg/eh/spec7.C
+++ /dev/null
@@ -1,35 +0,0 @@
-// PR 14535
-// { dg-do run }
-// { dg-options "-O -finline" }
-//
-// Original test case failure required that Raiser constructor be inlined.
-
-extern "C" void abort();
-bool destructor_called = false;
-
-struct B {
- virtual void Run(){};
-};
-
-struct D : public B {
- virtual void Run()
- {
- struct O {
- ~O() { destructor_called = true; };
- } o;
-
- struct Raiser {
- Raiser() throw( int ) {throw 1;};
- } raiser;
- };
-};
-
-int main() {
- try {
- D d;
- static_cast<B&>(d).Run();
- } catch (...) {}
-
- if (!destructor_called)
- abort ();
-}
diff --git a/gcc/testsuite/g++.dg/expr/align68k-1.C b/gcc/testsuite/g++.dg/expr/align68k-1.C
new file mode 100644
index 00000000000..80ce93039f2
--- /dev/null
+++ b/gcc/testsuite/g++.dg/expr/align68k-1.C
@@ -0,0 +1,46 @@
+// APPLE LOCAL file test of -mdynamic-no-pic combined with 68k alignment
+// Radar 3242139: Positive C++ test case
+// Origin: Matt Austern <austern@apple.com>
+// { dg-do run }
+// { dg-options "-mdynamic-no-pic" }
+
+const long val1 = 0xa0b0;
+const long val2 = 0x1234;
+
+#pragma options align=mac68k
+struct X {
+ long x1;
+ long x2;
+};
+
+#pragma options align=reset
+
+void setX(X* x) {
+ x->x1 = val1;
+ x->x2 = val2;
+}
+
+struct Y
+{
+ X field;
+ void set_vals();
+};
+
+void Y::set_vals()
+{
+ ::setX(&field);
+}
+
+int main()
+{
+ Y y;
+ bool ok = true;
+
+ y.field.x1 = y.field.x2 = 0;
+ ok = ok && y.field.x1 == 0 && y.field.x2 == 0;
+
+ y.set_vals();
+ ok = ok && y.field.x1 == val1 && y.field.x2 == val2;
+
+ return !ok;
+}
diff --git a/gcc/testsuite/g++.dg/expr/align68k-2.C b/gcc/testsuite/g++.dg/expr/align68k-2.C
new file mode 100644
index 00000000000..4070bcdc0ff
--- /dev/null
+++ b/gcc/testsuite/g++.dg/expr/align68k-2.C
@@ -0,0 +1,38 @@
+// APPLE LOCAL file test 68k alignment
+// Radar 3313261: Positive C++ test case
+// Origin: Matt Austern <austern@apple.com>
+// { dg-do run }
+
+#pragma options align=mac68k
+
+typedef struct PMR {
+ double x;
+ double y;
+}PMR;
+
+#pragma options align=reset
+
+static void GetDouble(double *doubleP)
+{
+ *doubleP = 1.;
+}
+
+static void GetPMR(PMR *p)
+{
+ GetDouble(&p->x);
+ GetDouble(&p->y);
+}
+
+int main(void)
+{
+ PMR tmp;
+ bool ok = true;
+
+ tmp.x = tmp.y = 0;
+ ok = ok && tmp.x == 0.0 && tmp.y == 0.0;
+
+ GetPMR(&tmp);
+ ok = ok && tmp.x == 1.0 && tmp.y == 1.0;
+
+ return !ok;
+}
diff --git a/gcc/testsuite/g++.dg/expr/cast-ptr-1.C b/gcc/testsuite/g++.dg/expr/cast-ptr-1.C
new file mode 100644
index 00000000000..cb42d13ac48
--- /dev/null
+++ b/gcc/testsuite/g++.dg/expr/cast-ptr-1.C
@@ -0,0 +1,15 @@
+/* APPLE LOCAL file pointer casts */
+/* Test that casts of pointer to unsigned long long aren't sign extended */
+/* Author: Matt Austern <austern@apple.com> */
+/* { dg-do run } */
+/* { dg-options "-Wno-error -w" } */
+
+int main () {
+ /* Note: test assumes sizeof(long long) >= sizeof(void*) */
+
+ unsigned long x1 = 0x80000000ul;
+ void* p = (void*) x1;
+ unsigned long long x2 = (unsigned long long) p;
+
+ return !(x1 == x2);
+}
diff --git a/gcc/testsuite/g++.dg/expr/fieldref1.C b/gcc/testsuite/g++.dg/expr/fieldref1.C
new file mode 100644
index 00000000000..b04ed137548
--- /dev/null
+++ b/gcc/testsuite/g++.dg/expr/fieldref1.C
@@ -0,0 +1,23 @@
+// APPLE LOCAL file - test of access to 8-byte struct field
+// Radar 3309305: positive C++ test case
+// Origin: Matt Austern <austern@apple.com>
+// { dg-do run }
+
+struct X {
+ char array[8];
+};
+
+char* get_array(X* p) {
+ char* p2 = p->array;
+ return p2;
+}
+
+int main()
+{
+ X t;
+ X* p = &t;
+ char* p2 = get_array(p);
+
+ bool ok = (void*)p == (void*)p2;
+ return !ok;
+}
diff --git a/gcc/testsuite/g++.dg/ext/anon-struct4.C b/gcc/testsuite/g++.dg/ext/anon-struct4.C
deleted file mode 100644
index f0b3b57f70d..00000000000
--- a/gcc/testsuite/g++.dg/ext/anon-struct4.C
+++ /dev/null
@@ -1,3 +0,0 @@
-// PR c++/14401
-
-struct { struct { int& i ; } bar ; } foo ; // { dg-error "" }
diff --git a/gcc/testsuite/g++.dg/ext/attrib14.C b/gcc/testsuite/g++.dg/ext/attrib14.C
deleted file mode 100644
index 3a819e01d82..00000000000
--- a/gcc/testsuite/g++.dg/ext/attrib14.C
+++ /dev/null
@@ -1,13 +0,0 @@
-// PR c++/13170
-// The bogus attribute is ignored, but was in TYPE_ATTRIBUTES during
-// parsing of the class, causing some variants to have it and some not.
-
-struct __attribute__((bogus)) A
-{
- virtual ~A();
- void foo(const A&);
- void bar(const A&);
-}; // { dg-warning "ignored" "" }
-
-void A::foo(const A&) {}
-void A::bar(const A& a) { foo(a); }
diff --git a/gcc/testsuite/g++.dg/init/ctor3.C b/gcc/testsuite/g++.dg/init/ctor3.C
deleted file mode 100644
index 1678aaf2c4d..00000000000
--- a/gcc/testsuite/g++.dg/init/ctor3.C
+++ /dev/null
@@ -1,6 +0,0 @@
-// PR c++/14401
-
-struct S {
- S() {} // { dg-error "" }
- const int i;
-};
diff --git a/gcc/testsuite/g++.dg/init/ref11.C b/gcc/testsuite/g++.dg/init/ref11.C
deleted file mode 100644
index b283e3a69be..00000000000
--- a/gcc/testsuite/g++.dg/init/ref11.C
+++ /dev/null
@@ -1,13 +0,0 @@
-// PR c++/14230
-
-struct A {
- A ();
- A (const A&);
- A& operator= (const A&);
-};
-
-struct D {
- A a;
-};
-
-const A& z = D().a;
diff --git a/gcc/testsuite/g++.dg/init/union1.C b/gcc/testsuite/g++.dg/init/union1.C
deleted file mode 100644
index 0049f442916..00000000000
--- a/gcc/testsuite/g++.dg/init/union1.C
+++ /dev/null
@@ -1,5 +0,0 @@
-// PR c++/14401
-
-union U {
- int& i; // { dg-error "" }
-};
diff --git a/gcc/testsuite/g++.dg/kext1.C b/gcc/testsuite/g++.dg/kext1.C
new file mode 100644
index 00000000000..174ec027259
--- /dev/null
+++ b/gcc/testsuite/g++.dg/kext1.C
@@ -0,0 +1,11 @@
+/* APPLE LOCAL file -findirect-virtual-calls 15 Oct 2002 */
+/* Radar 3008388: Positive C++ test case. */
+/* Origin: Matt Austern <austern@apple.com> */
+/* { dg-do compile } */
+/* { dg-options "-fapple-kext" } */
+
+struct B1 { }; /* ok */
+struct B2 { }; /* ok */
+struct D1 : B1 { }; /* ok */
+struct D2 : B1, B2 { }; /* ok */
+struct D3 : virtual B1 { }; /* ok */
diff --git a/gcc/testsuite/g++.dg/kext2.C b/gcc/testsuite/g++.dg/kext2.C
new file mode 100644
index 00000000000..f2f2a9514bd
--- /dev/null
+++ b/gcc/testsuite/g++.dg/kext2.C
@@ -0,0 +1,13 @@
+/* APPLE LOCAL file -findirect-virtual-calls 15 Oct 2002 */
+/* Radar 3008388: Positive C++ test case. */
+/* Origin: Matt Austern <austern@apple.com> */
+/* { dg-do compile } */
+/* { dg-options "-fapple-kext" } */
+
+struct B1 { virtual ~B1(); virtual void f(); }; /* ok */
+struct D1 : B1 { }; /* ok */
+struct X1 : D1 { virtual void f(); }; /* ok */
+
+void X1::f() { D1::f(); } /* ok */
+
+
diff --git a/gcc/testsuite/g++.dg/kext3.C b/gcc/testsuite/g++.dg/kext3.C
new file mode 100644
index 00000000000..7d9efbd8cf1
--- /dev/null
+++ b/gcc/testsuite/g++.dg/kext3.C
@@ -0,0 +1,18 @@
+/* APPLE LOCAL file -findirect-virtual-calls 15 Oct 2002 */
+/* Radar 3008388: Negative C++ test case. */
+/* Origin: Matt Austern <austern@apple.com> */
+/* { dg-do compile } */
+/* { dg-options "-fapple-kext" } */
+
+struct B1 { virtual ~B1(); virtual void f(); }; /* ok */
+struct D1 : B1 { }; /* ok */
+struct D2 { }; /* ok */
+
+struct X1 : D1, D2 { }; /* ok */
+struct X2 : virtual D1 { }; /* ok */
+
+struct Y1 : X1 { virtual void f(); }; /* ok */
+struct Y2 : X2 { virtual void f(); }; /* ok */
+
+void Y1::f() { X1::f(); } /* { dg-error "indirect virtual" } */
+void Y2::f() { X2::f(); } /* { dg-error "indirect virtual" } */
diff --git a/gcc/testsuite/g++.dg/lookup/enum1.C b/gcc/testsuite/g++.dg/lookup/enum1.C
deleted file mode 100644
index 9422814e271..00000000000
--- a/gcc/testsuite/g++.dg/lookup/enum1.C
+++ /dev/null
@@ -1,5 +0,0 @@
-// PR c++/14476
-
-struct tree_common {
- enum tree_code code : 8; // { dg-error "" }
-};
diff --git a/gcc/testsuite/g++.dg/lookup/struct2.C b/gcc/testsuite/g++.dg/lookup/struct2.C
deleted file mode 100644
index a66f403c291..00000000000
--- a/gcc/testsuite/g++.dg/lookup/struct2.C
+++ /dev/null
@@ -1,7 +0,0 @@
-// PR c++/14510
-
-struct c {};
-namespace A {
- int c(struct c*req);
-}
-int A::c(struct c*req) {}
diff --git a/gcc/testsuite/g++.dg/opt/eh1.C b/gcc/testsuite/g++.dg/opt/eh1.C
deleted file mode 100644
index 63a4d2ef35f..00000000000
--- a/gcc/testsuite/g++.dg/opt/eh1.C
+++ /dev/null
@@ -1,21 +0,0 @@
-// PR middle-end/14477
-// { dg-do compile }
-// { dg-options "-O2 -fno-default-inline" }
-
-struct A
-{
- A();
-};
-
-struct B
-{
- B(const A*);
-};
-
-struct C
-{
- B b;
- C(int) : b(new A) {}
-};
-
-C c(0);
diff --git a/gcc/testsuite/g++.dg/overload/ref1.C b/gcc/testsuite/g++.dg/overload/ref1.C
deleted file mode 100644
index e239d88a438..00000000000
--- a/gcc/testsuite/g++.dg/overload/ref1.C
+++ /dev/null
@@ -1,21 +0,0 @@
-// Copyright (C) 2004 Free Software Foundation, Inc.
-// Contributed by Nathan Sidwell 5 Mar 2004 <nathan@codesourcery.com>
-
-// Origin: schmid@snake.iap.physik.tu-darmstadt.de
-// Bug 14397: Bogus access error.
-
-struct S {
- S (int);
- S(S const&);
- private:
- S(S&);
-};
-
-S foo()
-{
- int result = 0;
-
- S s ((0,S (result)));
-
- return S (result);
-}
diff --git a/gcc/testsuite/g++.dg/parse/builtin2.C b/gcc/testsuite/g++.dg/parse/builtin2.C
deleted file mode 100644
index c524ea68416..00000000000
--- a/gcc/testsuite/g++.dg/parse/builtin2.C
+++ /dev/null
@@ -1,5 +0,0 @@
-// PR c++/14432
-// { dg-options "" }
-
-struct Y {};
-Y y1;
diff --git a/gcc/testsuite/g++.dg/parse/crash14.C b/gcc/testsuite/g++.dg/parse/crash14.C
deleted file mode 100644
index b4cf49a9921..00000000000
--- a/gcc/testsuite/g++.dg/parse/crash14.C
+++ /dev/null
@@ -1,20 +0,0 @@
-// { dg-do compile }
-// Contributed by: Giovanni Bajo <giovannibajo at libero dot it>
-// PR c++/14448: Fold constant initializers in templates
-
-template <int> struct A
-{
- A();
-};
-
-
-template<typename T> void foo(T)
-{
- static const int n=1+1;
- A<n+1> a;
-}
-
-void bar()
-{
- foo(0);
-}
diff --git a/gcc/testsuite/g++.dg/parse/non-dependent3.C b/gcc/testsuite/g++.dg/parse/non-dependent3.C
deleted file mode 100644
index 9dfb99636a8..00000000000
--- a/gcc/testsuite/g++.dg/parse/non-dependent3.C
+++ /dev/null
@@ -1,17 +0,0 @@
-// PR c++/14586
-
-enum E { e };
-
-E & operator |= (E &f1, const E &f2);
-
-E operator | (const E &f1, const E &f2) {
- E result = f1;
- result |= f2;
- return result;
-}
-
-template <typename> void foo () {
- const E flags = e | e;
-}
-
-template void foo<double> ();
diff --git a/gcc/testsuite/g++.dg/parse/template14.C b/gcc/testsuite/g++.dg/parse/template14.C
deleted file mode 100644
index ada87524352..00000000000
--- a/gcc/testsuite/g++.dg/parse/template14.C
+++ /dev/null
@@ -1,17 +0,0 @@
-// PR c++/14550
-
-struct A {
- A();
-};
-
-template <int> void foo()
-{
- A *p = new A;
-}
-
-void bar()
-{
- foo<0>();
-}
-
-
diff --git a/gcc/testsuite/g++.dg/pascal-strings-1.C b/gcc/testsuite/g++.dg/pascal-strings-1.C
new file mode 100644
index 00000000000..ca95ee9c10b
--- /dev/null
+++ b/gcc/testsuite/g++.dg/pascal-strings-1.C
@@ -0,0 +1,44 @@
+/* APPLE LOCAL file Pascal strings 2001-07-05 zll */
+/* Positive C++ test cases. */
+/* Origin: Ziemowit Laski <zlaski@apple.com> */
+/* { dg-do run } */
+/* { dg-options "-fpascal-strings" } */
+
+typedef __SIZE_TYPE__ size_t;
+extern "C" void abort (void);
+extern "C" size_t strlen (const char *s);
+
+const unsigned char *pascalStr1 = "\pHello, World!";
+const unsigned char *concat1 = "\pConcatenated" "string" "\pliteral";
+
+const unsigned char msg1[] = "\pHello"; /* ok */
+const unsigned char *msg2 = "\pHello"; /* ok */
+const signed char msg3[] = "\pHello"; /* ok */
+const char msg4[] = "\pHello"; /* ok */
+unsigned char msg5[] = "\pHello"; /* ok */
+signed char msg7[] = "\pHello"; /* ok */
+char msg8[] = "\pHello"; /* ok */
+
+int
+main (void)
+{
+ const unsigned char *pascalStr2 = "\pGood-bye!";
+
+ if (strlen ((const char *)pascalStr1) != 14)
+ abort ();
+ if (*pascalStr1 != 13)
+ abort (); /* the length byte does not include trailing null */
+
+ if (strlen ((const char *)pascalStr2) != 10)
+ abort ();
+ if (*pascalStr2 != 9)
+ abort ();
+
+ if (strlen ((const char *)concat1) != 26)
+ abort ();
+ if (*concat1 != 25)
+ abort ();
+
+ return 0;
+}
+
diff --git a/gcc/testsuite/g++.dg/pascal-strings-2.C b/gcc/testsuite/g++.dg/pascal-strings-2.C
new file mode 100644
index 00000000000..619e112c184
--- /dev/null
+++ b/gcc/testsuite/g++.dg/pascal-strings-2.C
@@ -0,0 +1,43 @@
+/* APPLE LOCAL file Pascal strings 2001-07-05 zll */
+/* Negative C++ test cases. */
+/* Origin: Ziemowit Laski <zlaski@apple.com> */
+/* { dg-do compile } */
+/* { dg-options "-fpascal-strings" } */
+
+const wchar_t *pascalStr1 = L"\pHi!"; /* { dg-error "not allowed in wide" } */
+const wchar_t *pascalStr2 = L"Bye\p!"; /* { dg-error "not allowed in wide" } */
+
+const wchar_t *initErr0 = "\pHi"; /* { dg-error "cannot convert" } */
+const wchar_t initErr0a[] = "\pHi"; /* { dg-error "initialized from non-wide string" } */
+const wchar_t *initErr1 = "Bye"; /* { dg-error "cannot convert" } */
+const wchar_t initErr1a[] = "Bye"; /* { dg-error "initialized from non-wide string" } */
+
+const char *initErr2 = L"Hi"; /* { dg-error "cannot convert" } */
+const char initErr2a[] = L"Hi"; /* { dg-error "initialized from wide string" } */
+const signed char *initErr3 = L"Hi"; /* { dg-error "cannot convert" } */
+const signed char initErr3a[] = L"Hi"; /* { dg-error "initialized from wide string" } */
+const unsigned char *initErr4 = L"Hi"; /* { dg-error "cannot convert" } */
+const unsigned char initErr4a[] = L"Hi"; /* { dg-error "initialized from wide string" } */
+
+const char *pascalStr3 = "Hello\p, World!"; /* { dg-error "must be at beginning" } */
+
+const char *concat2 = "Hi" "\pthere"; /* { dg-error "not allowed in concatenation" } */
+const char *concat3 = "Hi" "there\p"; /* { dg-error "must be at beginning" } */
+
+const char *s2 = "\pGoodbye!"; /* { dg-error "cannot convert" } */
+unsigned char *s3 = "\pHi!"; /* { dg-error "cannot convert" } */
+char *s4 = "\pHi"; /* { dg-error "cannot convert" } */
+signed char *s5 = "\pHi"; /* { dg-error "cannot convert" } */
+const signed char *s6 = "\pHi"; /* { dg-error "cannot convert" } */
+
+/* the maximum length of a Pascal literal is 255. */
+const unsigned char *almostTooLong =
+ "\p12345678901234567890123456789012345678901234567890123456789012345678901234567890"
+ "12345678901234567890123456789012345678901234567890123456789012345678901234567890"
+ "12345678901234567890123456789012345678901234567890123456789012345678901234567890"
+ "123456789012345"; /* ok */
+const unsigned char *definitelyTooLong =
+ "\p12345678901234567890123456789012345678901234567890123456789012345678901234567890"
+ "12345678901234567890123456789012345678901234567890123456789012345678901234567890"
+ "12345678901234567890123456789012345678901234567890123456789012345678901234567890"
+ "1234567890123456"; /* { dg-error "too long" } */
diff --git a/gcc/testsuite/g++.dg/preserve-PPC-CR.C b/gcc/testsuite/g++.dg/preserve-PPC-CR.C
new file mode 100644
index 00000000000..55409ba0111
--- /dev/null
+++ b/gcc/testsuite/g++.dg/preserve-PPC-CR.C
@@ -0,0 +1,41 @@
+// APPLE LOCAL preserve CR2 for save_world prologues
+// This testcase failed at -O2 due to a missing EH note describing the PowerPC Condition Register.
+// Thanks to Dale Johannesen.
+
+// { dg-do run }
+// { dg-options "-fpascal-strings" }
+#include <stdlib.h>
+#include <stdio.h>
+int tick = 1;
+int caught_x = 1;
+int h() { return 2; }
+void f()
+{ throw(3); }
+extern int h();
+void ff() {
+ bool xx = h() == 0;
+ if ( !xx ) {
+ try {
+ f();
+ } catch (float f) {
+ if (!xx) printf("%f\n", f);
+ }
+ }
+}
+int g(int y)
+{
+ bool x = h() != 0;
+ if ( x) {
+ try {
+ ff();
+ } catch (int ex) {
+ // if (x) printf("%d\n", ex);
+ if (x) { tick++; caught_x = ex; }
+ }}
+}
+main()
+{
+ g(3);
+ if (tick != 2 || caught_x != 3)
+ abort();
+}
diff --git a/gcc/testsuite/g++.dg/template/spec12.C b/gcc/testsuite/g++.dg/template/spec12.C
deleted file mode 100644
index 7cf2e2f0aa2..00000000000
--- a/gcc/testsuite/g++.dg/template/spec12.C
+++ /dev/null
@@ -1,18 +0,0 @@
-// { dg-do compile }
-// Contributed by: Wolfgang Bangerth <bangerth at dealii dot org>
-// PR c++/14409: Accepts invalid function signature for explicit instantiation
-
-struct X
-{
- template <typename U>
- void foo (U) {}
-
- template <typename U>
- void foo_const (U) const {}
-};
-
-template void X::foo (int);
-template void X::foo_const (int) const;
-
-template void X::foo (int) const; // { dg-error "" }
-template void X::foo_const (int); // { dg-error "" }
diff --git a/gcc/testsuite/g++.dg/warn/Wunused-7.C b/gcc/testsuite/g++.dg/warn/Wunused-7.C
deleted file mode 100644
index 4281bc81569..00000000000
--- a/gcc/testsuite/g++.dg/warn/Wunused-7.C
+++ /dev/null
@@ -1,12 +0,0 @@
-// PR c++/14481
-// { dg-options "-Wunused" }
-
-void func()
-{
- struct mybitfields {
- unsigned int s_field:8;
- };
- struct mybitfields s;
- s.s_field = 255;
-};
-