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.

Reply via email to