aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVolker Reichelt <reichelt@netcologne.de>2007-03-08 07:26:43 +0000
committerVolker Reichelt <reichelt@gcc.gnu.org>2007-03-08 07:26:43 +0000
commitcc891727f0647d3123c9776250dc08edeec91e51 (patch)
tree695c52f3f38ca16ac989795ff6b23618ed3e99dd
parentab53bae286a176f4d0e5e3a780d9990c03a2f2be (diff)
downloadgcc-cc891727f0647d3123c9776250dc08edeec91e51.zip
gcc-cc891727f0647d3123c9776250dc08edeec91e51.tar.gz
gcc-cc891727f0647d3123c9776250dc08edeec91e51.tar.bz2
re PR c++/30534 (ICE with invalid template argument)
PR c++/30534 * pt.c (any_template_arguments_need_structural_equality_p): Robustify. * g++.dg/template/arg5.C: New test. From-SVN: r122685
-rw-r--r--gcc/cp/ChangeLog6
-rw-r--r--gcc/cp/pt.c4
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/g++.dg/template/arg5.C9
4 files changed, 23 insertions, 1 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index de0dfd4..35e0f9f 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,9 @@
+2007-03-08 Volker Reichelt <reichelt@netcologne.de>
+
+ PR c++/30534
+ * pt.c (any_template_arguments_need_structural_equality_p):
+ Robustify.
+
2007-03-08 Alexandre Oliva <aoliva@redhat.com>
* decl.c (grokdeclarator): Disable warnings for anonymous
diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c
index 8ade0a0..84ff421 100644
--- a/gcc/cp/pt.c
+++ b/gcc/cp/pt.c
@@ -13131,7 +13131,9 @@ any_template_arguments_need_structural_equality_p (tree args)
for (j = 0; j < TREE_VEC_LENGTH (level); ++j)
{
tree arg = TREE_VEC_ELT (level, j);
- if (TREE_CODE (arg) == TEMPLATE_DECL
+ if (error_operand_p (arg))
+ return true;
+ else if (TREE_CODE (arg) == TEMPLATE_DECL
|| TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
continue;
else if (TYPE_P (arg) && TYPE_STRUCTURAL_EQUALITY_P (arg))
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 7d2b323..28c386f 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2007-03-08 Volker Reichelt <reichelt@netcologne.de>
+
+ PR c++/30534
+ * g++.dg/template/arg5.C: New test.
+
2007-03-07 Joseph Myers <joseph@codesourcery.com>
* g++.dg/eh/arm-iwmmxt-unwind.C: New test.
diff --git a/gcc/testsuite/g++.dg/template/arg5.C b/gcc/testsuite/g++.dg/template/arg5.C
new file mode 100644
index 0000000..3d67143
--- /dev/null
+++ b/gcc/testsuite/g++.dg/template/arg5.C
@@ -0,0 +1,9 @@
+// PR c++/30534
+// { dg-do compile }
+
+template<bool> struct A;
+
+template<int> void foo()
+{
+ A<__builtin_constant_p(.)> a; // { dg-error "template argument" }
+}