https://gcc.gnu.org/bugzilla/show_bug.cgi?id=100988
Bug ID: 100988 Summary: Missed optimization: RESTRICT missing for optional arguments Product: gcc Version: 12.0 Status: UNCONFIRMED Keywords: missed-optimization Severity: normal Priority: P3 Component: fortran Assignee: unassigned at gcc dot gnu.org Reporter: burnus at gcc dot gnu.org Target Milestone: --- For subroutine foo(a, b) integer :: a, b optional :: b ... end subroutine only the TREE_TYPE of 'a' has the restrict qualifier – and not 'b'. I think that there is no good reason for this – and wonder whether the following should be applied: diff --git a/gcc/fortran/trans-types.c b/gcc/fortran/trans-types.c index 5582e404df9..c4b4387c1e2 100644 --- a/gcc/fortran/trans-types.c +++ b/gcc/fortran/trans-types.c @@ -2338,11 +2338,9 @@ gfc_sym_type (gfc_symbol * sym) || (sym->ns->proc_name && sym->ns->proc_name->attr.entry_master)) type = build_pointer_type (type); else - { - type = build_reference_type (type); - if (restricted) - type = build_qualified_type (type, TYPE_QUAL_RESTRICT); - } + type = build_reference_type (type); + if (restricted) + type = build_qualified_type (type, TYPE_QUAL_RESTRICT); } return (type);