diff --git a/gcc/builtins.c b/gcc/builtins.c index ecc12e69c146..cd30de8bfb03 100644 --- a/gcc/builtins.c +++ b/gcc/builtins.c @@ -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; diff --git a/gcc/tree.c b/gcc/tree.c index 52a145dd0181..72311005f57b 100644 --- a/gcc/tree.c +++ b/gcc/tree.c @@ -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",