diff options
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/cp/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/cp/pt.c | 10 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 3 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/cpp0x/nsdmi-template14.C | 6 |
4 files changed, 20 insertions, 5 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 362c835899f..f33e1dbf475 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2016-01-05 Nathan Sidwell <nathan@acm.org> + + PR c++/58583 + * pt.c (build_non_dependent_expr): Don't try a checking fold when + parsing an nsdmi. + 2016-01-04 Jakub Jelinek <jakub@redhat.com> Update copyright years. diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c index 3f23c013cac..ad5099f94bc 100644 --- a/gcc/cp/pt.c +++ b/gcc/cp/pt.c @@ -23416,9 +23416,13 @@ build_non_dependent_expr (tree expr) { tree inner_expr; - /* Try to get a constant value for all non-dependent expressions in - order to expose bugs in *_dependent_expression_p and constexpr. */ - if (flag_checking && cxx_dialect >= cxx11) + /* When checking, try to get a constant value for all non-dependent + expressions in order to expose bugs in *_dependent_expression_p + and constexpr. */ + if (flag_checking && cxx_dialect >= cxx11 + /* Don't do this during nsdmi parsing as it can lead to + unexpected recursive instantiations. */ + && !parsing_nsdmi ()) fold_non_dependent_expr (expr); /* Preserve OVERLOADs; the functions must be available to resolve diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 2298e084104..e231bbc7190 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,8 @@ 2016-01-05 Nathan Sidwell <nathan@acm.org> + PR c++/58583 + * g++.dg/cpp0x/nsdmi-template14.C: Adjust test & errors. + * gcc.dg/alias-15.c: New. 2016-01-05 Nick Clifton <nickc@redhat.com> diff --git a/gcc/testsuite/g++.dg/cpp0x/nsdmi-template14.C b/gcc/testsuite/g++.dg/cpp0x/nsdmi-template14.C index 47f5b631bf9..1a00ec0d6a9 100644 --- a/gcc/testsuite/g++.dg/cpp0x/nsdmi-template14.C +++ b/gcc/testsuite/g++.dg/cpp0x/nsdmi-template14.C @@ -1,11 +1,13 @@ // PR c++/58583 // { dg-do compile { target c++11 } } -template<int> struct A // { dg-error "has been parsed" } +template<int> struct A { - int i = (A<0>(), 0); // { dg-error "has been parsed" } + int i = (A<0>(), 0); // { dg-error "recursive instantiation of non-static data" } }; +A<0> a; + template<int N> struct B { B* p = new B<N>; // { dg-error "recursive instantiation of non-static data" } |