https://gcc.gnu.org/bugzilla/show_bug.cgi?id=92412
Martin Sebor <msebor at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|UNCONFIRMED |ASSIGNED Last reconfirmed| |2019-11-07 Assignee|unassigned at gcc dot gnu.org |msebor at gcc dot gnu.org Ever confirmed|0 |1 --- Comment #1 from Martin Sebor <msebor at gcc dot gnu.org> --- The otherwise untested change below allows the test case to be optimized as I expect: index fee4cc271cd..2af88f4dff3 100644 --- a/gcc/targhooks.c +++ b/gcc/targhooks.c @@ -1415,9 +1415,12 @@ default_ref_may_alias_errno (ao_ref *ref) if (TYPE_UNSIGNED (TREE_TYPE (base)) || TYPE_MODE (TREE_TYPE (base)) != TYPE_MODE (integer_type_node)) return false; - /* The default implementation assumes an errno location - declaration is never defined in the current compilation unit. */ + /* The default implementation assumes an errno location declaration + is never defined in the current compilation unit and be aliased + by a local or read-only variable. */ if (DECL_P (base) + && DECL_EXTERNAL (base) + && !TREE_READONLY (base) && !TREE_STATIC (base)) return true; else if (TREE_CODE (base) == MEM_REF