From ce3e43d7c8622171301e253ce5ffeba0e24d8d39 Mon Sep 17 00:00:00 2001 From: Nathan Sidwell Date: Tue, 5 Jan 2016 14:40:11 +0000 Subject: [PATCH] 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 --- gcc/cp/ChangeLog | 6 ++++++ gcc/cp/pt.c | 10 +++++++--- gcc/testsuite/ChangeLog | 3 +++ 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 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" } -- 2.47.2