summaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authornathan <nathan@138bc75d-0d04-0410-961f-82ee72b054a4>2016-01-05 14:40:11 +0000
committernathan <nathan@138bc75d-0d04-0410-961f-82ee72b054a4>2016-01-05 14:40:11 +0000
commit2d7d361d4903a1c3d4b496b7526b7784c45513f0 (patch)
treecc4998a7d268fbf9492585f63af61de1cf75a5f0 /gcc
parent1776de768404cc77a8ca182af331f5e81bdb8a0b (diff)
downloadgcc-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/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 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" }