From: nathan Date: Tue, 5 Jan 2016 14:40:11 +0000 (+0000) Subject: gcc/cp/ X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=2d7d361d4903a1c3d4b496b7526b7784c45513f0;p=thirdparty%2Fgcc.git 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 --- diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 362c835899fd..f33e1dbf4755 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2016-01-05 Nathan Sidwell + + PR c++/58583 + * pt.c (build_non_dependent_expr): Don't try a checking fold when + parsing an nsdmi. + 2016-01-04 Jakub Jelinek Update copyright years. diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c index 3f23c013caca..ad5099f94bc7 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 2298e084104b..e231bbc71901 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,8 @@ 2016-01-05 Nathan Sidwell + PR c++/58583 + * g++.dg/cpp0x/nsdmi-template14.C: Adjust test & errors. + * gcc.dg/alias-15.c: New. 2016-01-05 Nick Clifton diff --git a/gcc/testsuite/g++.dg/cpp0x/nsdmi-template14.C b/gcc/testsuite/g++.dg/cpp0x/nsdmi-template14.C index 47f5b631bf9f..1a00ec0d6a9f 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 struct A // { dg-error "has been parsed" } +template 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 struct B { B* p = new B; // { dg-error "recursive instantiation of non-static data" }