On 5/9/24 14:20, Jakub Jelinek wrote:
On Thu, Apr 25, 2024 at 11:30:48AM -0400, Jason Merrill wrote:
Hmm, maybe maybe_clone_body shouldn't clear DECL_SAVED_TREE for aliases, but
rather set it to some stub like void_node?

Though with all these changes, it's probably better to go with your first
patch for GCC 14 and delay this approach to 15.  Your v1 patch is OK for 14.

Ok, here is an updated patch, which sets DECL_SAVED_TREE to void_node for
the aliases together with reversion of the earlier committed patch.

Bootstrapped/regtested on x86_64-linux and i686-linux, ok for trunk?

2024-05-09  Jakub Jelinek  <ja...@redhat.com>
            Jason Merrill  <ja...@redhat.com>

        PR lto/113208
        * cp-tree.h (maybe_optimize_cdtor): Remove.
        * decl2.cc (tentative_decl_linkage): Call maybe_make_one_only
        for implicit instantiations of maybe in charge ctors/dtors
        declared inline.
        (import_export_decl): Don't call maybe_optimize_cdtor.
        (c_parse_final_cleanups): Formatting fixes.
        * optimize.cc (can_alias_cdtor): Adjust condition, for
        HAVE_COMDAT_GROUP && DECL_ONE_ONLY && DECL_WEAK return true even
        if not DECL_INTERFACE_KNOWN.

--- gcc/cp/optimize.cc.jj       2024-04-25 20:33:30.771858912 +0200
+++ gcc/cp/optimize.cc  2024-05-09 17:10:23.920478922 +0200
@@ -220,10 +220,8 @@ can_alias_cdtor (tree fn)
    gcc_assert (DECL_MAYBE_IN_CHARGE_CDTOR_P (fn));
    /* Don't use aliases for weak/linkonce definitions unless we can put both
       symbols in the same COMDAT group.  */
-  return (DECL_INTERFACE_KNOWN (fn)
-         && (SUPPORTS_ONE_ONLY || !DECL_WEAK (fn))
-         && (!DECL_ONE_ONLY (fn)
-             || (HAVE_COMDAT_GROUP && DECL_WEAK (fn))));
+  return (DECL_WEAK (fn) ? (HAVE_COMDAT_GROUP && DECL_ONE_ONLY (fn))
+                        : (DECL_INTERFACE_KNOWN (fn) && !DECL_ONE_ONLY (fn)));

Hmm, would

(DECL_ONE_ONLY (fn) ? HAVE_COMDAT_GROUP
 : (DECL_INTERFACE_KNOWN (fn) && !DECL_WEAK (fn)))

make sense instead?  I don't think DECL_WEAK is necessary for COMDAT.

Jason

Reply via email to