]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR c++/58583 ([c++11] ICE with invalid non-static data member initialization in...
authorNathan Sidwell <nathan@acm.org>
Tue, 5 Jan 2016 14:40:11 +0000 (14:40 +0000)
committerNathan Sidwell <nathan@gcc.gnu.org>
Tue, 5 Jan 2016 14:40:11 +0000 (14:40 +0000)
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
gcc/cp/pt.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/cpp0x/nsdmi-template14.C

index 362c835899fda7c6f88559de6a9a505b3a986532..f33e1dbf47558649c1bfa41120d39fdb3beb94df 100644 (file)
@@ -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.
index 3f23c013cacad95328cf8ea25f43f74a9716e492..ad5099f94bc7941851f22e47cbbdf0cd358e6105 100644 (file)
@@ -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
index 2298e084104b96036e0bed9ecd588936061e179a..e231bbc719013743ddf7ebafa6202374fb86a151 100644 (file)
@@ -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>
index 47f5b631bf9fd2bacb94066dbb19da66cdfbe3e1..1a00ec0d6a9f351b0769aa917ca47ede0187b144 100644 (file)
@@ -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" }