https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99587
Richard Biener <rguenth at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Last reconfirmed| |2021-03-15 Status|UNCONFIRMED |NEW Ever confirmed|0 |1 --- Comment #1 from Richard Biener <rguenth at gcc dot gnu.org> --- The attribute is ignored because 'a' is exported, so it's retained anyway (but not marked as SHF_GNU_RETAIN). Not sure what the desired semantics of the attribute are here. static tree handle_retain_attribute (tree *pnode, tree name, tree ARG_UNUSED (args), int ARG_UNUSED (flags), bool *no_add_attrs) { tree node = *pnode; if (SUPPORTS_SHF_GNU_RETAIN && (TREE_CODE (node) == FUNCTION_DECL || (VAR_P (node) && TREE_STATIC (node)))) ; else { warning (OPT_Wattributes, "%qE attribute ignored", name); in particular 'a' is not TREE_STATIC. Maybe !DECL_EXTERNAL was intended here to ignore it on extern int a; ?