aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/cp/ChangeLog6
-rw-r--r--gcc/cp/pt.c10
-rw-r--r--gcc/testsuite/ChangeLog3
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/nsdmi-template14.C6
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" }