aboutsummaryrefslogtreecommitdiffstats
path: root/gcc-4.6/gcc/testsuite/g++.dg
diff options
context:
space:
mode:
authorJing Yu <jingyu@google.com>2012-02-15 15:40:16 -0800
committerJing Yu <jingyu@google.com>2012-02-15 15:40:16 -0800
commit3f73d6ef90458b45bbbb33ef4c2b174d4662a22d (patch)
tree1b5f0d96c51b51168b3713058a1b62e92f1136eb /gcc-4.6/gcc/testsuite/g++.dg
parentd7030123e04baab5dbff9c9ee04c0de99bd9a774 (diff)
downloadtoolchain_gcc-3f73d6ef90458b45bbbb33ef4c2b174d4662a22d.tar.gz
toolchain_gcc-3f73d6ef90458b45bbbb33ef4c2b174d4662a22d.tar.bz2
toolchain_gcc-3f73d6ef90458b45bbbb33ef4c2b174d4662a22d.zip
Sync down FSF r184235@google/gcc-4_6_2-mobile branch
1) Get mostly new patches from FSF gcc-4.6 branch 2) Fix PR52129 3) Insert GNU-stack note for all ARM targets Change-Id: I2b9926981210e517e4021242908074319a91d6bd
Diffstat (limited to 'gcc-4.6/gcc/testsuite/g++.dg')
-rw-r--r--gcc-4.6/gcc/testsuite/g++.dg/cpp0x/auto31.C12
-rw-r--r--gcc-4.6/gcc/testsuite/g++.dg/cpp0x/constexpr-48089.C26
-rw-r--r--gcc-4.6/gcc/testsuite/g++.dg/cpp0x/constexpr-98.C2
-rw-r--r--gcc-4.6/gcc/testsuite/g++.dg/cpp0x/constexpr-array4.C14
-rw-r--r--gcc-4.6/gcc/testsuite/g++.dg/cpp0x/constexpr-initlist5.C15
-rw-r--r--gcc-4.6/gcc/testsuite/g++.dg/cpp0x/constexpr-non-const-arg3.C23
-rw-r--r--gcc-4.6/gcc/testsuite/g++.dg/cpp0x/constexpr-object1.C2
-rw-r--r--gcc-4.6/gcc/testsuite/g++.dg/cpp0x/constexpr-static8.C7
-rw-r--r--gcc-4.6/gcc/testsuite/g++.dg/cpp0x/constexpr-static8_nonpedantic.C7
-rw-r--r--gcc-4.6/gcc/testsuite/g++.dg/cpp0x/constexpr-typedef1.C11
-rw-r--r--gcc-4.6/gcc/testsuite/g++.dg/cpp0x/constexpr-value3.C10
-rw-r--r--gcc-4.6/gcc/testsuite/g++.dg/cpp0x/decltype31.C13
-rw-r--r--gcc-4.6/gcc/testsuite/g++.dg/cpp0x/decltype35.C15
-rw-r--r--gcc-4.6/gcc/testsuite/g++.dg/cpp0x/decltype36.C21
-rw-r--r--gcc-4.6/gcc/testsuite/g++.dg/cpp0x/defaulted2.C3
-rw-r--r--gcc-4.6/gcc/testsuite/g++.dg/cpp0x/defaulted32.C21
-rw-r--r--gcc-4.6/gcc/testsuite/g++.dg/cpp0x/initlist-49216.C6
-rw-r--r--gcc-4.6/gcc/testsuite/g++.dg/cpp0x/initlist17.C2
-rw-r--r--gcc-4.6/gcc/testsuite/g++.dg/cpp0x/initlist36.C2
-rw-r--r--gcc-4.6/gcc/testsuite/g++.dg/cpp0x/initlist5.C2
-rw-r--r--gcc-4.6/gcc/testsuite/g++.dg/cpp0x/initlist57.C8
-rw-r--r--gcc-4.6/gcc/testsuite/g++.dg/cpp0x/initlist7.C2
-rw-r--r--gcc-4.6/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-50220.C9
-rw-r--r--gcc-4.6/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-defarg2.C7
-rw-r--r--gcc-4.6/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-eh2.C3
-rw-r--r--gcc-4.6/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-qualified.C17
-rw-r--r--gcc-4.6/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-use2.C11
-rw-r--r--gcc-4.6/gcc/testsuite/g++.dg/cpp0x/noexcept11.C4
-rw-r--r--gcc-4.6/gcc/testsuite/g++.dg/cpp0x/pr42844-2.C4
-rw-r--r--gcc-4.6/gcc/testsuite/g++.dg/cpp0x/pr50491.C17
-rw-r--r--gcc-4.6/gcc/testsuite/g++.dg/cpp0x/pr50901.C9
-rw-r--r--gcc-4.6/gcc/testsuite/g++.dg/cpp0x/pr51150.C20
-rw-r--r--gcc-4.6/gcc/testsuite/g++.dg/cpp0x/rv-cast3.C18
-rw-r--r--gcc-4.6/gcc/testsuite/g++.dg/cpp0x/rv-cast4.C13
-rw-r--r--gcc-4.6/gcc/testsuite/g++.dg/cpp0x/sfinae27.C20
-rw-r--r--gcc-4.6/gcc/testsuite/g++.dg/cpp0x/union5.C23
-rw-r--r--gcc-4.6/gcc/testsuite/g++.dg/cpp0x/variadic-unresolved.C12
-rw-r--r--gcc-4.6/gcc/testsuite/g++.dg/cpp0x/variadic103.C2
-rw-r--r--gcc-4.6/gcc/testsuite/g++.dg/cpp0x/variadic114.C27
-rw-r--r--gcc-4.6/gcc/testsuite/g++.dg/cpp0x/variadic115.C19
-rw-r--r--gcc-4.6/gcc/testsuite/g++.dg/cpp0x/variadic116.C32
-rw-r--r--gcc-4.6/gcc/testsuite/g++.dg/debug/dwarf2/icf.C8
-rw-r--r--gcc-4.6/gcc/testsuite/g++.dg/dfp/44473-1.C122
-rw-r--r--gcc-4.6/gcc/testsuite/g++.dg/dfp/44473-2.C25
-rw-r--r--gcc-4.6/gcc/testsuite/g++.dg/dfp/base.C23
-rw-r--r--gcc-4.6/gcc/testsuite/g++.dg/dfp/mangle-1.C40
-rw-r--r--gcc-4.6/gcc/testsuite/g++.dg/dfp/mangle-2.C28
-rw-r--r--gcc-4.6/gcc/testsuite/g++.dg/dfp/mangle-3.C28
-rw-r--r--gcc-4.6/gcc/testsuite/g++.dg/dfp/mangle-4.C35
-rw-r--r--gcc-4.6/gcc/testsuite/g++.dg/dfp/mangle-5.C29
-rw-r--r--gcc-4.6/gcc/testsuite/g++.dg/dfp/nofields.C19
-rw-r--r--gcc-4.6/gcc/testsuite/g++.dg/eh/defarg1.C10
-rw-r--r--gcc-4.6/gcc/testsuite/g++.dg/ext/altivec-17.C2
-rw-r--r--gcc-4.6/gcc/testsuite/g++.dg/ext/pretty3.C2
-rw-r--r--gcc-4.6/gcc/testsuite/g++.dg/fstack-protector-strong.C35
-rw-r--r--gcc-4.6/gcc/testsuite/g++.dg/gcov/gcov-2.C2
-rw-r--r--gcc-4.6/gcc/testsuite/g++.dg/init/array28.C7
-rw-r--r--gcc-4.6/gcc/testsuite/g++.dg/init/const8.C11
-rw-r--r--gcc-4.6/gcc/testsuite/g++.dg/init/pr42844.C14
-rw-r--r--gcc-4.6/gcc/testsuite/g++.dg/init/ref20.C8
-rw-r--r--gcc-4.6/gcc/testsuite/g++.dg/init/value10.C27
-rw-r--r--gcc-4.6/gcc/testsuite/g++.dg/init/value9.C32
-rw-r--r--gcc-4.6/gcc/testsuite/g++.dg/init/vbase1.C39
-rw-r--r--gcc-4.6/gcc/testsuite/g++.dg/mversn10.C4
-rw-r--r--gcc-4.6/gcc/testsuite/g++.dg/mversn10a.C4
-rw-r--r--gcc-4.6/gcc/testsuite/g++.dg/mversn16.C2
-rw-r--r--gcc-4.6/gcc/testsuite/g++.dg/mversn8.C8
-rw-r--r--gcc-4.6/gcc/testsuite/g++.dg/other/enum2.C3
-rw-r--r--gcc-4.6/gcc/testsuite/g++.dg/other/offsetof7.C17
-rw-r--r--gcc-4.6/gcc/testsuite/g++.dg/other/pr50464.C170
-rw-r--r--gcc-4.6/gcc/testsuite/g++.dg/other/sized-delete-1.C14
-rw-r--r--gcc-4.6/gcc/testsuite/g++.dg/pr44486.C2
-rw-r--r--gcc-4.6/gcc/testsuite/g++.dg/pr48660.C22
-rw-r--r--gcc-4.6/gcc/testsuite/g++.dg/pr51151.C12
-rw-r--r--gcc-4.6/gcc/testsuite/g++.dg/template/partial12.C27
-rw-r--r--gcc-4.6/gcc/testsuite/g++.dg/thread-ann/thread_annot_lock-79.C24
-rw-r--r--gcc-4.6/gcc/testsuite/g++.dg/thread-ann/thread_annot_lock-81.C17
-rw-r--r--gcc-4.6/gcc/testsuite/g++.dg/thread-ann/thread_annot_lock-82.C48
-rw-r--r--gcc-4.6/gcc/testsuite/g++.dg/thread-ann/thread_annot_lock-83.C55
-rw-r--r--gcc-4.6/gcc/testsuite/g++.dg/thread-ann/thread_annot_lock-84.C29
-rw-r--r--gcc-4.6/gcc/testsuite/g++.dg/thread-ann/thread_annot_lock-85.C22
-rw-r--r--gcc-4.6/gcc/testsuite/g++.dg/torture/pr49309.C15
-rw-r--r--gcc-4.6/gcc/testsuite/g++.dg/torture/pr49628.C37
-rw-r--r--gcc-4.6/gcc/testsuite/g++.dg/torture/pr49720.C8
-rw-r--r--gcc-4.6/gcc/testsuite/g++.dg/torture/pr50189.C121
-rw-r--r--gcc-4.6/gcc/testsuite/g++.dg/tree-prof/callgraph-profiles.C30
-rw-r--r--gcc-4.6/gcc/testsuite/g++.dg/tree-prof/mversn15.C2
-rw-r--r--gcc-4.6/gcc/testsuite/g++.dg/tree-ssa/dom-invalid.C2
-rw-r--r--gcc-4.6/gcc/testsuite/g++.dg/tree-ssa/pr49911.C41
-rw-r--r--gcc-4.6/gcc/testsuite/g++.dg/tree-ssa/pr50622.C30
-rw-r--r--gcc-4.6/gcc/testsuite/g++.dg/vect/pr51485.cc14
-rw-r--r--gcc-4.6/gcc/testsuite/g++.dg/vect/slp-pr50413.cc165
-rw-r--r--gcc-4.6/gcc/testsuite/g++.dg/vect/vect.exp13
-rw-r--r--gcc-4.6/gcc/testsuite/g++.dg/warn/Wuninitializable-member.C2
-rw-r--r--gcc-4.6/gcc/testsuite/g++.dg/warn/pr35711.C2
95 files changed, 1959 insertions, 40 deletions
diff --git a/gcc-4.6/gcc/testsuite/g++.dg/cpp0x/auto31.C b/gcc-4.6/gcc/testsuite/g++.dg/cpp0x/auto31.C
new file mode 100644
index 000000000..2c74b72df
--- /dev/null
+++ b/gcc-4.6/gcc/testsuite/g++.dg/cpp0x/auto31.C
@@ -0,0 +1,12 @@
+// PR c++/51416
+// { dg-options "-std=c++0x" }
+
+template<typename T, typename... U> void foo(T, U... u)
+{
+ auto foo(u...); // { dg-error "auto" }
+}
+
+void bar()
+{
+ foo(0);
+}
diff --git a/gcc-4.6/gcc/testsuite/g++.dg/cpp0x/constexpr-48089.C b/gcc-4.6/gcc/testsuite/g++.dg/cpp0x/constexpr-48089.C
index fc69cfef6..5124f7c7f 100644
--- a/gcc-4.6/gcc/testsuite/g++.dg/cpp0x/constexpr-48089.C
+++ b/gcc-4.6/gcc/testsuite/g++.dg/cpp0x/constexpr-48089.C
@@ -22,3 +22,29 @@ struct R {
};
constexpr R r; // { dg-bogus "" "" { xfail *-*-* } }
+
+// Ill-formed (no diagnostic required)
+struct T {
+ int i;
+ constexpr int f() { return i; }
+ constexpr T(): i(0) { }
+ constexpr T(const T& t) : i(f()) { } // { dg-message "" }
+};
+
+constexpr T t1;
+// Ill-formed (diagnostic required)
+constexpr T t2(t1); // { dg-error "" }
+
+// Well-formed
+struct U {
+ int i, j;
+ constexpr int f(int _i) { return _i; }
+ constexpr int g() { return i; }
+ constexpr U(): i(0), j(0) { }
+ constexpr U(const U& t) : i(f(t.i)),j(0) { } // { dg-bogus "" "" { xfail *-*-* } }
+ constexpr U(int _i) : i(_i),j(g()) { } // { dg-bogus "" "" { xfail *-*-* } }
+};
+
+constexpr U u1;
+constexpr U u2(u1); // { dg-bogus "" "" { xfail *-*-* } }
+constexpr U u3(1); // { dg-bogus "" "" { xfail *-*-* } }
diff --git a/gcc-4.6/gcc/testsuite/g++.dg/cpp0x/constexpr-98.C b/gcc-4.6/gcc/testsuite/g++.dg/cpp0x/constexpr-98.C
index 4ae3944c3..1a0189b56 100644
--- a/gcc-4.6/gcc/testsuite/g++.dg/cpp0x/constexpr-98.C
+++ b/gcc-4.6/gcc/testsuite/g++.dg/cpp0x/constexpr-98.C
@@ -1,4 +1,4 @@
// { dg-options "-std=c++98" }
-constexpr int i = 42; // { dg-message "std=c\\+\\+0x" }
+constexpr int i = 42; // { dg-message "std=c\\+\\+11" }
// { dg-error "constexpr" "" { target *-*-* } 3 }
diff --git a/gcc-4.6/gcc/testsuite/g++.dg/cpp0x/constexpr-array4.C b/gcc-4.6/gcc/testsuite/g++.dg/cpp0x/constexpr-array4.C
new file mode 100644
index 000000000..9aeb75d6b
--- /dev/null
+++ b/gcc-4.6/gcc/testsuite/g++.dg/cpp0x/constexpr-array4.C
@@ -0,0 +1,14 @@
+// PR c++/49924
+// { dg-options -std=c++0x }
+
+struct A { constexpr A() { } };
+
+struct B {
+ A array[1]; //non-static member array of a literal type w constexpr ctor
+ constexpr B() : array{} { } // here is the problem
+};
+
+int main()
+{
+ constexpr B b{}; // won't compile
+}
diff --git a/gcc-4.6/gcc/testsuite/g++.dg/cpp0x/constexpr-initlist5.C b/gcc-4.6/gcc/testsuite/g++.dg/cpp0x/constexpr-initlist5.C
new file mode 100644
index 000000000..97f039998
--- /dev/null
+++ b/gcc-4.6/gcc/testsuite/g++.dg/cpp0x/constexpr-initlist5.C
@@ -0,0 +1,15 @@
+// PR c++/50024
+// { dg-options -std=c++0x }
+
+template< class T >
+struct Container
+{
+ Container(){
+ int* ptr = new int{};
+ }
+};
+
+int main() {
+ Container< int > c;
+}
+
diff --git a/gcc-4.6/gcc/testsuite/g++.dg/cpp0x/constexpr-non-const-arg3.C b/gcc-4.6/gcc/testsuite/g++.dg/cpp0x/constexpr-non-const-arg3.C
new file mode 100644
index 000000000..581be6d15
--- /dev/null
+++ b/gcc-4.6/gcc/testsuite/g++.dg/cpp0x/constexpr-non-const-arg3.C
@@ -0,0 +1,23 @@
+// PR c++/49988
+// { dg-options -std=c++0x }
+// { dg-do run }
+
+template<int ... I> struct X { };
+
+struct A {
+ char data[3];
+ template<int ... I>
+ constexpr
+ A(const char (&s)[3], X<I...> x) : data{ s[I]...} { }
+};
+struct B {
+ A a;
+ B(const char (&s)[3]) : a{s,X<0,1,2>{}} { }
+};
+
+int main()
+{
+ B b{"12"};
+ if (b.a.data[0] != '1')
+ return 1;
+}
diff --git a/gcc-4.6/gcc/testsuite/g++.dg/cpp0x/constexpr-object1.C b/gcc-4.6/gcc/testsuite/g++.dg/cpp0x/constexpr-object1.C
index 3af85095f..4ff398bf1 100644
--- a/gcc-4.6/gcc/testsuite/g++.dg/cpp0x/constexpr-object1.C
+++ b/gcc-4.6/gcc/testsuite/g++.dg/cpp0x/constexpr-object1.C
@@ -7,7 +7,7 @@
// p 1 constexpr specifier
// objects, static const data
-struct A1 { }; // { dg-message "no user-provided default constructor" }
+struct A1 { int i; }; // { dg-message "no user-provided default constructor" }
constexpr int i1 = 1024;
constexpr A1 a1 = A1();
diff --git a/gcc-4.6/gcc/testsuite/g++.dg/cpp0x/constexpr-static8.C b/gcc-4.6/gcc/testsuite/g++.dg/cpp0x/constexpr-static8.C
new file mode 100644
index 000000000..35c3f25c5
--- /dev/null
+++ b/gcc-4.6/gcc/testsuite/g++.dg/cpp0x/constexpr-static8.C
@@ -0,0 +1,7 @@
+// PR c++/50258
+// { dg-options "-std=c++0x -pedantic" }
+
+struct Foo {
+ static const double d = 3.14; // { dg-warning "constexpr" }
+};
+const double Foo::d;
diff --git a/gcc-4.6/gcc/testsuite/g++.dg/cpp0x/constexpr-static8_nonpedantic.C b/gcc-4.6/gcc/testsuite/g++.dg/cpp0x/constexpr-static8_nonpedantic.C
new file mode 100644
index 000000000..28d34a1d7
--- /dev/null
+++ b/gcc-4.6/gcc/testsuite/g++.dg/cpp0x/constexpr-static8_nonpedantic.C
@@ -0,0 +1,7 @@
+// PR c++/50258
+// { dg-options "-std=c++0x" }
+
+struct Foo {
+ static const double d = 3.14; // no warning
+};
+const double Foo::d;
diff --git a/gcc-4.6/gcc/testsuite/g++.dg/cpp0x/constexpr-typedef1.C b/gcc-4.6/gcc/testsuite/g++.dg/cpp0x/constexpr-typedef1.C
new file mode 100644
index 000000000..2719e3aea
--- /dev/null
+++ b/gcc-4.6/gcc/testsuite/g++.dg/cpp0x/constexpr-typedef1.C
@@ -0,0 +1,11 @@
+// PR c++/50508
+// { dg-options -std=c++0x }
+
+template <class T>
+ struct integral_constant {
+ typedef T value_type;
+ constexpr operator value_type() { return true; }
+ };
+
+static constexpr bool value = integral_constant<bool>()
+ && true;
diff --git a/gcc-4.6/gcc/testsuite/g++.dg/cpp0x/constexpr-value3.C b/gcc-4.6/gcc/testsuite/g++.dg/cpp0x/constexpr-value3.C
new file mode 100644
index 000000000..38d89936e
--- /dev/null
+++ b/gcc-4.6/gcc/testsuite/g++.dg/cpp0x/constexpr-value3.C
@@ -0,0 +1,10 @@
+// PR c++/50234
+// { dg-options -std=c++0x }
+
+#define SA(X) static_assert((X),#X)
+
+struct A { int i; };
+
+constexpr int f(A a) { return a.i; }
+
+SA(f({}) == 0);
diff --git a/gcc-4.6/gcc/testsuite/g++.dg/cpp0x/decltype31.C b/gcc-4.6/gcc/testsuite/g++.dg/cpp0x/decltype31.C
new file mode 100644
index 000000000..b9817eb9e
--- /dev/null
+++ b/gcc-4.6/gcc/testsuite/g++.dg/cpp0x/decltype31.C
@@ -0,0 +1,13 @@
+// PR c++/49921
+// { dg-options -std=c++0x }
+
+struct Local
+{
+ void f();
+};
+
+Local *l;
+void (Local::*ptr)();
+decltype((l->*ptr)) i; // { dg-error "member function" }
+
+// { dg-prune-output "invalid type in declaration" }
diff --git a/gcc-4.6/gcc/testsuite/g++.dg/cpp0x/decltype35.C b/gcc-4.6/gcc/testsuite/g++.dg/cpp0x/decltype35.C
new file mode 100644
index 000000000..d1fd47638
--- /dev/null
+++ b/gcc-4.6/gcc/testsuite/g++.dg/cpp0x/decltype35.C
@@ -0,0 +1,15 @@
+// PR c++/50870
+// { dg-options -std=c++0x }
+
+template <class V>
+ struct impl
+ {
+ template <class T> static T create();
+ };
+
+template <class T, class U, class V, class
+ = decltype(impl<V>::template create<T>()
+ -> impl<V>::template create<U>())>
+struct tester { };
+
+tester<impl<float>*, int, float> ti;
diff --git a/gcc-4.6/gcc/testsuite/g++.dg/cpp0x/decltype36.C b/gcc-4.6/gcc/testsuite/g++.dg/cpp0x/decltype36.C
new file mode 100644
index 000000000..f3dfed992
--- /dev/null
+++ b/gcc-4.6/gcc/testsuite/g++.dg/cpp0x/decltype36.C
@@ -0,0 +1,21 @@
+// PR c++/51265
+// { dg-options -std=c++0x }
+
+struct Funny
+{
+ int print(int);
+};
+
+template<typename X>
+void c();
+
+template<typename X, X ff>
+void xx()
+{
+ c<decltype(ff)>();
+}
+
+int main()
+{
+ xx<int(Funny::*)(int), &Funny::print>();
+}
diff --git a/gcc-4.6/gcc/testsuite/g++.dg/cpp0x/defaulted2.C b/gcc-4.6/gcc/testsuite/g++.dg/cpp0x/defaulted2.C
index 1f400f4fa..e3aac8f1a 100644
--- a/gcc-4.6/gcc/testsuite/g++.dg/cpp0x/defaulted2.C
+++ b/gcc-4.6/gcc/testsuite/g++.dg/cpp0x/defaulted2.C
@@ -17,7 +17,8 @@ void g() = delete; // { dg-error "redefinition" }
struct B // { dg-message "user-provided default constructor" }
{
- B() = default; // { dg-message "not user-provided" }
+ int i;
+ B() = default; // { dg-message "not user-provided" }
};
const B b; // { dg-error "uninitialized const" }
diff --git a/gcc-4.6/gcc/testsuite/g++.dg/cpp0x/defaulted32.C b/gcc-4.6/gcc/testsuite/g++.dg/cpp0x/defaulted32.C
new file mode 100644
index 000000000..351cdae11
--- /dev/null
+++ b/gcc-4.6/gcc/testsuite/g++.dg/cpp0x/defaulted32.C
@@ -0,0 +1,21 @@
+// PR c++/50531
+// { dg-options -std=c++0x }
+
+template <typename T>
+class DataFilter
+{
+ public:
+ inline virtual ~DataFilter();
+};
+
+template<typename T>
+inline DataFilter<T>::~DataFilter() = default;
+
+class ARCalculator : public DataFilter<ARCalculator>
+{
+ public:
+ virtual void dataStart(int, int);
+};
+
+void ARCalculator::dataStart(int, int)
+{}
diff --git a/gcc-4.6/gcc/testsuite/g++.dg/cpp0x/initlist-49216.C b/gcc-4.6/gcc/testsuite/g++.dg/cpp0x/initlist-49216.C
new file mode 100644
index 000000000..4bf608229
--- /dev/null
+++ b/gcc-4.6/gcc/testsuite/g++.dg/cpp0x/initlist-49216.C
@@ -0,0 +1,6 @@
+// PR c++/49216
+// { dg-options -std=c++0x }
+
+int main() {
+ new int[1]{};
+}
diff --git a/gcc-4.6/gcc/testsuite/g++.dg/cpp0x/initlist17.C b/gcc-4.6/gcc/testsuite/g++.dg/cpp0x/initlist17.C
index 86371e819..6ea08d150 100644
--- a/gcc-4.6/gcc/testsuite/g++.dg/cpp0x/initlist17.C
+++ b/gcc-4.6/gcc/testsuite/g++.dg/cpp0x/initlist17.C
@@ -1,4 +1,4 @@
-// { dg-options "-std=c++0x" }
+// { dg-options "-std=c++0x -pedantic-errors" }
void f(int i);
diff --git a/gcc-4.6/gcc/testsuite/g++.dg/cpp0x/initlist36.C b/gcc-4.6/gcc/testsuite/g++.dg/cpp0x/initlist36.C
index 94624c977..a703b4590 100644
--- a/gcc-4.6/gcc/testsuite/g++.dg/cpp0x/initlist36.C
+++ b/gcc-4.6/gcc/testsuite/g++.dg/cpp0x/initlist36.C
@@ -1,5 +1,5 @@
// PR c++/44358
-// { dg-options "-std=c++0x" }
+// { dg-options "-std=c++0x -pedantic-errors" }
#include <initializer_list>
diff --git a/gcc-4.6/gcc/testsuite/g++.dg/cpp0x/initlist5.C b/gcc-4.6/gcc/testsuite/g++.dg/cpp0x/initlist5.C
index 32caac382..dbd17ecbb 100644
--- a/gcc-4.6/gcc/testsuite/g++.dg/cpp0x/initlist5.C
+++ b/gcc-4.6/gcc/testsuite/g++.dg/cpp0x/initlist5.C
@@ -1,5 +1,5 @@
// Test for narrowing diagnostics
-// { dg-options "-std=c++0x" }
+// { dg-options "-std=c++0x -pedantic-errors" }
#include <initializer_list>
diff --git a/gcc-4.6/gcc/testsuite/g++.dg/cpp0x/initlist57.C b/gcc-4.6/gcc/testsuite/g++.dg/cpp0x/initlist57.C
new file mode 100644
index 000000000..d945a4689
--- /dev/null
+++ b/gcc-4.6/gcc/testsuite/g++.dg/cpp0x/initlist57.C
@@ -0,0 +1,8 @@
+// PR c++/50054
+// { dg-options -std=c++0x }
+
+void g( const int& (a)[1] ) {} // { dg-error "array of references" }
+
+int main () {
+ g( { 1, 2 } ); // { dg-error "initializer list" }
+}
diff --git a/gcc-4.6/gcc/testsuite/g++.dg/cpp0x/initlist7.C b/gcc-4.6/gcc/testsuite/g++.dg/cpp0x/initlist7.C
index 7913ed7ed..55a037186 100644
--- a/gcc-4.6/gcc/testsuite/g++.dg/cpp0x/initlist7.C
+++ b/gcc-4.6/gcc/testsuite/g++.dg/cpp0x/initlist7.C
@@ -1,5 +1,5 @@
// PR c++/37932
-// { dg-options "-std=c++0x" }
+// { dg-options "-std=c++0x -pedantic-errors" }
typedef enum { AA=1, BB=2 } my_enum;
diff --git a/gcc-4.6/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-50220.C b/gcc-4.6/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-50220.C
new file mode 100644
index 000000000..240143cf6
--- /dev/null
+++ b/gcc-4.6/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-50220.C
@@ -0,0 +1,9 @@
+// PR c++/50220
+// { dg-options -std=c++0x }
+
+template<typename Foo> struct Foobar {};
+
+void foobar(const Foobar<void>& obj)
+{
+ [obj](){}();
+}
diff --git a/gcc-4.6/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-defarg2.C b/gcc-4.6/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-defarg2.C
new file mode 100644
index 000000000..f47c5ba27
--- /dev/null
+++ b/gcc-4.6/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-defarg2.C
@@ -0,0 +1,7 @@
+// PR c++/43886
+// { dg-options -std=c++0x }
+
+void f2() {
+ int i = 1;
+ void g5(int = ([]{ return sizeof i; })());
+}
diff --git a/gcc-4.6/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-eh2.C b/gcc-4.6/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-eh2.C
index 1490a2508..0c94b554f 100644
--- a/gcc-4.6/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-eh2.C
+++ b/gcc-4.6/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-eh2.C
@@ -1,5 +1,6 @@
// PR c++/47263
-// { dg-options -std=c++0x }
+// PR c++/49260
+// { dg-options "-std=c++0x -fno-asynchronous-unwind-tables -fno-dwarf2-cfi-asm" }
// { dg-do run }
#include <exception>
diff --git a/gcc-4.6/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-qualified.C b/gcc-4.6/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-qualified.C
new file mode 100644
index 000000000..ef041c2bb
--- /dev/null
+++ b/gcc-4.6/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-qualified.C
@@ -0,0 +1,17 @@
+// PR c++/50089
+// { dg-options -std=c++0x }
+
+struct TestBase
+{
+ void foo() {}
+};
+
+struct Test : TestBase
+{
+ void foo()
+ {
+ [this]{
+ /*this->*/TestBase::foo(); // ICE without this->
+ }();
+ }
+};
diff --git a/gcc-4.6/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-use2.C b/gcc-4.6/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-use2.C
new file mode 100644
index 000000000..695a0b432
--- /dev/null
+++ b/gcc-4.6/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-use2.C
@@ -0,0 +1,11 @@
+// PR c++/50224
+// { dg-options "-std=c++0x -Wunused-parameter" }
+
+struct T;
+
+void m(T& t) // ERROR here
+{
+ [&]{
+ t; // ``t`` is referenced here
+ };
+}
diff --git a/gcc-4.6/gcc/testsuite/g++.dg/cpp0x/noexcept11.C b/gcc-4.6/gcc/testsuite/g++.dg/cpp0x/noexcept11.C
new file mode 100644
index 000000000..eba2c4080
--- /dev/null
+++ b/gcc-4.6/gcc/testsuite/g++.dg/cpp0x/noexcept11.C
@@ -0,0 +1,4 @@
+// PR c++/50309
+// { dg-options -std=c++0x }
+
+void foo () noexcept () { } // { dg-error "expected" }
diff --git a/gcc-4.6/gcc/testsuite/g++.dg/cpp0x/pr42844-2.C b/gcc-4.6/gcc/testsuite/g++.dg/cpp0x/pr42844-2.C
index 5af4ff217..4425aacf6 100644
--- a/gcc-4.6/gcc/testsuite/g++.dg/cpp0x/pr42844-2.C
+++ b/gcc-4.6/gcc/testsuite/g++.dg/cpp0x/pr42844-2.C
@@ -4,6 +4,7 @@
struct A // { dg-message "user-provided default constructor" }
{
+ int i;
A() = default; // { dg-message "not user-provided" }
};
@@ -14,17 +15,20 @@ struct Base
struct Derived : Base // { dg-message "user-provided default constructor" }
{
+ int i;
Derived() = default; // { dg-message "not user-provided" }
};
struct Derived2 : Base // { dg-message "user-provided default constructor" }
{
+ int i;
Derived2() = default; // { dg-message "not user-provided" }
Derived2( Derived2 const& ) = default;
};
struct Derived3 : Base // { dg-message "user-provided default constructor" }
{
+ int i;
Derived3( Derived3 const& ) = default;
Derived3() = default; // { dg-message "not user-provided" }
};
diff --git a/gcc-4.6/gcc/testsuite/g++.dg/cpp0x/pr50491.C b/gcc-4.6/gcc/testsuite/g++.dg/cpp0x/pr50491.C
new file mode 100644
index 000000000..48e7a1f74
--- /dev/null
+++ b/gcc-4.6/gcc/testsuite/g++.dg/cpp0x/pr50491.C
@@ -0,0 +1,17 @@
+// { dg-options "-std=c++0x" }
+
+struct GrandParent {
+ void *get();
+};
+
+template<class OBJ>
+struct Parent : public GrandParent{
+};
+
+template<typename T>
+struct Child : public Parent<T> {
+ using GrandParent::get;
+ void Foo() {
+ void* ex = get();
+ }
+};
diff --git a/gcc-4.6/gcc/testsuite/g++.dg/cpp0x/pr50901.C b/gcc-4.6/gcc/testsuite/g++.dg/cpp0x/pr50901.C
new file mode 100644
index 000000000..439c15cc1
--- /dev/null
+++ b/gcc-4.6/gcc/testsuite/g++.dg/cpp0x/pr50901.C
@@ -0,0 +1,9 @@
+// { dg-options "-std=c++0x" }
+
+template<class T> int foo(int a)
+{
+ const unsigned b = a < 0 ? -a : a;
+ return 0;
+}
+
+int i = foo<float>(1);
diff --git a/gcc-4.6/gcc/testsuite/g++.dg/cpp0x/pr51150.C b/gcc-4.6/gcc/testsuite/g++.dg/cpp0x/pr51150.C
new file mode 100644
index 000000000..37eb166b4
--- /dev/null
+++ b/gcc-4.6/gcc/testsuite/g++.dg/cpp0x/pr51150.C
@@ -0,0 +1,20 @@
+// PR c++/51150
+// { dg-options "-std=c++0x" }
+
+struct Clock {
+ double Now();
+};
+template <class T> void Foo(Clock* clock) {
+ const int now = clock->Now();
+}
+
+template void Foo<float>(Clock*);
+
+template <class T> void Boo(int val) {
+ const int now1 = (double)(val);
+ const int now2 = const_cast<double>(val); // { dg-error "invalid" }
+ const int now3 = static_cast<double>(val);
+ const int now4 = reinterpret_cast<double>(val); // { dg-error "invalid" }
+}
+
+template void Boo<float>(int);
diff --git a/gcc-4.6/gcc/testsuite/g++.dg/cpp0x/rv-cast3.C b/gcc-4.6/gcc/testsuite/g++.dg/cpp0x/rv-cast3.C
new file mode 100644
index 000000000..e7d5b6d34
--- /dev/null
+++ b/gcc-4.6/gcc/testsuite/g++.dg/cpp0x/rv-cast3.C
@@ -0,0 +1,18 @@
+// PR c++/51406
+// { dg-do run }
+// { dg-options "-std=c++0x" }
+
+extern "C" int printf(const char *,...);
+extern "C" void abort();
+
+struct A { int a; A() : a(1) {} };
+struct B { int b; B() : b(2) {} };
+struct X : A, B {};
+
+int main() {
+ X x;
+ int a=static_cast<A&&>(x).a;
+ int b=static_cast<B&&>(x).b;
+ // printf ("%d %d\n", a, b);
+ if (a!=1 || b!=2) abort();
+}
diff --git a/gcc-4.6/gcc/testsuite/g++.dg/cpp0x/rv-cast4.C b/gcc-4.6/gcc/testsuite/g++.dg/cpp0x/rv-cast4.C
new file mode 100644
index 000000000..8f4a56bf9
--- /dev/null
+++ b/gcc-4.6/gcc/testsuite/g++.dg/cpp0x/rv-cast4.C
@@ -0,0 +1,13 @@
+// PR c++/51161
+// { dg-options "-std=c++0x" }
+
+struct A{};
+struct B : A{};
+struct C : A{};
+struct D : B, C{};
+
+int main()
+{
+ D d;
+ static_cast<A &&>(d); // { dg-error "ambiguous" }
+}
diff --git a/gcc-4.6/gcc/testsuite/g++.dg/cpp0x/sfinae27.C b/gcc-4.6/gcc/testsuite/g++.dg/cpp0x/sfinae27.C
new file mode 100644
index 000000000..93327ba9c
--- /dev/null
+++ b/gcc-4.6/gcc/testsuite/g++.dg/cpp0x/sfinae27.C
@@ -0,0 +1,20 @@
+// PR c++/50157
+// { dg-options -std=c++0x }
+
+template<class T>
+T val();
+
+template<class T, class Arg, class =
+ decltype(::new T(val<Arg>()))
+>
+auto test(int) -> char;
+
+template<class, class>
+auto test(...) -> char (&)[2];
+
+struct P {
+ explicit operator bool(); // (#13)
+};
+
+typedef decltype(test<bool, P>(0)) type; // OK
+typedef decltype(test<float, P>(0)) type2; // Error (#17)
diff --git a/gcc-4.6/gcc/testsuite/g++.dg/cpp0x/union5.C b/gcc-4.6/gcc/testsuite/g++.dg/cpp0x/union5.C
new file mode 100644
index 000000000..423b34823
--- /dev/null
+++ b/gcc-4.6/gcc/testsuite/g++.dg/cpp0x/union5.C
@@ -0,0 +1,23 @@
+// PR c++/49803
+// { dg-options -std=c++0x }
+
+struct X
+{
+ X() = delete;
+};
+
+union Y
+{
+ // N3291=11-0061 12.6.2/8 says no initialization of
+ // of other variant members (i.e. m_x) should
+ // be performed.
+ Y() : m_char1{ }
+ { }
+
+ struct
+ {
+ char m_char1;
+ };
+
+ X m_x;
+};
diff --git a/gcc-4.6/gcc/testsuite/g++.dg/cpp0x/variadic-unresolved.C b/gcc-4.6/gcc/testsuite/g++.dg/cpp0x/variadic-unresolved.C
new file mode 100644
index 000000000..a8463de19
--- /dev/null
+++ b/gcc-4.6/gcc/testsuite/g++.dg/cpp0x/variadic-unresolved.C
@@ -0,0 +1,12 @@
+// PR c++/50086
+// { dg-options -std=c++0x }
+
+template<typename T> void tfun();
+template<typename T> void fun1(T);
+template<typename... Types> void fun2(Types... args);
+
+int main()
+{
+ fun1(tfun<int>); // ok
+ fun2(tfun<int>); // error: unresolved overloaded function type
+}
diff --git a/gcc-4.6/gcc/testsuite/g++.dg/cpp0x/variadic103.C b/gcc-4.6/gcc/testsuite/g++.dg/cpp0x/variadic103.C
index 6d12331d0..9d6b5ea20 100644
--- a/gcc-4.6/gcc/testsuite/g++.dg/cpp0x/variadic103.C
+++ b/gcc-4.6/gcc/testsuite/g++.dg/cpp0x/variadic103.C
@@ -5,7 +5,7 @@ T&& create();
template<class T, class... Args>
void test() {
- T t(create<Args>()...); // { dg-error "unknown bound" }
+ T t(create<Args>()...); // { dg-error "incomplete" }
(void) t;
}
diff --git a/gcc-4.6/gcc/testsuite/g++.dg/cpp0x/variadic114.C b/gcc-4.6/gcc/testsuite/g++.dg/cpp0x/variadic114.C
new file mode 100644
index 000000000..3ffede5c5
--- /dev/null
+++ b/gcc-4.6/gcc/testsuite/g++.dg/cpp0x/variadic114.C
@@ -0,0 +1,27 @@
+// PR c++/49785
+// { dg-options -std=c++0x }
+
+template <typename, typename ...> struct B { };
+template <typename> class A;
+
+template <typename R, typename ... S>
+struct A <R (S ...)> : public B <R, S ...>
+{
+ struct C {};
+ template <typename D> A (D, C = C ()) { }
+ R operator () (...);
+};
+
+template <typename R, typename ... S, typename T>
+auto operator >> (A <R (S ...)>, T)->A <R (S ...)>
+{
+ []() {};
+}
+
+int
+main ()
+{
+ A <int (int, int)> a = [](int, int) {};
+ auto b = []{};
+ (a >> b) (3, 5);
+}
diff --git a/gcc-4.6/gcc/testsuite/g++.dg/cpp0x/variadic115.C b/gcc-4.6/gcc/testsuite/g++.dg/cpp0x/variadic115.C
new file mode 100644
index 000000000..fa032e3b0
--- /dev/null
+++ b/gcc-4.6/gcc/testsuite/g++.dg/cpp0x/variadic115.C
@@ -0,0 +1,19 @@
+// PR c++/49593
+// { dg-options -std=c++0x }
+
+template<typename... T> void f(T...) { }
+
+template<typename... Args>
+static void
+g(Args&&... args)
+{
+ f( static_cast<Args>(args)... );
+ f( (Args)args... );
+ f( Args(args)... );
+ f( Args{args}... );
+}
+
+int main()
+{
+ g(1, '2', 3.0);
+}
diff --git a/gcc-4.6/gcc/testsuite/g++.dg/cpp0x/variadic116.C b/gcc-4.6/gcc/testsuite/g++.dg/cpp0x/variadic116.C
new file mode 100644
index 000000000..079d751cb
--- /dev/null
+++ b/gcc-4.6/gcc/testsuite/g++.dg/cpp0x/variadic116.C
@@ -0,0 +1,32 @@
+// Origin: PR c++/48320
+// { dg-options -std=c++0x }
+
+template<class... T>
+struct tuple
+{
+ typedef int type;
+};
+
+template<int... Indices>
+struct indices
+{
+};
+
+template<unsigned i, class Tuple>
+struct tuple_element
+{
+ typedef Tuple type;
+};
+
+template<class Tuple,
+ int... Indices,
+ class Result = tuple<typename tuple_element<Indices, Tuple>::type...> >
+Result
+f(Tuple&&, indices<Indices...>);
+
+
+void
+foo()
+{
+ f(tuple<int, char, unsigned> (), indices<2, 1, 0> ());
+}
diff --git a/gcc-4.6/gcc/testsuite/g++.dg/debug/dwarf2/icf.C b/gcc-4.6/gcc/testsuite/g++.dg/debug/dwarf2/icf.C
index af2c112b6..523ee8700 100644
--- a/gcc-4.6/gcc/testsuite/g++.dg/debug/dwarf2/icf.C
+++ b/gcc-4.6/gcc/testsuite/g++.dg/debug/dwarf2/icf.C
@@ -40,11 +40,11 @@ test2(A* a)
// Verify that we get .debug_dcall and .debug_vcall tables generated
// and that we see entries for both virtual calls.
-// { dg-final { scan-assembler "\\.section.*\.debug_dcall" } }
+// { dg-final { scan-assembler "\\.section.*\.debug_dcall" { xfail mips-sgi-irix* } } }
// { dg-final { scan-assembler "\\.section.*\.debug_vcall" } }
-// { dg-final { scan-assembler "New caller" } }
-// { dg-final { scan-assembler "Caller DIE offset" } }
+// { dg-final { scan-assembler "New caller" { xfail mips-sgi-irix* } } }
+// { dg-final { scan-assembler "Caller DIE offset" { xfail mips-sgi-irix* } } }
// { dg-final { scan-assembler "Point of call" } }
-// { dg-final { scan-assembler "Callee DIE offset" } }
+// { dg-final { scan-assembler "Callee DIE offset" { xfail mips-sgi-irix* } } }
// { dg-final { scan-assembler "0\[ \t\]+.*Vtable slot" } }
// { dg-final { scan-assembler "0x1\[ \t\]+.*Vtable slot" } }
diff --git a/gcc-4.6/gcc/testsuite/g++.dg/dfp/44473-1.C b/gcc-4.6/gcc/testsuite/g++.dg/dfp/44473-1.C
new file mode 100644
index 000000000..38689fa16
--- /dev/null
+++ b/gcc-4.6/gcc/testsuite/g++.dg/dfp/44473-1.C
@@ -0,0 +1,122 @@
+/* { dg-do assemble } */
+
+/* Minimized from the testcase in PR c++/44473; mangling of decimal types
+ did not include CV qualifiers. */
+
+namespace std
+{
+ namespace decimal
+ {
+ class decimal32
+ {
+ public:
+ typedef float __decfloat32 __attribute__ ((mode (SD)));
+ explicit decimal32 (float __r):__val (__r) {}
+ private:
+ __decfloat32 __val;
+ };
+ };
+
+ template <typename _BI1, typename _BI2>
+ _BI2 copy_backward (_BI1 __first, _BI2 __result);
+}
+
+namespace __gnu_cxx
+{
+ template <typename _Iterator, typename _Container>
+ class __normal_iterator
+ {
+ public:
+ explicit __normal_iterator (const _Iterator & __i) {}
+ const _Iterator & base () const {}
+ };
+
+ template <typename _IteratorL, typename _IteratorR, typename _Container>
+ bool operator== (const __normal_iterator <_IteratorL, _Container> &__lhs,
+ const __normal_iterator <_IteratorR, _Container> &__rhs)
+ {
+ return __lhs.base () == __rhs.base ();
+ }
+
+ template <typename _Tp>
+ class new_allocator
+ {
+ public:
+ typedef _Tp *pointer;
+ typedef const _Tp *const_pointer;
+ template <typename _Tp1>
+ struct rebind
+ {
+ typedef new_allocator <_Tp1> other;
+ };
+ };
+}
+
+namespace std
+{
+ template <typename _Tp>
+ class allocator:public __gnu_cxx::new_allocator <_Tp> {};
+
+ template <typename _Tp, typename _Alloc>
+ struct _Vector_base
+ {
+ typedef typename _Alloc::template rebind <_Tp>::other _Tp_alloc_type;
+ struct _Vector_impl:public _Tp_alloc_type
+ {
+ typename _Tp_alloc_type::pointer _M_finish;
+ };
+ public: _Vector_impl _M_impl;
+ };
+
+ template <typename _Tp, typename _Alloc = std::allocator <_Tp> >
+ class vector:protected _Vector_base <_Tp, _Alloc>
+ {
+ typedef _Vector_base <_Tp, _Alloc> _Base;
+ typedef typename _Base::_Tp_alloc_type _Tp_alloc_type;
+ public:
+ typedef _Tp value_type;
+ typedef typename _Tp_alloc_type::pointer pointer;
+ typedef typename _Tp_alloc_type::const_pointer const_pointer;
+ typedef __gnu_cxx::__normal_iterator <pointer, vector> iterator;
+ typedef __gnu_cxx::__normal_iterator <const_pointer, vector>
+ const_iterator;
+ const_iterator begin () const;
+ iterator end ()
+ {
+ return iterator (this->_M_impl._M_finish);
+ }
+ const_iterator end () const
+ {
+ return const_iterator (this->_M_impl._M_finish);
+ }
+ bool empty () const
+ {
+ return begin () == end ();
+ }
+ void push_back (const value_type & __x)
+ {
+ _M_insert_aux (end ());
+ }
+ void _M_insert_aux (iterator __position);
+ };
+
+ template <typename _Tp, typename _Alloc>
+ void vector <_Tp, _Alloc>::_M_insert_aux (iterator __position)
+ {
+ std::copy_backward (__position.base (), this->_M_impl._M_finish - 1);
+ }
+}
+
+std::vector <std::decimal::decimal32> vec;
+
+int
+foo ()
+{
+ return (vec.empty ()) ? 1 : 0;
+}
+
+bool
+bar ()
+{
+ vec.push_back (std::decimal::decimal32 (0));
+}
diff --git a/gcc-4.6/gcc/testsuite/g++.dg/dfp/44473-2.C b/gcc-4.6/gcc/testsuite/g++.dg/dfp/44473-2.C
new file mode 100644
index 000000000..311f62299
--- /dev/null
+++ b/gcc-4.6/gcc/testsuite/g++.dg/dfp/44473-2.C
@@ -0,0 +1,25 @@
+// { dg-do compile }
+
+// Mangling of classes from std::decimal are special-cased.
+
+namespace std {
+ namespace decimal {
+ class decimal64 {
+ public:
+ typedef float __decfloat64 __attribute__ ((mode (DD)));
+ explicit decimal64 (int __r):__val (__r) {}
+ private:
+ __decfloat64 __val;
+ };
+ }
+}
+
+int bar (const std::decimal::decimal64 & x) { }
+
+int foo ()
+{
+ std::decimal::decimal64 x(0);
+ bar (x);
+}
+
+// { dg-final { scan-assembler "_Z3barRKDd:" } }
diff --git a/gcc-4.6/gcc/testsuite/g++.dg/dfp/base.C b/gcc-4.6/gcc/testsuite/g++.dg/dfp/base.C
new file mode 100644
index 000000000..3e5dc50ba
--- /dev/null
+++ b/gcc-4.6/gcc/testsuite/g++.dg/dfp/base.C
@@ -0,0 +1,23 @@
+// PR c++/50207
+// { dg-do compile }
+
+namespace std
+{
+ namespace decimal
+ {
+ template <class _Fmt> struct _FmtTraits;
+ class decimal32;
+ template <> struct _FmtTraits <decimal32>
+ {
+ static const long _NumBytes = 4UL;
+ };
+ template <class _Tr> class _DecBase
+ {
+ unsigned char _Bytes[_Tr::_NumBytes];
+ };
+ class decimal32 : public _DecBase <_FmtTraits <decimal32> > // { dg-error "has base" }
+ {
+ decimal32 () { }
+ };
+ }
+}
diff --git a/gcc-4.6/gcc/testsuite/g++.dg/dfp/mangle-1.C b/gcc-4.6/gcc/testsuite/g++.dg/dfp/mangle-1.C
new file mode 100644
index 000000000..455d3e4c0
--- /dev/null
+++ b/gcc-4.6/gcc/testsuite/g++.dg/dfp/mangle-1.C
@@ -0,0 +1,40 @@
+// { dg-do compile }
+
+// Mangling of classes from std::decimal are special-cased.
+// Derived from g++.dg/abi/mangle13.C.
+
+namespace std {
+ namespace decimal {
+ class decimal64 {
+ public:
+ typedef float __decfloat64 __attribute__ ((mode (DD)));
+ explicit decimal64 (float __r):__val (__r) {}
+ private:
+ __decfloat64 __val;
+ };
+ }
+}
+
+struct A {
+ template <typename T> std::decimal::decimal64 f ();
+ std::decimal::decimal64 operator+();
+ operator std::decimal::decimal64 ();
+ template <typename T>
+ std::decimal::decimal64 operator-();
+};
+
+typedef std::decimal::decimal64 (A::*P)();
+
+template <P> struct S {};
+
+template <typename T> void g (S<&T::template f<std::decimal::decimal64> >) {}
+template <typename T> void g (S<&T::operator+ >) {}
+template <typename T> void g (S<&T::operator std::decimal::decimal64>) {}
+template <typename T> void g (S<&T::template operator- <std::decimal::decimal64> >) {}
+
+template void g<A> (S<&A::f<std::decimal::decimal64> >);
+template void g<A> (S<&A::operator+>);
+template void g<A> (S<&A::operator std::decimal::decimal64>);
+
+// { dg-final { scan-assembler "\n?_Z1gI1AEv1SIXadsrT_1fIDdEEE\[: \t\n\]" } }
+// { dg-final { scan-assembler "\n?_Z1gI1AEv1SIXadsrT_plEE\[: \t\n\]" } }
diff --git a/gcc-4.6/gcc/testsuite/g++.dg/dfp/mangle-2.C b/gcc-4.6/gcc/testsuite/g++.dg/dfp/mangle-2.C
new file mode 100644
index 000000000..1af9aa1a0
--- /dev/null
+++ b/gcc-4.6/gcc/testsuite/g++.dg/dfp/mangle-2.C
@@ -0,0 +1,28 @@
+// { dg-do compile }
+
+// Mangling of classes from std::decimal are special-cased.
+// Derived from g++.dg/abi/mangle15.C.
+
+namespace std {
+ namespace decimal {
+ class decimal64 {
+ public:
+ typedef float __decfloat64 __attribute__ ((mode (DD)));
+ explicit decimal64 (float __r):__val (__r) {}
+ private:
+ __decfloat64 __val;
+ };
+ }
+}
+
+struct A {
+ template <typename T> std::decimal::decimal64 f ();
+};
+
+typedef std::decimal::decimal64 (A::*P)();
+
+template <P> struct S {};
+
+void g (S<&A::f<std::decimal::decimal64> >) {}
+
+// { dg-final { scan-assembler "\n?_Z1g1SIXadL_ZN1A1fIDdEEDdvEEE\[: \t\n\]" } }
diff --git a/gcc-4.6/gcc/testsuite/g++.dg/dfp/mangle-3.C b/gcc-4.6/gcc/testsuite/g++.dg/dfp/mangle-3.C
new file mode 100644
index 000000000..c716ed0e9
--- /dev/null
+++ b/gcc-4.6/gcc/testsuite/g++.dg/dfp/mangle-3.C
@@ -0,0 +1,28 @@
+// { dg-do compile }
+
+// Mangling of classes from std::decimal are special-cased.
+// Derived from g++.dg/abi/mangle20-1.C.
+
+namespace std {
+ namespace decimal {
+ class decimal64 {
+ public:
+ typedef float __decfloat64 __attribute__ ((mode (DD)));
+ explicit decimal64 (int __r):__val (__r) {}
+ private:
+ __decfloat64 __val;
+ };
+ }
+}
+
+template <int I> void f(std::decimal::decimal64 (*)[2]) {}
+template <int I> void g(std::decimal::decimal64 (*)[I+2]) {}
+
+static const std::decimal::decimal64 I(1);
+static const std::decimal::decimal64 J(2);
+
+template void f<1>(std::decimal::decimal64 (*)[2]);
+template void g<1>(std::decimal::decimal64 (*)[3]);
+
+// { dg-final { scan-assembler "\n_?_Z1fILi1EEvPA2_Dd\[: \t\n\]" } }
+// { dg-final { scan-assembler "\n_?_Z1gILi1EEvPAplT_Li2E_Dd\[: \t\n\]" } }
diff --git a/gcc-4.6/gcc/testsuite/g++.dg/dfp/mangle-4.C b/gcc-4.6/gcc/testsuite/g++.dg/dfp/mangle-4.C
new file mode 100644
index 000000000..899d5661c
--- /dev/null
+++ b/gcc-4.6/gcc/testsuite/g++.dg/dfp/mangle-4.C
@@ -0,0 +1,35 @@
+// { dg-do compile }
+
+// Mangling of classes from std::decimal are special-cased.
+// Derived from g++.dg/abi/mangle30.C.
+
+namespace std {
+ namespace decimal {
+ class decimal64 {
+ public:
+ typedef float __decfloat64 __attribute__ ((mode (DD)));
+ explicit decimal64 (int __r):__val (__r) {}
+ private:
+ __decfloat64 __val;
+ };
+ }
+}
+
+struct A
+{
+ template <class T>
+ struct B
+ {
+ typedef T myT;
+ };
+};
+
+template <class T>
+void f (T t, typename T::template B<std::decimal::decimal64>::myT u, typename T::template B<int>::myT v);
+
+void foo ()
+{
+ f (A(), std::decimal::decimal64(0), 1);
+}
+
+// { dg-final { scan-assembler "_Z1fI1AEvT_NS1_1BIDdE3myTENS2_IiE3myTE" } }
diff --git a/gcc-4.6/gcc/testsuite/g++.dg/dfp/mangle-5.C b/gcc-4.6/gcc/testsuite/g++.dg/dfp/mangle-5.C
new file mode 100644
index 000000000..794577f86
--- /dev/null
+++ b/gcc-4.6/gcc/testsuite/g++.dg/dfp/mangle-5.C
@@ -0,0 +1,29 @@
+// { dg-do compile }
+
+// Mangling of classes from std::decimal are special-cased.
+// Derived from g++.dg/abi/mangle35.C.
+
+namespace std {
+ namespace decimal {
+ class decimal128 {
+ public:
+ typedef float __decfloat128 __attribute__ ((mode (TD)));
+ explicit decimal128 (int __r):__val (__r) {}
+ private:
+ __decfloat128 __val;
+ };
+ }
+}
+
+template<void (*)()> struct A {};
+
+template<typename> void foo();
+
+template<typename T> A<foo<T> > bar();
+
+void baz()
+{
+ bar<std::decimal::decimal128>();
+}
+
+// { dg-final { scan-assembler "_Z3barIDeE1AIX3fooIT_EEEv" } }
diff --git a/gcc-4.6/gcc/testsuite/g++.dg/dfp/nofields.C b/gcc-4.6/gcc/testsuite/g++.dg/dfp/nofields.C
new file mode 100644
index 000000000..7234672d4
--- /dev/null
+++ b/gcc-4.6/gcc/testsuite/g++.dg/dfp/nofields.C
@@ -0,0 +1,19 @@
+// PR c++/46862
+// { dg-do compile }
+
+namespace std
+{
+ namespace decimal
+ {
+ class decimal32 { }; // { dg-error "does not have any fields" }
+ class decimal64 { }; // { dg-error "does not have any fields" }
+ class decimal128 { }; // { dg-error "does not have any fields" }
+ }
+}
+
+void
+foo (std::decimal::decimal32 x,
+ std::decimal::decimal64 y,
+ std::decimal::decimal128 z)
+{
+}
diff --git a/gcc-4.6/gcc/testsuite/g++.dg/eh/defarg1.C b/gcc-4.6/gcc/testsuite/g++.dg/eh/defarg1.C
new file mode 100644
index 000000000..5c6e4df49
--- /dev/null
+++ b/gcc-4.6/gcc/testsuite/g++.dg/eh/defarg1.C
@@ -0,0 +1,10 @@
+// PR c++/50424
+// { dg-do run }
+
+int f() { throw 1; }
+void g( int = f() ) { }
+void h() { g(); }
+int main()
+{
+ try { h(); } catch (int) { }
+}
diff --git a/gcc-4.6/gcc/testsuite/g++.dg/ext/altivec-17.C b/gcc-4.6/gcc/testsuite/g++.dg/ext/altivec-17.C
index 54eff8a24..099f8742e 100644
--- a/gcc-4.6/gcc/testsuite/g++.dg/ext/altivec-17.C
+++ b/gcc-4.6/gcc/testsuite/g++.dg/ext/altivec-17.C
@@ -12,5 +12,5 @@ typedef vector__ bool__ int bool_simd_type;
void Foo (bool_simd_type const &a)
{
- simd_type const &v = a; // { dg-error "'const simd_type&' from expression of type 'const bool_simd_type'" }
+ simd_type const &v = a; // { dg-error "invalid initialization of reference of type" }
}
diff --git a/gcc-4.6/gcc/testsuite/g++.dg/ext/pretty3.C b/gcc-4.6/gcc/testsuite/g++.dg/ext/pretty3.C
index 01b14579a..e59d77e1e 100644
--- a/gcc-4.6/gcc/testsuite/g++.dg/ext/pretty3.C
+++ b/gcc-4.6/gcc/testsuite/g++.dg/ext/pretty3.C
@@ -16,4 +16,4 @@ int main ()
{
printf ("%s\n", D<int>().foo (0));
}
-// { dg-final { scan-assembler "const char\\* D<U>::foo\\(typename B<U>::X\\)" } }
+// { dg-final { scan-assembler "char const\\* D<U>::foo\\(typename B<U>::X\\)" } }
diff --git a/gcc-4.6/gcc/testsuite/g++.dg/fstack-protector-strong.C b/gcc-4.6/gcc/testsuite/g++.dg/fstack-protector-strong.C
new file mode 100644
index 000000000..a4f0f8163
--- /dev/null
+++ b/gcc-4.6/gcc/testsuite/g++.dg/fstack-protector-strong.C
@@ -0,0 +1,35 @@
+/* Test that stack protection is done on chosen functions. */
+
+/* { dg-do compile { target i?86-*-* x86_64-*-* } } */
+/* { dg-options "-O2 -fstack-protector-strong" } */
+
+class A
+{
+public:
+ A() {}
+ ~A() {}
+ void method();
+ int state;
+};
+
+/* Frame address exposed to A::method via "this". */
+int
+foo1 ()
+{
+ A a;
+ a.method ();
+ return a.state;
+}
+
+/* Possible destroying foo2's stack via &a. */
+int
+global_func (A& a);
+
+/* Frame address exposed to global_func. */
+int foo2 ()
+{
+ A a;
+ return global_func (a);
+}
+
+/* { dg-final { scan-assembler-times "stack_chk_fail" 2 } } */
diff --git a/gcc-4.6/gcc/testsuite/g++.dg/gcov/gcov-2.C b/gcc-4.6/gcc/testsuite/g++.dg/gcov/gcov-2.C
index 6d002f5d2..66d8af39b 100644
--- a/gcc-4.6/gcc/testsuite/g++.dg/gcov/gcov-2.C
+++ b/gcc-4.6/gcc/testsuite/g++.dg/gcov/gcov-2.C
@@ -20,7 +20,7 @@ private:
void foo()
{
- C c; /* count(2) */
+ C c; /* count(1) */
c.seti (1); /* count(1) */
}
diff --git a/gcc-4.6/gcc/testsuite/g++.dg/init/array28.C b/gcc-4.6/gcc/testsuite/g++.dg/init/array28.C
new file mode 100644
index 000000000..8cf19ba43
--- /dev/null
+++ b/gcc-4.6/gcc/testsuite/g++.dg/init/array28.C
@@ -0,0 +1,7 @@
+// PR c++/49669
+
+struct Foo { explicit Foo(int) { } };
+struct Goo {
+ Goo() : x(Foo(4), Foo(5)) { } // { dg-error "array" }
+ Foo x[2];
+};
diff --git a/gcc-4.6/gcc/testsuite/g++.dg/init/const8.C b/gcc-4.6/gcc/testsuite/g++.dg/init/const8.C
new file mode 100644
index 000000000..4eb293d65
--- /dev/null
+++ b/gcc-4.6/gcc/testsuite/g++.dg/init/const8.C
@@ -0,0 +1,11 @@
+// DR 234 - it should be OK to leave off the initializer of a const
+// variable if the default constructor fully initializes the object.
+
+struct A { };
+const A a;
+
+struct B { A a; };
+const B b;
+
+struct C { virtual void f(); };
+const C c;
diff --git a/gcc-4.6/gcc/testsuite/g++.dg/init/pr42844.C b/gcc-4.6/gcc/testsuite/g++.dg/init/pr42844.C
index 7b423ccb6..299a30a91 100644
--- a/gcc-4.6/gcc/testsuite/g++.dg/init/pr42844.C
+++ b/gcc-4.6/gcc/testsuite/g++.dg/init/pr42844.C
@@ -6,19 +6,19 @@ struct A
A(){}
};
-struct B : A {}; // { dg-message "user-provided default constructor" }
+struct B : A { int i; }; // { dg-message "user-provided default constructor" }
-struct C : A {}; // { dg-message "user-provided default constructor" }
+struct C : A { int i; }; // { dg-message "user-provided default constructor" }
struct D : B { D() {} };
-struct E {}; // { dg-message "user-provided default constructor" }
+struct E { int i; }; // { dg-message "user-provided default constructor" }
template <class T>
-struct F : A {}; // { dg-message "user-provided default constructor" }
+struct F : A { T t; }; // { dg-message "user-provided default constructor" }
template <class T>
-struct G {}; // { dg-message "user-provided default constructor" }
+struct G { T t; }; // { dg-message "user-provided default constructor" }
void f ()
{
@@ -41,9 +41,9 @@ void f ()
extern G<int> const gext;
}
-struct H {}; // { dg-message "user-provided default constructor" }
+struct H { int i; }; // { dg-message "user-provided default constructor" }
-struct I : A {}; // { dg-message "user-provided default constructor" }
+struct I : A { int i; }; // { dg-message "user-provided default constructor" }
template <class T>
void g ()
diff --git a/gcc-4.6/gcc/testsuite/g++.dg/init/ref20.C b/gcc-4.6/gcc/testsuite/g++.dg/init/ref20.C
new file mode 100644
index 000000000..b64cb57e0
--- /dev/null
+++ b/gcc-4.6/gcc/testsuite/g++.dg/init/ref20.C
@@ -0,0 +1,8 @@
+// PR c++/50787
+// { dg-do run }
+
+int main() {
+ const int Ci = 0;
+ const int &rCi = Ci;
+ if (!(&Ci == &rCi)) __builtin_abort();
+}
diff --git a/gcc-4.6/gcc/testsuite/g++.dg/init/value10.C b/gcc-4.6/gcc/testsuite/g++.dg/init/value10.C
new file mode 100644
index 000000000..2066410a0
--- /dev/null
+++ b/gcc-4.6/gcc/testsuite/g++.dg/init/value10.C
@@ -0,0 +1,27 @@
+// PR c++/51331
+// { dg-do run }
+
+struct A {
+ A(): x(10) {}
+ virtual ~A() {}
+
+ int x;
+};
+
+struct B: public virtual A {
+};
+
+struct C: public virtual A {
+};
+
+struct D: public B, virtual public C {
+ D(): B(), C() {} // note an explicit call to C() which is auto-generated
+};
+
+int main() {
+ D* d = new D();
+
+ // Crashes here with the following message:
+ // *** glibc detected *** ./test: free(): invalid next size (fast)
+ delete d;
+}
diff --git a/gcc-4.6/gcc/testsuite/g++.dg/init/value9.C b/gcc-4.6/gcc/testsuite/g++.dg/init/value9.C
new file mode 100644
index 000000000..4899bd810
--- /dev/null
+++ b/gcc-4.6/gcc/testsuite/g++.dg/init/value9.C
@@ -0,0 +1,32 @@
+// PR c++/50793
+// { dg-do run }
+
+struct NonTrivial
+{
+ NonTrivial() { }
+};
+
+struct S
+{
+ NonTrivial nt;
+ int i;
+};
+
+int f(S s)
+{
+ s.i = 0xdeadbeef;
+ return s.i;
+}
+
+int g(S s = S())
+{
+ return s.i;
+}
+
+int main()
+{
+ f(S()); // make stack dirty
+
+ if ( g() )
+ __builtin_abort();
+}
diff --git a/gcc-4.6/gcc/testsuite/g++.dg/init/vbase1.C b/gcc-4.6/gcc/testsuite/g++.dg/init/vbase1.C
new file mode 100644
index 000000000..bbfd58f5c
--- /dev/null
+++ b/gcc-4.6/gcc/testsuite/g++.dg/init/vbase1.C
@@ -0,0 +1,39 @@
+// PR c++/50618
+// { dg-do run }
+
+struct Base
+{
+ const int text;
+ Base():text(1) {}
+ Base(int aText)
+ : text(aText) {}
+};
+struct SubA : public virtual Base
+{
+protected:
+ int x;
+public:
+ SubA(int aX)
+ : x(aX) {}
+};
+class SubB : public virtual Base
+{};
+struct Diamond : public SubA, public SubB
+{
+ Diamond(int text)
+ : Base(text), SubA(5), SubB() {}
+
+ void printText()
+ {
+ if(text != 2)
+ __builtin_abort();
+ if(x!=5)
+ __builtin_abort();
+ }
+};
+
+int main(int, char**)
+{
+ Diamond x(2);
+ x.printText();
+}
diff --git a/gcc-4.6/gcc/testsuite/g++.dg/mversn10.C b/gcc-4.6/gcc/testsuite/g++.dg/mversn10.C
index adfbc1370..9d9bcd564 100644
--- a/gcc-4.6/gcc/testsuite/g++.dg/mversn10.C
+++ b/gcc-4.6/gcc/testsuite/g++.dg/mversn10.C
@@ -49,6 +49,6 @@ main ()
return 0;
}
-/* { dg-final { scan-tree-dump "dispatchv_clone_0" "optimized" } } */
-/* { dg-final { scan-tree-dump "dispatchv_clone_1" "optimized" } } */
+/* { dg-final { scan-tree-dump "dispatchv\.clone\.0" "optimized" } } */
+/* { dg-final { scan-tree-dump "dispatchv\.clone\.1" "optimized" } } */
/* { dg-final { cleanup-tree-dump "optimized" } } */
diff --git a/gcc-4.6/gcc/testsuite/g++.dg/mversn10a.C b/gcc-4.6/gcc/testsuite/g++.dg/mversn10a.C
index cf510f95c..738bfa932 100644
--- a/gcc-4.6/gcc/testsuite/g++.dg/mversn10a.C
+++ b/gcc-4.6/gcc/testsuite/g++.dg/mversn10a.C
@@ -32,6 +32,6 @@ fn2 ()
return 0;
}
-/* { dg-final { scan-tree-dump "dispatchv_clone_0" "optimized" } } */
-/* { dg-final { scan-tree-dump "dispatchv_clone_1" "optimized" } } */
+/* { dg-final { scan-tree-dump "dispatchv\.clone\.0" "optimized" } } */
+/* { dg-final { scan-tree-dump "dispatchv\.clone\.1" "optimized" } } */
/* { dg-final { cleanup-tree-dump "optimized" } } */
diff --git a/gcc-4.6/gcc/testsuite/g++.dg/mversn16.C b/gcc-4.6/gcc/testsuite/g++.dg/mversn16.C
index d19dca9b8..0fca33a62 100644
--- a/gcc-4.6/gcc/testsuite/g++.dg/mversn16.C
+++ b/gcc-4.6/gcc/testsuite/g++.dg/mversn16.C
@@ -35,5 +35,5 @@ int main ()
return 0;
}
-/* { dg-final { scan-tree-dump "dispatchv_clone" "optimized" } } */
+/* { dg-final { scan-tree-dump "dispatchv\.clone" "optimized" } } */
/* { dg-final { cleanup-tree-dump "optimized" } } */
diff --git a/gcc-4.6/gcc/testsuite/g++.dg/mversn8.C b/gcc-4.6/gcc/testsuite/g++.dg/mversn8.C
index 39c953bfc..d66867033 100644
--- a/gcc-4.6/gcc/testsuite/g++.dg/mversn8.C
+++ b/gcc-4.6/gcc/testsuite/g++.dg/mversn8.C
@@ -38,8 +38,8 @@ main (int argc, char **argv)
return (*ptr)();
}
-/* { dg-final { scan-tree-dump "dispatchv_clone_0" "optimized" } } */
-/* { dg-final { scan-tree-dump "dispatchv_clone_1" "optimized" } } */
-/* { dg-final { scan-tree-dump "main_clone_0" "optimized" } } */
-/* { dg-final { scan-tree-dump "main_clone_1" "optimized" } } */
+/* { dg-final { scan-tree-dump "dispatchv\.clone\.0" "optimized" } } */
+/* { dg-final { scan-tree-dump "dispatchv\.clone\.1" "optimized" } } */
+/* { dg-final { scan-tree-dump "main\.clone\.0" "optimized" } } */
+/* { dg-final { scan-tree-dump "main\.clone\.1" "optimized" } } */
/* { dg-final { cleanup-tree-dump "optimized" } } */
diff --git a/gcc-4.6/gcc/testsuite/g++.dg/other/enum2.C b/gcc-4.6/gcc/testsuite/g++.dg/other/enum2.C
new file mode 100644
index 000000000..3a28f2532
--- /dev/null
+++ b/gcc-4.6/gcc/testsuite/g++.dg/other/enum2.C
@@ -0,0 +1,3 @@
+// PR c++/51248
+
+enum E { e = sizeof(const E*) };
diff --git a/gcc-4.6/gcc/testsuite/g++.dg/other/offsetof7.C b/gcc-4.6/gcc/testsuite/g++.dg/other/offsetof7.C
new file mode 100644
index 000000000..0ce2ee02a
--- /dev/null
+++ b/gcc-4.6/gcc/testsuite/g++.dg/other/offsetof7.C
@@ -0,0 +1,17 @@
+// PR c++/50608
+// Testcase by <dberger@oubliette.org>
+// { dg-do compile }
+
+struct A {
+ int offset;
+};
+
+struct B: public A {
+};
+
+struct C {
+ A a;
+ B b;
+};
+
+int fails = __builtin_offsetof (C, b.offset);
diff --git a/gcc-4.6/gcc/testsuite/g++.dg/other/pr50464.C b/gcc-4.6/gcc/testsuite/g++.dg/other/pr50464.C
new file mode 100644
index 000000000..8c6721373
--- /dev/null
+++ b/gcc-4.6/gcc/testsuite/g++.dg/other/pr50464.C
@@ -0,0 +1,170 @@
+// { dg-do compile { target i?86-*-* x86_64-*-* } }
+// { dg-options "-O3 -mxop" }
+
+typedef long unsigned int size_t;
+typedef unsigned long ulong_t;
+typedef signed long slong_t;
+
+ template<typename _Iterator>
+ struct iterator_traits
+ {
+ typedef typename _Iterator::reference reference;
+ };
+
+ template<typename _Tp>
+ struct iterator_traits<_Tp*>
+ {
+ typedef _Tp& reference;
+ };
+
+ template<typename _Iterator, typename _Container>
+ class __normal_iterator
+ {
+ protected:
+ _Iterator _M_current;
+ typedef iterator_traits<_Iterator> __traits_type;
+
+ public:
+ typedef typename __traits_type::reference reference;
+
+ explicit
+ __normal_iterator(const _Iterator& __i) : _M_current(__i) { }
+
+ reference
+ operator*() const
+ { return *_M_current; }
+
+ __normal_iterator&
+ operator++()
+ {
+ ++_M_current;
+ return *this;
+ }
+
+ const _Iterator&
+ base() const
+ { return _M_current; }
+ };
+
+ template<typename _Iterator, typename _Container>
+ inline bool
+ operator!=(const __normal_iterator<_Iterator, _Container>& __lhs,
+ const __normal_iterator<_Iterator, _Container>& __rhs)
+ { return __lhs.base() != __rhs.base(); }
+
+ template<typename _Tp>
+ class allocator
+ {
+ public:
+ typedef _Tp* pointer;
+ typedef _Tp value_type;
+
+ template<typename _Tp1>
+ struct rebind
+ { typedef allocator<_Tp1> other; };
+
+ pointer allocate(size_t __n, const void* = 0)
+ {
+ return static_cast<_Tp*>(::operator new(__n * sizeof(_Tp)));
+ }
+ };
+
+ template<typename _Tp, typename _Alloc>
+ struct _Vector_base
+ {
+ typedef typename _Alloc::template rebind<_Tp>::other _Tp_alloc_type;
+
+ struct _Vector_impl
+ : public _Tp_alloc_type
+ {
+ typename _Tp_alloc_type::pointer _M_start;
+ typename _Tp_alloc_type::pointer _M_finish;
+ typename _Tp_alloc_type::pointer _M_end_of_storage;
+
+ _Vector_impl(_Tp_alloc_type const& __a) { }
+ };
+
+ public:
+ typedef _Alloc allocator_type;
+
+ _Vector_base(size_t __n, const allocator_type& __a)
+ : _M_impl(__a)
+ {
+ this->_M_impl._M_start = this->_M_allocate(__n);
+ this->_M_impl._M_finish = this->_M_impl._M_start;
+ this->_M_impl._M_end_of_storage = this->_M_impl._M_start + __n;
+ }
+
+ public:
+ _Vector_impl _M_impl;
+
+ typename _Tp_alloc_type::pointer
+ _M_allocate(size_t __n)
+ { return __n != 0 ? _M_impl.allocate(__n) : 0; }
+
+ };
+
+ template<typename _Tp, typename _Alloc = allocator<_Tp> >
+ class vector : protected _Vector_base<_Tp, _Alloc>
+ {
+ typedef _Vector_base<_Tp, _Alloc> _Base;
+ typedef typename _Base::_Tp_alloc_type _Tp_alloc_type;
+
+ public:
+ typedef _Tp value_type;
+ typedef typename _Tp_alloc_type::pointer pointer;
+ typedef __normal_iterator<pointer, vector> iterator;
+ typedef _Alloc allocator_type;
+
+ protected:
+ using _Base::_M_allocate;
+ using _Base::_M_impl;
+
+ public:
+
+ explicit
+ vector(size_t __n, const value_type& __value = value_type(),
+ const allocator_type& __a = allocator_type())
+ : _Base(__n, __a)
+ { _M_fill_initialize(__n, __value); }
+
+ iterator begin()
+ { return iterator(this->_M_impl._M_start); }
+
+ iterator end()
+ { return iterator(this->_M_impl._M_finish); }
+
+ protected:
+ void
+ _M_fill_initialize(size_t __n, const value_type& __value)
+ {
+ this->_M_impl._M_finish = this->_M_impl._M_end_of_storage;
+ }
+ };
+
+ template<typename _InputIterator, typename _OutputIterator, typename _Tp>
+ _OutputIterator
+ replace_copy(_InputIterator __first, _InputIterator __last,
+ _OutputIterator __result,
+ const _Tp& __old_value, const _Tp& __new_value)
+ {
+ ;
+ for (; __first != __last; ++__first, ++__result)
+ if (*__first == __old_value)
+ *__result = __new_value;
+ else
+ *__result = *__first;
+ return __result;
+ }
+
+extern size_t shape_rank;
+
+void createDataspaceIdentifier()
+{
+ vector< ulong_t > dataspaceDims( shape_rank );
+ vector< ulong_t > maxDataspaceDims( shape_rank );
+
+ replace_copy(
+ dataspaceDims.begin(), dataspaceDims.end(),
+ maxDataspaceDims.begin(), ulong_t( 0 ), ((ulong_t)(slong_t)(-1)) );
+}
diff --git a/gcc-4.6/gcc/testsuite/g++.dg/other/sized-delete-1.C b/gcc-4.6/gcc/testsuite/g++.dg/other/sized-delete-1.C
new file mode 100644
index 000000000..76f861af3
--- /dev/null
+++ b/gcc-4.6/gcc/testsuite/g++.dg/other/sized-delete-1.C
@@ -0,0 +1,14 @@
+// { dg-do link}
+// { dg-options "-O -fsized-delete" }
+// { dg-final { scan-assembler "_ZdlPv\[mj\]" } }
+struct A
+{
+ int a[100];
+};
+
+int main(void)
+{
+ A *a = new A;
+ delete a;
+ return 0;
+}
diff --git a/gcc-4.6/gcc/testsuite/g++.dg/pr44486.C b/gcc-4.6/gcc/testsuite/g++.dg/pr44486.C
index 01e84289f..1a23d57b5 100644
--- a/gcc-4.6/gcc/testsuite/g++.dg/pr44486.C
+++ b/gcc-4.6/gcc/testsuite/g++.dg/pr44486.C
@@ -7,4 +7,4 @@ namespace { S f() { const char * s = __PRETTY_FUNCTION__; return S(); } }
int main() { f(); }
-// { dg-final { scan-assembler "S \{anonymous\}::f" } }
+// { dg-final { scan-assembler "S \\(anonymous namespace\\)::f" } }
diff --git a/gcc-4.6/gcc/testsuite/g++.dg/pr48660.C b/gcc-4.6/gcc/testsuite/g++.dg/pr48660.C
new file mode 100644
index 000000000..37b61741a
--- /dev/null
+++ b/gcc-4.6/gcc/testsuite/g++.dg/pr48660.C
@@ -0,0 +1,22 @@
+template<int N> struct val { char a[N]; };
+
+class Base
+{
+public:
+ virtual val<1> get1() const = 0;
+ virtual val<2> get2() const = 0;
+ virtual val<3> get3() const = 0;
+ virtual val<4> get4() const = 0;
+};
+
+class Derived : public virtual Base
+{
+public:
+ virtual val<1> get1() const { return foo->get1(); }
+ virtual val<2> get2() const { return foo->get2(); }
+ virtual val<3> get3() const { return foo->get3(); }
+ virtual val<4> get4() const { return foo->get4(); }
+ Base *foo;
+};
+
+Base* make() { return new Derived; }
diff --git a/gcc-4.6/gcc/testsuite/g++.dg/pr51151.C b/gcc-4.6/gcc/testsuite/g++.dg/pr51151.C
new file mode 100644
index 000000000..804498b5f
--- /dev/null
+++ b/gcc-4.6/gcc/testsuite/g++.dg/pr51151.C
@@ -0,0 +1,12 @@
+/* { dg-do compile } */
+/* { dg-options "-Woverflow" } */
+template<typename T> class C {
+public:
+ void f() {
+ m = c2 + 1;
+ }
+ static const long unsigned int c1 = 7;
+ static const int c2 = c1 - 1;
+ int m;
+};
+template class C<int>;
diff --git a/gcc-4.6/gcc/testsuite/g++.dg/template/partial12.C b/gcc-4.6/gcc/testsuite/g++.dg/template/partial12.C
new file mode 100644
index 000000000..05a3eca97
--- /dev/null
+++ b/gcc-4.6/gcc/testsuite/g++.dg/template/partial12.C
@@ -0,0 +1,27 @@
+// PR c++/46105
+
+template< typename T >
+struct empty { // support class is like stripped-down enable_if
+ typedef void type;
+};
+
+template< class T, typename v = void > // v is always void!
+struct element {
+ typedef typename T::value_type type;
+};
+
+template< class T > // T in deduced context, T::element_type is SFINAE:
+struct element< T, typename empty< typename T::element_type >::type > {
+ typedef typename T::element_type type;
+};
+
+template< class T >
+struct element< T const, typename empty< typename T::element_type >::type > {
+ typedef typename T::element_type const type;
+};
+
+struct has_et {
+ typedef int element_type;
+};
+
+element<has_et const>::type ip = 0;
diff --git a/gcc-4.6/gcc/testsuite/g++.dg/thread-ann/thread_annot_lock-79.C b/gcc-4.6/gcc/testsuite/g++.dg/thread-ann/thread_annot_lock-79.C
index 8558670f0..b3c93b4b7 100644
--- a/gcc-4.6/gcc/testsuite/g++.dg/thread-ann/thread_annot_lock-79.C
+++ b/gcc-4.6/gcc/testsuite/g++.dg/thread-ann/thread_annot_lock-79.C
@@ -75,3 +75,27 @@ void foo3()
(new FooDerived)->doSomething();
}
+class FooNodef;
+
+// test case for cast from undefined type
+void foo4(FooNodef *f) {
+ ((Foo*) f)->doSomething();
+}
+
+
+// Regression test for canonicalization of subexpressions that refer to
+// lockable objects.
+class LOCKABLE Base {
+public:
+ Mutex mu_;
+ virtual void baseMethod() SHARED_LOCKS_REQUIRED(mu_) = 0;
+};
+
+class Derived : public Base {
+public:
+ void foo() SHARED_LOCKS_REQUIRED(mu_);
+};
+
+void Derived::foo() {
+ baseMethod();
+}
diff --git a/gcc-4.6/gcc/testsuite/g++.dg/thread-ann/thread_annot_lock-81.C b/gcc-4.6/gcc/testsuite/g++.dg/thread-ann/thread_annot_lock-81.C
new file mode 100644
index 000000000..5db3ccc1c
--- /dev/null
+++ b/gcc-4.6/gcc/testsuite/g++.dg/thread-ann/thread_annot_lock-81.C
@@ -0,0 +1,17 @@
+// Test template methods in the presence of cloned constructors.
+// Regression test for bugfix.
+// { dg-do compile }
+// { dg-options "-Wthread-safety -O" }
+
+#include "thread_annot_common.h"
+
+Mutex mu_;
+Mutex mu2_;
+
+class Foo {
+ Foo() LOCKS_EXCLUDED(mu_) { }
+
+ template <class T>
+ void bar(T* t) LOCKS_EXCLUDED(mu2_) { }
+};
+
diff --git a/gcc-4.6/gcc/testsuite/g++.dg/thread-ann/thread_annot_lock-82.C b/gcc-4.6/gcc/testsuite/g++.dg/thread-ann/thread_annot_lock-82.C
new file mode 100644
index 000000000..556bab676
--- /dev/null
+++ b/gcc-4.6/gcc/testsuite/g++.dg/thread-ann/thread_annot_lock-82.C
@@ -0,0 +1,48 @@
+// Regression tests: fix ICE issues when IPA-SRA deletes formal
+// function parameters.
+// { dg-do compile }
+// { dg-options "-Wthread-safety -O3" }
+
+#include "thread_annot_common.h"
+
+class Foo;
+void do_something(void* a);
+
+class Foo {
+ Mutex mu_;
+ int a GUARDED_BY(mu_);
+ int b;
+
+ // with optimization turned on, ipa-sra should eliminate the hidden
+ // "this" argument, thus invalidating EXCLUSIVE_LOCKS_REQUIRED.
+ inline void clone_me_ipasra(Foo* f) EXCLUSIVE_LOCKS_REQUIRED(mu_) {
+ do_something(f);
+ }
+
+ void foo(Foo* f);
+ void bar();
+};
+
+void Foo::foo(Foo* f) {
+ mu_.Lock();
+ // in the cloned version, it looks like the required lock is f->mu_
+ // we should detect this and ignore the attribute.
+ clone_me_ipasra(f);
+ mu_.Unlock();
+}
+
+
+class SCOPED_LOCKABLE DummyMutexLock {
+public:
+ // IPA-SRA should kill the parameters to these functions
+ explicit DummyMutexLock(Mutex* mutex) EXCLUSIVE_LOCK_FUNCTION(mutex) {}
+ ~DummyMutexLock() UNLOCK_FUNCTION() {}
+};
+
+
+void Foo::bar() {
+ // Matches two warnings:
+ DummyMutexLock dlock(&mu_); // { dg-warning "lock attribute has been removed by optimization" }
+ a = 1; // warning here should be suppressed, due to errors handling dlock
+ b = 2; // { dg-warning "unlock attribute has been removed by optimization" }
+}
diff --git a/gcc-4.6/gcc/testsuite/g++.dg/thread-ann/thread_annot_lock-83.C b/gcc-4.6/gcc/testsuite/g++.dg/thread-ann/thread_annot_lock-83.C
new file mode 100644
index 000000000..35e58c09e
--- /dev/null
+++ b/gcc-4.6/gcc/testsuite/g++.dg/thread-ann/thread_annot_lock-83.C
@@ -0,0 +1,55 @@
+// Regression test for two bugfixes.
+// Bugfix 1: Shared locks are not properly removed from locksets
+// if a "universal lock" is present.
+// Bugfix 2: Canonicalization does not properly store the lock in
+// the hash table if the lock function is attached to a base class.
+// { dg-do compile }
+// { dg-options "-Wthread-safety" }
+
+#include "thread_annot_common.h"
+
+class Foo;
+
+/* Bugfix 1 */
+class Bar {
+public:
+ Foo* foo;
+ Mutex mu_;
+
+ // foo->mu_ is not visible at this point in the code.
+ // so the attribute will become a "universal lock."
+ void bar() EXCLUSIVE_LOCKS_REQUIRED(foo->mu_);
+};
+
+
+class Foo {
+public:
+ Mutex mu_;
+ int a;
+};
+
+
+void Bar::bar() {
+ ReaderMutexLock rlock(&mu_);
+}
+
+
+/* Bugfix 2 */
+class LOCKABLE Base {
+public:
+ Mutex mu_;
+
+ void Lock() EXCLUSIVE_LOCK_FUNCTION() { mu_.Lock(); }
+ void Unlock() UNLOCK_FUNCTION() { mu_.Unlock(); }
+};
+
+class Derived : public Base {
+public:
+ int b;
+};
+
+void doSomething(Derived *d) {
+ d->Lock();
+ d->Unlock();
+};
+
diff --git a/gcc-4.6/gcc/testsuite/g++.dg/thread-ann/thread_annot_lock-84.C b/gcc-4.6/gcc/testsuite/g++.dg/thread-ann/thread_annot_lock-84.C
new file mode 100644
index 000000000..323b4e303
--- /dev/null
+++ b/gcc-4.6/gcc/testsuite/g++.dg/thread-ann/thread_annot_lock-84.C
@@ -0,0 +1,29 @@
+// Test lock expressions involving array elements.
+// { dg-do compile }
+// { dg-options "-Wthread-safety" }
+
+#include "thread_annot_common.h"
+
+struct Foo {
+ Mutex mu_;
+ int a GUARDED_BY(mu_);
+
+ static void foo1(Foo* foos, int n);
+ static void foo2(Foo* foos, int n);
+};
+
+void Foo::foo1(Foo* foos, int n) {
+ for (int i = 0; i < n; ++i) {
+ foos[i].mu_.Lock();
+ foos[i].a = 0;
+ foos[i].mu_.Unlock();
+ }
+}
+
+void Foo::foo2(Foo* foos, int n) {
+ for (int i = 0; i < n-1; ++i) {
+ foos[i].mu_.Lock();
+ foos[i+1].a = 0; // { dg-warning "Writing to variable" }
+ foos[i].mu_.Unlock();
+ }
+}
diff --git a/gcc-4.6/gcc/testsuite/g++.dg/thread-ann/thread_annot_lock-85.C b/gcc-4.6/gcc/testsuite/g++.dg/thread-ann/thread_annot_lock-85.C
new file mode 100644
index 000000000..c553e81d6
--- /dev/null
+++ b/gcc-4.6/gcc/testsuite/g++.dg/thread-ann/thread_annot_lock-85.C
@@ -0,0 +1,22 @@
+// Regression test, handle trylock on virtual method.
+// { dg-do compile }
+// { dg-options "-Wthread-safety" }
+
+#include "thread_annot_common.h"
+
+class LOCKABLE Lock {
+ public:
+ virtual ~Lock() {}
+ virtual bool TryLock() EXCLUSIVE_TRYLOCK_FUNCTION(true) { return true; }
+ void Unlock() UNLOCK_FUNCTION() {}
+};
+
+
+void foo() {
+ Lock x;
+ Lock *p = &x;
+ if (p->TryLock()) {
+ p->Unlock();
+ }
+}
+
diff --git a/gcc-4.6/gcc/testsuite/g++.dg/torture/pr49309.C b/gcc-4.6/gcc/testsuite/g++.dg/torture/pr49309.C
new file mode 100644
index 000000000..a34537792
--- /dev/null
+++ b/gcc-4.6/gcc/testsuite/g++.dg/torture/pr49309.C
@@ -0,0 +1,15 @@
+// PR tree-optimization/49309
+// { dg-do compile }
+// { dg-options "-fpreprocessed -fmudflap" }
+
+struct A
+{
+ int i;
+
+ A();
+ A(const A&);
+};
+
+inline void foo(A a) { a = A(); }
+
+void bar() { foo(A()); }
diff --git a/gcc-4.6/gcc/testsuite/g++.dg/torture/pr49628.C b/gcc-4.6/gcc/testsuite/g++.dg/torture/pr49628.C
new file mode 100644
index 000000000..4bc6543a3
--- /dev/null
+++ b/gcc-4.6/gcc/testsuite/g++.dg/torture/pr49628.C
@@ -0,0 +1,37 @@
+/* { dg-do compile } */
+
+#include <vector>
+
+template <int rank, int dim> class Tensor;
+template <int dim> class Tensor<1,dim> {
+public:
+ explicit Tensor (const bool initialize = true);
+ Tensor (const Tensor<1,dim> &);
+ Tensor<1,dim> & operator = (const Tensor<1,dim> &);
+ double values[(dim!=0) ? (dim) : 1];
+};
+template <int dim>
+inline Tensor<1,dim> & Tensor<1,dim>::operator = (const Tensor<1,dim> &p)
+{
+ for (unsigned int i=0; i<dim; ++i)
+ values[i] = p.values[i];
+};
+template <int dim> class Quadrature {
+public:
+ const unsigned int n_quadrature_points;
+};
+class MappingQ1
+{
+ class InternalData {
+ public:
+ std::vector<Tensor<1,3> > shape_derivatives;
+ unsigned int n_shape_functions;
+ };
+ void compute_data (const Quadrature<3> &quadrature, InternalData &data)
+ const;
+};
+void MappingQ1::compute_data (const Quadrature<3> &q, InternalData &data) const
+{
+ const unsigned int n_q_points = q.n_quadrature_points;
+ data.shape_derivatives.resize(data.n_shape_functions * n_q_points);
+}
diff --git a/gcc-4.6/gcc/testsuite/g++.dg/torture/pr49720.C b/gcc-4.6/gcc/testsuite/g++.dg/torture/pr49720.C
new file mode 100644
index 000000000..c5da7ba67
--- /dev/null
+++ b/gcc-4.6/gcc/testsuite/g++.dg/torture/pr49720.C
@@ -0,0 +1,8 @@
+/* { dg-do compile } */
+
+extern char t_start[], t_end[], t_size[];
+bool foo (void)
+{
+ long size = reinterpret_cast<long>(t_size);
+ return (size == t_end - t_start);
+}
diff --git a/gcc-4.6/gcc/testsuite/g++.dg/torture/pr50189.C b/gcc-4.6/gcc/testsuite/g++.dg/torture/pr50189.C
new file mode 100644
index 000000000..06f1d3695
--- /dev/null
+++ b/gcc-4.6/gcc/testsuite/g++.dg/torture/pr50189.C
@@ -0,0 +1,121 @@
+// { dg-do run }
+// { dg-options "-fstrict-enums" }
+
+extern "C" void abort (void);
+class CCUTILS_KeyedScalarLevelPosition
+{
+public:
+
+ typedef enum
+ {
+ UNINITED = 0,
+ AT_BEGIN = 1,
+ AT_END = 2,
+ AT_KEY = 3
+
+ } position_t;
+
+ bool is_init() const
+ { return(m_timestamp != UNINITED); }
+
+ bool is_at_begin() const
+ { return(m_timestamp == AT_BEGIN); }
+
+ position_t get_state() const
+ {
+ return((m_timestamp >= AT_KEY)
+ ? AT_KEY
+ : ((position_t)m_timestamp));
+ }
+
+ void set_at_begin()
+ { m_timestamp = AT_BEGIN; }
+
+ unsigned int get_index() const
+ { return(m_index); }
+
+ void set_pos(unsigned int a_index, unsigned int a_timestmap)
+ {
+ m_index = a_index;
+ m_timestamp = a_timestmap;
+ }
+
+ bool check_pos(unsigned int a_num_entries, unsigned int a_timestamp) const
+ {
+ if (get_state() != AT_KEY)
+ return(false);
+
+ if (m_timestamp != a_timestamp)
+ return(false);
+
+ return(m_index < a_num_entries);
+ }
+
+ void set_not_init()
+ { m_timestamp = 0; }
+
+private:
+
+ unsigned int m_timestamp;
+ unsigned int m_index;
+
+};
+
+class CCUTILS_KeyedScalarPosition
+{
+public:
+
+ CCUTILS_KeyedScalarLevelPosition m_L1;
+ CCUTILS_KeyedScalarLevelPosition m_L2;
+};
+
+class baz
+{
+public:
+ int *n[20];
+ unsigned int m_cur_array_len;
+ unsigned int m_timestamp;
+
+ unsigned int _get_timestamp() const
+ { return(m_timestamp); }
+
+ bool _check_L1_pos(const CCUTILS_KeyedScalarPosition &a_position) const
+ {
+ return(a_position.m_L1.check_pos(
+ m_cur_array_len, _get_timestamp()));
+ }
+
+ void *next (CCUTILS_KeyedScalarPosition &);
+};
+
+void * baz::next (CCUTILS_KeyedScalarPosition &a_position)
+{
+ if (a_position.m_L1.is_at_begin() || (!a_position.m_L1.is_init()))
+ {
+ a_position.m_L1.set_pos(0, _get_timestamp());
+ a_position.m_L2.set_at_begin();
+ }
+ else if (!_check_L1_pos(a_position))
+ return(0);
+
+ return n[a_position.m_L1.get_index ()];
+}
+
+int main (int, char **)
+{
+ baz obj;
+ CCUTILS_KeyedScalarPosition a_pos;
+ void *ret;
+ int n[5];
+
+ obj.n[0] = n;
+ obj.m_cur_array_len = 1;
+ obj.m_timestamp = 42;
+
+ a_pos.m_L1.set_pos (0, 42);
+
+ ret = obj.next (a_pos);
+ if (ret == 0)
+ abort ();
+ return 0;
+}
diff --git a/gcc-4.6/gcc/testsuite/g++.dg/tree-prof/callgraph-profiles.C b/gcc-4.6/gcc/testsuite/g++.dg/tree-prof/callgraph-profiles.C
new file mode 100644
index 000000000..d9583097c
--- /dev/null
+++ b/gcc-4.6/gcc/testsuite/g++.dg/tree-prof/callgraph-profiles.C
@@ -0,0 +1,30 @@
+/* Verify if call-graph profile sections are created
+ with -fcallgraph-profiles-sections. */
+/* { dg-options "-O2 -fcallgraph-profiles-sections -ffunction-sections --save-temps" } */
+/* { dg-require-section-exclude "" } */
+
+int __attribute__ ((noinline))
+foo ()
+{
+ return 1;
+}
+
+int __attribute__ ((noinline))
+bar ()
+{
+ return 0;
+}
+
+int main ()
+{
+ int sum;
+ for (int i = 0; i< 1000; i++)
+ {
+ sum = foo () + bar();
+ }
+ return sum * bar ();
+}
+
+/* { dg-final-use { scan-assembler "\.gnu\.callgraph\.text\.main" } } */
+/* { dg-final-use { scan-assembler "\.string \"1000\"" } } */
+/* { dg-final-use { cleanup-saved-temps } } */
diff --git a/gcc-4.6/gcc/testsuite/g++.dg/tree-prof/mversn15.C b/gcc-4.6/gcc/testsuite/g++.dg/tree-prof/mversn15.C
index 54b4e57a1..cdbb70ed1 100644
--- a/gcc-4.6/gcc/testsuite/g++.dg/tree-prof/mversn15.C
+++ b/gcc-4.6/gcc/testsuite/g++.dg/tree-prof/mversn15.C
@@ -18,6 +18,6 @@ main ()
return ret - 1000;
}
-/* { dg-final-use { scan-tree-dump "main_clone" "optimized" } } */
+/* { dg-final-use { scan-tree-dump "main\.clone" "optimized" } } */
/* { dg-final-use { scan-tree-dump "return 0" "optimized" } } */
/* { dg-final-use { cleanup-tree-dump "optimized" } } */
diff --git a/gcc-4.6/gcc/testsuite/g++.dg/tree-ssa/dom-invalid.C b/gcc-4.6/gcc/testsuite/g++.dg/tree-ssa/dom-invalid.C
index 5513d3650..91f43ae8c 100644
--- a/gcc-4.6/gcc/testsuite/g++.dg/tree-ssa/dom-invalid.C
+++ b/gcc-4.6/gcc/testsuite/g++.dg/tree-ssa/dom-invalid.C
@@ -1,7 +1,7 @@
// PR tree-optimization/39557
// invalid post-dom info leads to infinite loop
// { dg-do run }
-// { dg-options "-Wall -fno-exceptions -O2 -fprofile-use -fno-rtti" }
+// { dg-options "-Wall -fno-exceptions -O2 -fprofile-use -fopt-info -fno-rtti" }
struct C
{
diff --git a/gcc-4.6/gcc/testsuite/g++.dg/tree-ssa/pr49911.C b/gcc-4.6/gcc/testsuite/g++.dg/tree-ssa/pr49911.C
new file mode 100644
index 000000000..520a7750d
--- /dev/null
+++ b/gcc-4.6/gcc/testsuite/g++.dg/tree-ssa/pr49911.C
@@ -0,0 +1,41 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -fstrict-enums -fno-rtti -fno-exceptions -fno-strict-aliasing -fdump-tree-vrp2" } */
+
+
+extern void JS_Assert();
+typedef enum {
+eax, ecx, edx, ebx, esp, ebp,
+esi, edi }
+RegisterID;
+union StateRemat {
+ RegisterID reg_;
+ int offset_;
+};
+static StateRemat FromRegister(RegisterID reg) {
+ StateRemat sr;
+ sr.reg_ = reg;
+ return sr;
+}
+static StateRemat FromAddress3(int address) {
+ StateRemat sr;
+ sr.offset_ = address;
+ //sr.offset_ = 0;
+ if (address < 46 && address >= 0) {
+ JS_Assert();
+ }
+ return sr;
+}
+struct FrameState {
+ StateRemat dataRematInfo2(bool y, int z) {
+ if (y) return FromRegister(RegisterID(1));
+ return FromAddress3(z);
+ }
+};
+FrameState frame;
+StateRemat x;
+void jsop_setelem(bool y, int z) {
+ x = frame.dataRematInfo2(y, z);
+}
+
+/* { dg-final { scan-tree-dump-times "Folding predicate.*45" 0 "vrp2"} } */
+/* { dg-final { cleanup-tree-dump "vrp2" } } */
diff --git a/gcc-4.6/gcc/testsuite/g++.dg/tree-ssa/pr50622.C b/gcc-4.6/gcc/testsuite/g++.dg/tree-ssa/pr50622.C
new file mode 100644
index 000000000..d7f4fa74b
--- /dev/null
+++ b/gcc-4.6/gcc/testsuite/g++.dg/tree-ssa/pr50622.C
@@ -0,0 +1,30 @@
+// { dg-do compile }
+// { dg-options "-O2" }
+
+typedef __complex__ double Value;
+struct LorentzVector
+{
+ LorentzVector & operator+=(const LorentzVector & a) {
+ theX += a.theX;
+ theY += a.theY;
+ theZ += a.theZ;
+ theT += a.theT;
+ return *this;
+ }
+
+ Value theX;
+ Value theY;
+ Value theZ;
+ Value theT;
+};
+
+inline LorentzVector
+operator+(LorentzVector a, const LorentzVector & b) {
+ return a += b;
+}
+
+Value ex, et;
+LorentzVector sum() {
+ LorentzVector v1; v1.theX =ex; v1.theY =ex+et; v1.theZ =ex-et; v1.theT =et;
+ return v1+v1;
+}
diff --git a/gcc-4.6/gcc/testsuite/g++.dg/vect/pr51485.cc b/gcc-4.6/gcc/testsuite/g++.dg/vect/pr51485.cc
new file mode 100644
index 000000000..d57d7596d
--- /dev/null
+++ b/gcc-4.6/gcc/testsuite/g++.dg/vect/pr51485.cc
@@ -0,0 +1,14 @@
+/* { dg-do compile } */
+
+struct A { A (); unsigned int a; };
+double bar (A a) throw () __attribute__((pure));
+
+void
+foo (unsigned int x, double *y, A *z)
+{
+ unsigned int i;
+ for (i = 0; i < x; i++)
+ y[i] = bar (z[i]);
+}
+
+/* { dg-final { cleanup-tree-dump "vect" } } */
diff --git a/gcc-4.6/gcc/testsuite/g++.dg/vect/slp-pr50413.cc b/gcc-4.6/gcc/testsuite/g++.dg/vect/slp-pr50413.cc
new file mode 100644
index 000000000..e7bdf1f1c
--- /dev/null
+++ b/gcc-4.6/gcc/testsuite/g++.dg/vect/slp-pr50413.cc
@@ -0,0 +1,165 @@
+/* { dg-do compile } */
+/* { dg-require-effective-target vect_int } */
+
+typedef unsigned long long UInt64;
+
+typedef struct struct128
+{
+ UInt64 uint64_lower;
+ UInt64 uint64_upper;
+}
+STRUCT_128;
+
+typedef union uint128_bitmap
+{
+ STRUCT_128 uint128;
+
+ struct
+ {
+ UInt64 b00 : 1;
+ UInt64 b01 : 1;
+ UInt64 b02 : 1;
+ UInt64 b03 : 1;
+ UInt64 b04 : 1;
+ UInt64 b05 : 1;
+ UInt64 b06 : 1;
+ UInt64 b07 : 1;
+ UInt64 b08 : 1;
+ UInt64 b09 : 1;
+ UInt64 b10 : 1;
+ UInt64 b11 : 1;
+ UInt64 b12 : 1;
+ UInt64 b13 : 1;
+ UInt64 b14 : 1;
+ UInt64 b15 : 1;
+ UInt64 b16 : 1;
+ UInt64 b17 : 1;
+ UInt64 b18 : 1;
+ UInt64 b19 : 1;
+ UInt64 b20 : 1;
+ UInt64 b21 : 1;
+ UInt64 b22 : 1;
+ UInt64 b23 : 1;
+ UInt64 b24 : 1;
+ UInt64 b25 : 1;
+ UInt64 b26 : 1;
+ UInt64 b27 : 1;
+ UInt64 b28 : 1;
+ UInt64 b29 : 1;
+ UInt64 b30 : 1;
+ UInt64 b31 : 1;
+ UInt64 b32 : 1;
+ UInt64 b33 : 1;
+ UInt64 b34 : 1;
+ UInt64 b35 : 1;
+ UInt64 b36 : 1;
+ UInt64 b37 : 1;
+ UInt64 b38 : 1;
+ UInt64 b39 : 1;
+ UInt64 b40 : 1;
+ UInt64 b41 : 1;
+ UInt64 b42 : 1;
+ UInt64 b43 : 1;
+ UInt64 b44 : 1;
+ UInt64 b45 : 1;
+ UInt64 b46 : 1;
+ UInt64 b47 : 1;
+ UInt64 b48 : 1;
+ UInt64 b49 : 1;
+ UInt64 b50 : 1;
+ UInt64 b51 : 1;
+ UInt64 b52 : 1;
+ UInt64 b53 : 1;
+ UInt64 b54 : 1;
+ UInt64 b55 : 1;
+ UInt64 b56 : 1;
+ UInt64 b57 : 1;
+ UInt64 b58 : 1;
+ UInt64 b59 : 1;
+ UInt64 b60 : 1;
+ UInt64 b61 : 1;
+ UInt64 b62 : 1;
+ UInt64 b63 : 1;
+ UInt64 b64 : 1;
+ UInt64 b65 : 1;
+ UInt64 b66 : 1;
+ UInt64 b67 : 1;
+ UInt64 b68 : 1;
+ UInt64 b69 : 1;
+ UInt64 b70 : 1;
+ UInt64 b71 : 1;
+ UInt64 b72 : 1;
+ UInt64 b73 : 1;
+ UInt64 b74 : 1;
+ UInt64 b75 : 1;
+ UInt64 b76 : 1;
+ UInt64 b77 : 1;
+ UInt64 b78 : 1;
+ UInt64 b79 : 1;
+ UInt64 b80 : 1;
+ UInt64 b81 : 1;
+ UInt64 b82 : 1;
+ UInt64 b83 : 1;
+ UInt64 b84 : 1;
+ UInt64 b85 : 1;
+ UInt64 b86 : 1;
+ UInt64 b87 : 1;
+ UInt64 b88 : 1;
+ UInt64 b89 : 1;
+ UInt64 b90 : 1;
+ UInt64 b91 : 1;
+ UInt64 b92 : 1;
+ UInt64 b93 : 1;
+ UInt64 b94 : 1;
+ UInt64 b95 : 1;
+ UInt64 b96 : 1;
+ UInt64 b97 : 1;
+ UInt64 b98 : 1;
+ UInt64 b99 : 1;
+ UInt64 b100 : 1;
+ UInt64 b101 : 1;
+ UInt64 b102 : 1;
+ UInt64 b103 : 1;
+ UInt64 b104 : 1;
+ UInt64 b105 : 1;
+ UInt64 b106 : 1;
+ UInt64 b107 : 1;
+ UInt64 b108 : 1;
+ UInt64 b109 : 1;
+ UInt64 b110 : 1;
+ UInt64 b111 : 1;
+ UInt64 b112 : 1;
+ UInt64 b113 : 1;
+ UInt64 b114 : 1;
+ UInt64 b115 : 1;
+ UInt64 b116 : 1;
+ UInt64 b117 : 1;
+ UInt64 b118 : 1;
+ UInt64 b119 : 1;
+ UInt64 b120 : 1;
+ UInt64 b121 : 1;
+ UInt64 b122 : 1;
+ UInt64 b123 : 1;
+ UInt64 b124 : 1;
+ UInt64 b125 : 1;
+ UInt64 b126 : 1;
+ UInt64 b127 : 1;
+ }
+ bitmap;
+}
+UInt128_BITMAP;
+
+UInt128_BITMAP V;
+
+void shift(unsigned char t)
+{
+ V.uint128.uint64_lower = (V.uint128.uint64_lower >> 1);
+ V.bitmap.b63 = V.bitmap.b64;
+ V.uint128.uint64_upper = (V.uint128.uint64_upper >> 1);
+
+ V.bitmap.b96 = t;
+}
+
+/* { dg-final { scan-tree-dump-times "basic block vectorized using SLP" 0 "slp" } } */
+/* { dg-final { cleanup-tree-dump "slp" } } */
+
diff --git a/gcc-4.6/gcc/testsuite/g++.dg/vect/vect.exp b/gcc-4.6/gcc/testsuite/g++.dg/vect/vect.exp
index 9a03f6c42..ac22f4b01 100644
--- a/gcc-4.6/gcc/testsuite/g++.dg/vect/vect.exp
+++ b/gcc-4.6/gcc/testsuite/g++.dg/vect/vect.exp
@@ -40,8 +40,13 @@ global DEFAULT_VECTCFLAGS
set DEFAULT_VECTCFLAGS ""
# These flags are used for all targets.
-lappend DEFAULT_VECTCFLAGS "-O2" "-ftree-vectorize" "-fno-vect-cost-model" \
- "-ftree-vectorizer-verbose=4" "-fdump-tree-vect-stats"
+lappend DEFAULT_VECTCFLAGS "-O2" "-ftree-vectorize" "-fno-vect-cost-model"
+
+set VECT_SLP_CFLAGS $DEFAULT_VECTCFLAGS
+
+lappend DEFAULT_VECTCFLAGS "-fdump-tree-vect-details"
+lappend VECT_SLP_CFLAGS "-fdump-tree-slp-details"
+
# Skip these tests for targets that do not support generating vector
# code. Set additional target-dependent vector flags, which can be
@@ -54,8 +59,10 @@ if ![check_vect_support_and_set_flags] {
dg-init
# Main loop.
-dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/*.{c,cc,S} ]] \
+dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/pr*.{c,cc,S} ]] \
"" $DEFAULT_VECTCFLAGS
+dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/slp-pr*.{c,cc,S} ]] \
+ "" $VECT_SLP_CFLAGS
#### Tests with special options
global SAVED_DEFAULT_VECTCFLAGS
diff --git a/gcc-4.6/gcc/testsuite/g++.dg/warn/Wuninitializable-member.C b/gcc-4.6/gcc/testsuite/g++.dg/warn/Wuninitializable-member.C
index 1c37e3ea0..9d889e1d6 100644
--- a/gcc-4.6/gcc/testsuite/g++.dg/warn/Wuninitializable-member.C
+++ b/gcc-4.6/gcc/testsuite/g++.dg/warn/Wuninitializable-member.C
@@ -8,7 +8,7 @@ public:
};
class Y {
- const int var;// { dg-warning "non-static const member 'const int Y::var' in class without a constructor" }
+ const int var;// { dg-warning "non-static const member 'int const Y::var' in class without a constructor" }
public:
int g(){ return 2*var; }
};
diff --git a/gcc-4.6/gcc/testsuite/g++.dg/warn/pr35711.C b/gcc-4.6/gcc/testsuite/g++.dg/warn/pr35711.C
index 653269c0e..7c1be1c4e 100644
--- a/gcc-4.6/gcc/testsuite/g++.dg/warn/pr35711.C
+++ b/gcc-4.6/gcc/testsuite/g++.dg/warn/pr35711.C
@@ -4,5 +4,5 @@
int* foo (volatile int *p)
{
- return (int*)p; // { dg-warning "cast from type 'volatile int\\*' to type 'int\\*' casts away qualifiers" }
+ return (int*)p; // { dg-warning "cast from type 'int volatile\\*' to type 'int\\*' casts away qualifiers" }
}