OSDN Git Service

PR c++/29363
authorjason <jason@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 13 Nov 2009 18:46:39 +0000 (18:46 +0000)
committerjason <jason@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 13 Nov 2009 18:46:39 +0000 (18:46 +0000)
* decl.c (create_implicit_typedef): Set TYPE_STUB_DECL here.
(cxx_init_decl_processing): Not here.
* name-lookup.c (pushtag): Or here.
* pt.c (lookup_template_class): Or here.

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

gcc/cp/ChangeLog
gcc/cp/decl.c
gcc/cp/name-lookup.c
gcc/cp/pt.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/template/error43.C [new file with mode: 0644]

index d4c44a5..722c983 100644 (file)
@@ -1,5 +1,11 @@
 2009-11-13  Jason Merrill  <jason@redhat.com>
 
 2009-11-13  Jason Merrill  <jason@redhat.com>
 
+       PR c++/29363
+       * decl.c (create_implicit_typedef): Set TYPE_STUB_DECL here.
+       (cxx_init_decl_processing): Not here.
+       * name-lookup.c (pushtag): Or here.
+       * pt.c (lookup_template_class): Or here.
+
        PR c++/35075
        * pt.c (convert_nontype_argument): Give helpful error about
        reference variable argument to reference template parameter.
        PR c++/35075
        * pt.c (convert_nontype_argument): Give helpful error about
        reference variable argument to reference template parameter.
index e23634f..0375dd5 100644 (file)
@@ -849,6 +849,7 @@ create_implicit_typedef (tree name, tree type)
      amongst these.  */
   SET_DECL_IMPLICIT_TYPEDEF_P (decl);
   TYPE_NAME (type) = decl;
      amongst these.  */
   SET_DECL_IMPLICIT_TYPEDEF_P (decl);
   TYPE_NAME (type) = decl;
+  TYPE_STUB_DECL (type) = decl;
 
   return decl;
 }
 
   return decl;
 }
@@ -3456,7 +3457,6 @@ cxx_init_decl_processing (void)
     bad_alloc_decl
       = create_implicit_typedef (bad_alloc_id, bad_alloc_type_node);
     DECL_CONTEXT (bad_alloc_decl) = current_namespace;
     bad_alloc_decl
       = create_implicit_typedef (bad_alloc_id, bad_alloc_type_node);
     DECL_CONTEXT (bad_alloc_decl) = current_namespace;
-    TYPE_STUB_DECL (bad_alloc_type_node) = bad_alloc_decl;
     pop_namespace ();
 
     ptr_ftype_sizetype
     pop_namespace ();
 
     ptr_ftype_sizetype
index 14f9787..6b8dcc7 100644 (file)
@@ -5288,7 +5288,6 @@ pushtag (tree name, tree type, tag_scope scope)
 
   decl = TYPE_NAME (type);
   gcc_assert (TREE_CODE (decl) == TYPE_DECL);
 
   decl = TYPE_NAME (type);
   gcc_assert (TREE_CODE (decl) == TYPE_DECL);
-  TYPE_STUB_DECL (type) = decl;
 
   /* Set type visibility now if this is a forward declaration.  */
   TREE_PUBLIC (decl) = 1;
 
   /* Set type visibility now if this is a forward declaration.  */
   TREE_PUBLIC (decl) = 1;
index c799368..540f577 100644 (file)
@@ -6371,7 +6371,6 @@ lookup_template_class (tree d1,
 
          type_decl = create_implicit_typedef (DECL_NAME (gen_tmpl), t);
          DECL_CONTEXT (type_decl) = TYPE_CONTEXT (t);
 
          type_decl = create_implicit_typedef (DECL_NAME (gen_tmpl), t);
          DECL_CONTEXT (type_decl) = TYPE_CONTEXT (t);
-         TYPE_STUB_DECL (t) = type_decl;
          DECL_SOURCE_LOCATION (type_decl)
            = DECL_SOURCE_LOCATION (TYPE_STUB_DECL (template_type));
        }
          DECL_SOURCE_LOCATION (type_decl)
            = DECL_SOURCE_LOCATION (TYPE_STUB_DECL (template_type));
        }
index c50863f..9149067 100644 (file)
@@ -1,5 +1,8 @@
 2009-11-13  Jason Merrill  <jason@redhat.com>
 
 2009-11-13  Jason Merrill  <jason@redhat.com>
 
+       PR c++/29363
+       * g++.dg/template/error43.C: New.
+
        PR debug/26965
        * g++.dg/debug/dwarf2/static-data-member2.C: New.
 
        PR debug/26965
        * g++.dg/debug/dwarf2/static-data-member2.C: New.
 
diff --git a/gcc/testsuite/g++.dg/template/error43.C b/gcc/testsuite/g++.dg/template/error43.C
new file mode 100644 (file)
index 0000000..876e018
--- /dev/null
@@ -0,0 +1,9 @@
+// PR c++/29363
+
+template<int> void foo()
+{
+  throw A();                   // { dg-message "declar" }
+  struct A {} a;
+}
+
+template void foo<0>();                // { dg-message "instantiated" }