]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR c++/30895 (ICE with complex values in template parameter)
authorSimon Martin <simartin@users.sourceforge.net>
Sun, 4 Mar 2007 19:50:54 +0000 (19:50 +0000)
committerSimon Martin <simartin@gcc.gnu.org>
Sun, 4 Mar 2007 19:50:54 +0000 (19:50 +0000)
2007-03-04  Simon Martin  <simartin@users.sourceforge.net>

PR c++/30895
* tree.c (cp_tree_equal): Properly handle COMPLEX_CST trees.

From-SVN: r122532

gcc/cp/ChangeLog
gcc/cp/tree.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/parse/template23.C [new file with mode: 0644]

index 5349dc4abdec168988dec23f0ae455e1df1bbf67..8f6d6deb40c828a3bb9db96bddb8a81cfa85de68 100644 (file)
@@ -1,3 +1,8 @@
+2007-03-04  Simon Martin  <simartin@users.sourceforge.net>
+
+       PR c++/30895
+       * tree.c (cp_tree_equal): Properly handle COMPLEX_CST trees.
+
 2007-03-03  Manuel Lopez-Ibanez  <manu@gcc.gnu.org>
 
        PR c++/15787
index a5fac298007133ccae24eb30b0cae1f2abe48d65..b7e1d0f7dcca70a5e44c7e3926031451193e73b0 100644 (file)
@@ -1670,6 +1670,10 @@ cp_tree_equal (tree t1, tree t2)
        && !memcmp (TREE_STRING_POINTER (t1), TREE_STRING_POINTER (t2),
                    TREE_STRING_LENGTH (t1));
 
+    case COMPLEX_CST:
+      return cp_tree_equal (TREE_REALPART (t1), TREE_REALPART (t2))
+       && cp_tree_equal (TREE_IMAGPART (t1), TREE_IMAGPART (t2));
+
     case CONSTRUCTOR:
       /* We need to do this when determining whether or not two
         non-type pointer to member function template arguments
index d469c95e120ff7b0f44314a654c990fe4e097d60..258f2f2cfa0c5d31c50604ef9c73e7656985d430 100644 (file)
@@ -1,3 +1,8 @@
+2007-03-04  Simon Martin  <simartin@users.sourceforge.net>
+
+       PR c++/30895
+       * g++.dg/parse/template23.C: New test.
+
 2007-03-04  Roger Sayle  <roger@eyesopen.com>
 
        PR middle-end/30744
diff --git a/gcc/testsuite/g++.dg/parse/template23.C b/gcc/testsuite/g++.dg/parse/template23.C
new file mode 100644 (file)
index 0000000..795457b
--- /dev/null
@@ -0,0 +1,10 @@
+/* PR c++/30895 This used to ICE.  */
+/* { dg-do "compile" } */
+
+template<int> struct A {};
+
+template<typename T> struct B
+{
+  A<T(0i)> a1; /* { dg-error "imaginary constants are a GCC extension" } */
+  A<T(0i)> a2; /* { dg-error "imaginary constants are a GCC extension" } */
+};