https://gcc.gnu.org/bugzilla/show_bug.cgi?id=92123
--- Comment #17 from Tobias Burnus <burnus at gcc dot gnu.org> --- (In reply to Thomas Koenig from comment #16) > Is there a specification (or even description) for fn spec somewhere? > I can't say I understand exactly what it does. Maybe gimple.c's gimple_call_arg_flags: case 'x': case 'X': return EAF_UNUSED; case 'R': return EAF_DIRECT | EAF_NOCLOBBER | EAF_NOESCAPE; case 'r': return EAF_NOCLOBBER | EAF_NOESCAPE; case 'W': return EAF_DIRECT | EAF_NOESCAPE; case 'w': return EAF_NOESCAPE; case '.': default: return 0; + tree-into-ssa.c's pass_build_ssa::execute if (TREE_STRING_POINTER (fnspec)[i] == 'R' || TREE_STRING_POINTER (fnspec)[i] == 'r') { tree name = ssa_default_def (fun, arg); if (name) SSA_NAME_POINTS_TO_READONLY_MEMORY (name) = 1; } + decl_return_flags in calls.c: switch (TREE_STRING_POINTER (attr)[0]) { case '1': case '2': case '3': case '4': return ERF_RETURNS_ARG | (TREE_STRING_POINTER (attr)[0] - '1'); case 'm': return ERF_NOALIAS; case '.': default: return 0; } The constants are defined in tree-core.h. The name 'fn spec' contains a space to make it only internally available, hence, also not well documented.