summaryrefslogtreecommitdiff
path: root/gcc/testsuite/g++.dg/expr
diff options
context:
space:
mode:
authorupstream source tree <ports@midipix.org>2015-03-15 20:14:05 -0400
committerupstream source tree <ports@midipix.org>2015-03-15 20:14:05 -0400
commit554fd8c5195424bdbcabf5de30fdc183aba391bd (patch)
tree976dc5ab7fddf506dadce60ae936f43f58787092 /gcc/testsuite/g++.dg/expr
downloadcbb-gcc-4.6.4-554fd8c5195424bdbcabf5de30fdc183aba391bd.tar.bz2
cbb-gcc-4.6.4-554fd8c5195424bdbcabf5de30fdc183aba391bd.tar.xz
obtained gcc-4.6.4.tar.bz2 from upstream website;upstream
verified gcc-4.6.4.tar.bz2.sig; imported gcc-4.6.4 source tree from verified upstream tarball. downloading a git-generated archive based on the 'upstream' tag should provide you with a source tree that is binary identical to the one extracted from the above tarball. if you have obtained the source via the command 'git clone', however, do note that line-endings of files in your working directory might differ from line-endings of the respective files in the upstream repository.
Diffstat (limited to 'gcc/testsuite/g++.dg/expr')
-rw-r--r--gcc/testsuite/g++.dg/expr/anew1.C27
-rw-r--r--gcc/testsuite/g++.dg/expr/anew2.C27
-rw-r--r--gcc/testsuite/g++.dg/expr/anew3.C32
-rw-r--r--gcc/testsuite/g++.dg/expr/anew4.C44
-rw-r--r--gcc/testsuite/g++.dg/expr/assign1.C34
-rw-r--r--gcc/testsuite/g++.dg/expr/bitfield1.C12
-rw-r--r--gcc/testsuite/g++.dg/expr/bitfield10.C16
-rw-r--r--gcc/testsuite/g++.dg/expr/bitfield11.C13
-rw-r--r--gcc/testsuite/g++.dg/expr/bitfield2.C9
-rw-r--r--gcc/testsuite/g++.dg/expr/bitfield3.C12
-rw-r--r--gcc/testsuite/g++.dg/expr/bitfield4.C19
-rw-r--r--gcc/testsuite/g++.dg/expr/bitfield5.C17
-rw-r--r--gcc/testsuite/g++.dg/expr/bitfield6.C11
-rw-r--r--gcc/testsuite/g++.dg/expr/bitfield7.C8
-rw-r--r--gcc/testsuite/g++.dg/expr/bitfield8.C24
-rw-r--r--gcc/testsuite/g++.dg/expr/bitfield9.C26
-rw-r--r--gcc/testsuite/g++.dg/expr/bool1.C21
-rw-r--r--gcc/testsuite/g++.dg/expr/bool2.C13
-rw-r--r--gcc/testsuite/g++.dg/expr/bool3.C21
-rw-r--r--gcc/testsuite/g++.dg/expr/bool4.C13
-rw-r--r--gcc/testsuite/g++.dg/expr/bound-mem-fun.C18
-rw-r--r--gcc/testsuite/g++.dg/expr/call1.C16
-rw-r--r--gcc/testsuite/g++.dg/expr/call2.C14
-rw-r--r--gcc/testsuite/g++.dg/expr/call3.C12
-rw-r--r--gcc/testsuite/g++.dg/expr/call4.C27
-rw-r--r--gcc/testsuite/g++.dg/expr/call5.C19
-rw-r--r--gcc/testsuite/g++.dg/expr/cast1.C3
-rw-r--r--gcc/testsuite/g++.dg/expr/cast10.C10
-rw-r--r--gcc/testsuite/g++.dg/expr/cast2.C5
-rw-r--r--gcc/testsuite/g++.dg/expr/cast3.C22
-rw-r--r--gcc/testsuite/g++.dg/expr/cast4.C25
-rw-r--r--gcc/testsuite/g++.dg/expr/cast6.C6
-rw-r--r--gcc/testsuite/g++.dg/expr/cast7.C13
-rw-r--r--gcc/testsuite/g++.dg/expr/cast8.C11
-rw-r--r--gcc/testsuite/g++.dg/expr/cast9.C12
-rw-r--r--gcc/testsuite/g++.dg/expr/comma1.C21
-rw-r--r--gcc/testsuite/g++.dg/expr/cond1.C28
-rw-r--r--gcc/testsuite/g++.dg/expr/cond2.C12
-rw-r--r--gcc/testsuite/g++.dg/expr/cond3.C6
-rw-r--r--gcc/testsuite/g++.dg/expr/cond4.C16
-rw-r--r--gcc/testsuite/g++.dg/expr/cond6.C24
-rw-r--r--gcc/testsuite/g++.dg/expr/cond7.C12
-rw-r--r--gcc/testsuite/g++.dg/expr/cond8.C13
-rw-r--r--gcc/testsuite/g++.dg/expr/cond9.C12
-rw-r--r--gcc/testsuite/g++.dg/expr/copy1.C28
-rw-r--r--gcc/testsuite/g++.dg/expr/crash-1.C15
-rw-r--r--gcc/testsuite/g++.dg/expr/crash2.C14
-rw-r--r--gcc/testsuite/g++.dg/expr/dtor1.C7
-rw-r--r--gcc/testsuite/g++.dg/expr/dtor2.C6
-rw-r--r--gcc/testsuite/g++.dg/expr/dtor3.C10
-rw-r--r--gcc/testsuite/g++.dg/expr/dtor4.C10
-rw-r--r--gcc/testsuite/g++.dg/expr/enum1.C10
-rw-r--r--gcc/testsuite/g++.dg/expr/for1.C14
-rw-r--r--gcc/testsuite/g++.dg/expr/for2.C15
-rw-r--r--gcc/testsuite/g++.dg/expr/incomplete1.C14
-rw-r--r--gcc/testsuite/g++.dg/expr/lval1.C7
-rw-r--r--gcc/testsuite/g++.dg/expr/lval2.C27
-rw-r--r--gcc/testsuite/g++.dg/expr/lval3.C9
-rw-r--r--gcc/testsuite/g++.dg/expr/lval4.C9
-rw-r--r--gcc/testsuite/g++.dg/expr/member-of-incomplete-type-1.C12
-rw-r--r--gcc/testsuite/g++.dg/expr/minmax.C14
-rw-r--r--gcc/testsuite/g++.dg/expr/overflow1.C8
-rw-r--r--gcc/testsuite/g++.dg/expr/pmf-1.C20
-rw-r--r--gcc/testsuite/g++.dg/expr/pr19355-1.C11
-rw-r--r--gcc/testsuite/g++.dg/expr/pr29066.C42
-rw-r--r--gcc/testsuite/g++.dg/expr/ptrmem1.C33
-rw-r--r--gcc/testsuite/g++.dg/expr/ptrmem4.C16
-rw-r--r--gcc/testsuite/g++.dg/expr/ptrmem5.C7
-rw-r--r--gcc/testsuite/g++.dg/expr/ptrmem6.C12
-rw-r--r--gcc/testsuite/g++.dg/expr/ptrmem6a.C9
-rw-r--r--gcc/testsuite/g++.dg/expr/ptrmem7.C21
-rw-r--r--gcc/testsuite/g++.dg/expr/return1.C9
-rw-r--r--gcc/testsuite/g++.dg/expr/sizeof1.C7
-rw-r--r--gcc/testsuite/g++.dg/expr/sizeof2.C30
-rw-r--r--gcc/testsuite/g++.dg/expr/sizeof3.C4
-rw-r--r--gcc/testsuite/g++.dg/expr/static_cast1.C5
-rw-r--r--gcc/testsuite/g++.dg/expr/static_cast2.C7
-rw-r--r--gcc/testsuite/g++.dg/expr/static_cast3.C24
-rw-r--r--gcc/testsuite/g++.dg/expr/static_cast4.C11
-rw-r--r--gcc/testsuite/g++.dg/expr/static_cast5.C17
-rw-r--r--gcc/testsuite/g++.dg/expr/static_cast6.C15
-rw-r--r--gcc/testsuite/g++.dg/expr/static_cast7.C10
-rw-r--r--gcc/testsuite/g++.dg/expr/stdarg1.C13
-rw-r--r--gcc/testsuite/g++.dg/expr/stdarg2.C30
-rw-r--r--gcc/testsuite/g++.dg/expr/stmt-expr-1.C36
-rw-r--r--gcc/testsuite/g++.dg/expr/string-1.C12
-rw-r--r--gcc/testsuite/g++.dg/expr/string-2.C10
-rw-r--r--gcc/testsuite/g++.dg/expr/unary1.C17
-rw-r--r--gcc/testsuite/g++.dg/expr/unary2.C20
-rw-r--r--gcc/testsuite/g++.dg/expr/unary3.C11
-rw-r--r--gcc/testsuite/g++.dg/expr/volatile1.C9
91 files changed, 1453 insertions, 0 deletions
diff --git a/gcc/testsuite/g++.dg/expr/anew1.C b/gcc/testsuite/g++.dg/expr/anew1.C
new file mode 100644
index 000000000..d7a428880
--- /dev/null
+++ b/gcc/testsuite/g++.dg/expr/anew1.C
@@ -0,0 +1,27 @@
+// { dg-do run }
+// PR 11228: array operator new, with zero-initialization and a variable sized array.
+// Regression test for PR
+// Author: Matt Austern <austern@apple.com>
+
+
+#include <new>
+#include <stdlib.h>
+#include <string.h>
+
+int* allocate(int n)
+{
+ void *p;
+ p = malloc(n * sizeof (int));
+ memset (p, 0xff, n * sizeof(int));
+ return new (p) int[n]();
+}
+
+int main()
+{
+ const int n = 17;
+ int* p = allocate(n);
+ for (int i = 0; i < n; ++i)
+ if (p[i] != 0)
+ abort ();
+ exit (0);
+}
diff --git a/gcc/testsuite/g++.dg/expr/anew2.C b/gcc/testsuite/g++.dg/expr/anew2.C
new file mode 100644
index 000000000..fbf2152d4
--- /dev/null
+++ b/gcc/testsuite/g++.dg/expr/anew2.C
@@ -0,0 +1,27 @@
+// { dg-do run }
+// PR 11228: array operator new, with zero-initialization and a variable sized array.
+// Regression test for PR
+// Author: Matt Austern <austern@apple.com>
+
+
+#include <new>
+#include <stdlib.h>
+#include <string.h>
+
+double* allocate(int n)
+{
+ void *p;
+ p = malloc(n * sizeof (double));
+ memset (p, 0xff, n * sizeof(double));
+ return new (p) double[n]();
+}
+
+int main()
+{
+ const int n = 17;
+ double* p = allocate(n);
+ for (int i = 0; i < n; ++i)
+ if (p[i] != 0.0)
+ abort ();
+ exit (0);
+}
diff --git a/gcc/testsuite/g++.dg/expr/anew3.C b/gcc/testsuite/g++.dg/expr/anew3.C
new file mode 100644
index 000000000..9bb64ea4e
--- /dev/null
+++ b/gcc/testsuite/g++.dg/expr/anew3.C
@@ -0,0 +1,32 @@
+// { dg-do run }
+// PR 11228: array operator new, with zero-initialization and a variable sized array.
+// Regression test for PR
+// Author: Matt Austern <austern@apple.com>
+
+#include <new>
+#include <stdlib.h>
+#include <string.h>
+
+struct X
+{
+ int a;
+ double b;
+};
+
+X* allocate(int n)
+{
+ void *p;
+ p = malloc(n * sizeof (X));
+ memset (p, 0xff, n * sizeof(X));
+ return new (p) X[n]();
+}
+
+int main()
+{
+ const int n = 17;
+ X* p = allocate(n);
+ for (int i = 0; i < n; ++i)
+ if (p[i].a != 0 || p[i].b != 0.0)
+ abort ();
+ exit (0);
+}
diff --git a/gcc/testsuite/g++.dg/expr/anew4.C b/gcc/testsuite/g++.dg/expr/anew4.C
new file mode 100644
index 000000000..4ce1d8899
--- /dev/null
+++ b/gcc/testsuite/g++.dg/expr/anew4.C
@@ -0,0 +1,44 @@
+// { dg-do run }
+// PR 11228: array operator new, with zero-initialization and a variable sized array.
+// Regression test for PR
+// Author: Matt Austern <austern@apple.com>
+
+#include <new>
+#include <stdlib.h>
+#include <string.h>
+
+struct B
+{
+ B();
+ int n;
+};
+
+B::B()
+{
+ n = 137;
+}
+
+
+struct D : public B
+{
+ double x;
+};
+
+
+D* allocate(int n)
+{
+ void *p;
+ p = malloc(n * sizeof (D));
+ memset (p, 0xff, n * sizeof(D));
+ return new (p) D[n]();
+}
+
+int main()
+{
+ const int n = 17;
+ D* p = allocate(n);
+ for (int i = 0; i < n; ++i)
+ if (p[i].n != 137 || p[i].x != 0)
+ abort ();
+ exit (0);
+}
diff --git a/gcc/testsuite/g++.dg/expr/assign1.C b/gcc/testsuite/g++.dg/expr/assign1.C
new file mode 100644
index 000000000..7eb37e523
--- /dev/null
+++ b/gcc/testsuite/g++.dg/expr/assign1.C
@@ -0,0 +1,34 @@
+// { dg-do run }
+
+// Contributed by Nathan Sidwell 15 Dec 2003 <nathan@codesourcery.com>
+// Origin: Tasso Karkanis <Tasso.Karkanis@rogers.com>
+// PR c++/13387. Clobbered tail padding of base
+
+inline void *operator new (__SIZE_TYPE__, void *ptr)
+{
+ return ptr;
+}
+
+struct Base {
+ Base() : i(0), c(0) {}
+ int i;
+ char c;
+};
+
+struct Sub : Base {
+ Sub () : d(0) {}
+ char d;
+};
+
+int main() {
+ Sub sub;
+ char base_alias[sizeof (Base)];
+ Base *base;
+
+ for (unsigned ix = sizeof base_alias; ix--;)
+ base_alias[ix] = 0x55;
+ base = new (&base_alias) Base ();
+
+ static_cast <Base &> (sub) = *base;
+ return sub.d;
+}
diff --git a/gcc/testsuite/g++.dg/expr/bitfield1.C b/gcc/testsuite/g++.dg/expr/bitfield1.C
new file mode 100644
index 000000000..f3d47417b
--- /dev/null
+++ b/gcc/testsuite/g++.dg/expr/bitfield1.C
@@ -0,0 +1,12 @@
+// PR c++/27505
+
+struct s {
+ bool field:8;
+};
+
+void
+foo (struct s *p)
+{
+ if (!p->field)
+ ;
+}
diff --git a/gcc/testsuite/g++.dg/expr/bitfield10.C b/gcc/testsuite/g++.dg/expr/bitfield10.C
new file mode 100644
index 000000000..0a6581e32
--- /dev/null
+++ b/gcc/testsuite/g++.dg/expr/bitfield10.C
@@ -0,0 +1,16 @@
+// PR c++/37146
+// { dg-do compile }
+
+enum E { E0 = 0, E1 = 'E' };
+
+struct S
+{
+ E s0 : 8;
+ enum E foo (bool, E);
+};
+
+E
+S::foo (bool a, E b)
+{
+ return a ? s0 : b;
+}
diff --git a/gcc/testsuite/g++.dg/expr/bitfield11.C b/gcc/testsuite/g++.dg/expr/bitfield11.C
new file mode 100644
index 000000000..bab303ef3
--- /dev/null
+++ b/gcc/testsuite/g++.dg/expr/bitfield11.C
@@ -0,0 +1,13 @@
+// PR c++/37819
+// { dg-do compile }
+
+struct A
+{
+ unsigned int a : 1;
+};
+
+bool
+foo (A *x, A *y)
+{
+ x->a = y ? y->a : true;
+}
diff --git a/gcc/testsuite/g++.dg/expr/bitfield2.C b/gcc/testsuite/g++.dg/expr/bitfield2.C
new file mode 100644
index 000000000..659931530
--- /dev/null
+++ b/gcc/testsuite/g++.dg/expr/bitfield2.C
@@ -0,0 +1,9 @@
+// PR c++/27979
+
+class Ast
+{
+ enum AstKind { };
+ const AstKind kind : 8;
+ void foo(AstKind k) { }
+ void bar(void) { foo(kind); }
+};
diff --git a/gcc/testsuite/g++.dg/expr/bitfield3.C b/gcc/testsuite/g++.dg/expr/bitfield3.C
new file mode 100644
index 000000000..3221263a9
--- /dev/null
+++ b/gcc/testsuite/g++.dg/expr/bitfield3.C
@@ -0,0 +1,12 @@
+// PR c++/30274
+
+struct S {
+ bool x : 4;
+};
+
+S s;
+
+void f() {
+ s.x--; // { dg-error "Boolean expression" }
+ --s.x; // { dg-error "Boolean expression" }
+}
diff --git a/gcc/testsuite/g++.dg/expr/bitfield4.C b/gcc/testsuite/g++.dg/expr/bitfield4.C
new file mode 100644
index 000000000..d824964e1
--- /dev/null
+++ b/gcc/testsuite/g++.dg/expr/bitfield4.C
@@ -0,0 +1,19 @@
+// PR c++/30274
+// { dg-do link }
+
+struct S {
+ bool x : 4;
+};
+
+S s;
+
+template <typename T>
+void f(T);
+
+template <>
+void f(bool) {}
+
+int main() {
+ f(s.x++);
+ f(++s.x);
+}
diff --git a/gcc/testsuite/g++.dg/expr/bitfield5.C b/gcc/testsuite/g++.dg/expr/bitfield5.C
new file mode 100644
index 000000000..3d18e159c
--- /dev/null
+++ b/gcc/testsuite/g++.dg/expr/bitfield5.C
@@ -0,0 +1,17 @@
+// PR c++/30274
+// { dg-do run }
+
+struct S {
+ bool x : 4;
+};
+
+S s;
+
+int main() {
+ s.x++;
+ if (s.x != 1)
+ return 1;
+ ++s.x;
+ if (s.x != 1)
+ return 2;
+}
diff --git a/gcc/testsuite/g++.dg/expr/bitfield6.C b/gcc/testsuite/g++.dg/expr/bitfield6.C
new file mode 100644
index 000000000..6f6d559a3
--- /dev/null
+++ b/gcc/testsuite/g++.dg/expr/bitfield6.C
@@ -0,0 +1,11 @@
+// PR c++/30274
+
+struct S {
+ bool x : 4;
+};
+
+S s;
+
+void f() {
+ ++s.x = false;
+}
diff --git a/gcc/testsuite/g++.dg/expr/bitfield7.C b/gcc/testsuite/g++.dg/expr/bitfield7.C
new file mode 100644
index 000000000..d274e3e98
--- /dev/null
+++ b/gcc/testsuite/g++.dg/expr/bitfield7.C
@@ -0,0 +1,8 @@
+// PR c++/31273
+
+enum E { e };
+struct S {
+ E v:5;
+};
+S s;
+int main() { if (!s.v) return 0; }
diff --git a/gcc/testsuite/g++.dg/expr/bitfield8.C b/gcc/testsuite/g++.dg/expr/bitfield8.C
new file mode 100644
index 000000000..566109cdd
--- /dev/null
+++ b/gcc/testsuite/g++.dg/expr/bitfield8.C
@@ -0,0 +1,24 @@
+// PR c++/31513
+// { dg-do run }
+
+extern "C" void abort();
+
+struct tree_type {
+ unsigned int precision : 9;
+};
+
+void bork(unsigned int i) {
+ if (i != 7)
+ abort();
+}
+
+void foo(struct tree_type *t)
+{
+ bork(t->precision);
+}
+
+int main() {
+ tree_type t;
+ t.precision = 7;
+ foo(&t);
+}
diff --git a/gcc/testsuite/g++.dg/expr/bitfield9.C b/gcc/testsuite/g++.dg/expr/bitfield9.C
new file mode 100644
index 000000000..177f65b88
--- /dev/null
+++ b/gcc/testsuite/g++.dg/expr/bitfield9.C
@@ -0,0 +1,26 @@
+// PR c++/32346
+// { dg-do run }
+// { dg-options "-Wno-overflow" }
+
+extern "C" void abort();
+
+struct S {
+ long long i : 32;
+};
+
+void f(int i, int j) {
+ if (i != 0xabcdef01)
+ abort();
+ if (j != 0)
+ abort();
+}
+
+void g(S s) {
+ f(s.i, 0);
+}
+
+int main() {
+ S s;
+ s.i = 0xabcdef01;
+ g(s);
+}
diff --git a/gcc/testsuite/g++.dg/expr/bool1.C b/gcc/testsuite/g++.dg/expr/bool1.C
new file mode 100644
index 000000000..bfb40e330
--- /dev/null
+++ b/gcc/testsuite/g++.dg/expr/bool1.C
@@ -0,0 +1,21 @@
+// { dg-do run }
+// PR C++/29295
+// make sure that a typedef for a bool will have the
+// the same results as a bool itself.
+
+extern "C" void abort();
+typedef bool my_bool;
+int main()
+{
+ my_bool b = false;
+ int i;
+
+ b++;
+ b++;
+ i = b;
+ if (i != 1)
+ abort ();
+ return 0;
+}
+
+
diff --git a/gcc/testsuite/g++.dg/expr/bool2.C b/gcc/testsuite/g++.dg/expr/bool2.C
new file mode 100644
index 000000000..39d93c0af
--- /dev/null
+++ b/gcc/testsuite/g++.dg/expr/bool2.C
@@ -0,0 +1,13 @@
+// { dg-do compile }
+// make sure that a typedef for a bool will have the
+// the same results as a bool itself.
+
+
+typedef bool my_bool;
+int main()
+{
+ my_bool b = false;
+ b--; // { dg-error "" }
+ return 0;
+}
+
diff --git a/gcc/testsuite/g++.dg/expr/bool3.C b/gcc/testsuite/g++.dg/expr/bool3.C
new file mode 100644
index 000000000..61669e27b
--- /dev/null
+++ b/gcc/testsuite/g++.dg/expr/bool3.C
@@ -0,0 +1,21 @@
+// { dg-do run }
+// PR C++/29295
+// make sure that a typedef for a bool will have the
+// the same results as a bool itself.
+
+extern "C" void abort();
+typedef volatile bool my_bool;
+int main()
+{
+ my_bool b = false;
+ int i;
+
+ b++;
+ b++;
+ i = b;
+ if (i != 1)
+ abort ();
+ return 0;
+}
+
+
diff --git a/gcc/testsuite/g++.dg/expr/bool4.C b/gcc/testsuite/g++.dg/expr/bool4.C
new file mode 100644
index 000000000..dce51ec33
--- /dev/null
+++ b/gcc/testsuite/g++.dg/expr/bool4.C
@@ -0,0 +1,13 @@
+// { dg-do compile }
+// make sure that a typedef for a bool will have the
+// the same results as a bool itself.
+
+
+typedef volatile bool my_bool;
+int main()
+{
+ my_bool b = false;
+ b--; // { dg-error "" }
+ return 0;
+}
+
diff --git a/gcc/testsuite/g++.dg/expr/bound-mem-fun.C b/gcc/testsuite/g++.dg/expr/bound-mem-fun.C
new file mode 100644
index 000000000..b31bba13c
--- /dev/null
+++ b/gcc/testsuite/g++.dg/expr/bound-mem-fun.C
@@ -0,0 +1,18 @@
+// Contributed by Dodji Seketeli <dodji@redhat.com>
+// Origin PR c++/38228
+// { dg-do compile }
+
+struct A
+{
+ A ();
+ template<typename T> A(T);
+};
+
+struct B
+{
+ int foo();
+};
+
+A a = B().*(&B::foo); // { dg-error "invalid use of non-static member function" }
+
+
diff --git a/gcc/testsuite/g++.dg/expr/call1.C b/gcc/testsuite/g++.dg/expr/call1.C
new file mode 100644
index 000000000..42d18db56
--- /dev/null
+++ b/gcc/testsuite/g++.dg/expr/call1.C
@@ -0,0 +1,16 @@
+namespace NS_1 {
+ struct A {};
+ struct foo {};
+}
+
+namespace NS_2 {
+ template <typename T> void foo(T);
+
+ template <typename T>
+ void bar() {
+ NS_1::A a;
+ NS_2::foo(a);
+ }
+
+ template void bar<int>();
+}
diff --git a/gcc/testsuite/g++.dg/expr/call2.C b/gcc/testsuite/g++.dg/expr/call2.C
new file mode 100644
index 000000000..3b7398a8b
--- /dev/null
+++ b/gcc/testsuite/g++.dg/expr/call2.C
@@ -0,0 +1,14 @@
+// { dg-do compile }
+
+// Copyright (C) 2003 Free Software Foundation, Inc.
+// Contributed by Nathan Sidwell 11 Sep 2003 <nathan@codesourcery.com>
+// Origin: Wolfgang Bangerth <bangerth@dealii.org>
+// PR c++/12184. ICE
+
+class C;
+class D;
+bool mm(D);
+
+void g(C& f) {
+ mm(f); // { dg-error "parameter" "" }
+}
diff --git a/gcc/testsuite/g++.dg/expr/call3.C b/gcc/testsuite/g++.dg/expr/call3.C
new file mode 100644
index 000000000..13bca7170
--- /dev/null
+++ b/gcc/testsuite/g++.dg/expr/call3.C
@@ -0,0 +1,12 @@
+// PR c++/26036
+// Origin: <ben@pc-doctor.com>
+// { dg-do compile }
+
+struct A
+{
+ int i;
+};
+
+A foo(int); /* { dg-message "note: declared here" } */
+
+int j = foo().i; // { dg-error "too few arguments" }
diff --git a/gcc/testsuite/g++.dg/expr/call4.C b/gcc/testsuite/g++.dg/expr/call4.C
new file mode 100644
index 000000000..b4f2d60be
--- /dev/null
+++ b/gcc/testsuite/g++.dg/expr/call4.C
@@ -0,0 +1,27 @@
+// { dg-do compile }
+
+// Copyright (C) 2007 Free Software Foundation, Inc.
+// Contributed by Nathan Sidwell 22 Jul 2007 <nathan@codesourcery.com>
+
+// Origin: Danny Boelens <danny.boelens@artwork-systems.com>
+// PR 32839. Default arguments propagated through the type system to
+// an indirect call.
+
+template<typename T>
+struct TPL
+{
+ enum Whatever {e1, e2};
+
+ static void Quux (int i = e1 | e2);
+};
+
+template <typename F>
+void DoIt (F fun)
+{
+ fun (); // { dg-error "too few arguments" }
+}
+
+void Foo ()
+{
+ DoIt (&TPL<int>::Quux);
+}
diff --git a/gcc/testsuite/g++.dg/expr/call5.C b/gcc/testsuite/g++.dg/expr/call5.C
new file mode 100644
index 000000000..023ad81f0
--- /dev/null
+++ b/gcc/testsuite/g++.dg/expr/call5.C
@@ -0,0 +1,19 @@
+// { dg-do compile }
+
+// Copyright (C) 2007 Free Software Foundation, Inc.
+// Contributed by Nathan Sidwell 22 Jul 2007 <nathan@codesourcery.com>
+
+// PR 32839. Default arguments propagated through the type system to
+// an indirect call.
+
+void Quux (int i = 0);
+void Baz (int i);
+
+void Foo ()
+{
+ __typeof (Quux) *q = Baz;
+
+ q (); // { dg-error "too few arguments" }
+}
+
+
diff --git a/gcc/testsuite/g++.dg/expr/cast1.C b/gcc/testsuite/g++.dg/expr/cast1.C
new file mode 100644
index 000000000..ee1adcc3d
--- /dev/null
+++ b/gcc/testsuite/g++.dg/expr/cast1.C
@@ -0,0 +1,3 @@
+struct S; // { dg-error "forward" }
+
+void f(S* p) { ((S) (*p)); } // { dg-error "" }
diff --git a/gcc/testsuite/g++.dg/expr/cast10.C b/gcc/testsuite/g++.dg/expr/cast10.C
new file mode 100644
index 000000000..cd3e0fc3c
--- /dev/null
+++ b/gcc/testsuite/g++.dg/expr/cast10.C
@@ -0,0 +1,10 @@
+// { dg-do compile }
+// This used to error out because we would try to convert m to a short.
+
+
+struct a {};
+void b() {
+ int a::*m;
+ a *c;
+ short p = reinterpret_cast<char*>(&(c->*m)) - reinterpret_cast<char*>(c);
+}
diff --git a/gcc/testsuite/g++.dg/expr/cast2.C b/gcc/testsuite/g++.dg/expr/cast2.C
new file mode 100644
index 000000000..1ccda2b48
--- /dev/null
+++ b/gcc/testsuite/g++.dg/expr/cast2.C
@@ -0,0 +1,5 @@
+void (*p)();
+
+void f() {
+ (void *)p; // { dg-warning "forbids cast" }
+}
diff --git a/gcc/testsuite/g++.dg/expr/cast3.C b/gcc/testsuite/g++.dg/expr/cast3.C
new file mode 100644
index 000000000..2ca56c269
--- /dev/null
+++ b/gcc/testsuite/g++.dg/expr/cast3.C
@@ -0,0 +1,22 @@
+// { dg-do compile }
+
+enum MyState
+{
+ QUIT = 0,
+ START,
+ STOP,
+ PAUSE
+};
+
+double GetDouble()
+{
+ return 1.0;
+}
+
+int main()
+{
+ MyState the_state;
+
+ the_state = (MyState)GetDouble(); // { dg-bogus "invalid cast" }
+ return 0;
+}
diff --git a/gcc/testsuite/g++.dg/expr/cast4.C b/gcc/testsuite/g++.dg/expr/cast4.C
new file mode 100644
index 000000000..e9f529b11
--- /dev/null
+++ b/gcc/testsuite/g++.dg/expr/cast4.C
@@ -0,0 +1,25 @@
+// { dg-do run }
+// PR c++/22132
+
+extern "C" void abort ();
+
+struct foo {
+ int a;
+ int b;
+};
+
+class Foobar : public foo {
+public:
+ Foobar() { a = 1; b = 2; }
+ virtual ~Foobar() {}
+};
+
+Foobar obj;
+const Foobar* objPtr = &obj;
+foo* f = (foo*)objPtr;
+
+int main () {
+ if (f->a != 1 || f->b != 2)
+ abort ();
+}
+
diff --git a/gcc/testsuite/g++.dg/expr/cast6.C b/gcc/testsuite/g++.dg/expr/cast6.C
new file mode 100644
index 000000000..434a04669
--- /dev/null
+++ b/gcc/testsuite/g++.dg/expr/cast6.C
@@ -0,0 +1,6 @@
+void f(int &);
+void f(const int &);
+int main() {
+ volatile int x = 2;
+ f((int)x);
+}
diff --git a/gcc/testsuite/g++.dg/expr/cast7.C b/gcc/testsuite/g++.dg/expr/cast7.C
new file mode 100644
index 000000000..c948919e9
--- /dev/null
+++ b/gcc/testsuite/g++.dg/expr/cast7.C
@@ -0,0 +1,13 @@
+// PR c++/27177
+
+struct X {};
+
+struct Y : virtual X {};
+struct Z : virtual X {};
+
+struct A : Y, Z {};
+
+struct B : A
+{
+ static const int i = sizeof((Z*)(B*)0);
+};
diff --git a/gcc/testsuite/g++.dg/expr/cast8.C b/gcc/testsuite/g++.dg/expr/cast8.C
new file mode 100644
index 000000000..9f1ce36f4
--- /dev/null
+++ b/gcc/testsuite/g++.dg/expr/cast8.C
@@ -0,0 +1,11 @@
+// PR c++/29886
+
+struct A {
+ static int x[1];
+};
+
+void foo(int i)
+{
+ if (int(A::x[i])) {}
+}
+
diff --git a/gcc/testsuite/g++.dg/expr/cast9.C b/gcc/testsuite/g++.dg/expr/cast9.C
new file mode 100644
index 000000000..150183a38
--- /dev/null
+++ b/gcc/testsuite/g++.dg/expr/cast9.C
@@ -0,0 +1,12 @@
+// PR c++/27177
+
+struct Z {};
+struct A : Z {};
+
+Z* implicitToZ (Z*);
+
+struct B : A
+{
+ static const int i = sizeof(implicitToZ((B*)0));
+};
+
diff --git a/gcc/testsuite/g++.dg/expr/comma1.C b/gcc/testsuite/g++.dg/expr/comma1.C
new file mode 100644
index 000000000..5424ce1a8
--- /dev/null
+++ b/gcc/testsuite/g++.dg/expr/comma1.C
@@ -0,0 +1,21 @@
+// { dg-do run }
+
+extern "C" void abort ();
+
+struct gtst
+{
+ unsigned char data[2];
+};
+
+static struct gtst s;
+
+int main(int argc, char *argv[])
+{
+ unsigned char * pc;
+ struct gtst * ps;
+ ps = &s;
+ pc = (ps->data[0]='A', ps->data);
+ if (&s.data[0] != pc)
+ abort();
+ return 0;
+}
diff --git a/gcc/testsuite/g++.dg/expr/cond1.C b/gcc/testsuite/g++.dg/expr/cond1.C
new file mode 100644
index 000000000..8fb3c0f4f
--- /dev/null
+++ b/gcc/testsuite/g++.dg/expr/cond1.C
@@ -0,0 +1,28 @@
+// { dg-do run }
+
+// Copyright (C) 2001 Free Software Foundation, Inc.
+// Contributed by Nathan Sidwell 17 Oct 2002 <nathan@codesourcery.com>
+
+// PR 7209. We didn't SAVE_EXPR in the right place
+
+char a[2][1][16]={
+ {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}},
+ {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}}};
+
+int f() {return 0;}
+
+char * Foo (int d)
+{
+ char *c1;
+
+ c1=a[d==0 ? 0 : 1][f()];
+
+ return c1;
+}
+
+int main ()
+{
+ if (Foo (0) != (void *)a)
+ return 1;
+ return 0;
+}
diff --git a/gcc/testsuite/g++.dg/expr/cond2.C b/gcc/testsuite/g++.dg/expr/cond2.C
new file mode 100644
index 000000000..68a26a22f
--- /dev/null
+++ b/gcc/testsuite/g++.dg/expr/cond2.C
@@ -0,0 +1,12 @@
+struct Term { };
+struct Boolean : Term {
+ explicit Boolean(bool);
+};
+struct IsZero : Term {
+ Term *eval();
+};
+Term*
+IsZero::eval()
+{
+ return true ? new Boolean(false) : this; // { dg-error "conditional expression" }
+}
diff --git a/gcc/testsuite/g++.dg/expr/cond3.C b/gcc/testsuite/g++.dg/expr/cond3.C
new file mode 100644
index 000000000..50a4d9a13
--- /dev/null
+++ b/gcc/testsuite/g++.dg/expr/cond3.C
@@ -0,0 +1,6 @@
+const int i = 7;
+const int j = 3;
+
+void f(bool b) {
+ &(b ? i : j);
+}
diff --git a/gcc/testsuite/g++.dg/expr/cond4.C b/gcc/testsuite/g++.dg/expr/cond4.C
new file mode 100644
index 000000000..fff5c8b18
--- /dev/null
+++ b/gcc/testsuite/g++.dg/expr/cond4.C
@@ -0,0 +1,16 @@
+// PR c++/13971
+
+struct QChar {
+ static const QChar null;
+};
+struct QCharRef {
+ operator QChar() const;
+};
+struct QString {
+ QCharRef operator[](int i);
+};
+
+QChar fillParagraph(QString s, int psi) {
+ return psi ? QChar::null : s[psi];
+}
+
diff --git a/gcc/testsuite/g++.dg/expr/cond6.C b/gcc/testsuite/g++.dg/expr/cond6.C
new file mode 100644
index 000000000..943aa85a9
--- /dev/null
+++ b/gcc/testsuite/g++.dg/expr/cond6.C
@@ -0,0 +1,24 @@
+// { dg-do run }
+
+extern "C" void abort ();
+
+struct B {
+ B() {}
+ B(const B& b) { abort (); }
+};
+
+struct D : public B {
+ D() {}
+ D(const D& d) : B() {}
+};
+
+D d;
+B b;
+
+D f() {
+ return d;
+}
+
+int main () {
+ b = (true ? f() : b);
+}
diff --git a/gcc/testsuite/g++.dg/expr/cond7.C b/gcc/testsuite/g++.dg/expr/cond7.C
new file mode 100644
index 000000000..05e8eab44
--- /dev/null
+++ b/gcc/testsuite/g++.dg/expr/cond7.C
@@ -0,0 +1,12 @@
+// PR c++/19148
+
+struct QChar {
+ QChar (char c);
+ QChar (const QChar &);
+ unsigned short ucs;
+};
+
+void f(QChar *uc, unsigned short ch, QChar replacement)
+{
+ *uc++ = ((ch) ? QChar((1)) : replacement);
+}
diff --git a/gcc/testsuite/g++.dg/expr/cond8.C b/gcc/testsuite/g++.dg/expr/cond8.C
new file mode 100644
index 000000000..11708ec0f
--- /dev/null
+++ b/gcc/testsuite/g++.dg/expr/cond8.C
@@ -0,0 +1,13 @@
+// PR c++/22434
+// { dg-options "" }
+
+struct A
+{
+ A(void*); // { dg-error "initializing" }
+ ~A();
+};
+
+void foo(const int i, bool b)
+{
+ b ? A(0) : i; // { dg-error "conversion" }
+}
diff --git a/gcc/testsuite/g++.dg/expr/cond9.C b/gcc/testsuite/g++.dg/expr/cond9.C
new file mode 100644
index 000000000..e8e1397c0
--- /dev/null
+++ b/gcc/testsuite/g++.dg/expr/cond9.C
@@ -0,0 +1,12 @@
+// PR c++/27666
+
+struct A { // { dg-message "A" }
+ A(int); // { dg-message "A" }
+};
+
+void foo(volatile A a) {
+ 1 ? a : 0; // { dg-error "match|temporary" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 8 }
+ 1 ? 0 : a; // { dg-error "match|temporary" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 10 }
+}
diff --git a/gcc/testsuite/g++.dg/expr/copy1.C b/gcc/testsuite/g++.dg/expr/copy1.C
new file mode 100644
index 000000000..57036d3f0
--- /dev/null
+++ b/gcc/testsuite/g++.dg/expr/copy1.C
@@ -0,0 +1,28 @@
+// PR c++/14035
+// { dg-do run }
+
+extern "C" void abort();
+
+struct Blob {
+ int x, y;
+ Blob() { }
+ Blob(const Blob &b) { abort (); }
+};
+struct Blobby : public Blob { };
+
+struct Wooly {
+ operator const Blobby & ()
+ {
+ return myBlobby;
+ }
+ Blobby myBlobby;
+};
+
+void catcher(const Blob &blo)
+{ }
+
+int main()
+{
+ Wooly wooly;
+ catcher((const Blob &)wooly);
+}
diff --git a/gcc/testsuite/g++.dg/expr/crash-1.C b/gcc/testsuite/g++.dg/expr/crash-1.C
new file mode 100644
index 000000000..d8d689fd6
--- /dev/null
+++ b/gcc/testsuite/g++.dg/expr/crash-1.C
@@ -0,0 +1,15 @@
+// C++ PR/10476
+// Origin: larsbj@gullik.net and bangerth@dealii.org
+
+
+struct X {
+ X();
+ X(const X& __str);
+};
+X const bar();
+void foo()
+{
+ X y;
+ (true ? y : bar());
+}
+
diff --git a/gcc/testsuite/g++.dg/expr/crash2.C b/gcc/testsuite/g++.dg/expr/crash2.C
new file mode 100644
index 000000000..5379bb159
--- /dev/null
+++ b/gcc/testsuite/g++.dg/expr/crash2.C
@@ -0,0 +1,14 @@
+// PR c++/14267
+
+class foo {
+public: static int& x;
+};
+int temp;
+int& foo::x=temp;
+
+int main() {
+ int x = 3;
+ &foo::x = x; // { dg-error "" }
+ return 0;
+}
+
diff --git a/gcc/testsuite/g++.dg/expr/dtor1.C b/gcc/testsuite/g++.dg/expr/dtor1.C
new file mode 100644
index 000000000..0775a93c9
--- /dev/null
+++ b/gcc/testsuite/g++.dg/expr/dtor1.C
@@ -0,0 +1,7 @@
+class Foo; // { dg-error "" }
+
+void
+bar(void* p)
+{
+ static_cast<Foo*>(p)->~Foo(); // { dg-error "" }
+}
diff --git a/gcc/testsuite/g++.dg/expr/dtor2.C b/gcc/testsuite/g++.dg/expr/dtor2.C
new file mode 100644
index 000000000..5f372424e
--- /dev/null
+++ b/gcc/testsuite/g++.dg/expr/dtor2.C
@@ -0,0 +1,6 @@
+typedef const int I;
+int i;
+
+void f() {
+ i.I::~I();
+}
diff --git a/gcc/testsuite/g++.dg/expr/dtor3.C b/gcc/testsuite/g++.dg/expr/dtor3.C
new file mode 100644
index 000000000..036e9f2a0
--- /dev/null
+++ b/gcc/testsuite/g++.dg/expr/dtor3.C
@@ -0,0 +1,10 @@
+struct B {
+ ~B();
+};
+struct D : public B {
+ ~D();
+};
+
+void f(D d) {
+ d.B::~B();
+}
diff --git a/gcc/testsuite/g++.dg/expr/dtor4.C b/gcc/testsuite/g++.dg/expr/dtor4.C
new file mode 100644
index 000000000..7aed80a69
--- /dev/null
+++ b/gcc/testsuite/g++.dg/expr/dtor4.C
@@ -0,0 +1,10 @@
+typedef int C;
+typedef double D;
+
+void
+f ()
+{
+ C o;
+
+ o.D::~C (); // { dg-error "" }
+}
diff --git a/gcc/testsuite/g++.dg/expr/enum1.C b/gcc/testsuite/g++.dg/expr/enum1.C
new file mode 100644
index 000000000..40dc5faf6
--- /dev/null
+++ b/gcc/testsuite/g++.dg/expr/enum1.C
@@ -0,0 +1,10 @@
+// { dg-do run }
+
+extern "C" void abort();
+int main()
+{
+ enum { shelf = 4 } t = shelf;
+ if (!(t & shelf))
+ abort ();
+}
+
diff --git a/gcc/testsuite/g++.dg/expr/for1.C b/gcc/testsuite/g++.dg/expr/for1.C
new file mode 100644
index 000000000..baffd424a
--- /dev/null
+++ b/gcc/testsuite/g++.dg/expr/for1.C
@@ -0,0 +1,14 @@
+// PR c++/13663
+
+struct S {
+ void f();
+};
+
+void g(int);
+void g(double);
+
+void h () {
+ S s;
+ for (;;s.f); // { dg-error "" }
+ for (;;g); // { dg-error "" }
+}
diff --git a/gcc/testsuite/g++.dg/expr/for2.C b/gcc/testsuite/g++.dg/expr/for2.C
new file mode 100644
index 000000000..52f769641
--- /dev/null
+++ b/gcc/testsuite/g++.dg/expr/for2.C
@@ -0,0 +1,15 @@
+// { dg-do compile }
+// PR c++/17661
+// We used to try to create a temprary for the condition
+// expression in the for which was wrong.
+
+
+struct C
+{
+ C (const C &x);
+};
+C &f();
+void breakme (C j, bool k)
+{
+ for (;; k ? j : f()) ;
+}
diff --git a/gcc/testsuite/g++.dg/expr/incomplete1.C b/gcc/testsuite/g++.dg/expr/incomplete1.C
new file mode 100644
index 000000000..03e363a3d
--- /dev/null
+++ b/gcc/testsuite/g++.dg/expr/incomplete1.C
@@ -0,0 +1,14 @@
+// PR 10202
+// { dg-do compile }
+// { dg-options -O0 }
+
+extern struct _smtp_account smtp_accounts[];
+typedef struct _smtp_account {
+ int flags;
+} Smtp_Account;
+
+void get_smtp_host_info ()
+{
+ if (smtp_accounts[0].flags & 0x01)
+ get_smtp_host_info();
+}
diff --git a/gcc/testsuite/g++.dg/expr/lval1.C b/gcc/testsuite/g++.dg/expr/lval1.C
new file mode 100644
index 000000000..bed47d8e4
--- /dev/null
+++ b/gcc/testsuite/g++.dg/expr/lval1.C
@@ -0,0 +1,7 @@
+// Contributed by Matt Austern <austern@apple.com>
+
+void f ()
+{
+ int n;
+ (char) n = 1; // { dg-error "" }
+}
diff --git a/gcc/testsuite/g++.dg/expr/lval2.C b/gcc/testsuite/g++.dg/expr/lval2.C
new file mode 100644
index 000000000..5d062f1c6
--- /dev/null
+++ b/gcc/testsuite/g++.dg/expr/lval2.C
@@ -0,0 +1,27 @@
+// PR c++/19199
+
+// { dg-do run }
+
+// We used to turn the COND_EXPR lvalue into a MIN_EXPR rvalue, and
+// then return a reference to a temporary in qMin.
+
+#include <assert.h>
+
+enum Foo { A, B };
+
+template<typename T> T &qMin(T &a, T &b)
+{
+ return a < b ? a : b;
+}
+
+int main (int, char **)
+{
+ Foo f = A;
+ Foo g = B;
+ Foo &h = qMin(f, g);
+ assert (&h == &f || &h == &g);
+ const Foo &i = qMin((const Foo&)f, (const Foo&)g);
+ assert (&i == &f || &i == &g);
+ return 0;
+}
+
diff --git a/gcc/testsuite/g++.dg/expr/lval3.C b/gcc/testsuite/g++.dg/expr/lval3.C
new file mode 100644
index 000000000..f106e6961
--- /dev/null
+++ b/gcc/testsuite/g++.dg/expr/lval3.C
@@ -0,0 +1,9 @@
+// i++ is never an lvalue
+void
+f()
+{
+ bool i = 0;
+ i++ = 3; // { dg-error "" }
+}
+
+
diff --git a/gcc/testsuite/g++.dg/expr/lval4.C b/gcc/testsuite/g++.dg/expr/lval4.C
new file mode 100644
index 000000000..c66e2f6af
--- /dev/null
+++ b/gcc/testsuite/g++.dg/expr/lval4.C
@@ -0,0 +1,9 @@
+// ++i is always an lvalue
+void
+f()
+{
+ bool i = 0;
+ ++i = 3;
+}
+
+
diff --git a/gcc/testsuite/g++.dg/expr/member-of-incomplete-type-1.C b/gcc/testsuite/g++.dg/expr/member-of-incomplete-type-1.C
new file mode 100644
index 000000000..9fe65bc97
--- /dev/null
+++ b/gcc/testsuite/g++.dg/expr/member-of-incomplete-type-1.C
@@ -0,0 +1,12 @@
+// Copyright (C) 2002 Free Software Foundation
+// Origin: jmr@fulcrummicro.com
+// Contributed by Gabriel Dos Reis <gdr@integrable-solutions.net>
+
+
+struct A;
+
+int main()
+{
+ A::g(); // { dg-error "incomplete" "" }
+}
+
diff --git a/gcc/testsuite/g++.dg/expr/minmax.C b/gcc/testsuite/g++.dg/expr/minmax.C
new file mode 100644
index 000000000..407a92bb4
--- /dev/null
+++ b/gcc/testsuite/g++.dg/expr/minmax.C
@@ -0,0 +1,14 @@
+// { dg-do compile }
+
+void f(void)
+{
+ int a, b;
+ (a >? b) = 1; // { dg-error "" }
+}
+
+
+void g(void)
+{
+ int a, b;
+ (a <? b) = 1; // { dg-error "" }
+}
diff --git a/gcc/testsuite/g++.dg/expr/overflow1.C b/gcc/testsuite/g++.dg/expr/overflow1.C
new file mode 100644
index 000000000..b67b4e42e
--- /dev/null
+++ b/gcc/testsuite/g++.dg/expr/overflow1.C
@@ -0,0 +1,8 @@
+#include <limits.h>
+
+enum E {
+ A = (unsigned char)-1, /* OK */
+ B = (signed char)UCHAR_MAX, /* implementation-defined */
+ C = INT_MAX+1, /* undefined (C)/ill-formed (C++) { dg-message "" } */
+ D = UINT_MAX+1 /* OK */
+};
diff --git a/gcc/testsuite/g++.dg/expr/pmf-1.C b/gcc/testsuite/g++.dg/expr/pmf-1.C
new file mode 100644
index 000000000..3dd01c6b9
--- /dev/null
+++ b/gcc/testsuite/g++.dg/expr/pmf-1.C
@@ -0,0 +1,20 @@
+// C++ PR/2521
+// Copyright (C) 2002 Free Software Foundation
+// Contributed by Gabriel Dos Reis <gdr@integrable-solutions.net>
+
+// { dg-do compile }
+
+struct A
+{
+ void f();
+ void foo(void (A::*)(int)); // { dg-message "void A::foo|no known conversion" "" }
+ template<typename T>
+ void g(T);
+ void h()
+ {
+ void (A::*p)() = &A::f;
+ void (A::*q)() = &(A::f); // { dg-error "parenthesized" "" }
+ foo(&g<int>); // { dg-error "no matching" "" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 17 }
+ }
+};
diff --git a/gcc/testsuite/g++.dg/expr/pr19355-1.C b/gcc/testsuite/g++.dg/expr/pr19355-1.C
new file mode 100644
index 000000000..ce11b8188
--- /dev/null
+++ b/gcc/testsuite/g++.dg/expr/pr19355-1.C
@@ -0,0 +1,11 @@
+// PR c++/19355
+// { dg-do compile }
+
+typedef bool Boolean;
+extern Boolean is_nil ();
+void f(void)
+{
+ unsigned int ilen;
+ if(!((ilen > 0 ? !is_nil () : 1))) {}
+}
+
diff --git a/gcc/testsuite/g++.dg/expr/pr29066.C b/gcc/testsuite/g++.dg/expr/pr29066.C
new file mode 100644
index 000000000..8bf6bb0a0
--- /dev/null
+++ b/gcc/testsuite/g++.dg/expr/pr29066.C
@@ -0,0 +1,42 @@
+// PR c++/29066
+// Test pointer to member function comparison
+// { dg-do run }
+
+extern "C" void abort (void);
+
+struct X
+{
+ virtual void a(void)=0;
+};
+
+struct Z : public X
+{
+ void a(void) {}
+};
+
+
+void f(X *obj)
+{
+ void (X::*xp)(void) = 0;
+ void (X::*xp2)(void) = 0;
+
+ xp = &X::a;
+
+ if (xp == xp2)
+ {
+ abort();
+ }
+
+ if (xp == 0)
+ {
+ abort();
+ }
+}
+
+int main(int argc, char* argv[])
+{
+ Z myobj;
+
+ f(&myobj);
+ return 0;
+}
diff --git a/gcc/testsuite/g++.dg/expr/ptrmem1.C b/gcc/testsuite/g++.dg/expr/ptrmem1.C
new file mode 100644
index 000000000..146143a1e
--- /dev/null
+++ b/gcc/testsuite/g++.dg/expr/ptrmem1.C
@@ -0,0 +1,33 @@
+// { dg-do compile }
+
+// Copyright (C) 2003 Free Software Foundation, Inc.
+// Contributed by Nathan Sidwell 2 Aug 2003 <nathan@codesourcery.com>
+
+// PR 11766. ICE
+
+template<typename T>
+struct normal_iterator
+{
+ normal_iterator(const T& __i);
+};
+
+
+template<typename _Tp>
+struct vector
+{
+ void end() const { normal_iterator<const _Tp*> (this->pt); }
+ void size() const { end(); }
+ _Tp* pt;
+};
+
+
+
+struct MuonTag {
+ typedef void (MuonTag::*Selector)();
+};
+
+void foo()
+{
+ vector<MuonTag::Selector> _selectors;
+ _selectors.size();
+}
diff --git a/gcc/testsuite/g++.dg/expr/ptrmem4.C b/gcc/testsuite/g++.dg/expr/ptrmem4.C
new file mode 100644
index 000000000..0803c9e63
--- /dev/null
+++ b/gcc/testsuite/g++.dg/expr/ptrmem4.C
@@ -0,0 +1,16 @@
+// PR c++/15471
+// { dg-do run }
+
+struct myclass {
+ unsigned a;
+ union {
+ unsigned x;
+ };
+};
+
+int main () {
+ myclass foo;
+ unsigned myclass::* member = &myclass::x;
+ if (&(foo.*member) != &foo.x)
+ return 1;
+}
diff --git a/gcc/testsuite/g++.dg/expr/ptrmem5.C b/gcc/testsuite/g++.dg/expr/ptrmem5.C
new file mode 100644
index 000000000..e36983d02
--- /dev/null
+++ b/gcc/testsuite/g++.dg/expr/ptrmem5.C
@@ -0,0 +1,7 @@
+// PR c++/15696
+
+struct A {};
+
+typedef void (A::*ftype)();
+
+void foo() { A().*ftype(); } // { dg-error "" }
diff --git a/gcc/testsuite/g++.dg/expr/ptrmem6.C b/gcc/testsuite/g++.dg/expr/ptrmem6.C
new file mode 100644
index 000000000..0c75385fb
--- /dev/null
+++ b/gcc/testsuite/g++.dg/expr/ptrmem6.C
@@ -0,0 +1,12 @@
+// PR C++/21614
+// { dg-additional-sources "ptrmem6a.C" }
+// { dg-do run }
+
+extern struct Z *p;
+extern int (Z::*m) ();
+
+int main () {
+ if ((p->*m)() == 7)
+ return 0;
+ return 1;
+}
diff --git a/gcc/testsuite/g++.dg/expr/ptrmem6a.C b/gcc/testsuite/g++.dg/expr/ptrmem6a.C
new file mode 100644
index 000000000..8dad81c58
--- /dev/null
+++ b/gcc/testsuite/g++.dg/expr/ptrmem6a.C
@@ -0,0 +1,9 @@
+struct Z {
+ int f();
+};
+
+int Z::f() { return 7; }
+
+struct Z z;
+int (Z::*m)() = &Z::f;
+struct Z*p = &z;
diff --git a/gcc/testsuite/g++.dg/expr/ptrmem7.C b/gcc/testsuite/g++.dg/expr/ptrmem7.C
new file mode 100644
index 000000000..a94990e54
--- /dev/null
+++ b/gcc/testsuite/g++.dg/expr/ptrmem7.C
@@ -0,0 +1,21 @@
+// PR c++/22545
+
+struct A {
+ int member;
+ A() : member(13) {}
+};
+
+A a;
+
+struct B {
+ operator A*() { return &a; }
+};
+
+B b;
+
+int A::* member_pntr = &A::member;
+
+int main()
+{
+ return b ->* member_pntr;
+}
diff --git a/gcc/testsuite/g++.dg/expr/return1.C b/gcc/testsuite/g++.dg/expr/return1.C
new file mode 100644
index 000000000..7a64988e4
--- /dev/null
+++ b/gcc/testsuite/g++.dg/expr/return1.C
@@ -0,0 +1,9 @@
+// PR c++/18545
+
+struct A;
+
+A foo() // { dg-error "" }
+{
+ A a; // { dg-error "" }
+ return a;
+}
diff --git a/gcc/testsuite/g++.dg/expr/sizeof1.C b/gcc/testsuite/g++.dg/expr/sizeof1.C
new file mode 100644
index 000000000..fa84481fa
--- /dev/null
+++ b/gcc/testsuite/g++.dg/expr/sizeof1.C
@@ -0,0 +1,7 @@
+// PR c++/12989
+
+struct A
+{
+ int foo() { return sizeof(bar); } // { dg-error "" }
+ int bar();
+};
diff --git a/gcc/testsuite/g++.dg/expr/sizeof2.C b/gcc/testsuite/g++.dg/expr/sizeof2.C
new file mode 100644
index 000000000..ca14ff79f
--- /dev/null
+++ b/gcc/testsuite/g++.dg/expr/sizeof2.C
@@ -0,0 +1,30 @@
+// { dg-do compile }
+// Contributed by Wolfgang Bangerth <bangerth at ticam dot utexas dot edu>
+// PR c++/9259: Allow non-qualified member calls in sizeof expressions.
+
+template <bool> struct StaticAssert;
+template <> struct StaticAssert<true> {};
+
+struct S
+{
+ static int check ();
+ static double check2 ();
+ static const int value = sizeof(check());
+ static const int value2 = sizeof(check2());
+};
+
+template <class>
+struct T
+{
+ static int check ();
+ static double check2 ();
+ static const int value = sizeof(check());
+ static const int value2 = sizeof(check2());
+};
+
+StaticAssert<(S::value == sizeof(int))> s;
+StaticAssert<(S::value2 == sizeof(double))> s2;
+
+StaticAssert<(T<void>::value == sizeof(int))> t;
+StaticAssert<(T<void>::value2 == sizeof(double))> t2;
+
diff --git a/gcc/testsuite/g++.dg/expr/sizeof3.C b/gcc/testsuite/g++.dg/expr/sizeof3.C
new file mode 100644
index 000000000..31338b0b1
--- /dev/null
+++ b/gcc/testsuite/g++.dg/expr/sizeof3.C
@@ -0,0 +1,4 @@
+// PR c++/15337
+
+class CCC;
+int main() { sizeof(CCC); return 0; } // { dg-error ".*CCC.*" }
diff --git a/gcc/testsuite/g++.dg/expr/static_cast1.C b/gcc/testsuite/g++.dg/expr/static_cast1.C
new file mode 100644
index 000000000..f1d88bff3
--- /dev/null
+++ b/gcc/testsuite/g++.dg/expr/static_cast1.C
@@ -0,0 +1,5 @@
+void foo(int x)
+{
+ static_cast<const unsigned int&>(x);
+}
+
diff --git a/gcc/testsuite/g++.dg/expr/static_cast2.C b/gcc/testsuite/g++.dg/expr/static_cast2.C
new file mode 100644
index 000000000..7b5d46ded
--- /dev/null
+++ b/gcc/testsuite/g++.dg/expr/static_cast2.C
@@ -0,0 +1,7 @@
+struct B {};
+
+int main () {
+ B a;
+ (1 ? static_cast<B&>(a) :
+ *static_cast<B*>(&a));
+}
diff --git a/gcc/testsuite/g++.dg/expr/static_cast3.C b/gcc/testsuite/g++.dg/expr/static_cast3.C
new file mode 100644
index 000000000..744648c3f
--- /dev/null
+++ b/gcc/testsuite/g++.dg/expr/static_cast3.C
@@ -0,0 +1,24 @@
+template <class T> struct static_abort {};
+
+template <class E>
+struct any
+{
+ const E& self() const { return static_cast<const E&>(*this); }
+};
+
+struct range : public any<range>
+{
+ range() {}
+
+ template <class U>
+ range(const U&)
+ {
+ typedef typename static_abort<U>::ret t;
+ }
+};
+
+int main()
+{
+ const any<range>& r = *new range();
+ r.self();
+}
diff --git a/gcc/testsuite/g++.dg/expr/static_cast4.C b/gcc/testsuite/g++.dg/expr/static_cast4.C
new file mode 100644
index 000000000..cea7f4873
--- /dev/null
+++ b/gcc/testsuite/g++.dg/expr/static_cast4.C
@@ -0,0 +1,11 @@
+class C {
+public:
+ explicit C(int) {}
+};
+
+int main()
+{
+ int i = 0;
+ static_cast<C>(i);
+ return 0;
+}
diff --git a/gcc/testsuite/g++.dg/expr/static_cast5.C b/gcc/testsuite/g++.dg/expr/static_cast5.C
new file mode 100644
index 000000000..1a51f1516
--- /dev/null
+++ b/gcc/testsuite/g++.dg/expr/static_cast5.C
@@ -0,0 +1,17 @@
+void ambig()
+{
+ struct A {};
+ struct B : A {};
+ struct C : A {};
+ struct D : B, C {};
+
+ D d;
+ A* ap = static_cast<B*> (&d);
+ D* db = static_cast<D*> (ap); // { dg-error "" }
+
+ D& dr1 = static_cast<D&> (*ap); // { dg-error "" }
+
+ A& ar = static_cast<C&> (d);
+ D& dr = static_cast<D&> (ar); // { dg-error "" }
+}
+
diff --git a/gcc/testsuite/g++.dg/expr/static_cast6.C b/gcc/testsuite/g++.dg/expr/static_cast6.C
new file mode 100644
index 000000000..90f32f1d7
--- /dev/null
+++ b/gcc/testsuite/g++.dg/expr/static_cast6.C
@@ -0,0 +1,15 @@
+// PR c++/21853
+
+struct blah {
+ int a;
+};
+
+int main( int argc, char ** argv ) {
+ int blah::* ptdma = &blah::a;
+
+ const void *ptdmv = static_cast< void * >( &ptdma );
+
+ int blah::* const ptdmb = * static_cast< int blah::* const * >( ptdmv );
+
+ return 0;
+}
diff --git a/gcc/testsuite/g++.dg/expr/static_cast7.C b/gcc/testsuite/g++.dg/expr/static_cast7.C
new file mode 100644
index 000000000..bced805bc
--- /dev/null
+++ b/gcc/testsuite/g++.dg/expr/static_cast7.C
@@ -0,0 +1,10 @@
+// Regression test for bug 39415 (and its duplicate 44916).
+struct S {};
+struct T : S {};
+int f(const T*) {}
+void f(T*);
+int main() {
+ S* s(0);
+ int a = f(static_cast<const T*>(s));
+ int b = f(static_cast<const T*>(0));
+}
diff --git a/gcc/testsuite/g++.dg/expr/stdarg1.C b/gcc/testsuite/g++.dg/expr/stdarg1.C
new file mode 100644
index 000000000..85b6f7460
--- /dev/null
+++ b/gcc/testsuite/g++.dg/expr/stdarg1.C
@@ -0,0 +1,13 @@
+// PR c++/23840
+
+#include <stdarg.h>
+struct S
+{
+ int f(int);
+};
+void f(int i, ...)
+{
+ va_list ap;
+ va_start (ap, i);
+ va_arg (ap, S).f(0);
+}
diff --git a/gcc/testsuite/g++.dg/expr/stdarg2.C b/gcc/testsuite/g++.dg/expr/stdarg2.C
new file mode 100644
index 000000000..cf2eabcb1
--- /dev/null
+++ b/gcc/testsuite/g++.dg/expr/stdarg2.C
@@ -0,0 +1,30 @@
+// PR target/26141
+
+#include <stdarg.h>
+
+struct S
+{
+ double a;
+};
+
+void
+foo (int z, ...)
+{
+ struct S arg;
+ va_list ap;
+ arg = va_arg (ap, struct S);
+}
+
+
+struct T
+{
+ __complex__ float a;
+};
+
+void
+bar (int z, ...)
+{
+ struct T arg;
+ va_list ap;
+ arg = va_arg (ap, struct T);
+}
diff --git a/gcc/testsuite/g++.dg/expr/stmt-expr-1.C b/gcc/testsuite/g++.dg/expr/stmt-expr-1.C
new file mode 100644
index 000000000..c4db5157f
--- /dev/null
+++ b/gcc/testsuite/g++.dg/expr/stmt-expr-1.C
@@ -0,0 +1,36 @@
+// Contributed by Dodji Seketeli <dodji@redhat.com>
+// Origin PR c++/40866
+// { dg-options "-std=gnu++98" }
+// { dg-do compile }
+
+template <typename T> class QForeachContainer {
+public:
+ QForeachContainer();
+ int brk;
+ typename T::const_iterator i;
+};
+
+template <typename T> class QList {
+public:
+ class const_iterator {
+ public:
+ const_iterator(const const_iterator &o);
+ const_iterator &operator++();
+ };
+};
+
+class QAction;
+class QWidget {
+public:
+ QList<QAction*> actions() const;
+};
+class myDialog : public QWidget {
+ myDialog();
+};
+
+myDialog::myDialog()
+{
+ QForeachContainer<__typeof__(actions())> _container_;
+ ({++_container_.brk; ++_container_.i;});
+}
+
diff --git a/gcc/testsuite/g++.dg/expr/string-1.C b/gcc/testsuite/g++.dg/expr/string-1.C
new file mode 100644
index 000000000..9a0a5ff7b
--- /dev/null
+++ b/gcc/testsuite/g++.dg/expr/string-1.C
@@ -0,0 +1,12 @@
+// { dg-do compile }
+// This testcase used to seg fault (PR c++/38648)
+
+// { dg-prune-output "initializer lists" }
+
+char a[1];
+
+int foo(
+{
+ a = ""; // { dg-error "" }
+ return 0; // { dg-error "" }
+} // { dg-error "" }
diff --git a/gcc/testsuite/g++.dg/expr/string-2.C b/gcc/testsuite/g++.dg/expr/string-2.C
new file mode 100644
index 000000000..252fa7036
--- /dev/null
+++ b/gcc/testsuite/g++.dg/expr/string-2.C
@@ -0,0 +1,10 @@
+// { dg-do compile }
+// This testcase used to seg fault (PR c++/38648)
+
+char a[1];
+
+int foo(a = "") // { dg-error "invalid array assignment" }
+{ // { dg-error "" }
+ return 0;
+}
+
diff --git a/gcc/testsuite/g++.dg/expr/unary1.C b/gcc/testsuite/g++.dg/expr/unary1.C
new file mode 100644
index 000000000..4ea230f01
--- /dev/null
+++ b/gcc/testsuite/g++.dg/expr/unary1.C
@@ -0,0 +1,17 @@
+// { dg-do compile }
+// Unary plus (but not unary minus) can be applied to pointer types
+
+void *p;
+
+void f(void)
+{
+ -p; // { dg-error "wrong type argument" }
+ +p;
+}
+
+template <int>
+void g(void)
+{
+ -p; // { dg-error "wrong type argument" }
+ +p;
+}
diff --git a/gcc/testsuite/g++.dg/expr/unary2.C b/gcc/testsuite/g++.dg/expr/unary2.C
new file mode 100644
index 000000000..841881591
--- /dev/null
+++ b/gcc/testsuite/g++.dg/expr/unary2.C
@@ -0,0 +1,20 @@
+// { dg-do compile }
+// Unary plus/minus are not lvalues.
+
+// In templates we require an instantiation to emit the diagnostic. This
+// is wrong and it is PR 18474.
+
+int n;
+
+void f(void)
+{
+ -n = 0; // { dg-error "lvalue" }
+ +n = 0; // { dg-error "lvalue" }
+}
+
+template <int>
+void g(void)
+{
+ -n = 0; // { dg-error "lvalue" "" { xfail *-*-* } }
+ +n = 0; // { dg-error "lvalue" "" { xfail *-*-* } }
+}
diff --git a/gcc/testsuite/g++.dg/expr/unary3.C b/gcc/testsuite/g++.dg/expr/unary3.C
new file mode 100644
index 000000000..abca0322d
--- /dev/null
+++ b/gcc/testsuite/g++.dg/expr/unary3.C
@@ -0,0 +1,11 @@
+// PR c++/41131
+// { dg-do compile }
+
+struct X { enum E { a = 100 }; };
+
+int
+main ()
+{
+ X x;
+ (void) &x.a; // { dg-error "lvalue required" }
+}
diff --git a/gcc/testsuite/g++.dg/expr/volatile1.C b/gcc/testsuite/g++.dg/expr/volatile1.C
new file mode 100644
index 000000000..712c9e0fb
--- /dev/null
+++ b/gcc/testsuite/g++.dg/expr/volatile1.C
@@ -0,0 +1,9 @@
+// PR c++/23167
+
+struct dom
+{
+ static int tostr();
+ void eval_old() volatile{tostr();}
+ ~dom() throw();
+};
+