aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2007-11-11 23:27:18 +0100
committerJakub Jelinek <jakub@gcc.gnu.org>2007-11-11 23:27:18 +0100
commit09b1ccd6d8077498f6cb47a6b6498a26edf4b5f0 (patch)
treeb48ada3f52af27c2a5d6ab864911c1dd0384533e
parentc31ab059b6192b0d904fbe93daf44b08f7908e88 (diff)
downloadgcc-09b1ccd6d8077498f6cb47a6b6498a26edf4b5f0.zip
gcc-09b1ccd6d8077498f6cb47a6b6498a26edf4b5f0.tar.gz
gcc-09b1ccd6d8077498f6cb47a6b6498a26edf4b5f0.tar.bz2
re PR c++/34068 (ICE using pseudo-destructor for invalid expression)
PR c++/34068 * semantics.c (finish_pseudo_destructor_expr): Handle object == error_mark_node. * g++.dg/template/pseudodtor4.C: New test. From-SVN: r130087
-rw-r--r--gcc/cp/ChangeLog6
-rw-r--r--gcc/cp/semantics.c2
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/g++.dg/template/pseudodtor4.C10
4 files changed, 22 insertions, 1 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index c046bfd..e41c990 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,9 @@
+2007-11-11 Jakub Jelinek <jakub@redhat.com>
+
+ PR c++/34068
+ * semantics.c (finish_pseudo_destructor_expr): Handle
+ object == error_mark_node.
+
2007-11-10 Jakub Jelinek <jakub@redhat.com>
PR c++/32241
diff --git a/gcc/cp/semantics.c b/gcc/cp/semantics.c
index a27b33e..23e13f3 100644
--- a/gcc/cp/semantics.c
+++ b/gcc/cp/semantics.c
@@ -1998,7 +1998,7 @@ finish_this_expr (void)
tree
finish_pseudo_destructor_expr (tree object, tree scope, tree destructor)
{
- if (destructor == error_mark_node)
+ if (object == error_mark_node || destructor == error_mark_node)
return error_mark_node;
gcc_assert (TYPE_P (destructor));
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index f98b918..78069d2 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2007-11-11 Jakub Jelinek <jakub@redhat.com>
+
+ PR c++/34068
+ * g++.dg/template/pseudodtor4.C: New test.
+
2007-11-10 Jakub Jelinek <jakub@redhat.com>
PR middle-end/34018
diff --git a/gcc/testsuite/g++.dg/template/pseudodtor4.C b/gcc/testsuite/g++.dg/template/pseudodtor4.C
new file mode 100644
index 0000000..40178bf
--- /dev/null
+++ b/gcc/testsuite/g++.dg/template/pseudodtor4.C
@@ -0,0 +1,10 @@
+// PR c++/34068
+// { dg-do compile }
+
+template <typename> struct A
+{
+ typedef int X;
+ A () { T (). ~X (); } // { dg-error "there are no arguments to|fpermissive|was not declared in this scope" }
+};
+
+A <int> a;