From 554fd8c5195424bdbcabf5de30fdc183aba391bd Mon Sep 17 00:00:00 2001 From: upstream source tree Date: Sun, 15 Mar 2015 20:14:05 -0400 Subject: obtained gcc-4.6.4.tar.bz2 from upstream website; 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. --- gcc/testsuite/g++.dg/cpp0x/regress/49290.C | 12 ++++ gcc/testsuite/g++.dg/cpp0x/regress/README | 3 + gcc/testsuite/g++.dg/cpp0x/regress/abi-empty7.C | 20 ++++++ gcc/testsuite/g++.dg/cpp0x/regress/array1.C | 16 +++++ gcc/testsuite/g++.dg/cpp0x/regress/bitfield-err1.C | 9 +++ gcc/testsuite/g++.dg/cpp0x/regress/call1.C | 13 ++++ gcc/testsuite/g++.dg/cpp0x/regress/condition1.C | 80 ++++++++++++++++++++++ gcc/testsuite/g++.dg/cpp0x/regress/debug-debug7.C | 19 +++++ gcc/testsuite/g++.dg/cpp0x/regress/enum1.C | 8 +++ .../g++.dg/cpp0x/regress/error-recovery1.C | 9 +++ gcc/testsuite/g++.dg/cpp0x/regress/ext-cond1.C | 4 ++ gcc/testsuite/g++.dg/cpp0x/regress/ext-label10.C | 17 +++++ gcc/testsuite/g++.dg/cpp0x/regress/isnan.C | 9 +++ gcc/testsuite/g++.dg/cpp0x/regress/no-elide1.C | 14 ++++ gcc/testsuite/g++.dg/cpp0x/regress/non-const1.C | 9 +++ gcc/testsuite/g++.dg/cpp0x/regress/parse-ambig5.C | 8 +++ gcc/testsuite/g++.dg/cpp0x/regress/ptrmem1.C | 9 +++ gcc/testsuite/g++.dg/cpp0x/regress/regress1.C | 10 +++ gcc/testsuite/g++.dg/cpp0x/regress/regress2.C | 13 ++++ gcc/testsuite/g++.dg/cpp0x/regress/regress3.C | 13 ++++ gcc/testsuite/g++.dg/cpp0x/regress/regress5.C | 16 +++++ .../g++.dg/cpp0x/regress/template-const1.C | 9 +++ .../g++.dg/cpp0x/regress/template-const2.C | 14 ++++ .../g++.dg/cpp0x/regress/template-function1.C | 29 ++++++++ gcc/testsuite/g++.dg/cpp0x/regress/value-dep1.C | 7 ++ 25 files changed, 370 insertions(+) create mode 100644 gcc/testsuite/g++.dg/cpp0x/regress/49290.C create mode 100644 gcc/testsuite/g++.dg/cpp0x/regress/README create mode 100644 gcc/testsuite/g++.dg/cpp0x/regress/abi-empty7.C create mode 100644 gcc/testsuite/g++.dg/cpp0x/regress/array1.C create mode 100644 gcc/testsuite/g++.dg/cpp0x/regress/bitfield-err1.C create mode 100644 gcc/testsuite/g++.dg/cpp0x/regress/call1.C create mode 100644 gcc/testsuite/g++.dg/cpp0x/regress/condition1.C create mode 100644 gcc/testsuite/g++.dg/cpp0x/regress/debug-debug7.C create mode 100644 gcc/testsuite/g++.dg/cpp0x/regress/enum1.C create mode 100644 gcc/testsuite/g++.dg/cpp0x/regress/error-recovery1.C create mode 100644 gcc/testsuite/g++.dg/cpp0x/regress/ext-cond1.C create mode 100644 gcc/testsuite/g++.dg/cpp0x/regress/ext-label10.C create mode 100644 gcc/testsuite/g++.dg/cpp0x/regress/isnan.C create mode 100644 gcc/testsuite/g++.dg/cpp0x/regress/no-elide1.C create mode 100644 gcc/testsuite/g++.dg/cpp0x/regress/non-const1.C create mode 100644 gcc/testsuite/g++.dg/cpp0x/regress/parse-ambig5.C create mode 100644 gcc/testsuite/g++.dg/cpp0x/regress/ptrmem1.C create mode 100644 gcc/testsuite/g++.dg/cpp0x/regress/regress1.C create mode 100644 gcc/testsuite/g++.dg/cpp0x/regress/regress2.C create mode 100644 gcc/testsuite/g++.dg/cpp0x/regress/regress3.C create mode 100644 gcc/testsuite/g++.dg/cpp0x/regress/regress5.C create mode 100644 gcc/testsuite/g++.dg/cpp0x/regress/template-const1.C create mode 100644 gcc/testsuite/g++.dg/cpp0x/regress/template-const2.C create mode 100644 gcc/testsuite/g++.dg/cpp0x/regress/template-function1.C create mode 100644 gcc/testsuite/g++.dg/cpp0x/regress/value-dep1.C (limited to 'gcc/testsuite/g++.dg/cpp0x/regress') diff --git a/gcc/testsuite/g++.dg/cpp0x/regress/49290.C b/gcc/testsuite/g++.dg/cpp0x/regress/49290.C new file mode 100644 index 000000000..71e46c579 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/regress/49290.C @@ -0,0 +1,12 @@ +typedef unsigned T; +struct S +{ + T foo (void); + static unsigned s1[16]; +}; +T +S::foo () +{ + T u = *(T *) (s1 + 10); + return u; +} diff --git a/gcc/testsuite/g++.dg/cpp0x/regress/README b/gcc/testsuite/g++.dg/cpp0x/regress/README new file mode 100644 index 000000000..5c3402e74 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/regress/README @@ -0,0 +1,3 @@ +This directory contains tests that were passing in C++98 mode but failing +in C++0x mode; it should be replaced by an improvement to the test harness +to run all tests in both modes. diff --git a/gcc/testsuite/g++.dg/cpp0x/regress/abi-empty7.C b/gcc/testsuite/g++.dg/cpp0x/regress/abi-empty7.C new file mode 100644 index 000000000..adc71278d --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/regress/abi-empty7.C @@ -0,0 +1,20 @@ +// Copy of abi/empty7.C. +// { dg-do run { target i?86-*-* x86_64-*-* } } +// { dg-require-effective-target ilp32 } +// { dg-options "-fabi-version=0 -std=c++0x" } + +struct S1 {}; +struct S2 { virtual void f () {} S1 s1[4]; }; +struct S3 : virtual public S2 {}; +struct S4 : virtual public S2 { int i; }; +struct S5 : public S3, virtual public S4 {}; +struct S6 { S5 s5; }; +struct S7 { S1 s1[5]; }; +struct S8 : public S1, public S6, virtual public S7 { }; + +S8 s8; + +int main () { + if ((char *)(S7 *)&s8 - (char *)&s8 != 24) + return 1; +} diff --git a/gcc/testsuite/g++.dg/cpp0x/regress/array1.C b/gcc/testsuite/g++.dg/cpp0x/regress/array1.C new file mode 100644 index 000000000..629ab4103 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/regress/array1.C @@ -0,0 +1,16 @@ +// PR c++/47808 +// { dg-options -std=c++0x } + +template +inline T abs (T const & x) { return x; } + +template +void f (T) +{ + typedef int ai[(abs(0.1) > 0) ? 1 : -1]; +} + +int main() +{ + f(1); +} diff --git a/gcc/testsuite/g++.dg/cpp0x/regress/bitfield-err1.C b/gcc/testsuite/g++.dg/cpp0x/regress/bitfield-err1.C new file mode 100644 index 000000000..a2e9d47b5 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/regress/bitfield-err1.C @@ -0,0 +1,9 @@ +// PR c++/46282 +// { dg-options -std=c++0x } + +template +class A +{ + A : i() {} // { dg-message "" } + int i; +}; diff --git a/gcc/testsuite/g++.dg/cpp0x/regress/call1.C b/gcc/testsuite/g++.dg/cpp0x/regress/call1.C new file mode 100644 index 000000000..833318b05 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/regress/call1.C @@ -0,0 +1,13 @@ +// PR c++/48500 +// { dg-options -std=c++0x } + +struct linked_ptr { +}; +template linked_ptr make_linked_ptr(T* ptr); +struct Concrete; +struct NewedClass { + NewedClass(const Concrete& req){} +}; +template void AddObjToChange(const ArgT& req) { + linked_ptr p = make_linked_ptr(new NewedClass(req)); +} diff --git a/gcc/testsuite/g++.dg/cpp0x/regress/condition1.C b/gcc/testsuite/g++.dg/cpp0x/regress/condition1.C new file mode 100644 index 000000000..0346764f7 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/regress/condition1.C @@ -0,0 +1,80 @@ +// PR c++/47950 +// { dg-options -std=c++0x } + +template struct empty +{ + // allow success case to build (not relevant to bug) + operator bool() { return true; } +}; + +template struct from_int +{ + from_int(int) {} + + // allow success case to build (not relevant to bug) + operator bool() { return true; } +}; + +template +from_int via_function(T v) +{ + return from_int(v); +} + +template +void f() +{ + // ********* this section compiles *********** + + // these plain initializers work fine + from_int a = 7; + from_int b = from_int(7); + empty c = empty(); + from_int ta = 7; + from_int tb = from_int(7); + empty tc = empty(); + + // these dependent condition decls work fine + if (empty x = empty()) + ; + if (from_int x = 7) + ; + if (from_int x = from_int(7)) + ; + if (from_int x = via_function(T())) + ; + + // this non-dependent condition decl using conversion works fine + if (from_int x = 7) + ; + + // these non-dependent condition decls using conversion or braced- + // initialization work fine (in c++0x mode only course) + #if __GXX_EXPERIMENTAL_CXX0X__ + if (empty x {}) + ; + if (from_int x {7}) + ; + #endif + + // ********** this section fails in C++0x *********** + + // the following non-dependent condition decls cause an assertion + // failure in + // + // tsubst_copy_and_build, at cp/pt.c:13370 + // + // in C++0x mode + // + if (empty x = empty()) + ; + if (from_int x = from_int(7)) + ; + if (from_int x = via_function(7)) + ; +} + +int main() +{ + f(); +} diff --git a/gcc/testsuite/g++.dg/cpp0x/regress/debug-debug7.C b/gcc/testsuite/g++.dg/cpp0x/regress/debug-debug7.C new file mode 100644 index 000000000..ea8f1eb2e --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/regress/debug-debug7.C @@ -0,0 +1,19 @@ +// { dg-do compile } +// { dg-options -std=c++0x } + +void f (int); + +int +main() { + + int a = 4; + int b = 5; // { dg-message "not const" } + int (*x)[b] = new int[a][b]; // { dg-error "not usable" } + + x[2][1] = 7; + + for (int i = 0; i < a; ++i) + for (int j = 0; j < b; ++j) + f (x[i][j]); + delete [] x; +} diff --git a/gcc/testsuite/g++.dg/cpp0x/regress/enum1.C b/gcc/testsuite/g++.dg/cpp0x/regress/enum1.C new file mode 100644 index 000000000..6e29f9ea9 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/regress/enum1.C @@ -0,0 +1,8 @@ +// PR c++/47482 +// { dg-options -std=c++0x } + +template +struct K +{ + enum { A = sizeof"A", B = +A }; +}; diff --git a/gcc/testsuite/g++.dg/cpp0x/regress/error-recovery1.C b/gcc/testsuite/g++.dg/cpp0x/regress/error-recovery1.C new file mode 100644 index 000000000..2094d3e3e --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/regress/error-recovery1.C @@ -0,0 +1,9 @@ +// PR c++/48212 +// { dg-options -std=c++0x } + +template < bool > void +foo () +{ + const bool b =; // { dg-error "" } + foo < b > (); // { dg-error "constant expression" } +}; diff --git a/gcc/testsuite/g++.dg/cpp0x/regress/ext-cond1.C b/gcc/testsuite/g++.dg/cpp0x/regress/ext-cond1.C new file mode 100644 index 000000000..dc9814ebd --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/regress/ext-cond1.C @@ -0,0 +1,4 @@ +// PR c++/12515 +// { dg-do compile } +// { dg-options "-std=gnu++0x" } +template void foo() { 0 ?: 0; } diff --git a/gcc/testsuite/g++.dg/cpp0x/regress/ext-label10.C b/gcc/testsuite/g++.dg/cpp0x/regress/ext-label10.C new file mode 100644 index 000000000..652d94af0 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/regress/ext-label10.C @@ -0,0 +1,17 @@ +// PR c++/33836 +// { dg-do compile } +// { dg-options "-std=gnu++0x" } + +template struct A +{ + enum { M = && N }; // { dg-error "referenced outside|cannot appear in|not an integer constant" } +}; + +A<0> a; + +void foo () +{ + __label__ P; + enum { O = && P }; // { dg-error "cannot appear in|not an integer constant" } + P:; +} diff --git a/gcc/testsuite/g++.dg/cpp0x/regress/isnan.C b/gcc/testsuite/g++.dg/cpp0x/regress/isnan.C new file mode 100644 index 000000000..40d07e5de --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/regress/isnan.C @@ -0,0 +1,9 @@ +// PR c++/48369 +// { dg-options -std=gnu++0x } + +extern "C" int isnan (double); + +void f(double d) +{ + bool b = isnan(d); +} diff --git a/gcc/testsuite/g++.dg/cpp0x/regress/no-elide1.C b/gcc/testsuite/g++.dg/cpp0x/regress/no-elide1.C new file mode 100644 index 000000000..50df95016 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/regress/no-elide1.C @@ -0,0 +1,14 @@ +// PR c++/47503 +// { dg-options "-std=c++0x -fno-elide-constructors" } + +struct A +{ + int i; + A (); +}; + +struct B +{ + A a; + B (A &aa) : a (aa) { } +}; diff --git a/gcc/testsuite/g++.dg/cpp0x/regress/non-const1.C b/gcc/testsuite/g++.dg/cpp0x/regress/non-const1.C new file mode 100644 index 000000000..7fc66a7ae --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/regress/non-const1.C @@ -0,0 +1,9 @@ +// PR c++/48015 +// { dg-options -std=c++0x } + +template T f(T); +template void g() +{ + int const c = f (1); + int i = c - 0; +} diff --git a/gcc/testsuite/g++.dg/cpp0x/regress/parse-ambig5.C b/gcc/testsuite/g++.dg/cpp0x/regress/parse-ambig5.C new file mode 100644 index 000000000..9be2f9258 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/regress/parse-ambig5.C @@ -0,0 +1,8 @@ +// PR c++/41786 +// { dg-options -std=c++0x } + +struct A { A(int, char const*); }; +int main() { + int i = 0, *b = &i; + A a(int(b[i]), "hello"); +} diff --git a/gcc/testsuite/g++.dg/cpp0x/regress/ptrmem1.C b/gcc/testsuite/g++.dg/cpp0x/regress/ptrmem1.C new file mode 100644 index 000000000..873000b9c --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/regress/ptrmem1.C @@ -0,0 +1,9 @@ +// PR c++/49298 +// { dg-options -std=c++0x } + +template struct B { }; +template struct A +{ + int i; + B b; +}; diff --git a/gcc/testsuite/g++.dg/cpp0x/regress/regress1.C b/gcc/testsuite/g++.dg/cpp0x/regress/regress1.C new file mode 100644 index 000000000..a6fe3999c --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/regress/regress1.C @@ -0,0 +1,10 @@ +// PR c++/46903 +// This isn't C++0x code, but it was breaking in C++0x mode. +// { dg-options -std=c++0x } + +struct A {}; +struct B { + void *(*a)(); +}; +template void *CreateA() {} +B b = {CreateA}; diff --git a/gcc/testsuite/g++.dg/cpp0x/regress/regress2.C b/gcc/testsuite/g++.dg/cpp0x/regress/regress2.C new file mode 100644 index 000000000..470ee1c4c --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/regress/regress2.C @@ -0,0 +1,13 @@ +// PR c++/46552 +// { dg-options -std=c++0x } + +struct S +{ + int x; +}; + +template < typename > +void f( void ) +{ + &S::x; +} diff --git a/gcc/testsuite/g++.dg/cpp0x/regress/regress3.C b/gcc/testsuite/g++.dg/cpp0x/regress/regress3.C new file mode 100644 index 000000000..ffbb97f6b --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/regress/regress3.C @@ -0,0 +1,13 @@ +// PR c++/47511 +// { dg-options -std=c++0x } + +namespace N { + template bool g( T ) { + return true; + } + struct A { }; +} +template void f(const T&) { + N::A x; + g(x) ; +} diff --git a/gcc/testsuite/g++.dg/cpp0x/regress/regress5.C b/gcc/testsuite/g++.dg/cpp0x/regress/regress5.C new file mode 100644 index 000000000..b1935912d --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/regress/regress5.C @@ -0,0 +1,16 @@ +// { dg-options -std=c++0x } + +struct A +{ + int i; + A(int); +}; + +struct B +{ + virtual void f(); + A ar[3]; +}; + +extern B b; +B b2(b); diff --git a/gcc/testsuite/g++.dg/cpp0x/regress/template-const1.C b/gcc/testsuite/g++.dg/cpp0x/regress/template-const1.C new file mode 100644 index 000000000..32db1f831 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/regress/template-const1.C @@ -0,0 +1,9 @@ +// PR c++/47897 +// { dg-options -std=c++0x } + +template < typename T, T N > +struct S +{ + static const T value = N; + typedef S< T, value + 1 > next; +}; diff --git a/gcc/testsuite/g++.dg/cpp0x/regress/template-const2.C b/gcc/testsuite/g++.dg/cpp0x/regress/template-const2.C new file mode 100644 index 000000000..25354b3a5 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/regress/template-const2.C @@ -0,0 +1,14 @@ +// PR c++/48707 +// { dg-options -std=c++0x } + +struct A { + static int a(); +}; + +template +struct B: A { + static int const b; +}; + +template +int const B::b=B::a(); diff --git a/gcc/testsuite/g++.dg/cpp0x/regress/template-function1.C b/gcc/testsuite/g++.dg/cpp0x/regress/template-function1.C new file mode 100644 index 000000000..66cbd4ba1 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/regress/template-function1.C @@ -0,0 +1,29 @@ +// PR c++/38647 +// { dg-do compile } +// { dg-options "-std=c++0x" } +// { dg-prune-output "note" } + +template struct A {}; +const char func[] = "abc"; +template struct A {}; // { dg-error "cannot appear|is invalid|not a valid|constant expression" } + +char a1[1]; +A a; + +template struct B {}; +template struct B<__FUNCTION__, N> {}; // { dg-error "cannot appear|is invalid|is not a valid|constant expression" } + +char b1[1]; +B b; + +template struct C {}; +template struct C<__PRETTY_FUNCTION__, N> {}; // { dg-error "cannot appear|is invalid|is not a valid|constant expression" } + +char c1[1]; +C c; + +template struct D {}; +template struct D<__func__, N> {}; // { dg-error "cannot appear|is invalid|is not a valid|function scope|constant expression" } + +char d1[1]; +D d; diff --git a/gcc/testsuite/g++.dg/cpp0x/regress/value-dep1.C b/gcc/testsuite/g++.dg/cpp0x/regress/value-dep1.C new file mode 100644 index 000000000..112389d4a --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/regress/value-dep1.C @@ -0,0 +1,7 @@ +// PR c++/48265 +// { dg-options -std=c++0x } + +template < int > struct S +{ + S () { const int i = i; i; }; +}; -- cgit v1.2.3