diff options
author | nathan <nathan@138bc75d-0d04-0410-961f-82ee72b054a4> | 2016-01-05 14:40:11 +0000 |
---|---|---|
committer | nathan <nathan@138bc75d-0d04-0410-961f-82ee72b054a4> | 2016-01-05 14:40:11 +0000 |
commit | 2d7d361d4903a1c3d4b496b7526b7784c45513f0 (patch) | |
tree | cc4998a7d268fbf9492585f63af61de1cf75a5f0 /gcc | |
parent | 1776de768404cc77a8ca182af331f5e81bdb8a0b (diff) | |
download | gcc-2d7d361d4903a1c3d4b496b7526b7784c45513f0.tar.gz |
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.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@232075 138bc75d-0d04-0410-961f-82ee72b054a4
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" } |