Alfie Richards <alfie.richa...@arm.com> writes:
> diff --git a/gcc/doc/tm.texi b/gcc/doc/tm.texi
> index 5e305643b3a..253ea6dd77f 100644
> --- a/gcc/doc/tm.texi
> +++ b/gcc/doc/tm.texi
> @@ -12268,6 +12268,11 @@ function version at run-time for a given set of 
> function versions.
>  body must be generated.
>  @end deftypefn
>  
> +@deftypefn {Target Hook} bool TARGET_REJECT_FUNCTION_CLONE_VERSION 
> (string_slice @var{str}, location_t @var{loc})
> +This hook is used to ignore versions specified in a target_clones

Markup nit: @code{target_clones}

> +annotation. @var{str} is the version to be considered.
> +@end deftypefn
> +

Sorry to be awkward, and sorry if this conflicts with another review,
but I think this interface falls between two stools.  Passing a location
means that the hook can report an error in its own right, but not passing
a quiet/report flag means that the hook can't tell when it is being called
as a pure query.

It might be more consistent to either:

(1) Make this hook a pure query that doesn't take a location_t and
    doesn't report errors directly.  Like you say, this would require
    more refactoring of the RISC-V code.  It would also deny targets the
    opportunity to report more bespoke diagnostics.

(2) Delegate all diagnostics to the hook, with a parameter to say when
    no diagnostic is needed.  The aarch64 version would then do:

          warning (OPT_Wattributes,
                   "invalid %<target_clones%> version %qB ignored",
                   &v);

    itself.  It could also report a specific feature that wasn't
    recognised, rather than reporting the full string.

(2) seems better to me, but I suppose it means more duplication
between targets.

It might be better to use a positive or neutral name, to avoid double
negatives.  Maybe something like check_* or verify_*?

Thanks,
Richard

Reply via email to