On 9/17/19 8:49 AM, Richard Sandiford wrote: > For SVE, we'd like the frontends to check calls to target-specific > built-in functions in the same way that they already do for "normal" > builtins. This patch adds a target hook for that and extends > check_builtin_function_arguments accordingly. > > A slight complication is that when TARGET_RESOLVE_OVERLOADED_BUILTIN > has resolved an overload, it can use build_function_call_vec to build > the call to the underlying non-overloaded function decl. This in > turn coerces the arguments to the function type and then calls > check_builtin_function_arguments to check the final call. If the > target does find a problem in this final call, it can be useful > to refer to the original overloaded function decl in diagnostics, > since that's what the user wrote. The patch therefore passes the > original decl as a final optional parameter to build_function_call_vec. > > Tested on aarch64-linux-gnu and x86_64-linux-gnu. Also tested with the > follow-on SVE changes that make use of this. OK to install? > > Richard > > > 2019-09-17 Richard Sandiford <richard.sandif...@arm.com> > > gcc/ > * target.def (check_builtin_call): New target hook. > * doc/tm.texi.in (TARGET_CHECK_BUILTIN_CALL): New @hook. > * doc/tm.texi: Regenerate. > > gcc/c-family/ > * c-common.h (build_function_call_vec): Take the original > function decl as an optional final parameter. > (check_builtin_function_arguments): Take the original function decl. > * c-common.c (check_builtin_function_arguments): Likewise. > Handle all built-in functions, not just BUILT_IN_NORMAL ones. > Use targetm.check_builtin_call to check BUILT_IN_MD functions. > > gcc/c/ > * c-typeck.c (build_function_call_vec): Take the original function > decl as an optional final parameter. Pass all built-in calls to > check_builtin_function_arguments. > > gcc/cp/ > * cp-tree.h (build_cxx_call): Take the original function decl > as an optional final parameter. > (cp_build_function_call_vec): Likewise. > * call.c (build_cxx_call): Likewise. Pass all built-in calls to > check_builtin_function_arguments. > * typeck.c (build_function_call_vec): Take the original function > decl as an optional final parameter and pass it to > cp_build_function_call_vec. > (cp_build_function_call_vec): Take the original function > decl as an optional final parameter and pass it to build_cxx_call. LGTM.
jeff