Skip to content
Snippets Groups Projects
Commit c6447c20 authored by Richard Sandiford's avatar Richard Sandiford Committed by Richard Sandiford
Browse files

[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
parent 18908a56
No related branches found
No related tags found
Loading
Loading
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment