diff options
author | Nathan Sidwell <nathan@acm.org> | 2016-01-05 14:40:11 +0000 |
---|---|---|
committer | Nathan Sidwell <nathan@gcc.gnu.org> | 2016-01-05 14:40:11 +0000 |
commit | ce3e43d7c8622171301e253ce5ffeba0e24d8d39 (patch) | |
tree | cc4998a7d268fbf9492585f63af61de1cf75a5f0 | |
parent | 929710d96ced4cf7b2bd6e9896b3dc051cbfa235 (diff) | |
download | gcc-ce3e43d7c8622171301e253ce5ffeba0e24d8d39.zip gcc-ce3e43d7c8622171301e253ce5ffeba0e24d8d39.tar.gz gcc-ce3e43d7c8622171301e253ce5ffeba0e24d8d39.tar.bz2 |
re PR c++/58583 ([c++11] ICE with invalid non-static data member initialization in template)
gcc/cp/
PR c++/58583
* pt.c (build_non_dependent_expr): Don't try a checking fold when
parsing an nsdmi.
gcc/testsuite/
PR c++/58583
* g++.dg/cpp0x/nsdmi-template14.C: Adjust test & errors.
From-SVN: r232075
-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 362c835..f33e1db 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 3f23c01..ad5099f 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 2298e08..e231bbc 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 47f5b63..1a00ec0 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" } |