2007-01-28 Andrew Pinski <pinskia@gmail.com>
authorpinskia <pinskia@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 28 Jan 2007 18:09:25 +0000 (18:09 +0000)
committerpinskia <pinskia@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 28 Jan 2007 18:09:25 +0000 (18:09 +0000)
        PR C++/28988
        * semantics.c (finish_pseudo_destructor_expr): Check the
        destrutor name by calling check_dtor_name.

2007-01-28  Andrew Pinski  <pinskia@gmail.com>

        PR C++/28988
        * g++.dg/expr/dtor4.C: New test.

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

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

index e04ee5a..2d8264e 100644 (file)
@@ -1,3 +1,9 @@
+2007-01-28  Andrew Pinski  <pinskia@gmail.com>
+
+       PR C++/28988
+       * semantics.c (finish_pseudo_destructor_expr): Check the
+       destrutor name by calling check_dtor_name.
+
 2007-01-24  Douglas Gregor  <dgregor@osl.iu.edu>
 
        * lex.c (D_CPP0X): Rename.
index 538f7b4..fea3341 100644 (file)
@@ -1956,6 +1956,13 @@ finish_pseudo_destructor_expr (tree object, tree scope, tree destructor)
          error ("invalid qualifying scope in pseudo-destructor name");
          return error_mark_node;
        }
+      if (scope && TYPE_P (scope) && !check_dtor_name (scope, destructor))
+       {
+         error ("qualified type %qT does not match destructor name ~%qT",
+                scope, destructor);
+         return error_mark_node;
+       }
+
 
       /* [expr.pseudo] says both:
 
index 6263465..6282034 100644 (file)
@@ -1,3 +1,8 @@
+2007-01-28  Andrew Pinski  <pinskia@gmail.com>
+
+       PR C++/28988
+       * g++.dg/expr/dtor4.C: New test.
+
 2007-01-28  Zdenek Dvorak <dvorakz@suse.cz>
 
        * gcc.dg/tree-ssa/loop-23.c: New test.
diff --git a/gcc/testsuite/g++.dg/expr/dtor4.C b/gcc/testsuite/g++.dg/expr/dtor4.C
new file mode 100644 (file)
index 0000000..7aed80a
--- /dev/null
@@ -0,0 +1,10 @@
+typedef int C;
+typedef double D;
+
+void
+f ()
+{
+  C o;
+
+  o.D::~C (); // { dg-error "" }
+}