From 84c1139dabfcb7c4a02a39acef7b835cb0ad4584 Mon Sep 17 00:00:00 2001 From: Bernhard Rosenkraenzer Date: Thu, 27 Sep 2012 01:39:09 +0159 Subject: Sync with svn rev. 191762 Signed-off-by: Bernhard Rosenkraenzer --- gcc/testsuite/g++.dg/cpp0x/alias-decl-21.C | 23 ++++++++++++++++++ gcc/testsuite/g++.dg/cpp0x/alias-decl-22.C | 12 ++++++++++ gcc/testsuite/g++.dg/cpp0x/decltype-54581.C | 28 ++++++++++++++++++++++ gcc/testsuite/g++.dg/cpp0x/decltype32.C | 6 ++--- gcc/testsuite/g++.dg/debug/dwarf2/nested-2.C | 2 +- gcc/testsuite/g++.dg/debug/dwarf2/nested-3.C | 2 +- gcc/testsuite/g++.dg/init/aggr9.C | 9 +++++++ gcc/testsuite/g++.dg/pr54655.C | 35 ++++++++++++++++++++++++++++ gcc/testsuite/g++.dg/torture/pr54563.C | 14 +++++++++++ gcc/testsuite/g++.dg/torture/pr54647.C | 25 ++++++++++++++++++++ 10 files changed, 151 insertions(+), 5 deletions(-) create mode 100644 gcc/testsuite/g++.dg/cpp0x/alias-decl-21.C create mode 100644 gcc/testsuite/g++.dg/cpp0x/alias-decl-22.C create mode 100644 gcc/testsuite/g++.dg/cpp0x/decltype-54581.C create mode 100644 gcc/testsuite/g++.dg/init/aggr9.C create mode 100644 gcc/testsuite/g++.dg/pr54655.C create mode 100644 gcc/testsuite/g++.dg/torture/pr54563.C create mode 100644 gcc/testsuite/g++.dg/torture/pr54647.C (limited to 'gcc/testsuite/g++.dg') diff --git a/gcc/testsuite/g++.dg/cpp0x/alias-decl-21.C b/gcc/testsuite/g++.dg/cpp0x/alias-decl-21.C new file mode 100644 index 000000000..463f539d3 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/alias-decl-21.C @@ -0,0 +1,23 @@ +// PR c++/54575 +// { dg-do compile { target c++11 } } + +template +struct is_convertible { static const bool value = true; }; + +template struct enable_if { }; +template<> struct enable_if { typedef int type; }; + +template +using _RequireInputIter += typename enable_if::value>::type; + +template struct X { + template> + void insert(_InputIterator) {} +}; + +template void foo() { + X subdomain_indices; + subdomain_indices.insert(0); +} diff --git a/gcc/testsuite/g++.dg/cpp0x/alias-decl-22.C b/gcc/testsuite/g++.dg/cpp0x/alias-decl-22.C new file mode 100644 index 000000000..1f6cb8f40 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/alias-decl-22.C @@ -0,0 +1,12 @@ +// The standard is unclear about whether this testcase is well-formed. +// Clang considers it well-formed, EDG not. Let's go with EDG for now. +// { dg-do compile { target c++11 } } + +template +using foo = typename T::bar; // { dg-error "this context" } + +class B +{ + typedef int bar; // { dg-error "private" } + foo f; // { dg-message "required" } +}; diff --git a/gcc/testsuite/g++.dg/cpp0x/decltype-54581.C b/gcc/testsuite/g++.dg/cpp0x/decltype-54581.C new file mode 100644 index 000000000..5747e5c7e --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/decltype-54581.C @@ -0,0 +1,28 @@ +/* { dg-do compile } */ +/* { dg-options "-std=gnu++11 -Wall" } */ + +typedef float v4f __attribute__((vector_size(4*sizeof(float)))); + +template void eat (T&&) {} + +void test1 () +{ + v4f x = {0,1,2,3}; + typedef decltype (x < x) v4i; + v4i y = {4,5,6,7}; // v4i is not opaque + eat (y); +} + +template +void test2 () +{ + V x = {0,1,2,3}; + typedef decltype (x < x) v4i; + v4i y = {4,5,6,7}; // v4i is not opaque + eat (y); +} + +int main(){ + test1(); + test2(); +} diff --git a/gcc/testsuite/g++.dg/cpp0x/decltype32.C b/gcc/testsuite/g++.dg/cpp0x/decltype32.C index 6cb637bb2..c5f3a55c6 100644 --- a/gcc/testsuite/g++.dg/cpp0x/decltype32.C +++ b/gcc/testsuite/g++.dg/cpp0x/decltype32.C @@ -1,12 +1,12 @@ // PR c++/50075 -// { dg-options -std=c++0x } +// { dg-options "-std=c++0x -ftemplate-depth=10" } template auto make_array(const T& il) -> -decltype(make_array(il)) // { dg-error "not declared" } +decltype(make_array(il)) // { dg-error "not declared|no matching|exceeds" } { } int main() { - int z = make_array(1); // { dg-error "no match" } + int z = make_array(1); // { dg-error "no matching" } } diff --git a/gcc/testsuite/g++.dg/debug/dwarf2/nested-2.C b/gcc/testsuite/g++.dg/debug/dwarf2/nested-2.C index 3e6f6b591..cec703492 100644 --- a/gcc/testsuite/g++.dg/debug/dwarf2/nested-2.C +++ b/gcc/testsuite/g++.dg/debug/dwarf2/nested-2.C @@ -32,6 +32,6 @@ We want to express that the DIE of S::T must be a child of the DIE of S, li Hence the slightly odd regexp: - { dg-final { scan-assembler "\[^\n\r\]*\\(DIE\[^\n\r\]*DW_TAG_structure_type\\)\[\n\r\]+\[^\n\r\]*\"S\\\\0\"\[ \t\]+\(\[@|#;!\]|//?\)\[ \t\]+DW_AT_name\[\n\r\]+\(.*\)?\\(DIE\[^\n\r\]*DW_TAG_structure_type\\)\[\n\r\]+\[^\n\r\]*\"T\\\\0\"\[ \t\]+\(.*\)?\\(DIE\[^\n\r\]*DW_TAG_template_type_param\\)\[\n\r\]+\[^\n\r\]*\[\n\r\]+\[^\n\r\]*\[\n\r\]+\[^\n\r\]*\(\[@|#;!\]|//?\)\[ \t\]+end of children of DIE\[^\n\r\]*\[\n\r\]+\[^\n\r\]*end of children of DIE\[^\n\r\]*" } } + { dg-final { scan-assembler "\[^\n\r\]*\\(DIE\[^\n\r\]*DW_TAG_structure_type\\)\[\n\r\]+\[^\n\r\]*\"S\\\\0\"\[ \t\]+\(\[@|#;!\]+|//?\)\[ \t\]+DW_AT_name\[\n\r\]+\(.*\)?\\(DIE\[^\n\r\]*DW_TAG_structure_type\\)\[\n\r\]+\[^\n\r\]*\"T\\\\0\"\[ \t\]+\(.*\)?\\(DIE\[^\n\r\]*DW_TAG_template_type_param\\)\[\n\r\]+\[^\n\r\]*\[\n\r\]+\[^\n\r\]*\[\n\r\]+\[^\n\r\]*\(\[@|#;!\]+|//?\)\[ \t\]+end of children of DIE\[^\n\r\]*\[\n\r\]+\[^\n\r\]*end of children of DIE\[^\n\r\]*" } } */ diff --git a/gcc/testsuite/g++.dg/debug/dwarf2/nested-3.C b/gcc/testsuite/g++.dg/debug/dwarf2/nested-3.C index 47c6d0b1c..de59637d6 100644 --- a/gcc/testsuite/g++.dg/debug/dwarf2/nested-3.C +++ b/gcc/testsuite/g++.dg/debug/dwarf2/nested-3.C @@ -59,4 +59,4 @@ main () // // Hence the scary regexp: // -// { dg-final { scan-assembler "\[^\n\r\]*\\(DIE \\(0x(\[0-9a-f\]+)\\) DW_TAG_namespace\\)\[\n\r\]+\[^\n\r\]*\"thread\[\^\n\r]+\[\n\r\]+(\[^\n\r\]*\[\n\r\]+)+\[^\n\r\]*\\(DIE \\(0x(\[0-9a-f\]+)\\) DW_TAG_class_type\\)(\[\n\r\]+\[^\n\r\]*)+\"Executor\[^\n\r\]+\[\n\r\]+\[^\n\r\]*DW_AT_declaration\[\n\r\]+\[^\n\r\]*DW_AT_signature\[^#;/!|@\]*\[#;/!|@\] \[^\n\r\]*\\(DIE\[^\n\r\]*DW_TAG_subprogram\\)\[\n\r\]+(\[^\n\r\]*\[\n\r\]+)+\[^\n\r\]*\"CurrentExecutor\[^\n\r\]+\[\n\r\]+(\[^\n\r\]*\[\n\r\]+)+(\[^\n\r\]*\[\n\r\]+)+\[^\n\r\]*end of children of DIE 0x\\3\[\n\r]+\[^\n\r\]*end of children of DIE 0x\\1\[\n\r]+" } } +// { dg-final { scan-assembler "\[^\n\r\]*\\(DIE \\(0x(\[0-9a-f\]+)\\) DW_TAG_namespace\\)\[\n\r\]+\[^\n\r\]*\"thread\[\^\n\r]+\[\n\r\]+(\[^\n\r\]*\[\n\r\]+)+\[^\n\r\]*\\(DIE \\(0x(\[0-9a-f\]+)\\) DW_TAG_class_type\\)(\[\n\r\]+\[^\n\r\]*)+\"Executor\[^\n\r\]+\[\n\r\]+\[^\n\r\]*DW_AT_declaration\[\n\r\]+\[^\n\r\]*DW_AT_signature\[^#;/!|@\]*\[#;/!|@\]+ \[^\n\r\]*\\(DIE\[^\n\r\]*DW_TAG_subprogram\\)\[\n\r\]+(\[^\n\r\]*\[\n\r\]+)+\[^\n\r\]*\"CurrentExecutor\[^\n\r\]+\[\n\r\]+(\[^\n\r\]*\[\n\r\]+)+(\[^\n\r\]*\[\n\r\]+)+\[^\n\r\]*end of children of DIE 0x\\3\[\n\r]+\[^\n\r\]*end of children of DIE 0x\\1\[\n\r]+" } } diff --git a/gcc/testsuite/g++.dg/init/aggr9.C b/gcc/testsuite/g++.dg/init/aggr9.C new file mode 100644 index 000000000..67d829912 --- /dev/null +++ b/gcc/testsuite/g++.dg/init/aggr9.C @@ -0,0 +1,9 @@ +// PR c++/53661 + +enum Code { + SUCCESS = 0 +}; + +Code a; + +int r[] = {a}; diff --git a/gcc/testsuite/g++.dg/pr54655.C b/gcc/testsuite/g++.dg/pr54655.C new file mode 100644 index 000000000..5fd5aee9b --- /dev/null +++ b/gcc/testsuite/g++.dg/pr54655.C @@ -0,0 +1,35 @@ +// { dg-do compile } +/* { dg-options "-O1" } */ + +extern "C" class A +{ +}; + +template class B:A +{ +public: + B (int *, T); + ~B () + { + } +}; + +bool a; + +inline void +fn1 () +{ + switch (0) + case 0: + { + B b (0, 0); + if (a) + break; + } +} + +void +fn2 () +{ + fn1 (); +} diff --git a/gcc/testsuite/g++.dg/torture/pr54563.C b/gcc/testsuite/g++.dg/torture/pr54563.C new file mode 100644 index 000000000..2980320f6 --- /dev/null +++ b/gcc/testsuite/g++.dg/torture/pr54563.C @@ -0,0 +1,14 @@ +// PR tree-optimization/54563 +// { dg-do compile } + +extern "C" float powf (float, float); +struct S { ~S (); }; +double bar (); +double x; + +void +foo () +{ + S s; + x = powf (bar (), 2.); +} diff --git a/gcc/testsuite/g++.dg/torture/pr54647.C b/gcc/testsuite/g++.dg/torture/pr54647.C new file mode 100644 index 000000000..2177ecd67 --- /dev/null +++ b/gcc/testsuite/g++.dg/torture/pr54647.C @@ -0,0 +1,25 @@ +// { dg-do compile } + +class A +{ +}; +template struct D:A +{ + type & operator[](int); +}; +struct B +{ + typedef D Row; + struct C + { + Row *row; + }; +}; +B::C a; +B::Row & b = *a.row; +void +fn1 () +{ + while (1) + b[0] = b[0] ? (int *) -1 : 0; +} -- cgit v1.2.3