pt.c (do_type_instantiation): Fix typo.
authorJason Merrill <jason@yorick.cygnus.com>
Wed, 12 Nov 1997 19:50:15 +0000 (19:50 +0000)
committerJason Merrill <jason@gcc.gnu.org>
Wed, 12 Nov 1997 19:50:15 +0000 (14:50 -0500)
* pt.c (do_type_instantiation): Fix typo.
(mark_class_instantiated): If we support one_only but not weak
symbols, don't mark this as known.

* init.c (build_new): Handle cookies in EH cleanup.

From-SVN: r16444

gcc/cp/ChangeLog
gcc/cp/init.c
gcc/cp/pt.c

index b08ba7097f98235bef621b7cd005977310423c6e..68f93f0367597b0e80badfae92f4e314d2be4b8f 100644 (file)
@@ -1,3 +1,11 @@
+Wed Nov 12 11:04:33 1997  Jason Merrill  <jason@yorick.cygnus.com>
+
+       * pt.c (do_type_instantiation): Fix typo.
+       (mark_class_instantiated): If we support one_only but not weak 
+       symbols, don't mark this as known.
+
+       * init.c (build_new): Handle cookies in EH cleanup.
+
 Wed Nov 12 08:11:55 1997  Benjamin Kosnik  <bkoz@rhino.cygnus.com>
 
        * call.c (build_method_call): Call complete_type before checking
index 5c02d053bdd46ccfdd05283406d531ce6f54b53e..48fe7a4a2c88aacff4ace81837bdf970bcc78c2e 100644 (file)
@@ -2715,13 +2715,20 @@ build_new (placement, decl, init, use_global_new)
        {
          tree cleanup;
 
+         if (use_cookie)
+           cleanup = build (MINUS_EXPR, TREE_TYPE (alloc_expr),
+                            alloc_expr, BI_header_size);
+         else
+           cleanup = alloc_expr;
+
          if (! use_global_new && TYPE_LANG_SPECIFIC (true_type)
              && (TYPE_GETS_DELETE (true_type) & (1 << has_array)))
-           cleanup = build_opfncall (DELETE_EXPR, LOOKUP_NORMAL,
-                                     alloc_expr, size, NULL_TREE);
+           cleanup = build_opfncall (has_array? VEC_DELETE_EXPR : DELETE_EXPR,
+                                     LOOKUP_NORMAL, cleanup, size, NULL_TREE);
          else
            cleanup = build_builtin_call
-             (void_type_node, BID, build_expr_list (NULL_TREE, alloc_expr));
+             (void_type_node, has_array ? BIVD : BID,
+              build_expr_list (NULL_TREE, cleanup));
                                         
          rval = build (TRY_CATCH_EXPR, TREE_TYPE (rval), rval, cleanup);
          rval = build (COMPOUND_EXPR, TREE_TYPE (rval), alloc_expr, rval);
index b02ff634bb38040d6a7f65bd4c76ebcce6d5af9f..dffe1bf2da9c002de0f7d46c2ce88d542c8e5699 100644 (file)
@@ -3988,6 +3988,9 @@ mark_decl_instantiated (result, extern_p)
     {
       DECL_INTERFACE_KNOWN (result) = 1;
       DECL_NOT_REALLY_EXTERN (result) = 1;
+
+      /* For WIN32 we also want to put explicit instantiations in
+        linkonce sections.  */
       if (supports_one_only () && ! SUPPORTS_WEAK)
        comdat_linkage (result);
     }
@@ -4323,8 +4326,16 @@ mark_class_instantiated (t, extern_p)
      int extern_p;
 {
   SET_CLASSTYPE_EXPLICIT_INSTANTIATION (t);
-  SET_CLASSTYPE_INTERFACE_KNOWN (t);
-  CLASSTYPE_INTERFACE_ONLY (t) = extern_p;
+
+  if (supports_one_only () && ! SUPPORTS_WEAK)
+    /* For WIN32 we also want to put explicit instantiations in
+       linkonce sections.  */;
+  else
+    {
+      SET_CLASSTYPE_INTERFACE_KNOWN (t);
+      CLASSTYPE_INTERFACE_ONLY (t) = extern_p;
+    }
+
   CLASSTYPE_VTABLE_NEEDS_WRITING (t) = ! extern_p;
   TYPE_DECL_SUPPRESS_DEBUG (TYPE_NAME (t)) = extern_p;
   if (! extern_p)
@@ -4399,7 +4410,7 @@ do_type_instantiation (t, storage)
 
     if (! static_p)
       for (tmp = TYPE_METHODS (t); tmp; tmp = TREE_CHAIN (tmp))
-       if (TREE_CODE (t) == FUNCTION_DECL
+       if (TREE_CODE (tmp) == FUNCTION_DECL
            && DECL_TEMPLATE_INSTANTIATION (tmp))
          {
            mark_decl_instantiated (tmp, extern_p);