https://gcc.gnu.org/bugzilla/show_bug.cgi?id=92754
--- Comment #2 from Tobias Burnus <burnus at gcc dot gnu.org> --- Created attachment 47407 --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=47407&action=edit Lightly tested patch (In reply to Martin Liška from comment #1) > Confirmed, started with r218068, it was rejected before the revision. Which is from 2014 - 5 years ago … I am not sure whether it then really makes sense to add someone as CC :-) The problem is that gfc_finish_var_decl's 690 else if (sym->module && !sym->attr.result && !sym->attr.dummy) is evaluated as true for the 'max' function as sym->module is "(intrinsic)" but it is still marked as sym->attr.flavor == FL_VARIABLE and sym->attr.function == 0 Or in other words, gfc_intrinsic_func_interface does: expr->value.function.isym = specific; if (!expr->symtree->n.sym->module) gfc_intrinsic_symbol (expr->symtree->n.sym); which updates expr->value.function and sets expr->symtree->n.sym to intrinsic, but otherwise, expr->symtree->n.sym is still FL_UNKNOWN and attr.function = 0. As this is now fine, resolve_unknown_f returns and nothing happens later. (The expr type is expr->type == EXPR_CONST). Something like the following seems to work. But one really needs to do something like that for all gfc_intrinsic_func_interface calls, e.g. by adding such a resolve call to gfc_intrinsic_func_interface itself.