]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
PR c++/34068
authorjakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 11 Nov 2007 22:27:18 +0000 (22:27 +0000)
committerjakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 11 Nov 2007 22:27:18 +0000 (22:27 +0000)
* semantics.c (finish_pseudo_destructor_expr): Handle
object == error_mark_node.

* g++.dg/template/pseudodtor4.C: New test.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@130087 138bc75d-0d04-0410-961f-82ee72b054a4

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

index c046bfdbe64631f59766aae3dc37739cbc82614e..e41c99028fca9a9911120b3f9cdda3aa1933773b 100644 (file)
@@ -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
index a27b33e4911490b61083ea64ca83573f36ae3653..23e13f3230faa559e943d6323b1f7da2888d60d4 100644 (file)
@@ -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));
index f98b9181cd8a68d42375e60c781d5837c78b7621..78069d25e0b40ee6d27f5ea7136118eee2b58f95 100644 (file)
@@ -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 (file)
index 0000000..40178bf
--- /dev/null
@@ -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;