re PR c++/8372 (ICE on explicit call of destructor)
authorMark Mitchell <mark@codesourcery.com>
Tue, 10 Dec 2002 22:31:40 +0000 (22:31 +0000)
committerMark Mitchell <mmitchel@gcc.gnu.org>
Tue, 10 Dec 2002 22:31:40 +0000 (22:31 +0000)
PR c++/8372
* pt.c (tsubst_copy): Handle destructor names more correctly.

PR c++/8372
* g++.dg/template/dtor1.C: New test.

From-SVN: r60015

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

index 9e56913ef1f29931be0cbec105da2f6ecfec0cb7..51860c5c5275772075ec77d0d9060afa76d4b0e2 100644 (file)
@@ -1,4 +1,10 @@
+2002-12-10  Mark Mitchell  <mark@codesourcery.com>
+
+       PR c++/8372
+       * pt.c (tsubst_copy): Handle destructor names more correctly.
+
 2002-12-10  Matt Austern   <austern@apple.com>
+
        * cp-tree.h: get rid of needs_virtual_reinit bit.
        
 2002-12-09  Mark Mitchell  <mark@codesourcery.com>
index 9f1a382bfa7cafbd21ce51c4f4085809c296d09f..fa3caac01dcedcfbe7b610e89998b60e4ec9ee28 100644 (file)
@@ -7233,9 +7233,10 @@ tsubst_copy (t, args, complain, in_decl)
          {
            tree base = tsubst_copy (TREE_OPERAND (name, 0), args,
                                     complain, in_decl);
-           name = TREE_OPERAND (name, 1);
-           name = tsubst_copy (TREE_OPERAND (name, 0), args,
-                               complain, in_decl);
+           name = TREE_OPERAND (TREE_OPERAND (name, 1), 0);
+           if (TREE_CODE (name) == TYPE_DECL)
+             name = TREE_TYPE (name);
+           name = tsubst_copy (name, args, complain, in_decl);
            name = build1 (BIT_NOT_EXPR, NULL_TREE, name);
            name = build_nt (SCOPE_REF, base, name);
          }
index 4b064472d42b603a1477c1cd97251351625aef5c..f54e347f5f211aace7dd2425b5b439d0ad8c180c 100644 (file)
@@ -1,5 +1,8 @@
 2002-12-10  Mark Mitchell  <mark@codesourcery.com>
 
+       PR c++/8372
+       * g++.dg/template/dtor1.C: New test.
+
        * g++.old-deja/g++.ext/memconst.C: Use old-deja, not dg, error
        markers.
 
diff --git a/gcc/testsuite/g++.dg/template/dtor1.C b/gcc/testsuite/g++.dg/template/dtor1.C
new file mode 100644 (file)
index 0000000..f5d9d6a
--- /dev/null
@@ -0,0 +1,8 @@
+struct A {};
+
+template <typename T> struct B
+{
+  B() { A().A::~A(); }
+};
+
+B<void> b;