[C][C++] Allow targets to check calls to BUILT_IN_MD functions
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. 2019-09-27 Richard Sandiford <richard.sandiford@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. From-SVN: r276176
Showing
- gcc/ChangeLog 6 additions, 0 deletionsgcc/ChangeLog
- gcc/c-family/ChangeLog 9 additions, 0 deletionsgcc/c-family/ChangeLog
- gcc/c-family/c-common.c 15 additions, 3 deletionsgcc/c-family/c-common.c
- gcc/c-family/c-common.h 3 additions, 2 deletionsgcc/c-family/c-common.h
- gcc/c/ChangeLog 6 additions, 0 deletionsgcc/c/ChangeLog
- gcc/c/c-typeck.c 9 additions, 4 deletionsgcc/c/c-typeck.c
- gcc/cp/ChangeLog 13 additions, 0 deletionsgcc/cp/ChangeLog
- gcc/cp/call.c 7 additions, 3 deletionsgcc/cp/call.c
- gcc/cp/cp-tree.h 4 additions, 2 deletionsgcc/cp/cp-tree.h
- gcc/cp/typeck.c 9 additions, 7 deletionsgcc/cp/typeck.c
- gcc/doc/tm.texi 15 additions, 0 deletionsgcc/doc/tm.texi
- gcc/doc/tm.texi.in 2 additions, 0 deletionsgcc/doc/tm.texi.in
- gcc/target.def 18 additions, 0 deletionsgcc/target.def
Loading
Please register or sign in to comment