mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-03-19 08:30:28 +08:00
fix __builtin___clear_cache overrider fallout
Machines that had CLEAR_CACHE_INSN and that would thus issue calls to __clear_cache with the default call expander, would fail on languages that did not set up the __clear_cache builtin. This patch arranges for all languages to set up this builtin. Machines or multilibs that had ptr_mode != Pmode, such as aarch64 with -mabi=ilp32, would fail the RTL mode test of the arguments passed to __clear_cache, because we'd insist on ptr_mode. This patch arranges for Pmode to be accepted as well. for gcc/ChangeLog * tree.c (build_common_builtin_nodes): Declare __builtin___clear_cache for all languages. * builtins.c (maybe_emit_call_builtin___clear_cache): Accept Pmode arguments.
This commit is contained in:
parent
44ac1ea0e2
commit
442b6fb7c0
@ -7793,7 +7793,8 @@ default_emit_call_builtin___clear_cache (rtx begin, rtx end)
|
||||
void
|
||||
maybe_emit_call_builtin___clear_cache (rtx begin, rtx end)
|
||||
{
|
||||
if (GET_MODE (begin) != ptr_mode || GET_MODE (end) != ptr_mode)
|
||||
if ((GET_MODE (begin) != ptr_mode && GET_MODE (begin) != Pmode)
|
||||
|| (GET_MODE (end) != ptr_mode && GET_MODE (end) != Pmode))
|
||||
{
|
||||
error ("both arguments to %<__builtin___clear_cache%> must be pointers");
|
||||
return;
|
||||
|
@ -10733,6 +10733,12 @@ build_common_builtin_nodes (void)
|
||||
|
||||
ftype = build_function_type_list (void_type_node,
|
||||
ptr_type_node, ptr_type_node, NULL_TREE);
|
||||
if (!builtin_decl_explicit_p (BUILT_IN_CLEAR_CACHE))
|
||||
local_define_builtin ("__builtin___clear_cache", ftype,
|
||||
BUILT_IN_CLEAR_CACHE,
|
||||
"__builtin___clear_cache",
|
||||
ECF_NOTHROW);
|
||||
|
||||
local_define_builtin ("__builtin_nonlocal_goto", ftype,
|
||||
BUILT_IN_NONLOCAL_GOTO,
|
||||
"__builtin_nonlocal_goto",
|
||||
|
Loading…
x
Reference in New Issue
Block a user