From: Richard Biener Date: Mon, 11 Dec 2023 09:08:24 +0000 (+0100) Subject: ipa/92606 - properly handle no_icf attribute for variables X-Git-Tag: basepoints/gcc-15~3681 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=eee13a3730bd1d7aa7b40687b1ee49c17d95159f;p=thirdparty%2Fgcc.git ipa/92606 - properly handle no_icf attribute for variables The following adds no_icf handling for variables where the attribute was rejected. It also fixes the check for no_icf by checking both the source and the targets decl. PR ipa/92606 gcc/c-family/ * c-attribs.cc (handle_noicf_attribute): Also allow the attribute on global variables. gcc/ * ipa-icf.cc (sem_item_optimizer::merge_classes): Check both source and alias for the no_icf attribute. * doc/extend.texi (no_icf): Document variable attribute. --- diff --git a/gcc/c-family/c-attribs.cc b/gcc/c-family/c-attribs.cc index 854e987dc79b..a3671fe3a572 100644 --- a/gcc/c-family/c-attribs.cc +++ b/gcc/c-family/c-attribs.cc @@ -1649,7 +1649,8 @@ handle_noicf_attribute (tree *node, tree name, tree ARG_UNUSED (args), int ARG_UNUSED (flags), bool *no_add_attrs) { - if (TREE_CODE (*node) != FUNCTION_DECL) + if (TREE_CODE (*node) != FUNCTION_DECL + && (TREE_CODE (*node) != VAR_DECL || !is_global_var (*node))) { warning (OPT_Wattributes, "%qE attribute ignored", name); *no_add_attrs = true; diff --git a/gcc/doc/extend.texi b/gcc/doc/extend.texi index e8b5e771f7a0..f0c789f6cb4a 100644 --- a/gcc/doc/extend.texi +++ b/gcc/doc/extend.texi @@ -8152,6 +8152,11 @@ script to place the sections with the @code{.persistent} prefix in the right location. Specifically, some type of non-volatile, writeable memory is required. +@cindex @code{no_icf} variable attribute +@item no_icf +This variable attribute prevents a variable from being merged with another +equivalent variable. + @cindex @code{objc_nullability} variable attribute @item objc_nullability (@var{nullability kind}) @r{(Objective-C and Objective-C++ only)} This attribute applies to pointer variables only. It allows marking the diff --git a/gcc/ipa-icf.cc b/gcc/ipa-icf.cc index 81232d5706e1..e27536d73a96 100644 --- a/gcc/ipa-icf.cc +++ b/gcc/ipa-icf.cc @@ -3422,7 +3422,8 @@ sem_item_optimizer::merge_classes (unsigned int prev_class_count, alias->node->dump_asm_name ()); } - if (lookup_attribute ("no_icf", DECL_ATTRIBUTES (alias->decl))) + if (lookup_attribute ("no_icf", DECL_ATTRIBUTES (alias->decl)) + || lookup_attribute ("no_icf", DECL_ATTRIBUTES (source->decl))) { if (dump_enabled_p ()) dump_printf_loc (MSG_OPTIMIZED_LOCATIONS, loc,