OSDN Git Service

* decl.c (grokdeclarator): Amend comment.
authormmitchel <mmitchel@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 26 Aug 1999 04:19:52 +0000 (04:19 +0000)
committermmitchel <mmitchel@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 26 Aug 1999 04:19:52 +0000 (04:19 +0000)
* except.c (expand_start_catch_block): Call push_template_decl for
catch-block parameters.
* method.c (synthesize_method): Build an empty compound statement
for the body of a constructor.

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

gcc/cp/ChangeLog
gcc/cp/decl.c
gcc/cp/except.c
gcc/cp/method.c
gcc/testsuite/g++.old-deja/g++.eh/tmpl4.C [new file with mode: 0644]

index 3395ca9..3fa07ec 100644 (file)
@@ -1,3 +1,11 @@
+1999-08-25  Mark Mitchell  <mark@codesourcery.com>
+
+       * decl.c (grokdeclarator): Amend comment.
+       * except.c (expand_start_catch_block): Call push_template_decl for
+       catch-block parameters.
+       * method.c (synthesize_method): Build an empty compound statement
+       for the body of a constructor.
+
 1999-08-25  Jason Merrill  <jason@yorick.cygnus.com>
 
        * tree.c (cp_build_qualified_type_real): If we're asking for the
index 3d16537..8d929ad 100644 (file)
@@ -11067,10 +11067,8 @@ grokdeclarator (declarator, declspecs, decl_context, initialized, attrlist)
 
            if (staticp)
              {
-               /* C++ allows static class members.
-                  All other work for this is done by grokfield.
-                  This VAR_DECL is built by build_lang_decl.
-                  All other VAR_DECLs are built by build_decl.  */
+               /* C++ allows static class members.  All other work
+                  for this is done by grokfield.  */
                decl = build_lang_decl (VAR_DECL, declarator, type);
                TREE_STATIC (decl) = 1;
                /* In class context, 'static' means public access.  */
index 3a6b9dd..4f8ad7b 100644 (file)
@@ -524,6 +524,8 @@ expand_start_catch_block (declspecs, declarator)
        {
          decl = grokdeclarator (declarator, declspecs, CATCHPARM,
                                 1, NULL_TREE);
+         if (processing_template_decl)
+           decl = push_template_decl (decl);
          pushdecl (decl);
          add_decl_stmt (decl);
        }
index ea76855..e39da7e 100644 (file)
@@ -2386,7 +2386,13 @@ synthesize_method (fndecl)
       if (arg_chain != void_list_node)
        do_build_copy_constructor (fndecl);
       else if (TYPE_NEEDS_CONSTRUCTING (current_class_type))
-       setup_vtbl_ptr ();
+       {
+         tree compound_stmt;
+
+         setup_vtbl_ptr ();
+         compound_stmt = begin_compound_stmt (/*has_no_scope=*/0);
+         finish_compound_stmt (/*has_no_scope=*/0, compound_stmt);
+       }
     }
 
   finish_function (lineno, 0, nested);
diff --git a/gcc/testsuite/g++.old-deja/g++.eh/tmpl4.C b/gcc/testsuite/g++.old-deja/g++.eh/tmpl4.C
new file mode 100644 (file)
index 0000000..1f79981
--- /dev/null
@@ -0,0 +1,11 @@
+// Build don't link:
+// Origin: Mark Mitchell <mark@codesourcery.com>
+
+template <class T> void test(){
+  try {
+  }
+  catch(int x){
+  }
+}
+
+template void test<int>();