re PR c++/31517 (ICE on invalid initialization of static member of a template class)
authorSimon Martin <simartin@users.sourceforge.net>
Tue, 17 Apr 2007 18:05:53 +0000 (18:05 +0000)
committerSimon Martin <simartin@gcc.gnu.org>
Tue, 17 Apr 2007 18:05:53 +0000 (18:05 +0000)
2007-04-17  Simon Martin  <simartin@users.sourceforge.net>

PR c++/31517
* pt.c (value_dependent_expression_p): Handle MODOP_EXPRs.

From-SVN: r123923

gcc/cp/ChangeLog
gcc/cp/pt.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/template/init7.C [new file with mode: 0644]

index f23256a..1b7172f 100644 (file)
@@ -1,3 +1,8 @@
+2007-04-17  Simon Martin  <simartin@users.sourceforge.net>
+
+       PR c++/31517
+       * pt.c (value_dependent_expression_p): Handle MODOP_EXPRs.
+
 2007-04-16  Seongbae Park <seongbae.park@gmail.com>
 
        PR c++/29365
index 906b8d5..05d7752 100644 (file)
@@ -14949,6 +14949,10 @@ value_dependent_expression_p (tree expression)
                || (type2 ? dependent_type_p (type2) : false));
       }
 
+    case MODOP_EXPR:
+      return ((value_dependent_expression_p (TREE_OPERAND (expression, 0)))
+             || (value_dependent_expression_p (TREE_OPERAND (expression, 2))));
+
     default:
       /* A constant expression is value-dependent if any subexpression is
         value-dependent.  */
index 36592ab..bb25db0 100644 (file)
@@ -1,3 +1,8 @@
+2007-04-17  Simon Martin  <simartin@users.sourceforge.net>
+
+       PR c++/31517
+       * g++.dg/template/init7.C: New test.
+
 2007-04-17  Zdenek Dvorak  <dvorakz@suse.cz>
 
        PR rtl-optimization/31360
diff --git a/gcc/testsuite/g++.dg/template/init7.C b/gcc/testsuite/g++.dg/template/init7.C
new file mode 100644 (file)
index 0000000..e226776
--- /dev/null
@@ -0,0 +1,9 @@
+/* PR c++/31517. This used to ICE.  */
+/* { dg-do "compile" } */
+
+template<typename> struct A
+{
+  static const int i=0;
+};
+
+template<typename T> const int A<T>::i = 0=0; /* { dg-error "duplicate initialization" } */