diff --git a/build/pkgs/gcc/checksums.ini b/build/pkgs/gcc/checksums.ini index 996f8360f45..0ee81105b4b 100644 --- a/build/pkgs/gcc/checksums.ini +++ b/build/pkgs/gcc/checksums.ini @@ -1,5 +1,5 @@ tarball=gcc-VERSION.tar.xz -sha1=5dce6dc0091b8049b530d1587513a07201691760 -md5=73bafd0af874439dcdb9fc063b6fb069 -cksum=2807184004 +sha1=85d66f058688db1e18545b6c4cf67ecc83d3b7eb +md5=58a863b2a50e4d42eacc20fec419bc3b +cksum=4107010356 upstream_url=https://mirrors.kernel.org/gnu/gcc/gcc-VERSION/gcc-VERSION.tar.xz diff --git a/build/pkgs/gcc/package-version.txt b/build/pkgs/gcc/package-version.txt index 685332623b2..4d23cb8e0bd 100644 --- a/build/pkgs/gcc/package-version.txt +++ b/build/pkgs/gcc/package-version.txt @@ -1 +1 @@ -12.2.0 +12.3.0 diff --git a/build/pkgs/gcc/patches/gcc-12.2.0-arm.patch b/build/pkgs/gcc/patches/gcc-12.3.0-arm.patch similarity index 77% rename from build/pkgs/gcc/patches/gcc-12.2.0-arm.patch rename to build/pkgs/gcc/patches/gcc-12.3.0-arm.patch index bcaade28c15..e4476c72655 100644 --- a/build/pkgs/gcc/patches/gcc-12.2.0-arm.patch +++ b/build/pkgs/gcc/patches/gcc-12.3.0-arm.patch @@ -341,7 +341,7 @@ index cf80ae32695..678a897c931 100755 *) cp "$1" "$1.$suf1" diff --git a/fixincludes/configure b/fixincludes/configure -index 6e2d67b655b..b3bca666a4d 100755 +index 0d5cd6967ca..bdcc41f6ddc 100755 --- a/fixincludes/configure +++ b/fixincludes/configure @@ -2644,7 +2644,7 @@ ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. @@ -353,6 +353,299 @@ index 6e2d67b655b..b3bca666a4d 100755 # _LT_SYS_MODULE_PATH_AIX +diff --git a/fixincludes/fixincl.x b/fixincludes/fixincl.x +index bad490453b7..efaedffb8ea 100644 +--- a/fixincludes/fixincl.x ++++ b/fixincludes/fixincl.x +@@ -2,11 +2,11 @@ + * + * DO NOT EDIT THIS FILE (fixincl.x) + * +- * It has been AutoGen-ed February 27, 2022 at 07:47:03 PM by AutoGen 5.18.16 ++ * It has been AutoGen-ed May 6, 2023 at 09:12:07 AM by AutoGen 5.18.7 + * From the definitions inclhack.def + * and the template file fixincl + */ +-/* DO NOT SVN-MERGE THIS FILE, EITHER Sun Feb 27 19:47:03 UTC 2022 ++/* DO NOT SVN-MERGE THIS FILE, EITHER Sat May 6 09:12:07 BST 2023 + * + * You must regenerate it. Use the ./genfixes script. + * +@@ -15,7 +15,7 @@ + * certain ANSI-incompatible system header files which are fixed to work + * correctly with ANSI C and placed in a directory that GNU C will search. + * +- * This file contains 267 fixup descriptions. ++ * This file contains 269 fixup descriptions. + * + * See README for more information. + * +@@ -2608,6 +2608,46 @@ static const char* apzBsd_Stdio_Attrs_ConflictPatch[] = { + int vfscanf(FILE *, const char *, __builtin_va_list) __asm__ (_BSD_STRING(__USER_LABEL_PREFIX__) \"__svfscanf\");", + (char*)NULL }; + ++/* * * * * * * * * * * * * * * * * * * * * * * * * * ++ * ++ * Description of Apple_Local_Stdio_Fn_Deprecation fix ++ */ ++tSCC zApple_Local_Stdio_Fn_DeprecationName[] = ++ "apple_local_stdio_fn_deprecation"; ++ ++/* ++ * File name selection pattern ++ */ ++tSCC zApple_Local_Stdio_Fn_DeprecationList[] = ++ "stdio.h\0"; ++/* ++ * Machine/OS name selection pattern ++ */ ++tSCC* apzApple_Local_Stdio_Fn_DeprecationMachs[] = { ++ "*-*-*darwin2*", ++ (const char*)NULL }; ++ ++/* ++ * content selection pattern - do fix if pattern found ++ */ ++tSCC zApple_Local_Stdio_Fn_DeprecationSelect0[] = ++ "__deprecated_msg([^\n\ ++]*)$"; ++ ++#define APPLE_LOCAL_STDIO_FN_DEPRECATION_TEST_CT 1 ++static tTestDesc aApple_Local_Stdio_Fn_DeprecationTests[] = { ++ { TT_EGREP, zApple_Local_Stdio_Fn_DeprecationSelect0, (regex_t*)NULL }, }; ++ ++/* ++ * Fix Command Arguments for Apple_Local_Stdio_Fn_Deprecation ++ */ ++static const char* apzApple_Local_Stdio_Fn_DeprecationPatch[] = { ++ "format", ++ "#if defined(__APPLE_LOCAL_DEPRECATIONS)\n\ ++%0\n\ ++#endif", ++ (char*)NULL }; ++ + /* * * * * * * * * * * * * * * * * * * * * * * * * * + * + * Description of Ctrl_Quotes_Def fix +@@ -3044,6 +3084,53 @@ static const char* apzDarwin_Os_Trace_2Patch[] = { + #endif", + (char*)NULL }; + ++/* * * * * * * * * * * * * * * * * * * * * * * * * * ++ * ++ * Description of Darwin_Objc_Runtime_1 fix ++ */ ++tSCC zDarwin_Objc_Runtime_1Name[] = ++ "darwin_objc_runtime_1"; ++ ++/* ++ * File name selection pattern ++ */ ++tSCC zDarwin_Objc_Runtime_1List[] = ++ "objc/runtime.h\0"; ++/* ++ * Machine/OS name selection pattern ++ */ ++tSCC* apzDarwin_Objc_Runtime_1Machs[] = { ++ "*-*-darwin2*", ++ (const char*)NULL }; ++ ++/* ++ * content selection pattern - do fix if pattern found ++ */ ++tSCC zDarwin_Objc_Runtime_1Select0[] = ++ "OBJC_EXPORT void.*\n\ ++objc_enumerateClasses.*\n\ ++.*\n\ ++.*\n\ ++.*\n\ ++.*void \\(\\^ _Nonnull block.*\n\ ++.*\n\ ++.*\n\ ++.*OBJC_REFINED_FOR_SWIFT.*"; ++ ++#define DARWIN_OBJC_RUNTIME_1_TEST_CT 1 ++static tTestDesc aDarwin_Objc_Runtime_1Tests[] = { ++ { TT_EGREP, zDarwin_Objc_Runtime_1Select0, (regex_t*)NULL }, }; ++ ++/* ++ * Fix Command Arguments for Darwin_Objc_Runtime_1 ++ */ ++static const char* apzDarwin_Objc_Runtime_1Patch[] = { ++ "format", ++ "#if __BLOCKS__\n\ ++%0\n\ ++#endif", ++ (char*)NULL }; ++ + /* * * * * * * * * * * * * * * * * * * * * * * * * * + * + * Description of Darwin_Os_Trace_3 fix +@@ -10872,9 +10959,9 @@ static const char* apzX11_SprintfPatch[] = { + * + * List of all fixes + */ +-#define REGEX_COUNT 305 ++#define REGEX_COUNT 307 + #define MACH_LIST_SIZE_LIMIT 187 +-#define FIX_COUNT 267 ++#define FIX_COUNT 269 + + /* + * Enumerate the fixes +@@ -10941,6 +11028,7 @@ typedef enum { + BROKEN_CABS_FIXIDX, + BROKEN_NAN_FIXIDX, + BSD_STDIO_ATTRS_CONFLICT_FIXIDX, ++ APPLE_LOCAL_STDIO_FN_DEPRECATION_FIXIDX, + CTRL_QUOTES_DEF_FIXIDX, + CTRL_QUOTES_USE_FIXIDX, + CXX_UNREADY_FIXIDX, +@@ -10952,6 +11040,7 @@ typedef enum { + DARWIN_LONGJMP_NORETURN_FIXIDX, + DARWIN_OS_TRACE_1_FIXIDX, + DARWIN_OS_TRACE_2_FIXIDX, ++ DARWIN_OBJC_RUNTIME_1_FIXIDX, + DARWIN_OS_TRACE_3_FIXIDX, + DARWIN_OS_BASE_1_FIXIDX, + DARWIN_DISPATCH_OBJECT_1_FIXIDX, +@@ -11455,6 +11544,11 @@ tFixDesc fixDescList[ FIX_COUNT ] = { + BSD_STDIO_ATTRS_CONFLICT_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE, + aBsd_Stdio_Attrs_ConflictTests, apzBsd_Stdio_Attrs_ConflictPatch, 0 }, + ++ { zApple_Local_Stdio_Fn_DeprecationName, zApple_Local_Stdio_Fn_DeprecationList, ++ apzApple_Local_Stdio_Fn_DeprecationMachs, ++ APPLE_LOCAL_STDIO_FN_DEPRECATION_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE, ++ aApple_Local_Stdio_Fn_DeprecationTests, apzApple_Local_Stdio_Fn_DeprecationPatch, 0 }, ++ + { zCtrl_Quotes_DefName, zCtrl_Quotes_DefList, + apzCtrl_Quotes_DefMachs, + CTRL_QUOTES_DEF_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE, +@@ -11510,6 +11604,11 @@ tFixDesc fixDescList[ FIX_COUNT ] = { + DARWIN_OS_TRACE_2_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE, + aDarwin_Os_Trace_2Tests, apzDarwin_Os_Trace_2Patch, 0 }, + ++ { zDarwin_Objc_Runtime_1Name, zDarwin_Objc_Runtime_1List, ++ apzDarwin_Objc_Runtime_1Machs, ++ DARWIN_OBJC_RUNTIME_1_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE, ++ aDarwin_Objc_Runtime_1Tests, apzDarwin_Objc_Runtime_1Patch, 0 }, ++ + { zDarwin_Os_Trace_3Name, zDarwin_Os_Trace_3List, + apzDarwin_Os_Trace_3Machs, + DARWIN_OS_TRACE_3_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE, +diff --git a/fixincludes/inclhack.def b/fixincludes/inclhack.def +index 7605ac89aa2..96cfaa4792d 100644 +--- a/fixincludes/inclhack.def ++++ b/fixincludes/inclhack.def +@@ -1269,6 +1269,18 @@ fix = { + test_text = '#define vfscanf __svfscanf'; + }; + ++fix = { ++ hackname = apple_local_stdio_fn_deprecation; ++ mach = "*-*-*darwin2*"; ++ files = stdio.h; ++ select = "__deprecated_msg([^\n]*)$"; ++ c_fix = format; ++ c_fix_arg = "#if defined(__APPLE_LOCAL_DEPRECATIONS)\n" ++ "%0\n" ++ "#endif"; ++ test_text = '__deprecated_msg("This function is provided for compat...")'; ++}; ++ + /* + * Fix various macros used to define ioctl numbers. + * The traditional syntax was: +@@ -1479,6 +1491,41 @@ fix = { + test_text = "typedef void (^os_trace_payload_t)(xpc_object_t xdict);"; + }; + ++/* ++ * macOSX 13.0 SDK objc/runtime.h uses Apple Blocks extension without a guard. ++ */ ++ ++fix = { ++ hackname = darwin_objc_runtime_1; ++ mach = "*-*-darwin2*"; ++ files = objc/runtime.h; ++ select = <<- _EOSelect_ ++ OBJC_EXPORT void.* ++ objc_enumerateClasses.* ++ .* ++ .* ++ .* ++ .*void \(\^ _Nonnull block.* ++ .* ++ .* ++ .*OBJC_REFINED_FOR_SWIFT.* ++ _EOSelect_; ++ c_fix = format; ++ c_fix_arg = "#if __BLOCKS__\n%0\n#endif"; ++ test_text = <<- _OBJC_RUNTIME_1 ++OBJC_EXPORT void ++objc_enumerateClasses(const void * _Nullable image, ++ const char * _Nullable namePrefix, ++ Protocol * _Nullable conformingTo, ++ Class _Nullable subclassing, ++ void (^ _Nonnull block)(Class _Nonnull aClass, BOOL * _Nonnull stop) ++ OBJC_NOESCAPE) ++OBJC_AVAILABLE(13.0, 16.0, 16.0, 9.0, 7.0) ++OBJC_REFINED_FOR_SWIFT; ++_OBJC_RUNTIME_1; ++}; ++ ++ + /* + * In Mac OS X 10.1[012] , need to guard users of + * os_trace_payload_t typedef, too. +diff --git a/fixincludes/tests/base/objc/runtime.h b/fixincludes/tests/base/objc/runtime.h +new file mode 100644 +index 00000000000..8b4855bb8ab +--- /dev/null ++++ b/fixincludes/tests/base/objc/runtime.h +@@ -0,0 +1,24 @@ ++/* DO NOT EDIT THIS FILE. ++ ++ It has been auto-edited by fixincludes from: ++ ++ "fixinc/tests/inc/objc/runtime.h" ++ ++ This had to be done to correct non-standard usages in the ++ original, manufacturer supplied header file. */ ++ ++ ++ ++#if defined( DARWIN_OBJC_RUNTIME_1_CHECK ) ++#if __BLOCKS__ ++OBJC_EXPORT void ++objc_enumerateClasses(const void * _Nullable image, ++ const char * _Nullable namePrefix, ++ Protocol * _Nullable conformingTo, ++ Class _Nullable subclassing, ++ void (^ _Nonnull block)(Class _Nonnull aClass, BOOL * _Nonnull stop) ++ OBJC_NOESCAPE) ++OBJC_AVAILABLE(13.0, 16.0, 16.0, 9.0, 7.0) ++OBJC_REFINED_FOR_SWIFT; ++#endif ++#endif /* DARWIN_OBJC_RUNTIME_1_CHECK */ +diff --git a/fixincludes/tests/base/stdio.h b/fixincludes/tests/base/stdio.h +index 491c75da6e5..38381bacb2d 100644 +--- a/fixincludes/tests/base/stdio.h ++++ b/fixincludes/tests/base/stdio.h +@@ -41,6 +41,13 @@ int vfscanf(FILE *, const char *, __builtin_va_list) __asm__ (_BSD_STRING(__USER + #endif /* BSD_STDIO_ATTRS_CONFLICT_CHECK */ + + ++#if defined( APPLE_LOCAL_STDIO_FN_DEPRECATION_CHECK ) ++#if defined(__APPLE_LOCAL_DEPRECATIONS) ++__deprecated_msg("This function is provided for compat...") ++#endif ++#endif /* APPLE_LOCAL_STDIO_FN_DEPRECATION_CHECK */ ++ ++ + #if defined( HPUX10_STDIO_DECLARATIONS_CHECK ) + # define _iob __iob + diff --git a/gcc/Makefile.in b/gcc/Makefile.in index 31ff95500c9..255a10c2ce8 100644 --- a/gcc/Makefile.in @@ -693,10 +986,10 @@ index 8a0dafc522d..7feb4635656 100644 generate them instead of using descriptors. diff --git a/gcc/config.gcc b/gcc/config.gcc -index c5064dd3766..1562a7bea4b 100644 +index 5c378c698ff..f4887bb9cbb 100644 --- a/gcc/config.gcc +++ b/gcc/config.gcc -@@ -1086,6 +1086,23 @@ case ${target} in +@@ -1089,6 +1089,23 @@ case ${target} in ;; esac @@ -720,7 +1013,7 @@ index c5064dd3766..1562a7bea4b 100644 case ${target} in aarch64*-*-elf | aarch64*-*-fuchsia* | aarch64*-*-rtems*) tm_file="${tm_file} dbxelf.h elfos.h newlib-stdint.h" -@@ -1124,6 +1141,11 @@ aarch64*-*-elf | aarch64*-*-fuchsia* | aarch64*-*-rtems*) +@@ -1127,6 +1144,11 @@ aarch64*-*-elf | aarch64*-*-fuchsia* | aarch64*-*-rtems*) done TM_MULTILIB_CONFIG=`echo $TM_MULTILIB_CONFIG | sed 's/^,//'` ;; @@ -784,7 +1077,7 @@ index 64c27c9cfac..5cd26cac57a 100644 #ifndef USED_FOR_TARGET #undef ICONV_CONST diff --git a/gcc/config/aarch64/aarch64-builtins.cc b/gcc/config/aarch64/aarch64-builtins.cc -index 1b0db677f34..549c9d2c8c2 100644 +index 42276e7caf7..8741d502927 100644 --- a/gcc/config/aarch64/aarch64-builtins.cc +++ b/gcc/config/aarch64/aarch64-builtins.cc @@ -619,6 +619,10 @@ enum aarch64_builtins @@ -892,10 +1185,10 @@ index 1b0db677f34..549c9d2c8c2 100644 break; } diff --git a/gcc/config/aarch64/aarch64-c.cc b/gcc/config/aarch64/aarch64-c.cc -index 767ee0c763c..55ffdbd2f4d 100644 +index a4c407724a7..85efdca601a 100644 --- a/gcc/config/aarch64/aarch64-c.cc +++ b/gcc/config/aarch64/aarch64-c.cc -@@ -369,4 +369,8 @@ aarch64_register_pragmas (void) +@@ -370,4 +370,8 @@ aarch64_register_pragmas (void) targetm.check_builtin_call = aarch64_check_builtin_call; c_register_pragma ("GCC", "aarch64", aarch64_pragma_aarch64); @@ -905,7 +1198,7 @@ index 767ee0c763c..55ffdbd2f4d 100644 +#endif } diff --git a/gcc/config/aarch64/aarch64-protos.h b/gcc/config/aarch64/aarch64-protos.h -index df311812e8d..b84bc8ed68e 100644 +index 475d174dd39..7b1da1b7b8c 100644 --- a/gcc/config/aarch64/aarch64-protos.h +++ b/gcc/config/aarch64/aarch64-protos.h @@ -108,6 +108,14 @@ enum aarch64_symbol_type @@ -931,7 +1224,7 @@ index df311812e8d..b84bc8ed68e 100644 bool aarch64_bitmask_imm (HOST_WIDE_INT val, machine_mode); unsigned HOST_WIDE_INT aarch64_and_split_imm1 (HOST_WIDE_INT val_in); unsigned HOST_WIDE_INT aarch64_and_split_imm2 (HOST_WIDE_INT val_in); -@@ -914,6 +923,7 @@ void aarch64_expand_vector_init (rtx, rtx); +@@ -915,6 +924,7 @@ void aarch64_expand_vector_init (rtx, rtx); void aarch64_sve_expand_vector_init (rtx, rtx); void aarch64_init_cumulative_args (CUMULATIVE_ARGS *, const_tree, rtx, const_tree, unsigned, bool = false); @@ -939,7 +1232,7 @@ index df311812e8d..b84bc8ed68e 100644 void aarch64_init_expanders (void); void aarch64_init_simd_builtins (void); void aarch64_emit_call_insn (rtx); -@@ -988,6 +998,7 @@ void aarch64_override_options_internal (struct gcc_options *); +@@ -989,6 +999,7 @@ void aarch64_override_options_internal (struct gcc_options *); const char *aarch64_general_mangle_builtin_type (const_tree); void aarch64_general_init_builtins (void); @@ -948,7 +1241,7 @@ index df311812e8d..b84bc8ed68e 100644 gimple *aarch64_general_gimple_fold_builtin (unsigned int, gcall *, gimple_stmt_iterator *); diff --git a/gcc/config/aarch64/aarch64.cc b/gcc/config/aarch64/aarch64.cc -index 5c9e7791a12..91258c925a8 100644 +index 226dc9dffd4..13bb3cfed10 100644 --- a/gcc/config/aarch64/aarch64.cc +++ b/gcc/config/aarch64/aarch64.cc @@ -292,8 +292,10 @@ static bool aarch64_vfp_is_call_or_return_candidate (machine_mode, @@ -962,7 +1255,7 @@ index 5c9e7791a12..91258c925a8 100644 static void aarch64_override_options_after_change (void); static bool aarch64_vector_mode_supported_p (machine_mode); static int aarch64_address_cost (rtx, machine_mode, addr_space_t, bool); -@@ -2757,6 +2759,9 @@ static const struct attribute_spec aarch64_attribute_table[] = +@@ -2794,6 +2796,9 @@ static const struct attribute_spec aarch64_attribute_table[] = { "Advanced SIMD type", 1, 1, false, true, false, true, NULL, NULL }, { "SVE type", 3, 3, false, true, false, true, NULL, NULL }, { "SVE sizeless type", 0, 0, false, true, false, true, NULL, NULL }, @@ -972,7 +1265,7 @@ index 5c9e7791a12..91258c925a8 100644 { NULL, 0, 0, false, false, false, false, NULL, NULL } }; -@@ -3973,7 +3978,7 @@ aarch64_hard_regno_mode_ok (unsigned regno, machine_mode mode) +@@ -4010,7 +4015,7 @@ aarch64_hard_regno_mode_ok (unsigned regno, machine_mode mode) if (known_le (GET_MODE_SIZE (mode), 8)) return true; if (known_le (GET_MODE_SIZE (mode), 16)) @@ -981,7 +1274,7 @@ index 5c9e7791a12..91258c925a8 100644 } else if (FP_REGNUM_P (regno)) { -@@ -4019,8 +4024,10 @@ static bool +@@ -4056,8 +4061,10 @@ static bool aarch64_takes_arguments_in_sve_regs_p (const_tree fntype) { CUMULATIVE_ARGS args_so_far_v; @@ -993,7 +1286,7 @@ index 5c9e7791a12..91258c925a8 100644 cumulative_args_t args_so_far = pack_cumulative_args (&args_so_far_v); for (tree chain = TYPE_ARG_TYPES (fntype); -@@ -4505,6 +4512,7 @@ aarch64_load_symref_appropriately (rtx dest, rtx imm, +@@ -4542,6 +4549,7 @@ aarch64_load_symref_appropriately (rtx dest, rtx imm, switch (type) { case SYMBOL_SMALL_ABSOLUTE: @@ -1001,7 +1294,7 @@ index 5c9e7791a12..91258c925a8 100644 { /* In ILP32, the mode of dest can be either SImode or DImode. */ rtx tmp_reg = dest; -@@ -4515,6 +4523,21 @@ aarch64_load_symref_appropriately (rtx dest, rtx imm, +@@ -4552,6 +4560,21 @@ aarch64_load_symref_appropriately (rtx dest, rtx imm, if (can_create_pseudo_p ()) tmp_reg = gen_reg_rtx (mode); @@ -1023,7 +1316,7 @@ index 5c9e7791a12..91258c925a8 100644 emit_move_insn (tmp_reg, gen_rtx_HIGH (mode, copy_rtx (imm))); emit_insn (gen_add_losym (dest, tmp_reg, imm)); return; -@@ -4598,6 +4621,7 @@ aarch64_load_symref_appropriately (rtx dest, rtx imm, +@@ -4635,6 +4658,7 @@ aarch64_load_symref_appropriately (rtx dest, rtx imm, return; } @@ -1031,7 +1324,7 @@ index 5c9e7791a12..91258c925a8 100644 case SYMBOL_SMALL_GOT_4G: emit_insn (gen_rtx_SET (dest, imm)); return; -@@ -6659,6 +6683,7 @@ aarch64_expand_mov_immediate (rtx dest, rtx imm) +@@ -6696,6 +6720,7 @@ aarch64_expand_mov_immediate (rtx dest, rtx imm) case SYMBOL_SMALL_TLSIE: case SYMBOL_SMALL_GOT_28K: case SYMBOL_SMALL_GOT_4G: @@ -1039,7 +1332,7 @@ index 5c9e7791a12..91258c925a8 100644 case SYMBOL_TINY_GOT: case SYMBOL_TINY_TLSIE: if (const_offset != 0) -@@ -6672,6 +6697,7 @@ aarch64_expand_mov_immediate (rtx dest, rtx imm) +@@ -6709,6 +6734,7 @@ aarch64_expand_mov_immediate (rtx dest, rtx imm) /* FALLTHRU */ case SYMBOL_SMALL_ABSOLUTE: @@ -1047,7 +1340,7 @@ index 5c9e7791a12..91258c925a8 100644 case SYMBOL_TINY_ABSOLUTE: case SYMBOL_TLSLE12: case SYMBOL_TLSLE24: -@@ -7251,6 +7277,7 @@ aarch64_return_in_memory (const_tree type, const_tree fndecl ATTRIBUTE_UNUSED) +@@ -7288,6 +7314,7 @@ aarch64_return_in_memory (const_tree type, const_tree fndecl ATTRIBUTE_UNUSED) gcc_unreachable (); } @@ -1055,7 +1348,7 @@ index 5c9e7791a12..91258c925a8 100644 static bool aarch64_vfp_is_call_candidate (cumulative_args_t pcum_v, machine_mode mode, const_tree type, int *nregs) -@@ -7260,6 +7287,7 @@ aarch64_vfp_is_call_candidate (cumulative_args_t pcum_v, machine_mode mode, +@@ -7297,6 +7324,7 @@ aarch64_vfp_is_call_candidate (cumulative_args_t pcum_v, machine_mode mode, &pcum->aapcs_vfp_rmode, nregs, NULL, pcum->silent_p); } @@ -1063,8 +1356,8 @@ index 5c9e7791a12..91258c925a8 100644 /* Given MODE and TYPE of a function argument, return the alignment in bits. The idea is to suppress any stronger alignment requested by -@@ -7343,6 +7371,13 @@ aarch64_layout_arg (cumulative_args_t pcum_v, const function_arg_info &arg) - return; +@@ -7402,6 +7430,13 @@ aarch64_layout_arg (cumulative_args_t pcum_v, const function_arg_info &arg) + gcc_assert (!alignment || abi_break < alignment); pcum->aapcs_arg_processed = true; + if (TARGET_MACHO) @@ -1077,7 +1370,7 @@ index 5c9e7791a12..91258c925a8 100644 pure_scalable_type_info pst_info; if (type && pst_info.analyze_registers (type)) -@@ -7399,13 +7434,29 @@ aarch64_layout_arg (cumulative_args_t pcum_v, const function_arg_info &arg) +@@ -7461,13 +7496,29 @@ aarch64_layout_arg (cumulative_args_t pcum_v, const function_arg_info &arg) /* No frontends can create types with variable-sized modes, so we shouldn't be asked to pass or return them. */ size = GET_MODE_SIZE (mode).to_constant (); @@ -1107,7 +1400,7 @@ index 5c9e7791a12..91258c925a8 100644 gcc_assert (!sve_p || !allocate_nvrn); /* allocate_ncrn may be false-positive, but allocate_nvrn is quite reliable. -@@ -7420,7 +7471,13 @@ aarch64_layout_arg (cumulative_args_t pcum_v, const function_arg_info &arg) +@@ -7484,7 +7535,13 @@ aarch64_layout_arg (cumulative_args_t pcum_v, const function_arg_info &arg) if (!pcum->silent_p && !TARGET_FLOAT) aarch64_err_no_fpadvsimd (mode); @@ -1122,7 +1415,7 @@ index 5c9e7791a12..91258c925a8 100644 { pcum->aapcs_nextnvrn = nvrn + nregs; if (!aarch64_composite_type_p (type, mode)) -@@ -7450,6 +7507,7 @@ aarch64_layout_arg (cumulative_args_t pcum_v, const function_arg_info &arg) +@@ -7514,6 +7571,7 @@ aarch64_layout_arg (cumulative_args_t pcum_v, const function_arg_info &arg) } pcum->aapcs_reg = par; } @@ -1130,7 +1423,7 @@ index 5c9e7791a12..91258c925a8 100644 return; } else -@@ -7466,10 +7524,18 @@ aarch64_layout_arg (cumulative_args_t pcum_v, const function_arg_info &arg) +@@ -7530,10 +7588,18 @@ aarch64_layout_arg (cumulative_args_t pcum_v, const function_arg_info &arg) /* C6 - C9. though the sign and zero extension semantics are handled elsewhere. This is the case where the argument fits entirely general registers. */ @@ -1149,7 +1442,7 @@ index 5c9e7791a12..91258c925a8 100644 /* C.8 if the argument has an alignment of 16 then the NGRN is rounded up to the next even number. */ if (nregs == 2 -@@ -7479,7 +7545,9 @@ aarch64_layout_arg (cumulative_args_t pcum_v, const function_arg_info &arg) +@@ -7543,7 +7609,9 @@ aarch64_layout_arg (cumulative_args_t pcum_v, const function_arg_info &arg) alignment nregs should be > 2 and therefore it should be passed by reference rather than value. */ && (aarch64_function_arg_alignment (mode, type, &abi_break) @@ -1158,9 +1451,9 @@ index 5c9e7791a12..91258c925a8 100644 + /* Darwin PCS deletes rule C.8. */ + && !TARGET_MACHO) { - if (abi_break && warn_psabi && currently_expanding_gimple_stmt) + if (warn_pcs_change && abi_break) inform (input_location, "parameter passing for argument of type " -@@ -7525,8 +7593,8 @@ aarch64_layout_arg (cumulative_args_t pcum_v, const function_arg_info &arg) +@@ -7589,8 +7657,8 @@ aarch64_layout_arg (cumulative_args_t pcum_v, const function_arg_info &arg) } pcum->aapcs_reg = par; } @@ -1170,7 +1463,7 @@ index 5c9e7791a12..91258c925a8 100644 return; } -@@ -7536,10 +7604,87 @@ aarch64_layout_arg (cumulative_args_t pcum_v, const function_arg_info &arg) +@@ -7600,10 +7668,87 @@ aarch64_layout_arg (cumulative_args_t pcum_v, const function_arg_info &arg) /* The argument is passed on stack; record the needed number of words for this argument and align the total size if necessary. */ on_stack: @@ -1261,7 +1554,7 @@ index 5c9e7791a12..91258c925a8 100644 { int new_size = ROUND_UP (pcum->aapcs_stack_size, 16 / UNITS_PER_WORD); if (pcum->aapcs_stack_size != new_size) -@@ -7592,7 +7737,28 @@ aarch64_init_cumulative_args (CUMULATIVE_ARGS *pcum, +@@ -7656,7 +7801,28 @@ aarch64_init_cumulative_args (CUMULATIVE_ARGS *pcum, pcum->aapcs_arg_processed = false; pcum->aapcs_stack_words = 0; pcum->aapcs_stack_size = 0; @@ -1290,7 +1583,7 @@ index 5c9e7791a12..91258c925a8 100644 if (!silent_p && !TARGET_FLOAT -@@ -7631,8 +7797,10 @@ aarch64_function_arg_advance (cumulative_args_t pcum_v, +@@ -7695,8 +7861,10 @@ aarch64_function_arg_advance (cumulative_args_t pcum_v, || pcum->pcs_variant == ARM_PCS_SVE) { aarch64_layout_arg (pcum_v, arg); @@ -1303,7 +1596,7 @@ index 5c9e7791a12..91258c925a8 100644 pcum->aapcs_arg_processed = false; pcum->aapcs_ncrn = pcum->aapcs_nextncrn; pcum->aapcs_nvrn = pcum->aapcs_nextnvrn; -@@ -7640,6 +7808,12 @@ aarch64_function_arg_advance (cumulative_args_t pcum_v, +@@ -7704,6 +7872,12 @@ aarch64_function_arg_advance (cumulative_args_t pcum_v, pcum->aapcs_stack_size += pcum->aapcs_stack_words; pcum->aapcs_stack_words = 0; pcum->aapcs_reg = NULL_RTX; @@ -1316,7 +1609,7 @@ index 5c9e7791a12..91258c925a8 100644 } } -@@ -7650,12 +7824,15 @@ aarch64_function_arg_regno_p (unsigned regno) +@@ -7714,12 +7888,15 @@ aarch64_function_arg_regno_p (unsigned regno) || (FP_REGNUM_P (regno) && regno < V0_REGNUM + NUM_FP_ARG_REGS)); } @@ -1338,7 +1631,7 @@ index 5c9e7791a12..91258c925a8 100644 static unsigned int aarch64_function_arg_boundary (machine_mode mode, const_tree type) -@@ -7663,6 +7840,71 @@ aarch64_function_arg_boundary (machine_mode mode, const_tree type) +@@ -7727,8 +7904,73 @@ aarch64_function_arg_boundary (machine_mode mode, const_tree type) unsigned int abi_break; unsigned int alignment = aarch64_function_arg_alignment (mode, type, &abi_break); @@ -1356,8 +1649,8 @@ index 5c9e7791a12..91258c925a8 100644 + return MIN (MAX (alignment, PARM_BOUNDARY), STACK_BOUNDARY); + return MIN (alignment, STACK_BOUNDARY); +#else -+ alignment = MIN (MAX (alignment, PARM_BOUNDARY), STACK_BOUNDARY); -+ if (abi_break & warn_psabi) + alignment = MIN (MAX (alignment, PARM_BOUNDARY), STACK_BOUNDARY); + if (abi_break && warn_psabi) + { + abi_break = MIN (MAX (abi_break, PARM_BOUNDARY), STACK_BOUNDARY); + if (alignment != abi_break && !TARGET_MACHO) @@ -1407,12 +1700,14 @@ index 5c9e7791a12..91258c925a8 100644 + return MIN (alignment, STACK_BOUNDARY); + +#else - alignment = MIN (MAX (alignment, PARM_BOUNDARY), STACK_BOUNDARY); - if (abi_break & warn_psabi) ++ alignment = MIN (MAX (alignment, PARM_BOUNDARY), STACK_BOUNDARY); ++ if (abi_break & warn_psabi) { -@@ -7673,6 +7915,44 @@ aarch64_function_arg_boundary (machine_mode mode, const_tree type) + abi_break = MIN (MAX (abi_break, PARM_BOUNDARY), STACK_BOUNDARY); + if (alignment != abi_break) +@@ -7736,6 +7978,44 @@ aarch64_function_arg_boundary (machine_mode mode, const_tree type) + "%qT changed in GCC 9.1", type); } - return alignment; +#endif +} @@ -1455,7 +1750,7 @@ index 5c9e7791a12..91258c925a8 100644 } /* Implement TARGET_GET_RAW_RESULT_MODE and TARGET_GET_RAW_ARG_MODE. */ -@@ -10848,6 +11128,7 @@ aarch64_classify_address (struct aarch64_address_info *info, +@@ -10911,6 +11191,7 @@ aarch64_classify_address (struct aarch64_address_info *info, /* load literal: pc-relative constant pool entry. Only supported for SI mode or larger. */ info->type = ADDRESS_SYMBOLIC; @@ -1463,7 +1758,7 @@ index 5c9e7791a12..91258c925a8 100644 if (!load_store_pair_p && GET_MODE_SIZE (mode).is_constant (&const_size) -@@ -10855,6 +11136,7 @@ aarch64_classify_address (struct aarch64_address_info *info, +@@ -10918,6 +11199,7 @@ aarch64_classify_address (struct aarch64_address_info *info, { poly_int64 offset; rtx sym = strip_offset_and_salt (x, &offset); @@ -1471,7 +1766,7 @@ index 5c9e7791a12..91258c925a8 100644 return ((LABEL_REF_P (sym) || (SYMBOL_REF_P (sym) && CONSTANT_POOL_ADDRESS_P (sym) -@@ -10872,10 +11154,13 @@ aarch64_classify_address (struct aarch64_address_info *info, +@@ -10935,10 +11217,13 @@ aarch64_classify_address (struct aarch64_address_info *info, poly_int64 offset; HOST_WIDE_INT const_offset; rtx sym = strip_offset_and_salt (info->offset, &offset); @@ -1486,7 +1781,7 @@ index 5c9e7791a12..91258c925a8 100644 { /* The symbol and offset must be aligned to the access size. */ unsigned int align; -@@ -10925,6 +11210,55 @@ aarch64_address_valid_for_prefetch_p (rtx x, bool strict_p) +@@ -10988,6 +11273,55 @@ aarch64_address_valid_for_prefetch_p (rtx x, bool strict_p) if (!res) return false; @@ -1542,7 +1837,7 @@ index 5c9e7791a12..91258c925a8 100644 /* ... except writeback forms. */ return addr.type != ADDRESS_REG_WB; } -@@ -11609,6 +11943,144 @@ sizetochar (int size) +@@ -11672,6 +12006,144 @@ sizetochar (int size) } } @@ -1687,7 +1982,7 @@ index 5c9e7791a12..91258c925a8 100644 /* Print operand X to file F in a target specific manner according to CODE. The acceptable formatting commands given by CODE are: 'c': An integer or symbol address without a preceding # -@@ -11677,6 +12149,12 @@ aarch64_print_operand (FILE *f, rtx x, int code) +@@ -11740,6 +12212,12 @@ aarch64_print_operand (FILE *f, rtx x, int code) } break; @@ -1700,7 +1995,7 @@ index 5c9e7791a12..91258c925a8 100644 case 'e': { x = unwrap_const_vec_duplicate (x); -@@ -12000,7 +12478,7 @@ aarch64_print_operand (FILE *f, rtx x, int code) +@@ -12063,7 +12541,7 @@ aarch64_print_operand (FILE *f, rtx x, int code) case 'A': if (GET_CODE (x) == HIGH) x = XEXP (x, 0); @@ -1709,7 +2004,7 @@ index 5c9e7791a12..91258c925a8 100644 switch (aarch64_classify_symbolic_expression (x)) { case SYMBOL_SMALL_GOT_4G: -@@ -12031,9 +12509,29 @@ aarch64_print_operand (FILE *f, rtx x, int code) +@@ -12094,9 +12572,29 @@ aarch64_print_operand (FILE *f, rtx x, int code) break; } output_addr_const (asm_out_file, x); @@ -1739,7 +2034,7 @@ index 5c9e7791a12..91258c925a8 100644 switch (aarch64_classify_symbolic_expression (x)) { case SYMBOL_SMALL_GOT_4G: -@@ -12071,10 +12569,12 @@ aarch64_print_operand (FILE *f, rtx x, int code) +@@ -12134,10 +12632,12 @@ aarch64_print_operand (FILE *f, rtx x, int code) default: break; } @@ -1752,7 +2047,7 @@ index 5c9e7791a12..91258c925a8 100644 switch (aarch64_classify_symbolic_expression (x)) { case SYMBOL_TLSLE24: -@@ -12083,6 +12583,7 @@ aarch64_print_operand (FILE *f, rtx x, int code) +@@ -12146,6 +12646,7 @@ aarch64_print_operand (FILE *f, rtx x, int code) default: break; } @@ -1760,7 +2055,7 @@ index 5c9e7791a12..91258c925a8 100644 output_addr_const (asm_out_file, x); break; -@@ -12232,8 +12733,14 @@ aarch64_print_address_internal (FILE *f, machine_mode mode, rtx x, +@@ -12295,8 +12796,14 @@ aarch64_print_address_internal (FILE *f, machine_mode mode, rtx x, break; case ADDRESS_LO_SUM: @@ -1775,7 +2070,7 @@ index 5c9e7791a12..91258c925a8 100644 asm_fprintf (f, "]"); return true; -@@ -12703,6 +13210,8 @@ aarch64_asm_output_labelref (FILE* f, const char *name) +@@ -12766,6 +13273,8 @@ aarch64_asm_output_labelref (FILE* f, const char *name) asm_fprintf (f, "%U%s", name); } @@ -1784,7 +2079,7 @@ index 5c9e7791a12..91258c925a8 100644 static void aarch64_elf_asm_constructor (rtx symbol, int priority) { -@@ -12742,6 +13251,7 @@ aarch64_elf_asm_destructor (rtx symbol, int priority) +@@ -12805,6 +13314,7 @@ aarch64_elf_asm_destructor (rtx symbol, int priority) assemble_aligned_integer (POINTER_BYTES, symbol); } } @@ -1792,7 +2087,7 @@ index 5c9e7791a12..91258c925a8 100644 const char* aarch64_output_casesi (rtx *operands) -@@ -15048,15 +15558,17 @@ aarch64_init_builtins () +@@ -15111,15 +15621,17 @@ aarch64_init_builtins () { aarch64_general_init_builtins (); aarch64_sve::init_builtins (); @@ -1813,7 +2108,7 @@ index 5c9e7791a12..91258c925a8 100644 unsigned int code = DECL_MD_FUNCTION_CODE (fndecl); unsigned int subcode = code >> AARCH64_BUILTIN_SHIFT; tree type = TREE_TYPE (TREE_TYPE (fndecl)); -@@ -18326,10 +18838,14 @@ initialize_aarch64_code_model (struct gcc_options *opts) +@@ -18452,10 +18964,14 @@ initialize_aarch64_code_model (struct gcc_options *opts) } break; case AARCH64_CMODEL_LARGE: @@ -1830,7 +2125,7 @@ index 5c9e7791a12..91258c925a8 100644 sorry ("code model %qs not supported in ilp32 mode", "large"); break; case AARCH64_CMODEL_TINY_PIC: -@@ -19252,7 +19768,9 @@ aarch64_classify_symbol (rtx x, HOST_WIDE_INT offset) +@@ -19378,7 +19894,9 @@ aarch64_classify_symbol (rtx x, HOST_WIDE_INT offset) case AARCH64_CMODEL_SMALL_SPIC: case AARCH64_CMODEL_SMALL_PIC: case AARCH64_CMODEL_SMALL: @@ -1841,7 +2136,7 @@ index 5c9e7791a12..91258c925a8 100644 default: gcc_unreachable (); -@@ -19288,10 +19806,22 @@ aarch64_classify_symbol (rtx x, HOST_WIDE_INT offset) +@@ -19414,10 +19932,22 @@ aarch64_classify_symbol (rtx x, HOST_WIDE_INT offset) return SYMBOL_TINY_ABSOLUTE; @@ -1865,7 +2160,7 @@ index 5c9e7791a12..91258c925a8 100644 if ((flag_pic || SYMBOL_REF_WEAK (x)) && !aarch64_symbol_binds_local_p (x)) return aarch64_cmodel == AARCH64_CMODEL_SMALL_SPIC -@@ -19303,7 +19833,8 @@ aarch64_classify_symbol (rtx x, HOST_WIDE_INT offset) +@@ -19429,7 +19959,8 @@ aarch64_classify_symbol (rtx x, HOST_WIDE_INT offset) || offset_within_block_p (x, offset))) return SYMBOL_FORCE_TO_MEM; @@ -1875,7 +2170,7 @@ index 5c9e7791a12..91258c925a8 100644 case AARCH64_CMODEL_LARGE: /* This is alright even in PIC code as the constant -@@ -19433,7 +19964,10 @@ static GTY(()) tree va_list_type; +@@ -19559,7 +20090,10 @@ static GTY(()) tree va_list_type; void *__vr_top; int __gr_offs; int __vr_offs; @@ -1887,7 +2182,7 @@ index 5c9e7791a12..91258c925a8 100644 static tree aarch64_build_builtin_va_list (void) -@@ -19441,6 +19975,13 @@ aarch64_build_builtin_va_list (void) +@@ -19567,6 +20101,13 @@ aarch64_build_builtin_va_list (void) tree va_list_name; tree f_stack, f_grtop, f_vrtop, f_groff, f_vroff; @@ -1901,7 +2196,7 @@ index 5c9e7791a12..91258c925a8 100644 /* Create the type. */ va_list_type = lang_hooks.types.make_type (RECORD_TYPE); /* Give it the required name. */ -@@ -19512,6 +20053,13 @@ aarch64_expand_builtin_va_start (tree valist, rtx nextarg ATTRIBUTE_UNUSED) +@@ -19638,6 +20179,13 @@ aarch64_expand_builtin_va_start (tree valist, rtx nextarg ATTRIBUTE_UNUSED) int vr_save_area_size = cfun->va_list_fpr_size; int vr_offset; @@ -1915,7 +2210,7 @@ index 5c9e7791a12..91258c925a8 100644 cum = &crtl->args.info; if (cfun->va_list_gpr_size) gr_save_area_size = MIN ((NUM_ARG_REGS - cum->aapcs_ncrn) * UNITS_PER_WORD, -@@ -19602,6 +20150,9 @@ aarch64_gimplify_va_arg_expr (tree valist, tree type, gimple_seq *pre_p, +@@ -19728,6 +20276,9 @@ aarch64_gimplify_va_arg_expr (tree valist, tree type, gimple_seq *pre_p, HOST_WIDE_INT size, rsize, adjust, align; tree t, u, cond1, cond2; @@ -1925,7 +2220,7 @@ index 5c9e7791a12..91258c925a8 100644 indirect_p = pass_va_arg_by_reference (type); if (indirect_p) type = build_pointer_type (type); -@@ -19786,8 +20337,18 @@ aarch64_gimplify_va_arg_expr (tree valist, tree type, gimple_seq *pre_p, +@@ -19912,8 +20463,18 @@ aarch64_gimplify_va_arg_expr (tree valist, tree type, gimple_seq *pre_p, field_ptr_t = double_ptr_type_node; break; case E_TFmode: @@ -1946,7 +2241,7 @@ index 5c9e7791a12..91258c925a8 100644 break; case E_HFmode: field_t = aarch64_fp16_type_node; -@@ -19858,6 +20419,9 @@ aarch64_setup_incoming_varargs (cumulative_args_t cum_v, +@@ -19984,6 +20545,9 @@ aarch64_setup_incoming_varargs (cumulative_args_t cum_v, int gr_saved = cfun->va_list_gpr_size; int vr_saved = cfun->va_list_fpr_size; @@ -1956,7 +2251,7 @@ index 5c9e7791a12..91258c925a8 100644 /* The caller has advanced CUM up to, but not beyond, the last named argument. Advance a local copy of CUM past the last "real" named argument, to find out how many registers are left over. */ -@@ -20685,6 +21249,12 @@ aarch64_autovectorize_vector_modes (vector_modes *modes, bool) +@@ -20811,6 +21375,12 @@ aarch64_autovectorize_vector_modes (vector_modes *modes, bool) static const char * aarch64_mangle_type (const_tree type) { @@ -1969,7 +2264,7 @@ index 5c9e7791a12..91258c925a8 100644 /* The AArch64 ABI documents say that "__va_list" has to be mangled as if it is in the "std" namespace. */ if (lang_hooks.types_compatible_p (CONST_CAST_TREE (type), va_list_type)) -@@ -20699,6 +21269,10 @@ aarch64_mangle_type (const_tree type) +@@ -20825,6 +21395,10 @@ aarch64_mangle_type (const_tree type) return "Dh"; } @@ -1980,7 +2275,7 @@ index 5c9e7791a12..91258c925a8 100644 /* Mangle AArch64-specific internal types. TYPE_NAME is non-NULL_TREE for builtin types. */ if (TYPE_NAME (type) != NULL) -@@ -21389,7 +21963,8 @@ aarch64_mov_operand_p (rtx x, machine_mode mode) +@@ -21515,7 +22089,8 @@ aarch64_mov_operand_p (rtx x, machine_mode mode) /* GOT accesses are valid moves. */ if (SYMBOL_REF_P (x) @@ -1990,7 +2285,7 @@ index 5c9e7791a12..91258c925a8 100644 return true; if (SYMBOL_REF_P (x) && mode == DImode && CONSTANT_ADDRESS_P (x)) -@@ -22549,7 +23124,9 @@ aarch64_declare_function_name (FILE *stream, const char* name, +@@ -22675,7 +23250,9 @@ aarch64_declare_function_name (FILE *stream, const char* name, aarch64_asm_output_variant_pcs (stream, fndecl, name); /* Don't forget the type directive for ELF. */ @@ -2000,7 +2295,7 @@ index 5c9e7791a12..91258c925a8 100644 ASM_OUTPUT_LABEL (stream, name); cfun->machine->label_is_assembled = true; -@@ -22584,12 +23161,17 @@ aarch64_print_patchable_function_entry (FILE *file, +@@ -22736,12 +23313,17 @@ aarch64_output_patchable_area (unsigned int patch_area_size, bool record_p) /* Implement ASM_OUTPUT_DEF_FROM_DECLS. Output .variant_pcs for aliases. */ void @@ -2019,7 +2314,7 @@ index 5c9e7791a12..91258c925a8 100644 } /* Implement ASM_OUTPUT_EXTERNAL. Output .variant_pcs for undefined -@@ -23213,6 +23795,16 @@ aarch64_output_simd_mov_immediate (rtx const_vector, unsigned width, +@@ -23365,6 +23947,16 @@ aarch64_output_simd_mov_immediate (rtx const_vector, unsigned width, } gcc_assert (CONST_INT_P (info.u.mov.value)); @@ -2036,7 +2331,7 @@ index 5c9e7791a12..91258c925a8 100644 if (which == AARCH64_CHECK_MOV) { -@@ -23221,16 +23813,16 @@ aarch64_output_simd_mov_immediate (rtx const_vector, unsigned width, +@@ -23373,16 +23965,16 @@ aarch64_output_simd_mov_immediate (rtx const_vector, unsigned width, ? "msl" : "lsl"); if (lane_count == 1) snprintf (templ, sizeof (templ), "%s\t%%d0, " HOST_WIDE_INT_PRINT_HEX, @@ -2056,7 +2351,7 @@ index 5c9e7791a12..91258c925a8 100644 } else { -@@ -23239,12 +23831,12 @@ aarch64_output_simd_mov_immediate (rtx const_vector, unsigned width, +@@ -23391,12 +23983,12 @@ aarch64_output_simd_mov_immediate (rtx const_vector, unsigned width, if (info.u.mov.shift) snprintf (templ, sizeof (templ), "%s\t%%0.%d%c, #" HOST_WIDE_INT_PRINT_DEC ", %s #%d", mnemonic, lane_count, @@ -2071,7 +2366,7 @@ index 5c9e7791a12..91258c925a8 100644 } return templ; } -@@ -26355,12 +26947,12 @@ aarch64_libgcc_floating_mode_supported_p (scalar_float_mode mode) +@@ -26541,12 +27133,12 @@ aarch64_libgcc_floating_mode_supported_p (scalar_float_mode mode) } /* Implement TARGET_SCALAR_MODE_SUPPORTED_P - return TRUE @@ -2086,7 +2381,7 @@ index 5c9e7791a12..91258c925a8 100644 ? true : default_scalar_mode_supported_p (mode)); } -@@ -27118,19 +27710,37 @@ aarch64_sls_emit_shared_blr_thunks (FILE *out_file) +@@ -27304,19 +27896,37 @@ aarch64_sls_emit_shared_blr_thunks (FILE *out_file) continue; const char *name = indirect_symbol_names[regnum]; @@ -2127,7 +2422,7 @@ index 5c9e7791a12..91258c925a8 100644 } } -@@ -27323,6 +27933,15 @@ aarch64_run_selftests (void) +@@ -27509,6 +28119,15 @@ aarch64_run_selftests (void) #undef TARGET_ASM_ALIGNED_SI_OP #define TARGET_ASM_ALIGNED_SI_OP "\t.word\t" @@ -2143,7 +2438,7 @@ index 5c9e7791a12..91258c925a8 100644 #undef TARGET_ASM_CAN_OUTPUT_MI_THUNK #define TARGET_ASM_CAN_OUTPUT_MI_THUNK \ hook_bool_const_tree_hwi_hwi_const_tree_true -@@ -27409,6 +28028,12 @@ aarch64_run_selftests (void) +@@ -27595,6 +28214,12 @@ aarch64_run_selftests (void) #undef TARGET_FUNCTION_ARG_BOUNDARY #define TARGET_FUNCTION_ARG_BOUNDARY aarch64_function_arg_boundary @@ -2156,7 +2451,7 @@ index 5c9e7791a12..91258c925a8 100644 #undef TARGET_FUNCTION_ARG_PADDING #define TARGET_FUNCTION_ARG_PADDING aarch64_function_arg_padding -@@ -27736,7 +28361,7 @@ aarch64_libgcc_floating_mode_supported_p +@@ -27922,7 +28547,7 @@ aarch64_libgcc_floating_mode_supported_p /* The architecture reserves bits 0 and 1 so use bit 2 for descriptors. */ #undef TARGET_CUSTOM_FUNCTION_DESCRIPTORS @@ -2166,10 +2461,10 @@ index 5c9e7791a12..91258c925a8 100644 #undef TARGET_HARD_REGNO_NREGS #define TARGET_HARD_REGNO_NREGS aarch64_hard_regno_nregs diff --git a/gcc/config/aarch64/aarch64.h b/gcc/config/aarch64/aarch64.h -index 359b6e8561f..db5fe441b36 100644 +index 6834c3e9922..4b2ccb6a595 100644 --- a/gcc/config/aarch64/aarch64.h +++ b/gcc/config/aarch64/aarch64.h -@@ -58,6 +58,10 @@ +@@ -54,6 +54,10 @@ #define TARGET_SIMD (!TARGET_GENERAL_REGS_ONLY && AARCH64_ISA_SIMD) #define TARGET_FLOAT (!TARGET_GENERAL_REGS_ONLY && AARCH64_ISA_FP) @@ -2180,7 +2475,7 @@ index 359b6e8561f..db5fe441b36 100644 #define UNITS_PER_WORD 8 #define UNITS_PER_VREG 16 -@@ -135,6 +139,12 @@ +@@ -131,6 +135,12 @@ /* Heap alignment (same as BIGGEST_ALIGNMENT and STACK_BOUNDARY). */ #define MALLOC_ABI_ALIGNMENT 128 @@ -2193,7 +2488,7 @@ index 359b6e8561f..db5fe441b36 100644 /* Defined by the ABI */ #define WCHAR_TYPE "unsigned int" #define WCHAR_TYPE_SIZE 32 -@@ -1025,6 +1035,24 @@ typedef struct +@@ -1028,6 +1038,24 @@ typedef struct aapcs_reg == NULL_RTX. */ int aapcs_stack_size; /* The total size (in words, per 8 byte) of the stack arg area so far. */ @@ -2218,7 +2513,7 @@ index 359b6e8561f..db5fe441b36 100644 bool silent_p; /* True if we should act silently, rather than raise an error for invalid calls. */ } CUMULATIVE_ARGS; -@@ -1309,8 +1337,13 @@ extern const char *host_detect_local_cpu (int argc, const char **argv); +@@ -1312,8 +1340,13 @@ extern const char *host_detect_local_cpu (int argc, const char **argv); #define ASM_CPU_SPEC \ MCPU_TO_MARCH_SPEC @@ -2233,7 +2528,7 @@ index 359b6e8561f..db5fe441b36 100644 #define ASM_OUTPUT_POOL_EPILOGUE aarch64_asm_output_pool_epilogue -@@ -1324,6 +1357,10 @@ extern GTY(()) tree aarch64_fp16_ptr_type_node; +@@ -1327,6 +1360,10 @@ extern GTY(()) tree aarch64_fp16_ptr_type_node; extern GTY(()) tree aarch64_bf16_type_node; extern GTY(()) tree aarch64_bf16_ptr_type_node; @@ -2245,18 +2540,18 @@ index 359b6e8561f..db5fe441b36 100644 So in order to unwind a function using a frame pointer, the very first function that is unwound must save the frame pointer. That way the frame diff --git a/gcc/config/aarch64/aarch64.md b/gcc/config/aarch64/aarch64.md -index 34b8059b45b..c356d3048b5 100644 +index d24c8afcfa6..cecef278fa8 100644 --- a/gcc/config/aarch64/aarch64.md +++ b/gcc/config/aarch64/aarch64.md -@@ -303,6 +303,7 @@ - UNSPEC_TAG_SPACE ; Translate address to MTE tag address space. +@@ -304,6 +304,7 @@ UNSPEC_LD1RO UNSPEC_SALT_ADDR + UNSPECV_PATCHABLE_AREA + UNSPEC_MACHOPIC_OFFSET ]) (define_c_enum "unspecv" [ -@@ -849,6 +850,37 @@ +@@ -850,6 +851,37 @@ [(set_attr "type" "load_4")] ) @@ -2294,7 +2589,7 @@ index 34b8059b45b..c356d3048b5 100644 (define_insn "trap" [(trap_if (const_int 1) (const_int 8))] "" -@@ -1286,7 +1318,7 @@ +@@ -1287,7 +1319,7 @@ ldr\\t%s0, %1 str\\t%w1, %0 str\\t%s1, %0 @@ -2303,7 +2598,7 @@ index 34b8059b45b..c356d3048b5 100644 adr\\t%x0, %c1 adrp\\t%x0, %A1 fmov\\t%s0, %w1 -@@ -1325,7 +1357,7 @@ +@@ -1326,7 +1358,7 @@ ldr\\t%d0, %1 str\\t%x1, %0 str\\t%d1, %0 @@ -2312,7 +2607,7 @@ index 34b8059b45b..c356d3048b5 100644 adr\\t%x0, %c1 adrp\\t%x0, %A1 fmov\\t%d0, %x1 -@@ -6857,7 +6889,10 @@ +@@ -6863,7 +6895,10 @@ (lo_sum:P (match_operand:P 1 "register_operand" "r") (match_operand 2 "aarch64_valid_symref" "S")))] "" @@ -3103,10 +3398,10 @@ index a55f6b2b874..36a32867281 100644 + (!flag_off_stack_trampolines && !flag_trampolines) ? 1 : 0 + diff --git a/gcc/config/i386/i386.cc b/gcc/config/i386/i386.cc -index 9dd9fa68722..5cd4b5c0592 100644 +index 9a9ff3b34b8..42dd2d4e223 100644 --- a/gcc/config/i386/i386.cc +++ b/gcc/config/i386/i386.cc -@@ -24698,7 +24698,7 @@ ix86_libgcc_floating_mode_supported_p +@@ -24735,7 +24735,7 @@ ix86_libgcc_floating_mode_supported_p #define TARGET_HARD_REGNO_SCRATCH_OK ix86_hard_regno_scratch_ok #undef TARGET_CUSTOM_FUNCTION_DESCRIPTORS @@ -3116,10 +3411,10 @@ index 9dd9fa68722..5cd4b5c0592 100644 #undef TARGET_ADDR_SPACE_ZERO_ADDRESS_VALID #define TARGET_ADDR_SPACE_ZERO_ADDRESS_VALID ix86_addr_space_zero_address_valid diff --git a/gcc/config/i386/i386.h b/gcc/config/i386/i386.h -index 363082ba47b..5f56d7abf65 100644 +index fce0b3564a8..f909fa7fc3c 100644 --- a/gcc/config/i386/i386.h +++ b/gcc/config/i386/i386.h -@@ -746,6 +746,12 @@ extern const char *host_detect_local_cpu (int argc, const char **argv); +@@ -749,6 +749,12 @@ extern const char *host_detect_local_cpu (int argc, const char **argv); /* Minimum allocation boundary for the code of a function. */ #define FUNCTION_BOUNDARY 8 @@ -3133,7 +3428,7 @@ index 363082ba47b..5f56d7abf65 100644 #define TARGET_PTRMEMFUNC_VBIT_LOCATION ptrmemfunc_vbit_in_pfn diff --git a/gcc/configure b/gcc/configure -index 5ce0557719a..dbc127c59cb 100755 +index c749ace011d..dfbe2870d35 100755 --- a/gcc/configure +++ b/gcc/configure @@ -634,6 +634,7 @@ LIBOBJS @@ -3227,7 +3522,7 @@ index 5ce0557719a..dbc127c59cb 100755 if test x$host != x$target; then libcxx_incdir="$target_alias/$libcxx_incdir" fi -@@ -17867,6 +17889,47 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi +@@ -17862,6 +17884,47 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi darwin* | rhapsody*) @@ -3275,7 +3570,7 @@ index 5ce0557719a..dbc127c59cb 100755 archive_cmds_need_lc=no hardcode_direct=no hardcode_automatic=yes -@@ -17884,10 +17947,19 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi +@@ -17879,10 +17942,19 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi esac if test "$_lt_dar_can_shared" = "yes"; then output_verbose_link_cmd=func_echo_all @@ -3299,25 +3594,25 @@ index 5ce0557719a..dbc127c59cb 100755 else ld_shlibs=no -@@ -19673,7 +19745,7 @@ else +@@ -19668,7 +19740,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF --#line 19676 "configure" -+#line 19748 "configure" +-#line 19671 "configure" ++#line 19743 "configure" #include "confdefs.h" #if HAVE_DLFCN_H -@@ -19779,7 +19851,7 @@ else +@@ -19774,7 +19846,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF --#line 19782 "configure" -+#line 19854 "configure" +-#line 19777 "configure" ++#line 19849 "configure" #include "confdefs.h" #if HAVE_DLFCN_H -@@ -20655,6 +20727,47 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi +@@ -20650,6 +20722,47 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi darwin* | rhapsody*) @@ -3365,7 +3660,7 @@ index 5ce0557719a..dbc127c59cb 100755 archive_cmds_need_lc_CXX=no hardcode_direct_CXX=no hardcode_automatic_CXX=yes -@@ -20672,12 +20785,25 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi +@@ -20667,12 +20780,25 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi esac if test "$_lt_dar_can_shared" = "yes"; then output_verbose_link_cmd=func_echo_all @@ -3396,7 +3691,7 @@ index 5ce0557719a..dbc127c59cb 100755 archive_expsym_cmds_CXX="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}" fi -@@ -23028,6 +23154,35 @@ ac_compiler_gnu=$ac_cv_cxx_compiler_gnu +@@ -23023,6 +23149,35 @@ ac_compiler_gnu=$ac_cv_cxx_compiler_gnu @@ -3432,7 +3727,7 @@ index 5ce0557719a..dbc127c59cb 100755 # Identify the assembler which will work hand-in-glove with the newly # built GCC, so that we can examine its features. This is the assembler # which will be driven by the driver program. -@@ -32429,6 +32584,22 @@ $as_echo "#define ENABLE_DEFAULT_PIE 1" >>confdefs.h +@@ -32424,6 +32579,22 @@ $as_echo "#define ENABLE_DEFAULT_PIE 1" >>confdefs.h fi @@ -3455,7 +3750,7 @@ index 5ce0557719a..dbc127c59cb 100755 # Check if -fno-PIE works. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -fno-PIE option" >&5 $as_echo_n "checking for -fno-PIE option... " >&6; } -@@ -32966,6 +33137,10 @@ LTLIBOBJS=$ac_ltlibobjs +@@ -32961,6 +33132,10 @@ LTLIBOBJS=$ac_ltlibobjs @@ -3467,7 +3762,7 @@ index 5ce0557719a..dbc127c59cb 100755 : "${CONFIG_STATUS=./config.status}" ac_write_fail=0 diff --git a/gcc/configure.ac b/gcc/configure.ac -index 23bee7010a3..2d9159989e4 100644 +index 992a50e7b20..8ec519a48ee 100644 --- a/gcc/configure.ac +++ b/gcc/configure.ac @@ -249,14 +249,22 @@ if test x${gcc_gxx_libcxx_include_dir} != x; then @@ -3497,7 +3792,7 @@ index 23bee7010a3..2d9159989e4 100644 if test x$host != x$target; then libcxx_incdir="$target_alias/$libcxx_incdir" fi -@@ -2559,6 +2567,21 @@ AC_PROG_LIBTOOL +@@ -2554,6 +2562,21 @@ AC_PROG_LIBTOOL AC_SUBST(objdir) AC_SUBST(enable_fast_install) @@ -3519,7 +3814,7 @@ index 23bee7010a3..2d9159989e4 100644 # Identify the assembler which will work hand-in-glove with the newly # built GCC, so that we can examine its features. This is the assembler # which will be driven by the driver program. -@@ -7646,6 +7669,19 @@ if test x$enable_default_pie = xyes ; then +@@ -7641,6 +7664,19 @@ if test x$enable_default_pie = xyes ; then fi AC_SUBST([enable_default_pie]) @@ -3540,10 +3835,10 @@ index 23bee7010a3..2d9159989e4 100644 AC_CACHE_CHECK([for -fno-PIE option], [gcc_cv_c_no_fpie], diff --git a/gcc/cp/decl2.cc b/gcc/cp/decl2.cc -index d7e9980ff1e..ff2a1f6665f 100644 +index c5e5fbfba4a..5fc6f7b0238 100644 --- a/gcc/cp/decl2.cc +++ b/gcc/cp/decl2.cc -@@ -3653,9 +3653,8 @@ get_tls_init_fn (tree var) +@@ -3674,9 +3674,8 @@ get_tls_init_fn (tree var) if (!flag_extern_tls_init && DECL_EXTERNAL (var)) return NULL_TREE; @@ -3555,7 +3850,33 @@ index d7e9980ff1e..ff2a1f6665f 100644 return get_local_tls_init_fn (DECL_SOURCE_LOCATION (var)); tree sname = mangle_tls_init_fn (var); -@@ -4801,22 +4800,24 @@ handle_tls_init (void) +@@ -3839,6 +3838,25 @@ generate_tls_wrapper (tree fn) + expand_or_defer_fn (finish_function (/*inline_p=*/false)); + } + ++/* A dummy init function to act as a weak placeholder for a (possibly non- ++ existent) dynamic init. */ ++static void ++generate_tls_dummy_init (tree fn) ++{ ++ tree var = DECL_BEFRIENDING_CLASSES (fn); ++ tree init_fn = get_tls_init_fn (var); ++ /* If have no init fn, or it is non-weak, then we do not need to make a ++ dummy. */ ++ if (!init_fn || !lookup_attribute ("weak", DECL_ATTRIBUTES (init_fn))) ++ return; ++ start_preparsed_function (init_fn, NULL_TREE, SF_DEFAULT | SF_PRE_PARSED); ++ tree body = begin_function_body (); ++ declare_weak (init_fn); ++ finish_return_stmt (NULL_TREE); ++ finish_function_body (body); ++ expand_or_defer_fn (finish_function (/*inline_p=*/false)); ++} ++ + /* Start the process of running a particular set of global constructors + or destructors. Subroutine of do_[cd]tors. Also called from + vtv_start_verification_constructor_init_function. */ +@@ -4822,22 +4840,24 @@ handle_tls_init (void) finish_expr_stmt (cp_build_modify_expr (loc, guard, NOP_EXPR, boolean_true_node, tf_warning_or_error)); @@ -3587,7 +3908,7 @@ index d7e9980ff1e..ff2a1f6665f 100644 } } -@@ -4824,6 +4825,30 @@ handle_tls_init (void) +@@ -4845,6 +4865,30 @@ handle_tls_init (void) finish_if_stmt (if_stmt); finish_function_body (body); expand_or_defer_fn (finish_function (/*inline_p=*/false)); @@ -3618,6 +3939,22 @@ index d7e9980ff1e..ff2a1f6665f 100644 } /* We're at the end of compilation, so generate any mangling aliases that +@@ -5273,7 +5317,14 @@ c_parse_final_cleanups (void) + } + + if (!DECL_INITIAL (decl) && decl_tls_wrapper_p (decl)) +- generate_tls_wrapper (decl); ++ { ++ generate_tls_wrapper (decl); ++ /* The wrapper might have a weak reference to an init, we provide ++ a dummy function to satisfy that here. The linker/dynamic ++ loader will override this with the actual init, if one is ++ required. */ ++ generate_tls_dummy_init (decl); ++ } + + if (!DECL_SAVED_TREE (decl)) + continue; diff --git a/gcc/cp/g++spec.cc b/gcc/cp/g++spec.cc index 8174d652776..2e1e06e6ac9 100644 --- a/gcc/cp/g++spec.cc @@ -3662,7 +3999,7 @@ index 00000000000..b60928e37f9 + +#endif /* GCC_CUMULATIVE_ARGS_H */ diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi -index ff6c338bedb..55c8ba8969f 100644 +index cb83dd8a1cc..122f46e977e 100644 --- a/gcc/doc/invoke.texi +++ b/gcc/doc/invoke.texi @@ -670,6 +670,7 @@ Objective-C and Objective-C++ Dialects}. @@ -3681,7 +4018,7 @@ index ff6c338bedb..55c8ba8969f 100644 -ftrampolines -ftrapv -fwrapv @gol -fvisibility=@r{[}default@r{|}internal@r{|}hidden@r{|}protected@r{]} @gol -fstrict-volatile-bitfields -fsync-libcalls} -@@ -17071,6 +17073,17 @@ the behavior of older compilers in which temporaries' stack space is +@@ -17078,6 +17080,17 @@ the behavior of older compilers in which temporaries' stack space is not reused, the aggressive stack reuse can lead to runtime errors. This option is used to control the temporary stack reuse optimization. @@ -3699,7 +4036,7 @@ index ff6c338bedb..55c8ba8969f 100644 @item -ftrapv @opindex ftrapv This option generates traps for signed overflow on addition, subtraction, -@@ -17129,6 +17142,19 @@ instructions. It does not allow exceptions to be thrown from +@@ -17136,6 +17149,19 @@ instructions. It does not allow exceptions to be thrown from arbitrary signal handlers such as @code{SIGALRM}. This enables @option{-fexceptions}. @@ -3775,7 +4112,7 @@ index f869ddd5e5b..2c9f0f0bf14 100644 A C expression that is nonzero if @var{regno} is the number of a hard register in which function arguments are sometimes passed. This does diff --git a/gcc/function.cc b/gcc/function.cc -index ad0096a43ef..e5044a60741 100644 +index d84a3240ee1..7304b177e65 100644 --- a/gcc/function.cc +++ b/gcc/function.cc @@ -2445,7 +2445,10 @@ assign_parm_find_data_types (struct assign_parm_data_all *all, tree parm, @@ -3855,7 +4192,7 @@ index ad0096a43ef..e5044a60741 100644 /* Alignment can't exceed MAX_SUPPORTED_STACK_ALIGNMENT. */ diff --git a/gcc/function.h b/gcc/function.h -index 098613766be..009a9dc1c44 100644 +index a53fb24d217..4dc16c64717 100644 --- a/gcc/function.h +++ b/gcc/function.h @@ -20,6 +20,7 @@ along with GCC; see the file COPYING3. If not see @@ -3875,10 +4212,10 @@ index 098613766be..009a9dc1c44 100644 struct locate_and_pad_arg_data *); extern void generate_setjmp_warnings (void); diff --git a/gcc/gcc.cc b/gcc/gcc.cc -index bb07cc244e3..a16c1e4372b 100644 +index fbcc9d03314..bd2b90ce16f 100644 --- a/gcc/gcc.cc +++ b/gcc/gcc.cc -@@ -572,6 +572,7 @@ or with constant text in a single argument. +@@ -574,6 +574,7 @@ or with constant text in a single argument. %l process LINK_SPEC as a spec. %L process LIB_SPEC as a spec. %M Output multilib_os_dir. @@ -3886,7 +4223,7 @@ index bb07cc244e3..a16c1e4372b 100644 %G process LIBGCC_SPEC as a spec. %R Output the concatenation of target_system_root and target_sysroot_suffix. -@@ -1191,6 +1192,10 @@ proper position among the other output files. */ +@@ -1193,6 +1194,10 @@ proper position among the other output files. */ # define SYSROOT_HEADERS_SUFFIX_SPEC "" #endif @@ -3897,7 +4234,7 @@ index bb07cc244e3..a16c1e4372b 100644 static const char *asm_debug = ASM_DEBUG_SPEC; static const char *asm_debug_option = ASM_DEBUG_OPTION_SPEC; static const char *cpp_spec = CPP_SPEC; -@@ -5895,6 +5900,7 @@ struct spec_path_info { +@@ -5897,6 +5902,7 @@ struct spec_path_info { size_t append_len; bool omit_relative; bool separate_options; @@ -3905,7 +4242,7 @@ index bb07cc244e3..a16c1e4372b 100644 }; static void * -@@ -5904,6 +5910,16 @@ spec_path (char *path, void *data) +@@ -5906,6 +5912,16 @@ spec_path (char *path, void *data) size_t len = 0; char save = 0; @@ -3922,7 +4259,7 @@ index bb07cc244e3..a16c1e4372b 100644 if (info->omit_relative && !IS_ABSOLUTE_PATH (path)) return NULL; -@@ -6135,6 +6151,22 @@ do_spec_1 (const char *spec, int inswitch, const char *soft_matched_part) +@@ -6137,6 +6153,22 @@ do_spec_1 (const char *spec, int inswitch, const char *soft_matched_part) info.omit_relative = false; #endif info.separate_options = false; @@ -3945,7 +4282,7 @@ index bb07cc244e3..a16c1e4372b 100644 for_each_path (&startfile_prefixes, true, 0, spec_path, &info); } -@@ -6461,6 +6493,7 @@ do_spec_1 (const char *spec, int inswitch, const char *soft_matched_part) +@@ -6463,6 +6495,7 @@ do_spec_1 (const char *spec, int inswitch, const char *soft_matched_part) info.append_len = strlen (info.append); info.omit_relative = false; info.separate_options = true; @@ -4172,35 +4509,6 @@ index ecce55ebe79..ba110ade58b 100644 extern bool hook_bool_const_rtx_commutative_p (const_rtx, int); extern rtx default_function_value (const_tree, const_tree, bool); extern HARD_REG_SET default_zero_call_used_regs (HARD_REG_SET); -diff --git a/gcc/testsuite/g++.dg/abi/aarch64_guard1.C b/gcc/testsuite/g++.dg/abi/aarch64_guard1.C -index e2669a89fbf..52be32decc6 100644 ---- a/gcc/testsuite/g++.dg/abi/aarch64_guard1.C -+++ b/gcc/testsuite/g++.dg/abi/aarch64_guard1.C -@@ -12,5 +12,6 @@ int *foo () - return &x; - } - --// { dg-final { scan-assembler _ZGVZ3foovE1x,8,8 } } -+// { dg-final { scan-assembler _ZGVZ3foovE1x,8,8 { target { ! *-*-darwin* } } } } -+// { dg-final { scan-assembler __DATA,__bss,__ZGVZ3foovE1x,8,3 { target *-*-darwin* } } } - // { dg-final { scan-tree-dump "& 1" "original" } } -diff --git a/gcc/testsuite/g++.dg/abi/arm_va_list.C b/gcc/testsuite/g++.dg/abi/arm_va_list.C -index 4f6f3a46da4..ff9fd8bcf0d 100644 ---- a/gcc/testsuite/g++.dg/abi/arm_va_list.C -+++ b/gcc/testsuite/g++.dg/abi/arm_va_list.C -@@ -8,8 +8,10 @@ - // #include - typedef __builtin_va_list va_list; - --// { dg-final { scan-assembler "\n_Z1fPSt9__va_list:" } } -+// { dg-final { scan-assembler "\n_Z1fPSt9__va_list:" { target { ! *-*-darwin* } } } } -+// { dg-final { scan-assembler "\n__Z1fPPc:" { target *-*-darwin* } } } - void f(va_list*) {} - --// { dg-final { scan-assembler "\n_Z1gSt9__va_listS_:" } } -+// { dg-final { scan-assembler "\n_Z1gSt9__va_listS_:" { target { ! *-*-darwin* } } } } -+// { dg-final { scan-assembler "\n__Z1gPcS_:" { target *-*-darwin* } } } - void g(va_list, va_list) {} diff --git a/gcc/testsuite/g++.dg/cpp0x/pr106435-b.cc b/gcc/testsuite/g++.dg/cpp0x/pr106435-b.cc new file mode 100644 index 00000000000..4f581694177 @@ -4226,1796 +4534,50 @@ index 00000000000..4f581694177 +thread_local Foo Bar::baz; diff --git a/gcc/testsuite/g++.dg/cpp0x/pr106435.C b/gcc/testsuite/g++.dg/cpp0x/pr106435.C new file mode 100644 -index 00000000000..d600976f9f9 ---- /dev/null -+++ b/gcc/testsuite/g++.dg/cpp0x/pr106435.C -@@ -0,0 +1,20 @@ -+// PR c++/106435 -+// { dg-do run { target c++11 } } -+// { dg-additional-sources "pr106435-b.cc" } -+ -+#include "pr106435.h" -+ -+int num_calls = 0; -+ -+extern "C" __attribute__((__noreturn__)) void abort(); -+ -+thread_local Foo Bar::bat; -+ -+int main() { -+ int v = Bar::foo.func(); -+ if (v != 2) -+ abort(); -+ v = Bar::bat.func(); -+ if (v != 3) -+ abort(); -+} -diff --git a/gcc/testsuite/g++.dg/cpp0x/pr106435.h b/gcc/testsuite/g++.dg/cpp0x/pr106435.h -new file mode 100644 -index 00000000000..240de1ee9a9 ---- /dev/null -+++ b/gcc/testsuite/g++.dg/cpp0x/pr106435.h -@@ -0,0 +1,14 @@ -+// PR c++/106435 -+#pragma once -+ -+extern int num_calls; -+struct Foo { -+ Foo(); -+ int func(); -+}; -+ -+struct Bar { -+ thread_local static Foo foo; -+ thread_local static Foo baz; -+ thread_local static Foo bat; -+}; -diff --git a/gcc/testsuite/g++.dg/ext/arm-bf16/bf16-mangle-aarch64-1.C b/gcc/testsuite/g++.dg/ext/arm-bf16/bf16-mangle-aarch64-1.C -index 5426a1814b8..a017ce8ce5f 100644 ---- a/gcc/testsuite/g++.dg/ext/arm-bf16/bf16-mangle-aarch64-1.C -+++ b/gcc/testsuite/g++.dg/ext/arm-bf16/bf16-mangle-aarch64-1.C -@@ -2,12 +2,12 @@ - - /* Test mangling */ - --/* { dg-final { scan-assembler "\t.global\t_Z1fPu6__bf16" } } */ -+/* { dg-final { scan-assembler {\t.globa?l[ \t]_?_Z1fPu6__bf16} } } */ - void f (__bf16 *x) { } - --/* { dg-final { scan-assembler "\t.global\t_Z1gPu6__bf16S_" } } */ -+/* { dg-final { scan-assembler {\t.globa?l[ \t]_?_Z1gPu6__bf16S_} } } */ - void g (__bf16 *x, __bf16 *y) { } - --/* { dg-final { scan-assembler "\t.global\t_ZN1SIu6__bf16u6__bf16E1iE" } } */ -+/* { dg-final { scan-assembler {\t.globa?l[ \t]_?_ZN1SIu6__bf16u6__bf16E1iE} } } */ - template struct S { static int i; }; - template <> int S<__bf16, __bf16>::i = 3; -diff --git a/gcc/testsuite/g++.dg/torture/darwin-cfstring-3.C b/gcc/testsuite/g++.dg/torture/darwin-cfstring-3.C -index ee4b385b17f..eabb3b517a4 100644 ---- a/gcc/testsuite/g++.dg/torture/darwin-cfstring-3.C -+++ b/gcc/testsuite/g++.dg/torture/darwin-cfstring-3.C -@@ -26,5 +26,5 @@ void foo(void) { - - /* { dg-final { scan-assembler "\\.long\[ \\t\]+___CFConstantStringClassReference\n\[ \\t\]*\\.long\[ \\t\]+1992\n\[ \\t\]*\\.long\[ \\t\]+\[lL\]C.*\n\[ \\t\]*\\.long\[ \\t\]+4\n" { target { *-*-darwin* && { ! lp64 } } } } } */ - /* { dg-final { scan-assembler "\\.long\[ \\t\]+___CFConstantStringClassReference\n\[ \\t\]*\\.long\[ \\t\]+1992\n\[ \\t\]*\\.long\[ \\t\]+\[lL\]C.*\n\[ \\t\]*\\.long\[ \\t\]+10\n" { target { *-*-darwin* && { ! lp64 } } } } } */ --/* { dg-final { scan-assembler ".quad\t___CFConstantStringClassReference\n\t.long\t1992\n\t.space 4\n\t.quad\t.*\n\t.quad\t4\n" { target { *-*-darwin* && { lp64 } } } } } */ --/* { dg-final { scan-assembler ".quad\t___CFConstantStringClassReference\n\t.long\t1992\n\t.space 4\n\t.quad\t.*\n\t.quad\t10\n" { target { *-*-darwin* && { lp64 } } } } } */ -+/* { dg-final { scan-assembler {.(quad|xword)\t___CFConstantStringClassReference\n\t.(long|word)\t1992\n\t.space 4\n\t.(quad|xword)\t.*\n\t.(quad|xword)\t4\n} { target { *-*-darwin* && { lp64 } } } } } */ -+/* { dg-final { scan-assembler {.(quad|xword)\t___CFConstantStringClassReference\n\t.(long|word)\t1992\n\t.space 4\n\t.(quad|xword)\t.*\n\t.(quad|xword)\t10\n} { target { *-*-darwin* && { lp64 } } } } } */ -diff --git a/gcc/testsuite/g++.target/aarch64/no_unique_address_1.C b/gcc/testsuite/g++.target/aarch64/no_unique_address_1.C -index 5fc68ea5d6d..5faf915fa54 100644 ---- a/gcc/testsuite/g++.target/aarch64/no_unique_address_1.C -+++ b/gcc/testsuite/g++.target/aarch64/no_unique_address_1.C -@@ -1,5 +1,5 @@ - /* { dg-options "-std=c++11 -O -foptimize-sibling-calls -fpeephole2" } */ --/* { dg-final { check-function-bodies "**" "" "" { target lp64 } } } */ -+/* { dg-final { check-function-bodies "**" "" "" { target { lp64 && { ! aarch64*-*-darwin* } } } } } */ - - struct X { }; - struct Y { int : 0; }; -diff --git a/gcc/testsuite/g++.target/aarch64/no_unique_address_2.C b/gcc/testsuite/g++.target/aarch64/no_unique_address_2.C -index f0717133ccd..322ec127c79 100644 ---- a/gcc/testsuite/g++.target/aarch64/no_unique_address_2.C -+++ b/gcc/testsuite/g++.target/aarch64/no_unique_address_2.C -@@ -1,5 +1,5 @@ - /* { dg-options "-std=c++17 -O -foptimize-sibling-calls -fpeephole2" } */ --/* { dg-final { check-function-bodies "**" "" "" { target lp64 } } } */ -+/* { dg-final { check-function-bodies "**" "" "" { target { lp64 && { ! aarch64*-*-darwin* } } } } } */ - - struct X { }; - struct Y { int : 0; }; -diff --git a/gcc/testsuite/g++.target/aarch64/sve/aarch64-sve.exp b/gcc/testsuite/g++.target/aarch64/sve/aarch64-sve.exp -index 03a6537a53e..d4c2052dc59 100644 ---- a/gcc/testsuite/g++.target/aarch64/sve/aarch64-sve.exp -+++ b/gcc/testsuite/g++.target/aarch64/sve/aarch64-sve.exp -@@ -25,6 +25,11 @@ if {![istarget aarch64*-*-*] } then { - return - } - -+# Darwin doesn't support sve -+if { [istarget *-*-darwin*] } then { -+ return -+} -+ - # Load support procs. - load_lib g++-dg.exp - -diff --git a/gcc/testsuite/g++.target/aarch64/sve/acle/aarch64-sve-acle-asm.exp b/gcc/testsuite/g++.target/aarch64/sve/acle/aarch64-sve-acle-asm.exp -index 38140413a97..559e1f37c68 100644 ---- a/gcc/testsuite/g++.target/aarch64/sve/acle/aarch64-sve-acle-asm.exp -+++ b/gcc/testsuite/g++.target/aarch64/sve/acle/aarch64-sve-acle-asm.exp -@@ -24,6 +24,11 @@ if { ![istarget aarch64*-*-*] } { - return - } - -+# Darwin doesn't support sve -+if { [istarget *-*-darwin*] } then { -+ return -+} -+ - # Load support procs. - load_lib g++-dg.exp - -diff --git a/gcc/testsuite/g++.target/aarch64/sve/acle/aarch64-sve-acle.exp b/gcc/testsuite/g++.target/aarch64/sve/acle/aarch64-sve-acle.exp -index d1887eb8087..c9fee945c52 100644 ---- a/gcc/testsuite/g++.target/aarch64/sve/acle/aarch64-sve-acle.exp -+++ b/gcc/testsuite/g++.target/aarch64/sve/acle/aarch64-sve-acle.exp -@@ -25,6 +25,11 @@ if {![istarget aarch64*-*-*] } { - return - } - -+# Darwin doesn't support sve -+if { [istarget *-*-darwin*] } then { -+ return -+} -+ - # Load support procs. - load_lib g++-dg.exp - -diff --git a/gcc/testsuite/g++.target/aarch64/sve2/acle/aarch64-sve2-acle-asm.exp b/gcc/testsuite/g++.target/aarch64/sve2/acle/aarch64-sve2-acle-asm.exp -index 78e8ecae729..e22ef5f0876 100644 ---- a/gcc/testsuite/g++.target/aarch64/sve2/acle/aarch64-sve2-acle-asm.exp -+++ b/gcc/testsuite/g++.target/aarch64/sve2/acle/aarch64-sve2-acle-asm.exp -@@ -24,6 +24,11 @@ if { ![istarget aarch64*-*-*] } { - return - } - -+# Darwin doesn't support sve -+if { [istarget *-*-darwin*] } then { -+ return -+} -+ - # Load support procs. - load_lib g++-dg.exp - -diff --git a/gcc/testsuite/gcc.dg/builtin-apply2.c b/gcc/testsuite/gcc.dg/builtin-apply2.c -index 0f350f4ac16..d1e70b3a3e5 100644 ---- a/gcc/testsuite/gcc.dg/builtin-apply2.c -+++ b/gcc/testsuite/gcc.dg/builtin-apply2.c -@@ -1,7 +1,7 @@ - /* { dg-do run } */ - /* { dg-require-effective-target untyped_assembly } */ - /* { dg-skip-if "Variadic funcs have all args on stack. Normal funcs have args in registers." { "avr-*-* nds32*-*-* amdgcn-*-*" } } */ --/* { dg-skip-if "Variadic funcs use different argument passing from normal funcs." { "csky*-*-* riscv*-*-* or1k*-*-* msp430-*-* pru-*-* loongarch*-*-*" } } */ -+/* { dg-skip-if "Variadic funcs use different argument passing from normal funcs." { "csky*-*-* riscv*-*-* or1k*-*-* msp430-*-* pru-*-* loongarch*-*-* aarch64-apple-darwin*" } } */ - /* { dg-skip-if "Variadic funcs use Base AAPCS. Normal funcs use VFP variant." { arm*-*-* && arm_hf_eabi } } */ - - /* PR target/12503 */ -diff --git a/gcc/testsuite/gcc.dg/cwsc1.c b/gcc/testsuite/gcc.dg/cwsc1.c -index e793e26116a..7d8b472bdf6 100644 ---- a/gcc/testsuite/gcc.dg/cwsc1.c -+++ b/gcc/testsuite/gcc.dg/cwsc1.c -@@ -6,7 +6,11 @@ - #elif defined(__i386__) - # define CHAIN "%ecx" - #elif defined(__aarch64__) --# define CHAIN "x18" -+# if defined(__APPLE__) -+# define CHAIN "x16" -+# else -+# define CHAIN "x18" -+# endif - #elif defined(__alpha__) - # define CHAIN "$1" - #elif defined(__arm__) -diff --git a/gcc/testsuite/gcc.dg/darwin-segaddr.c b/gcc/testsuite/gcc.dg/darwin-segaddr.c -index 526db77bd9c..fcc324b3031 100644 ---- a/gcc/testsuite/gcc.dg/darwin-segaddr.c -+++ b/gcc/testsuite/gcc.dg/darwin-segaddr.c -@@ -1,7 +1,8 @@ - /* Check that -segaddr gets through and works. */ - /* { dg-do run { target *-*-darwin* } } */ - /* { dg-options "-O0 -segaddr __TEST 0x200000 -fno-pie" { target { *-*-darwin* && { ! lp64 } } } } */ --/* { dg-options "-O0 -segaddr __TEST 0x110000000 -fno-pie" { target { *-*-darwin* && lp64 } } } */ -+/* { dg-options "-O0 -segaddr __TEST 0x110000000 -fno-pie" { target { *-*-darwin[1456789]* && lp64 } } } */ -+/* { dg-options "-O0 -segaddr __TEST 0x110000000 " { target { *-*-darwin2* && lp64 } } } */ - - extern void abort (); - -diff --git a/gcc/testsuite/gcc.dg/pr26427.c b/gcc/testsuite/gcc.dg/pr26427.c -index add13ca209e..2c09f28195d 100644 ---- a/gcc/testsuite/gcc.dg/pr26427.c -+++ b/gcc/testsuite/gcc.dg/pr26427.c -@@ -1,4 +1,4 @@ --/* { dg-warning "this target does not support" "" {target *86*-*-darwin* } 0 } */ -+/* { dg-warning "this target does not support" "" {target *86*-*-darwin* aarch64-*-darwin* } 0 } */ - /* { dg-do run { target { *-*-darwin* } } } */ - /* { dg-options { -fsection-anchors -O } } */ - /* PR target/26427 */ -diff --git a/gcc/testsuite/gcc.dg/pubtypes-2.c b/gcc/testsuite/gcc.dg/pubtypes-2.c -index 116e3489bc0..b3d1231ad44 100644 ---- a/gcc/testsuite/gcc.dg/pubtypes-2.c -+++ b/gcc/testsuite/gcc.dg/pubtypes-2.c -@@ -2,7 +2,8 @@ - /* { dg-options "-O0 -gdwarf-2 -dA" } */ - /* { dg-skip-if "Unmatchable assembly" { mmix-*-* } } */ - /* { dg-final { scan-assembler "__debug_pubtypes" } } */ --/* { dg-final { scan-assembler {long+[ \t]+0x14d+[ \t]+[#;]+[ \t]+Pub Info Length} } } */ -+/* { dg-final { scan-assembler {long+[ \t]+0x14d+[ \t]+[#;]+[ \t]+Pub Info Length} { target { ! aarch64-*-darwin* } } } } */ -+/* { dg-final { scan-assembler {long+[ \t]+0x163+[ \t]+[#;]+[ \t]+Pub Info Length} { target aarch64-*-darwin* } } } */ - /* { dg-final { scan-assembler "used_struct\\\\0\"+\[ \t\]+\[#;]+\[ \t\]+external name" } } */ - /* { dg-final { scan-assembler-not "unused_struct\\\\0\"+\[ \t\]+\[#;]+\[ \t\]+external name" } } */ - -diff --git a/gcc/testsuite/gcc.dg/pubtypes-3.c b/gcc/testsuite/gcc.dg/pubtypes-3.c -index 3fb3468fb00..950a9ba72fc 100644 ---- a/gcc/testsuite/gcc.dg/pubtypes-3.c -+++ b/gcc/testsuite/gcc.dg/pubtypes-3.c -@@ -2,7 +2,8 @@ - /* { dg-options "-O0 -gdwarf-2 -dA" } */ - /* { dg-skip-if "Unmatchable assembly" { mmix-*-* } } */ - /* { dg-final { scan-assembler "__debug_pubtypes" } } */ --/* { dg-final { scan-assembler {long+[ \t]+0x14d+[ \t]+[#;]+[ \t]+Pub Info Length} } } */ -+/* { dg-final { scan-assembler {long+[ \t]+0x14d+[ \t]+[#;]+[ \t]+Pub Info Length} { target { ! aarch64-*-darwin* } } } } */ -+/* { dg-final { scan-assembler {long+[ \t]+0x163+[ \t]+[#;]+[ \t]+Pub Info Length} { target aarch64-*-darwin* } } } */ - /* { dg-final { scan-assembler "used_struct\\\\0\"+\[ \t\]+\[#;]+\[ \t\]+external name" } } */ - /* { dg-final { scan-assembler-not "unused_struct\\\\0\"+\[ \t\]+\[#;]+\[ \t\]+external name" } } */ - /* { dg-final { scan-assembler-not "\"list_name_type\\\\0\"+\[ \t\]+\[#;]+\[ \t\]+external name" } } */ -diff --git a/gcc/testsuite/gcc.dg/pubtypes-4.c b/gcc/testsuite/gcc.dg/pubtypes-4.c -index 83fba8dfabc..7250771587b 100644 ---- a/gcc/testsuite/gcc.dg/pubtypes-4.c -+++ b/gcc/testsuite/gcc.dg/pubtypes-4.c -@@ -2,7 +2,8 @@ - /* { dg-options "-O0 -gdwarf-2 -dA" } */ - /* { dg-skip-if "Unmatchable assembly" { mmix-*-* } } */ - /* { dg-final { scan-assembler "__debug_pubtypes" } } */ --/* { dg-final { scan-assembler {long+[ \t]+0x184+[ \t]+[#;]+[ \t]+Pub Info Length} } } */ -+/* { dg-final { scan-assembler {long+[ \t]+0x184+[ \t]+[#;]+[ \t]+Pub Info Length} { target { ! aarch64-*-darwin* } } } } */ -+/* { dg-final { scan-assembler {long+[ \t]+0x19a+[ \t]+[#;]+[ \t]+Pub Info Length} { target aarch64-*-darwin* } } } */ - /* { dg-final { scan-assembler "used_struct\\\\0\"+\[ \t\]+\[#;]+\[ \t\]+external name" } } */ - /* { dg-final { scan-assembler-not "unused_struct\\\\0\"+\[ \t\]+\[#;]+\[ \t\]+external name" } } */ - /* { dg-final { scan-assembler "\"list_name_type\\\\0\"+\[ \t\]+\[#;]+\[ \t\]+external name" } } */ -diff --git a/gcc/testsuite/gcc.dg/rtl/aarch64/big-endian-cse-1.c b/gcc/testsuite/gcc.dg/rtl/aarch64/big-endian-cse-1.c -index 1559a489f25..aa2da0cbca5 100644 ---- a/gcc/testsuite/gcc.dg/rtl/aarch64/big-endian-cse-1.c -+++ b/gcc/testsuite/gcc.dg/rtl/aarch64/big-endian-cse-1.c -@@ -1,4 +1,5 @@ - /* { dg-do compile { target aarch64*-*-* } } */ -+/* { dg-skip-if "Darwin platforms do not support big-endian arm64" *-*-darwin* } */ - /* { dg-require-effective-target lp64 } */ - /* { dg-options "-O3 -mbig-endian" } */ - -diff --git a/gcc/testsuite/gcc.dg/tls/pr78796.c b/gcc/testsuite/gcc.dg/tls/pr78796.c -index 038e5366e41..31e03dd419c 100644 ---- a/gcc/testsuite/gcc.dg/tls/pr78796.c -+++ b/gcc/testsuite/gcc.dg/tls/pr78796.c -@@ -1,7 +1,7 @@ - /* PR target/78796 */ - /* { dg-do run } */ - /* { dg-options "-O2" } */ --/* { dg-additional-options "-mcmodel=large" { target aarch64-*-* } } */ -+/* { dg-additional-options "-mcmodel=large" { target { { aarch64-*-* } && { ! aarch64-*-darwin* } } } } */ - /* { dg-require-effective-target tls_runtime } */ - /* { dg-add-options tls } */ - -diff --git a/gcc/testsuite/gcc.dg/torture/darwin-cfstring-3.c b/gcc/testsuite/gcc.dg/torture/darwin-cfstring-3.c -index ee4b385b17f..eabb3b517a4 100644 ---- a/gcc/testsuite/gcc.dg/torture/darwin-cfstring-3.c -+++ b/gcc/testsuite/gcc.dg/torture/darwin-cfstring-3.c -@@ -26,5 +26,5 @@ void foo(void) { - - /* { dg-final { scan-assembler "\\.long\[ \\t\]+___CFConstantStringClassReference\n\[ \\t\]*\\.long\[ \\t\]+1992\n\[ \\t\]*\\.long\[ \\t\]+\[lL\]C.*\n\[ \\t\]*\\.long\[ \\t\]+4\n" { target { *-*-darwin* && { ! lp64 } } } } } */ - /* { dg-final { scan-assembler "\\.long\[ \\t\]+___CFConstantStringClassReference\n\[ \\t\]*\\.long\[ \\t\]+1992\n\[ \\t\]*\\.long\[ \\t\]+\[lL\]C.*\n\[ \\t\]*\\.long\[ \\t\]+10\n" { target { *-*-darwin* && { ! lp64 } } } } } */ --/* { dg-final { scan-assembler ".quad\t___CFConstantStringClassReference\n\t.long\t1992\n\t.space 4\n\t.quad\t.*\n\t.quad\t4\n" { target { *-*-darwin* && { lp64 } } } } } */ --/* { dg-final { scan-assembler ".quad\t___CFConstantStringClassReference\n\t.long\t1992\n\t.space 4\n\t.quad\t.*\n\t.quad\t10\n" { target { *-*-darwin* && { lp64 } } } } } */ -+/* { dg-final { scan-assembler {.(quad|xword)\t___CFConstantStringClassReference\n\t.(long|word)\t1992\n\t.space 4\n\t.(quad|xword)\t.*\n\t.(quad|xword)\t4\n} { target { *-*-darwin* && { lp64 } } } } } */ -+/* { dg-final { scan-assembler {.(quad|xword)\t___CFConstantStringClassReference\n\t.(long|word)\t1992\n\t.space 4\n\t.(quad|xword)\t.*\n\t.(quad|xword)\t10\n} { target { *-*-darwin* && { lp64 } } } } } */ -diff --git a/gcc/testsuite/gcc.dg/torture/stackalign/builtin-apply-2.c b/gcc/testsuite/gcc.dg/torture/stackalign/builtin-apply-2.c -index 552ca1433f4..16643ceb198 100644 ---- a/gcc/testsuite/gcc.dg/torture/stackalign/builtin-apply-2.c -+++ b/gcc/testsuite/gcc.dg/torture/stackalign/builtin-apply-2.c -@@ -9,7 +9,7 @@ - /* arm_hf_eabi: Variadic funcs use Base AAPCS. Normal funcs use VFP variant. - avr: Variadic funcs don't pass arguments in registers, while normal funcs - do. */ --/* { dg-skip-if "Variadic funcs use different argument passing from normal funcs" { arm_hf_eabi || { csky*-*-* avr-*-* riscv*-*-* or1k*-*-* msp430-*-* amdgcn-*-* pru-*-* loongarch*-*-* } } } */ -+/* { dg-skip-if "Variadic funcs use different argument passing from normal funcs" { arm_hf_eabi || { csky*-*-* avr-*-* riscv*-*-* or1k*-*-* msp430-*-* amdgcn-*-* pru-*-* loongarch*-*-* aarch64-apple-darwin* } } } */ - /* { dg-skip-if "Variadic funcs have all args on stack. Normal funcs have args in registers." { nds32*-*-* } { v850*-*-* } } */ - /* { dg-require-effective-target untyped_assembly } */ - -diff --git a/gcc/testsuite/gcc.dg/tree-ssa/stdarg-2.c b/gcc/testsuite/gcc.dg/tree-ssa/stdarg-2.c -index 0224997f18a..3684cffdc64 100644 ---- a/gcc/testsuite/gcc.dg/tree-ssa/stdarg-2.c -+++ b/gcc/testsuite/gcc.dg/tree-ssa/stdarg-2.c -@@ -25,9 +25,9 @@ f1 (int i, ...) - /* { dg-final { scan-tree-dump "f1: va_list escapes 0, needs to save 0 GPR units and 0 FPR units" "stdarg" { target { powerpc*-*-linux* && ilp32 } } } } */ - /* { dg-final { scan-tree-dump "f1: va_list escapes 0, needs to save 0 GPR units and 0 FPR units" "stdarg" { target alpha*-*-linux* } } } */ - /* { dg-final { scan-tree-dump "f1: va_list escapes 0, needs to save 0 GPR units and 0 FPR units" "stdarg" { target s390*-*-linux* } } } */ --/* { dg-final { scan-tree-dump "f1: va_list escapes 0, needs to save 0 GPR units and 0 FPR units" "stdarg" { target aarch64*-*-* } } } */ -+/* { dg-final { scan-tree-dump "f1: va_list escapes 0, needs to save 0 GPR units and 0 FPR units" "stdarg" { target { { aarch64*-*-* } && { ! aarch64-apple-darwin* } } } } } */ - /* { dg-final { scan-tree-dump "f1: va_list escapes 0, needs to save 0 GPR units" "stdarg" { target { { i?86-*-* x86_64-*-* } && ia32 } } } } */ --/* { dg-final { scan-tree-dump "f1: va_list escapes 0, needs to save 0 GPR units" "stdarg" { target ia64-*-* } } } */ -+/* { dg-final { scan-tree-dump "f1: va_list escapes 0, needs to save 0 GPR units" "stdarg" { target ia64-*-* aarch64-apple-darwin* } } } */ - /* { dg-final { scan-tree-dump "f1: va_list escapes 0, needs to save 0 GPR units" "stdarg" { target { powerpc*-*-* && lp64 } } } } */ - - void -@@ -46,9 +46,9 @@ f2 (int i, ...) - /* { dg-final { scan-tree-dump "f2: va_list escapes 0, needs to save \[148\] GPR units and 0 FPR units" "stdarg" { target { powerpc*-*-linux* && ilp32 } } } } */ - /* { dg-final { scan-tree-dump "f2: va_list escapes 0, needs to save 8 GPR units and 1" "stdarg" { target alpha*-*-linux* } } } */ - /* { dg-final { scan-tree-dump "f2: va_list escapes 0, needs to save 1 GPR units and 0 FPR units" "stdarg" { target s390*-*-linux* } } } */ --/* { dg-final { scan-tree-dump "f2: va_list escapes 0, needs to save 8 GPR units and 0 FPR units" "stdarg" { target aarch64*-*-* } } } */ -+/* { dg-final { scan-tree-dump "f2: va_list escapes 0, needs to save 8 GPR units and 0 FPR units" "stdarg" { target { { aarch64*-*-* } && { ! aarch64-apple-darwin* } } } } } */ - /* { dg-final { scan-tree-dump "f2: va_list escapes 0, needs to save \[148\] GPR units" "stdarg" { target { { i?86-*-* x86_64-*-* } && ia32 } } } } */ --/* { dg-final { scan-tree-dump "f2: va_list escapes 0, needs to save \[148\] GPR units" "stdarg" { target ia64-*-* } } } */ -+/* { dg-final { scan-tree-dump "f2: va_list escapes 0, needs to save \[148\] GPR units" "stdarg" { target ia64-*-* aarch64-apple-darwin* } } } */ - /* { dg-final { scan-tree-dump "f2: va_list escapes 0, needs to save \[148\] GPR units" "stdarg" { target { powerpc*-*-* && lp64 } } } } */ - - void -@@ -62,10 +62,10 @@ f3 (int i, ...) - /* { dg-final { scan-tree-dump "f3: va_list escapes 0, needs to save 0 GPR units and \[1-9\]\[0-9\]* FPR units" "stdarg" { target { { i?86-*-* x86_64-*-* } && { ! { ia32 || llp64 } } } } } } */ - /* { dg-final { scan-tree-dump "f3: va_list escapes 0, needs to save 0 GPR units and \[1-9\]\[0-9\]* FPR units" "stdarg" { target { powerpc*-*-linux* && { powerpc_fprs && ilp32 } } } } } */ - /* { dg-final { scan-tree-dump "f3: va_list escapes 0, needs to save 0 GPR units and 1 FPR units" "stdarg" { target s390*-*-linux* } } } */ --/* { dg-final { scan-tree-dump "f3: va_list escapes 0, needs to save 0 GPR units and 16 FPR units" "stdarg" { target aarch64*-*-* } } } */ -+/* { dg-final { scan-tree-dump "f3: va_list escapes 0, needs to save 0 GPR units and 16 FPR units" "stdarg" { target { { aarch64*-*-* } && { ! aarch64-apple-darwin* } } } } } */ - /* { dg-final { scan-tree-dump "f3: va_list escapes 0, needs to save 8 GPR units and 2" "stdarg" { target alpha*-*-linux* } } } */ - /* { dg-final { scan-tree-dump "f3: va_list escapes 0, needs to save \[1-9\]\[0-9\]* GPR units" "stdarg" { target { { i?86-*-* x86_64-*-* } && ia32 } } } } */ --/* { dg-final { scan-tree-dump "f3: va_list escapes 0, needs to save \[1-9\]\[0-9\]* GPR units" "stdarg" { target ia64-*-* } } } */ -+/* { dg-final { scan-tree-dump "f3: va_list escapes 0, needs to save \[1-9\]\[0-9\]* GPR units" "stdarg" { target ia64-*-* aarch64-apple-darwin* } } } */ - /* { dg-final { scan-tree-dump "f3: va_list escapes 0, needs to save \[1-9\]\[0-9\]* GPR units" "stdarg" { target { powerpc*-*-* && lp64 } } } } */ - - void -@@ -81,9 +81,9 @@ f4 (int i, ...) - /* { dg-final { scan-tree-dump "f4: va_list escapes 1, needs to save all GPR units and all FPR units" "stdarg" { target { powerpc*-*-linux* && ilp32 } } } } */ - /* { dg-final { scan-tree-dump "f4: va_list escapes 1, needs to save all GPR units and all FPR units" "stdarg" { target alpha*-*-linux* } } } */ - /* { dg-final { scan-tree-dump "f4: va_list escapes 1, needs to save all GPR units and all FPR units" "stdarg" { target s390*-*-linux* } } } */ --/* { dg-final { scan-tree-dump "f4: va_list escapes 1, needs to save all GPR units and all FPR units" "stdarg" { target aarch64*-*-* } } } */ -+/* { dg-final { scan-tree-dump "f4: va_list escapes 1, needs to save all GPR units and all FPR units" "stdarg" { target { { aarch64*-*-* } && { ! aarch64-apple-darwin* } } } } } */ - /* { dg-final { scan-tree-dump "f4: va_list escapes 1, needs to save all GPR units" "stdarg" { target { { i?86-*-* x86_64-*-* } && ia32 } } } } */ --/* { dg-final { scan-tree-dump "f4: va_list escapes 1, needs to save all GPR units" "stdarg" { target ia64-*-* } } } */ -+/* { dg-final { scan-tree-dump "f4: va_list escapes 1, needs to save all GPR units" "stdarg" { target ia64-*-* aarch64-apple-darwin* } } } */ - /* { dg-final { scan-tree-dump "f4: va_list escapes 1, needs to save all GPR units" "stdarg" { target { powerpc*-*-* && lp64 } } } } */ - - void -@@ -100,9 +100,9 @@ f5 (int i, ...) - /* { dg-final { scan-tree-dump "f5: va_list escapes 1, needs to save all GPR units and all FPR units" "stdarg" { target { powerpc*-*-linux* && ilp32 } } } } */ - /* { dg-final { scan-tree-dump "f5: va_list escapes 1, needs to save all GPR units and all FPR units" "stdarg" { target alpha*-*-linux* } } } */ - /* { dg-final { scan-tree-dump "f5: va_list escapes 1, needs to save all GPR units and all FPR units" "stdarg" { target s390*-*-linux* } } } */ --/* { dg-final { scan-tree-dump "f5: va_list escapes 1, needs to save all GPR units and all FPR units" "stdarg" { target aarch64*-*-* } } } */ -+/* { dg-final { scan-tree-dump "f5: va_list escapes 1, needs to save all GPR units and all FPR units" "stdarg" { target { { aarch64*-*-* } && { ! aarch64-apple-darwin* } } } } } */ - /* { dg-final { scan-tree-dump "f5: va_list escapes 1, needs to save all GPR units" "stdarg" { target { { i?86-*-* x86_64-*-* } && ia32 } } } } */ --/* { dg-final { scan-tree-dump "f5: va_list escapes 1, needs to save all GPR units" "stdarg" { target ia64-*-* } } } */ -+/* { dg-final { scan-tree-dump "f5: va_list escapes 1, needs to save all GPR units" "stdarg" { target ia64-*-* aarch64-apple-darwin* } } } */ - /* { dg-final { scan-tree-dump "f5: va_list escapes 1, needs to save all GPR units" "stdarg" { target { powerpc*-*-* && lp64 } } } } */ - - void -@@ -121,9 +121,9 @@ f6 (int i, ...) - /* { dg-final { scan-tree-dump "f6: va_list escapes 0, needs to save (3|12|24) GPR units and 0 FPR units" "stdarg" { target { powerpc*-*-linux* && ilp32 } } } } */ - /* { dg-final { scan-tree-dump "f6: va_list escapes 0, needs to save 24 GPR units and 1" "stdarg" { target alpha*-*-linux* } } } */ - /* { dg-final { scan-tree-dump "f6: va_list escapes 0, needs to save 3 GPR units and 0 FPR units" "stdarg" { target s390*-*-linux* } } } */ --/* { dg-final { scan-tree-dump "f6: va_list escapes 0, needs to save 24 GPR units and 0 FPR units" "stdarg" { target aarch64*-*-* } } } */ -+/* { dg-final { scan-tree-dump "f6: va_list escapes 0, needs to save 24 GPR units and 0 FPR units" "stdarg" { target { { aarch64*-*-* } && { ! aarch64-apple-darwin* } } } } } */ - /* { dg-final { scan-tree-dump "f6: va_list escapes 0, needs to save (3|12|24) GPR units" "stdarg" { target { { i?86-*-* x86_64-*-* } && ia32 } } } } */ --/* { dg-final { scan-tree-dump "f6: va_list escapes 0, needs to save (3|12|24) GPR units" "stdarg" { target ia64-*-* } } } */ -+/* { dg-final { scan-tree-dump "f6: va_list escapes 0, needs to save (3|12|24) GPR units" "stdarg" { target ia64-*-* aarch64-apple-darwin* } } } */ - /* { dg-final { scan-tree-dump "f6: va_list escapes 0, needs to save (3|12|24) GPR units" "stdarg" { target { powerpc*-*-* && lp64 } } } } */ - - void -@@ -139,9 +139,9 @@ f7 (int i, ...) - /* { dg-final { scan-tree-dump "f7: va_list escapes 1, needs to save all GPR units and all FPR units" "stdarg" { target { powerpc*-*-linux* && ilp32 } } } } */ - /* { dg-final { scan-tree-dump "f7: va_list escapes 1, needs to save all GPR units and all FPR units" "stdarg" { target alpha*-*-linux* } } } */ - /* { dg-final { scan-tree-dump "f7: va_list escapes 1, needs to save all GPR units and all FPR units" "stdarg" { target s390*-*-linux* } } } */ --/* { dg-final { scan-tree-dump "f7: va_list escapes 1, needs to save all GPR units and all FPR units" "stdarg" { target aarch64*-*-* } } } */ -+/* { dg-final { scan-tree-dump "f7: va_list escapes 1, needs to save all GPR units and all FPR units" "stdarg" { target { { aarch64*-*-* } && { ! aarch64-apple-darwin* } } } } } */ - /* { dg-final { scan-tree-dump "f7: va_list escapes 1, needs to save all GPR units" "stdarg" { target { { i?86-*-* x86_64-*-* } && ia32 } } } } */ --/* { dg-final { scan-tree-dump "f7: va_list escapes 1, needs to save all GPR units" "stdarg" { target ia64-*-* } } } */ -+/* { dg-final { scan-tree-dump "f7: va_list escapes 1, needs to save all GPR units" "stdarg" { target ia64-*-* aarch64-apple-darwin* } } } */ - /* { dg-final { scan-tree-dump "f7: va_list escapes 1, needs to save all GPR units" "stdarg" { target { powerpc*-*-* && lp64 } } } } */ - - void -@@ -159,9 +159,9 @@ f8 (int i, ...) - /* { dg-final { scan-tree-dump "f8: va_list escapes 1, needs to save all GPR units and all FPR units" "stdarg" { target { powerpc*-*-linux* && ilp32 } } } } */ - /* { dg-final { scan-tree-dump "f8: va_list escapes 1, needs to save all GPR units and all FPR units" "stdarg" { target alpha*-*-linux* } } } */ - /* { dg-final { scan-tree-dump "f8: va_list escapes 1, needs to save all GPR units and all FPR units" "stdarg" { target s390*-*-linux* } } } */ --/* { dg-final { scan-tree-dump "f8: va_list escapes 1, needs to save all GPR units and all FPR units" "stdarg" { target aarch64*-*-* } } } */ -+/* { dg-final { scan-tree-dump "f8: va_list escapes 1, needs to save all GPR units and all FPR units" "stdarg" { target { { aarch64*-*-* } && { ! aarch64-apple-darwin* } } } } } */ - /* { dg-final { scan-tree-dump "f8: va_list escapes 1, needs to save all GPR units" "stdarg" { target { { i?86-*-* x86_64-*-* } && ia32 } } } } */ --/* { dg-final { scan-tree-dump "f8: va_list escapes 1, needs to save all GPR units" "stdarg" { target ia64-*-* } } } */ -+/* { dg-final { scan-tree-dump "f8: va_list escapes 1, needs to save all GPR units" "stdarg" { target ia64-*-* aarch64-apple-darwin* } } } */ - /* { dg-final { scan-tree-dump "f8: va_list escapes 1, needs to save all GPR units" "stdarg" { target { powerpc*-*-* && lp64 } } } } */ - - void -@@ -177,9 +177,9 @@ f9 (int i, ...) - /* { dg-final { scan-tree-dump "f9: va_list escapes 1, needs to save all GPR units and all FPR units" "stdarg" { target { powerpc*-*-linux* && ilp32 } } } } */ - /* { dg-final { scan-tree-dump "f9: va_list escapes 1, needs to save all GPR units and all FPR units" "stdarg" { target alpha*-*-linux* } } } */ - /* { dg-final { scan-tree-dump "f9: va_list escapes 1, needs to save all GPR units and all FPR units" "stdarg" { target s390*-*-linux* } } } */ --/* { dg-final { scan-tree-dump "f9: va_list escapes 1, needs to save all GPR units and all FPR units" "stdarg" { target aarch64*-*-* } } } */ -+/* { dg-final { scan-tree-dump "f9: va_list escapes 1, needs to save all GPR units and all FPR units" "stdarg" { target { { aarch64*-*-* } && { ! aarch64-apple-darwin* } } } } } */ - /* { dg-final { scan-tree-dump "f9: va_list escapes 1, needs to save all GPR units" "stdarg" { target { { i?86-*-* x86_64-*-* } && ia32 } } } } */ --/* { dg-final { scan-tree-dump "f9: va_list escapes 1, needs to save all GPR units" "stdarg" { target ia64-*-* } } } */ -+/* { dg-final { scan-tree-dump "f9: va_list escapes 1, needs to save all GPR units" "stdarg" { target ia64-*-* aarch64-apple-darwin* } } } */ - /* { dg-final { scan-tree-dump "f9: va_list escapes 1, needs to save all GPR units" "stdarg" { target { powerpc*-*-* && lp64 } } } } */ - - void -@@ -197,9 +197,9 @@ f10 (int i, ...) - /* { dg-final { scan-tree-dump "f10: va_list escapes 1, needs to save all GPR units and all FPR units" "stdarg" { target { powerpc*-*-linux* && ilp32 } } } } */ - /* { dg-final { scan-tree-dump "f10: va_list escapes 1, needs to save all GPR units and all FPR units" "stdarg" { target alpha*-*-linux* } } } */ - /* { dg-final { scan-tree-dump "f10: va_list escapes 1, needs to save all GPR units and all FPR units" "stdarg" { target s390*-*-linux* } } } */ --/* { dg-final { scan-tree-dump "f10: va_list escapes 1, needs to save all GPR units and all FPR units" "stdarg" { target aarch64*-*-* } } } */ -+/* { dg-final { scan-tree-dump "f10: va_list escapes 1, needs to save all GPR units and all FPR units" "stdarg" { target { { aarch64*-*-* } && { ! aarch64-apple-darwin* } } } } } */ - /* { dg-final { scan-tree-dump "f10: va_list escapes 1, needs to save all GPR units" "stdarg" { target { { i?86-*-* x86_64-*-* } && ia32 } } } } */ --/* { dg-final { scan-tree-dump "f10: va_list escapes 1, needs to save all GPR units" "stdarg" { target ia64-*-* } } } */ -+/* { dg-final { scan-tree-dump "f10: va_list escapes 1, needs to save all GPR units" "stdarg" { target ia64-*-* aarch64-apple-darwin* } } } */ - /* { dg-final { scan-tree-dump "f10: va_list escapes 1, needs to save all GPR units" "stdarg" { target { powerpc*-*-* && lp64 } } } } */ - - void -@@ -218,9 +218,9 @@ f11 (int i, ...) - /* { dg-final { scan-tree-dump "f11: va_list escapes 0, needs to save (3|12|24) GPR units and 0 FPR units" "stdarg" { target { powerpc*-*-linux* && ilp32 } } } } */ - /* { dg-final { scan-tree-dump "f11: va_list escapes 0, needs to save 24 GPR units and 1" "stdarg" { target alpha*-*-linux* } } } */ - /* { dg-final { scan-tree-dump "f11: va_list escapes 0, needs to save 3 GPR units and 0 FPR units" "stdarg" { target s390*-*-linux* } } } */ --/* { dg-final { scan-tree-dump "f11: va_list escapes 0, needs to save 24 GPR units and 0 FPR units" "stdarg" { target aarch64*-*-* } } } */ -+/* { dg-final { scan-tree-dump "f11: va_list escapes 0, needs to save 24 GPR units and 0 FPR units" "stdarg" { target { { aarch64*-*-* } && { ! aarch64-apple-darwin* } } } } } */ - /* { dg-final { scan-tree-dump "f11: va_list escapes 0, needs to save (3|12|24) GPR units" "stdarg" { target { { i?86-*-* x86_64-*-* } && ia32 } } } } */ --/* { dg-final { scan-tree-dump "f11: va_list escapes 0, needs to save (3|12|24) GPR units" "stdarg" { target ia64-*-* } } } */ -+/* { dg-final { scan-tree-dump "f11: va_list escapes 0, needs to save (3|12|24) GPR units" "stdarg" { target ia64-*-* aarch64-apple-darwin* } } } */ - /* { dg-final { scan-tree-dump "f11: va_list escapes 0, needs to save (3|12|24) GPR units" "stdarg" { target { powerpc*-*-* && lp64 } } } } */ - - void -@@ -239,9 +239,9 @@ f12 (int i, ...) - /* { dg-final { scan-tree-dump "f12: va_list escapes 0, needs to save 0 GPR units and \[1-9\]\[0-9\]* FPR units" "stdarg" { target { powerpc*-*-linux* && { powerpc_fprs && ilp32 } } } } } */ - /* { dg-final { scan-tree-dump "f12: va_list escapes 0, needs to save 24 GPR units and 2" "stdarg" { target alpha*-*-linux* } } } */ - /* { dg-final { scan-tree-dump "f12: va_list escapes 0, needs to save 0 GPR units and 3 FPR units" "stdarg" { target s390*-*-linux* } } } */ --/* { dg-final { scan-tree-dump "f12: va_list escapes 0, needs to save 0 GPR units and 48 FPR units" "stdarg" { target aarch64*-*-* } } } */ -+/* { dg-final { scan-tree-dump "f12: va_list escapes 0, needs to save 0 GPR units and 48 FPR units" "stdarg" { target { { aarch64*-*-* } && { ! aarch64-apple-darwin* } } } } } */ - /* { dg-final { scan-tree-dump "f12: va_list escapes 0, needs to save \[1-9]\[0-9\]* GPR units" "stdarg" { target { { i?86-*-* x86_64-*-* } && ia32 } } } } */ --/* { dg-final { scan-tree-dump "f12: va_list escapes 0, needs to save \[1-9]\[0-9\]* GPR units" "stdarg" { target ia64-*-* } } } */ -+/* { dg-final { scan-tree-dump "f12: va_list escapes 0, needs to save \[1-9]\[0-9\]* GPR units" "stdarg" { target ia64-*-* aarch64-apple-darwin* } } } */ - /* { dg-final { scan-tree-dump "f12: va_list escapes 0, needs to save \[1-9]\[0-9\]* GPR units" "stdarg" { target { powerpc*-*-* && lp64 } } } } */ - - void -@@ -260,9 +260,9 @@ f13 (int i, ...) - /* { dg-final { scan-tree-dump "f13: va_list escapes 0, needs to save 0 GPR units and \[1-9\]\[0-9\]* FPR units" "stdarg" { target { powerpc*-*-linux* && { powerpc_fprs && ilp32 } } } } } */ - /* { dg-final { scan-tree-dump "f13: va_list escapes 0, needs to save 24 GPR units and 2" "stdarg" { target alpha*-*-linux* } } } */ - /* { dg-final { scan-tree-dump "f13: va_list escapes 0, needs to save 0 GPR units and 3 FPR units" "stdarg" { target s390*-*-linux* } } } */ --/* { dg-final { scan-tree-dump "f13: va_list escapes 0, needs to save 0 GPR units and 48 FPR units" "stdarg" { target aarch64*-*-* } } } */ -+/* { dg-final { scan-tree-dump "f13: va_list escapes 0, needs to save 0 GPR units and 48 FPR units" "stdarg" { target { { aarch64*-*-* } && { ! aarch64-apple-darwin* } } } } } */ - /* { dg-final { scan-tree-dump "f13: va_list escapes 0, needs to save \[1-9]\[0-9\]* GPR units" "stdarg" { target { { i?86-*-* x86_64-*-* } && ia32 } } } } */ --/* { dg-final { scan-tree-dump "f13: va_list escapes 0, needs to save \[1-9]\[0-9\]* GPR units" "stdarg" { target ia64-*-* } } } */ -+/* { dg-final { scan-tree-dump "f13: va_list escapes 0, needs to save \[1-9]\[0-9\]* GPR units" "stdarg" { target ia64-*-* aarch64-apple-darwin* } } } */ - /* { dg-final { scan-tree-dump "f13: va_list escapes 0, needs to save \[1-9]\[0-9\]* GPR units" "stdarg" { target { powerpc*-*-* && lp64 } } } } */ - - void -@@ -281,9 +281,9 @@ f14 (int i, ...) - /* { dg-final { scan-tree-dump "f14: va_list escapes 0, needs to save \[148\] GPR units and \[1-9\]\[0-9\]* FPR units" "stdarg" { target { powerpc*-*-linux* && { powerpc_fprs && ilp32 } } } } } */ - /* { dg-final { scan-tree-dump "f14: va_list escapes 0, needs to save 24 GPR units and 3" "stdarg" { target alpha*-*-linux* } } } */ - /* { dg-final { scan-tree-dump "f14: va_list escapes 0, needs to save 1 GPR units and 2 FPR units" "stdarg" { target s390*-*-linux* } } } */ --/* { dg-final { scan-tree-dump "f14: va_list escapes 0, needs to save 8 GPR units and 32 FPR units" "stdarg" { target aarch64*-*-* } } } */ -+/* { dg-final { scan-tree-dump "f14: va_list escapes 0, needs to save 8 GPR units and 32 FPR units" "stdarg" { target { { aarch64*-*-* } && { ! aarch64-apple-darwin* } } } } } */ - /* { dg-final { scan-tree-dump "f14: va_list escapes 0, needs to save \[1-9]\[0-9\]* GPR units" "stdarg" { target { { i?86-*-* x86_64-*-* } && ia32 } } } } */ --/* { dg-final { scan-tree-dump "f14: va_list escapes 0, needs to save \[1-9]\[0-9\]* GPR units" "stdarg" { target ia64-*-* } } } */ -+/* { dg-final { scan-tree-dump "f14: va_list escapes 0, needs to save \[1-9]\[0-9\]* GPR units" "stdarg" { target ia64-*-* aarch64-apple-darwin* } } } */ - /* { dg-final { scan-tree-dump "f14: va_list escapes 0, needs to save \[1-9]\[0-9\]* GPR units" "stdarg" { target { powerpc*-*-* && lp64 } } } } */ - - inline void __attribute__((always_inline)) -@@ -305,11 +305,11 @@ f15 (int i, ...) - /* { dg-final { scan-tree-dump "f15: va_list escapes 0, needs to save \[148\] GPR units and \[1-9\]\[0-9\]* FPR units" "stdarg" { target { { i?86-*-* x86_64-*-* } && { ! { ia32 || llp64 } } } } } } */ - /* { dg-final { scan-tree-dump "f15: va_list escapes 0, needs to save \[148\] GPR units and \[1-9\]\[0-9\]* FPR units" "stdarg" { target { powerpc*-*-linux* && { powerpc_fprs && ilp32 } } } } } */ - /* { dg-final { scan-tree-dump "f15: va_list escapes 0, needs to save 1 GPR units and 2 FPR units" "stdarg" { target s390*-*-linux* } } } */ --/* { dg-final { scan-tree-dump "f15: va_list escapes 1, needs to save all GPR units and all FPR units" "stdarg" { target aarch64*-*-* } } } */ -+/* { dg-final { scan-tree-dump "f15: va_list escapes 1, needs to save all GPR units and all FPR units" "stdarg" { target { { aarch64*-*-* } && { ! aarch64-apple-darwin* } } } } } */ - - /* We may be able to improve upon this after fixing PR66010/PR66013. */ - /* { dg-final { scan-tree-dump "f15: va_list escapes 1, needs to save all GPR units and all FPR units" "stdarg" { target alpha*-*-linux* } } } */ - - /* { dg-final { scan-tree-dump-not "f15: va_list escapes 0, needs to save 0 GPR units" "stdarg" { target { { i?86-*-* x86_64-*-* } && ia32 } } } } */ --/* { dg-final { scan-tree-dump-not "f15: va_list escapes 0, needs to save 0 GPR units" "stdarg" { target ia64-*-* } } } */ -+/* { dg-final { scan-tree-dump-not "f15: va_list escapes 0, needs to save 0 GPR units" "stdarg" { target ia64-*-* aarch64-apple-darwin* } } } */ - /* { dg-final { scan-tree-dump-not "f15: va_list escapes 0, needs to save 0 GPR units" "stdarg" { target { powerpc*-*-* && lp64 } } } } */ -diff --git a/gcc/testsuite/gcc.dg/tree-ssa/stdarg-4.c b/gcc/testsuite/gcc.dg/tree-ssa/stdarg-4.c -index 1a637d6efe4..77cdf384df4 100644 ---- a/gcc/testsuite/gcc.dg/tree-ssa/stdarg-4.c -+++ b/gcc/testsuite/gcc.dg/tree-ssa/stdarg-4.c -@@ -27,9 +27,9 @@ f1 (int i, ...) - /* { dg-final { scan-tree-dump "f1: va_list escapes 0, needs to save all GPR units and 0 FPR units" "stdarg" { target { powerpc*-*-linux* && ilp32 } } } } */ - /* { dg-final { scan-tree-dump "f1: va_list escapes 0, needs to save all GPR units and 1" "stdarg" { target alpha*-*-linux* } } } */ - /* { dg-final { scan-tree-dump "f1: va_list escapes 0, needs to save all GPR units and 0 FPR units" "stdarg" { target s390*-*-linux* } } } */ --/* { dg-final { scan-tree-dump "f1: va_list escapes 0, needs to save all GPR units and 0 FPR units" "stdarg" { target aarch64*-*-* } } } */ -+/* { dg-final { scan-tree-dump "f1: va_list escapes 0, needs to save all GPR units and 0 FPR units" "stdarg" { target { { aarch64*-*-* } && { ! aarch64-apple-darwin* } } } } } */ - /* { dg-final { scan-tree-dump "f1: va_list escapes \[01\], needs to save all GPR units" "stdarg" { target { { i?86-*-* x86_64-*-* } && ia32 } } } } */ --/* { dg-final { scan-tree-dump "f1: va_list escapes \[01\], needs to save all GPR units" "stdarg" { target ia64-*-* } } } */ -+/* { dg-final { scan-tree-dump "f1: va_list escapes \[01\], needs to save all GPR units" "stdarg" { target ia64-*-* aarch64-apple-darwin* } } } */ - /* { dg-final { scan-tree-dump "f1: va_list escapes \[01\], needs to save all GPR units" "stdarg" { target { powerpc*-*-* && lp64 } } } } */ - - void -@@ -45,9 +45,9 @@ f2 (int i, ...) - /* { dg-final { scan-tree-dump "f2: va_list escapes 0, needs to save 0 GPR units and all FPR units" "stdarg" { target { powerpc*-*-linux* && { powerpc_fprs && ilp32 } } } } } */ - /* { dg-final { scan-tree-dump "f2: va_list escapes 0, needs to save all GPR units and 2" "stdarg" { target alpha*-*-linux* } } } */ - /* { dg-final { scan-tree-dump "f2: va_list escapes 0, needs to save 0 GPR units and all FPR units" "stdarg" { target s390*-*-linux* } } } */ --/* { dg-final { scan-tree-dump "f2: va_list escapes 0, needs to save 0 GPR units and all FPR units" "stdarg" { target aarch64*-*-* } } } */ -+/* { dg-final { scan-tree-dump "f2: va_list escapes 0, needs to save 0 GPR units and all FPR units" "stdarg" { target { { aarch64*-*-* } && { ! aarch64-apple-darwin* } } } } } */ - /* { dg-final { scan-tree-dump "f2: va_list escapes \[01\], needs to save all GPR units" "stdarg" { target { { i?86-*-* x86_64-*-* } && ia32 } } } } */ --/* { dg-final { scan-tree-dump "f2: va_list escapes \[01\], needs to save all GPR units" "stdarg" { target ia64-*-* } } } */ -+/* { dg-final { scan-tree-dump "f2: va_list escapes \[01\], needs to save all GPR units" "stdarg" { target ia64-*-* aarch64-apple-darwin* } } } */ - /* { dg-final { scan-tree-dump "f2: va_list escapes \[01\], needs to save all GPR units" "stdarg" { target { powerpc*-*-* && lp64 } } } } */ - - /* Here va_arg can be executed at most as many times as va_start. -@@ -69,9 +69,9 @@ f3 (int i, ...) - /* { dg-final { scan-tree-dump "f3: va_list escapes 0, needs to save \[148\] GPR units and 0 FPR units" "stdarg" { target { powerpc*-*-linux* && ilp32 } } } } */ - /* { dg-final { scan-tree-dump "f3: va_list escapes 0, needs to save 8 GPR units and 1" "stdarg" { target alpha*-*-linux* } } } */ - /* { dg-final { scan-tree-dump "f3: va_list escapes 0, needs to save 1 GPR units and 0 FPR units" "stdarg" { target s390*-*-linux* } } } */ --/* { dg-final { scan-tree-dump "f3: va_list escapes 0, needs to save 8 GPR units and 0 FPR units" "stdarg" { target aarch64*-*-* } } } */ -+/* { dg-final { scan-tree-dump "f3: va_list escapes 0, needs to save 8 GPR units and 0 FPR units" "stdarg" { target { { aarch64*-*-* } && { ! aarch64-apple-darwin* } } } } } */ - /* { dg-final { scan-tree-dump "f3: va_list escapes 0, needs to save \[148\] GPR units" "stdarg" { target { { i?86-*-* x86_64-*-* } && ia32 } } } } */ --/* { dg-final { scan-tree-dump "f3: va_list escapes 0, needs to save \[148\] GPR units" "stdarg" { target ia64-*-* } } } */ -+/* { dg-final { scan-tree-dump "f3: va_list escapes 0, needs to save \[148\] GPR units" "stdarg" { target ia64-*-* aarch64-apple-darwin* } } } */ - /* { dg-final { scan-tree-dump "f3: va_list escapes 0, needs to save \[148\] GPR units" "stdarg" { target { powerpc*-*-* && lp64 } } } } */ - - void -@@ -91,7 +91,7 @@ f4 (int i, ...) - /* { dg-final { scan-tree-dump "f4: va_list escapes 0, needs to save 0 GPR units and \[1-9\]\[0-9\]* FPR units" "stdarg" { target { powerpc*-*-linux* && { powerpc_fprs && ilp32 } } } } } */ - /* { dg-final { scan-tree-dump "f4: va_list escapes 0, needs to save 8 GPR units and 2" "stdarg" { target alpha*-*-linux* } } } */ - /* { dg-final { scan-tree-dump "f4: va_list escapes 0, needs to save 0 GPR units and 1 FPR units" "stdarg" { target s390*-*-linux* } } } */ --/* { dg-final { scan-tree-dump "f4: va_list escapes 0, needs to save 0 GPR units and 16 FPR units" "stdarg" { target aarch64*-*-* } } } */ -+/* { dg-final { scan-tree-dump "f4: va_list escapes 0, needs to save 0 GPR units and 16 FPR units" "stdarg" { target { { aarch64*-*-* } && { ! aarch64-apple-darwin* } } } } } */ - /* { dg-final { scan-tree-dump "f4: va_list escapes 0, needs to save \[148\] GPR units" "stdarg" { target { { i?86-*-* x86_64-*-* } && ia32 } } } } */ --/* { dg-final { scan-tree-dump "f4: va_list escapes 0, needs to save \[148\] GPR units" "stdarg" { target ia64-*-* } } } */ -+/* { dg-final { scan-tree-dump "f4: va_list escapes 0, needs to save \[148\] GPR units" "stdarg" { target ia64-*-* aarch64-apple-darwin* } } } */ - /* { dg-final { scan-tree-dump "f4: va_list escapes 0, needs to save \[148\] GPR units" "stdarg" { target { powerpc*-*-* && lp64 } } } } */ -diff --git a/gcc/testsuite/gcc.dg/tree-ssa/stdarg-5.c b/gcc/testsuite/gcc.dg/tree-ssa/stdarg-5.c -index c8ad4fe320d..b0484f2f053 100644 ---- a/gcc/testsuite/gcc.dg/tree-ssa/stdarg-5.c -+++ b/gcc/testsuite/gcc.dg/tree-ssa/stdarg-5.c -@@ -25,7 +25,8 @@ f1 (int i, ...) - /* { dg-final { scan-tree-dump "f1: va_list escapes 0, needs to save 0 GPR units and 0 FPR units" "stdarg" { target { { i?86-*-* x86_64-*-* } && { ! { ia32 || llp64 } } } } } } */ - /* { dg-final { scan-tree-dump "f1: va_list escapes 0, needs to save all GPR units and 1" "stdarg" { target alpha*-*-linux* } } } */ - /* { dg-final { scan-tree-dump "f1: va_list escapes 0, needs to save all GPR units and 0 FPR units" "stdarg" { target s390*-*-linux* } } } */ --/* { dg-final { scan-tree-dump "f1: va_list escapes 0, needs to save all GPR units and 0 FPR units" "stdarg" { target aarch64*-*-* } } } */ -+/* { dg-final { scan-tree-dump "f1: va_list escapes 0, needs to save all GPR units and 0 FPR units" "stdarg" { target { { aarch64*-*-* } && { ! aarch64-apple-darwin* } } } } } */ -+/* { dg-final { scan-tree-dump "f1: va_list escapes 0, needs to save all GPR units" "stdarg" { target aarch64-apple-darwin* } } } */ - - void - f2 (int i, ...) -@@ -39,7 +40,8 @@ f2 (int i, ...) - /* { dg-final { scan-tree-dump "f2: va_list escapes 0, needs to save all GPR units and all FPR units" "stdarg" { target { { i?86-*-* x86_64-*-* } && { ! { ia32 || llp64 } } } } } } */ - /* { dg-final { scan-tree-dump "f2: va_list escapes 0, needs to save all GPR units and 1" "stdarg" { target alpha*-*-linux* } } } */ - /* { dg-final { scan-tree-dump "f2: va_list escapes 0, needs to save all GPR units and 0 FPR units" "stdarg" { target s390*-*-linux* } } } */ --/* { dg-final { scan-tree-dump "f2: va_list escapes 0, needs to save all GPR units and 0 FPR units" "stdarg" { target aarch64*-*-* } } } */ -+/* { dg-final { scan-tree-dump "f2: va_list escapes 0, needs to save all GPR units and 0 FPR units" "stdarg" { target { { aarch64*-*-* } && { ! aarch64-apple-darwin* } } } } } */ -+/* { dg-final { scan-tree-dump "f2: va_list escapes 0, needs to save all GPR units" "stdarg" { target aarch64-apple-darwin* } } } */ - - /* Here va_arg can be executed at most as many times as va_start. */ - void -@@ -58,7 +60,8 @@ f3 (int i, ...) - /* { dg-final { scan-tree-dump "f3: va_list escapes 0, needs to save 0 GPR units and 0 FPR units" "stdarg" { target { { i?86-*-* x86_64-*-* } && { ! { ia32 || llp64 } } } } } } */ - /* { dg-final { scan-tree-dump "f3: va_list escapes 0, needs to save 32 GPR units and 1" "stdarg" { target alpha*-*-linux* } } } */ - /* { dg-final { scan-tree-dump "f3: va_list escapes 0, needs to save 1 GPR units and 0 FPR units" "stdarg" { target s390*-*-linux* } } } */ --/* { dg-final { scan-tree-dump "f3: va_list escapes 0, needs to save 8 GPR units and 0 FPR units" "stdarg" { target aarch64*-*-* } } } */ -+/* { dg-final { scan-tree-dump "f3: va_list escapes 0, needs to save 8 GPR units and 0 FPR units" "stdarg" { target { { aarch64*-*-* } && { ! aarch64-apple-darwin* } } } } } */ -+/* { dg-final { scan-tree-dump "f3: va_list escapes 0, needs to save 8 GPR units" "stdarg" { target aarch64-apple-darwin* } } } */ - - void - f4 (int i, ...) -@@ -77,7 +80,8 @@ f4 (int i, ...) - /* { dg-final { scan-tree-dump "f4: va_list escapes 0, needs to save 16 GPR units and 16 FPR units" "stdarg" { target { { i?86-*-* x86_64-*-* } && { ! { ia32 || llp64 } } } } } } */ - /* { dg-final { scan-tree-dump "f4: va_list escapes 0, needs to save 24 GPR units and 1" "stdarg" { target alpha*-*-linux* } } } */ - /* { dg-final { scan-tree-dump "f4: va_list escapes 0, needs to save 2 GPR units and 0 FPR units" "stdarg" { target s390*-*-linux* } } } */ --/* { dg-final { scan-tree-dump "f4: va_list escapes 0, needs to save 24 GPR units and 0 FPR units" "stdarg" { target aarch64*-*-* } } } */ -+/* { dg-final { scan-tree-dump "f4: va_list escapes 0, needs to save 24 GPR units and 0 FPR units" "stdarg" { target { { aarch64*-*-* } && { ! aarch64-apple-darwin* } } } } } */ -+/* { dg-final { scan-tree-dump "f4: va_list escapes 0, needs to save 24 GPR units" "stdarg" { target aarch64-apple-darwin* } } } */ - - void - f5 (int i, ...) -@@ -92,7 +96,8 @@ f5 (int i, ...) - /* { dg-final { scan-tree-dump "f5: va_list escapes 0, needs to save 16 GPR units and 0 FPR units" "stdarg" { target { { i?86-*-* x86_64-*-* } && { ! { ia32 || llp64 } } } } } } */ - /* { dg-final { scan-tree-dump "f5: va_list escapes 0, needs to save 32 GPR units and 1" "stdarg" { target alpha*-*-linux* } } } */ - /* { dg-final { scan-tree-dump "f5: va_list escapes 0, needs to save (4|2) GPR units and 0 FPR units" "stdarg" { target s390*-*-linux* } } } */ --/* { dg-final { scan-tree-dump "f5: va_list escapes 0, needs to save 16 GPR units and 0 FPR units" "stdarg" { target aarch64*-*-* } } } */ -+/* { dg-final { scan-tree-dump "f5: va_list escapes 0, needs to save 16 GPR units and 0 FPR units" "stdarg" { target { { aarch64*-*-* } && { ! aarch64-apple-darwin* } } } } } */ -+/* { dg-final { scan-tree-dump "f5: va_list escapes 0, needs to save 16 GPR units" "stdarg" { target aarch64-apple-darwin* } } } */ - - void - f6 (int i, ...) -@@ -107,7 +112,8 @@ f6 (int i, ...) - /* { dg-final { scan-tree-dump "f6: va_list escapes 0, needs to save 8 GPR units and 32 FPR units" "stdarg" { target { { i?86-*-* x86_64-*-* } && { ! { ia32 || llp64 } } } } } } */ - /* { dg-final { scan-tree-dump "f6: va_list escapes 0, needs to save 32 GPR units and 3" "stdarg" { target alpha*-*-linux* } } } */ - /* { dg-final { scan-tree-dump "f6: va_list escapes 0, needs to save (3|2) GPR units and 0 FPR units" "stdarg" { target s390*-*-linux* } } } */ --/* { dg-final { scan-tree-dump "f6: va_list escapes 0, needs to save 8 GPR units and 32 FPR units" "stdarg" { target aarch64*-*-* } } } */ -+/* { dg-final { scan-tree-dump "f6: va_list escapes 0, needs to save 8 GPR units and 32 FPR units" "stdarg" { target { { aarch64*-*-* } && { ! aarch64-apple-darwin* } } } } } */ -+/* { dg-final { scan-tree-dump "f6: va_list escapes 0, needs to save 24 GPR units" "stdarg" { target aarch64-apple-darwin* } } } */ - - void - f7 (int i, ...) -@@ -122,4 +128,5 @@ f7 (int i, ...) - /* { dg-final { scan-tree-dump "f7: va_list escapes 0, needs to save 0 GPR units and 64 FPR units" "stdarg" { target { { i?86-*-* x86_64-*-* } && { ! { ia32 || llp64 } } } } } } */ - /* { dg-final { scan-tree-dump "f7: va_list escapes 0, needs to save 32 GPR units and 2" "stdarg" { target alpha*-*-linux* } } } */ - /* { dg-final { scan-tree-dump "f7: va_list escapes 0, needs to save 2 GPR units and 0 FPR units" "stdarg" { target s390*-*-linux* } } } */ --/* { dg-final { scan-tree-dump "f7: va_list escapes 0, needs to save 0 GPR units and 64 FPR units" "stdarg" { target aarch64*-*-* } } } */ -+/* { dg-final { scan-tree-dump "f7: va_list escapes 0, needs to save 0 GPR units and 64 FPR units" "stdarg" { target { { aarch64*-*-* } && { ! aarch64-apple-darwin* } } } } } */ -+/* { dg-final { scan-tree-dump "f7: va_list escapes 0, needs to save 32 GPR units" "stdarg" { target aarch64-apple-darwin* } } } */ -diff --git a/gcc/testsuite/gcc.target/aarch64/aapcs64/aapcs64.exp b/gcc/testsuite/gcc.target/aarch64/aapcs64/aapcs64.exp -index 3e652c483c7..34907929bda 100644 ---- a/gcc/testsuite/gcc.target/aarch64/aapcs64/aapcs64.exp -+++ b/gcc/testsuite/gcc.target/aarch64/aapcs64/aapcs64.exp -@@ -25,6 +25,11 @@ if { ![istarget aarch64*-*-*] } then { - return - } - -+if { [istarget *-*-darwin*] } then { -+ # darwinpcs and mach-o will need different test mechanisms. -+ return -+} -+ - torture-init - set-torture-options $C_TORTURE_OPTIONS - set additional_flags "-W -Wall -Wno-abi" -diff --git a/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/bf16_dup.c b/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/bf16_dup.c -index c42c7acbbe9..76917a6ff5b 100644 ---- a/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/bf16_dup.c -+++ b/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/bf16_dup.c -@@ -1,4 +1,5 @@ - /* { dg-do assemble { target { aarch64*-*-* } } } */ -+/* { dg-require-effective-target aarch64_asm_bf16_ok } */ - /* { dg-require-effective-target arm_v8_2a_bf16_neon_ok } */ - /* { dg-options "-O2" } */ - /* { dg-add-options arm_v8_2a_bf16_neon } */ -diff --git a/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/bf16_get.c b/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/bf16_get.c -index 2193753ffbb..d29b222b032 100644 ---- a/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/bf16_get.c -+++ b/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/bf16_get.c -@@ -1,4 +1,5 @@ - /* { dg-do assemble { target { aarch64*-*-* } } } */ -+/* { dg-require-effective-target aarch64_asm_bf16_ok } */ - /* { dg-require-effective-target arm_v8_2a_bf16_neon_ok } */ - /* { dg-add-options arm_v8_2a_bf16_neon } */ - /* { dg-additional-options "-save-temps" } */ -diff --git a/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/bf16_reinterpret.c b/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/bf16_reinterpret.c -index f5adf40c648..4e3a3d94416 100644 ---- a/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/bf16_reinterpret.c -+++ b/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/bf16_reinterpret.c -@@ -1,4 +1,5 @@ - /* { dg-do assemble { target { aarch64*-*-* } } } */ -+/* { dg-require-effective-target aarch64_asm_bf16_ok } */ - /* { dg-require-effective-target arm_v8_2a_bf16_neon_ok } */ - /* { dg-add-options arm_v8_2a_bf16_neon } */ - /* { dg-additional-options "-save-temps" } */ -diff --git a/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/bfcvt-compile.c b/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/bfcvt-compile.c -index 47af7c494d9..a2f415f67b7 100644 ---- a/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/bfcvt-compile.c -+++ b/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/bfcvt-compile.c -@@ -1,4 +1,5 @@ - /* { dg-do assemble { target { aarch64*-*-* } } } */ -+/* { dg-require-effective-target aarch64_asm_bf16_ok } */ - /* { dg-require-effective-target arm_v8_2a_bf16_neon_ok } */ - /* { dg-add-options arm_v8_2a_bf16_neon } */ - /* { dg-additional-options "-save-temps" } */ -diff --git a/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/bfcvt-nosimd.c b/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/bfcvt-nosimd.c -index a914680937d..c6b2ef3e444 100644 ---- a/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/bfcvt-nosimd.c -+++ b/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/bfcvt-nosimd.c -@@ -2,7 +2,7 @@ - /* { dg-skip-if "" { *-*-* } { "-fno-fat-lto-objects" } } */ - /* { dg-require-effective-target aarch64_asm_bf16_ok } */ - /* { dg-additional-options "-save-temps -march=armv8.2-a+bf16+nosimd" } */ --/* { dg-final { check-function-bodies "**" "" {-O[^0]} } } */ -+/* { dg-final { check-function-bodies "**" "" {-O[^0]} { target { ! aarch64*-*-darwin* } } } } */ - - #include - -diff --git a/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/bfcvtnq2-untied.c b/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/bfcvtnq2-untied.c -index 4b730e39d4e..fd2abadb457 100644 ---- a/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/bfcvtnq2-untied.c -+++ b/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/bfcvtnq2-untied.c -@@ -1,8 +1,9 @@ - /* { dg-do assemble { target { aarch64*-*-* } } } */ -+/* { dg-require-effective-target aarch64_asm_bf16_ok } */ - /* { dg-require-effective-target arm_v8_2a_bf16_neon_ok } */ - /* { dg-add-options arm_v8_2a_bf16_neon } */ - /* { dg-additional-options "-save-temps" } */ --/* { dg-final { check-function-bodies "**" "" {-O[^0]} } } */ -+/* { dg-final { check-function-bodies "**" "" {-O[^0]} { target { ! aarch64*-*-darwin* } } } } */ - /* { dg-skip-if "" { *-*-* } { "-fno-fat-lto-objects" } } */ - - #include -diff --git a/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/bfdot-1.c b/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/bfdot-1.c -index ad51507731b..e57053d2193 100644 ---- a/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/bfdot-1.c -+++ b/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/bfdot-1.c -@@ -1,8 +1,9 @@ - /* { dg-do assemble { target { aarch64*-*-* } } } */ -+/* { dg-require-effective-target aarch64_asm_bf16_ok } */ - /* { dg-require-effective-target arm_v8_2a_bf16_neon_ok } */ - /* { dg-add-options arm_v8_2a_bf16_neon } */ - /* { dg-additional-options "-save-temps" } */ --/* { dg-final { check-function-bodies "**" "" {-O[^0]} } } */ -+/* { dg-final { check-function-bodies "**" "" {-O[^0]} { target { ! aarch64*-*-darwin* } } } } */ - /* { dg-skip-if "" { *-*-* } { "-fno-fat-lto-objects" } } */ - - #include -diff --git a/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/bfdot-2.c b/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/bfdot-2.c -index ae0a953f7b4..9f5669a8974 100644 ---- a/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/bfdot-2.c -+++ b/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/bfdot-2.c -@@ -3,7 +3,7 @@ - /* { dg-require-effective-target arm_v8_2a_bf16_neon_ok } */ - /* { dg-add-options arm_v8_2a_bf16_neon } */ - /* { dg-additional-options "-mbig-endian --save-temps" } */ --/* { dg-final { check-function-bodies "**" "" {-O[^0]} } } */ -+/* { dg-final { check-function-bodies "**" "" {-O[^0]} { target { ! aarch64*-*-darwin* } } } } */ - /* { dg-skip-if "" { *-*-* } { "-fno-fat-lto-objects" } } */ - - #include -diff --git a/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/bfmlalbt-compile.c b/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/bfmlalbt-compile.c -index 9810e4ba374..315cabd464b 100644 ---- a/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/bfmlalbt-compile.c -+++ b/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/bfmlalbt-compile.c -@@ -1,8 +1,9 @@ - /* { dg-do assemble { target { aarch64*-*-* } } } */ -+/* { dg-require-effective-target aarch64_asm_bf16_ok } */ - /* { dg-require-effective-target arm_v8_2a_bf16_neon_ok } */ - /* { dg-add-options arm_v8_2a_bf16_neon } */ - /* { dg-additional-options "-save-temps" } */ --/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */ -+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" { target { ! aarch64*-*-darwin* } } } } */ - - #include - -diff --git a/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/bfmmla-compile.c b/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/bfmmla-compile.c -index 0aaa69f0037..ddc391b1332 100644 ---- a/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/bfmmla-compile.c -+++ b/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/bfmmla-compile.c -@@ -1,8 +1,9 @@ - /* { dg-do assemble { target { aarch64*-*-* } } } */ -+/* { dg-require-effective-target aarch64_asm_bf16_ok } */ - /* { dg-require-effective-target arm_v8_2a_bf16_neon_ok } */ - /* { dg-add-options arm_v8_2a_bf16_neon } */ - /* { dg-additional-options "-save-temps" } */ --/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */ -+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" { target { ! aarch64*-*-darwin* } } } } */ - - #include - -diff --git a/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vdot-3-1.c b/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vdot-3-1.c -index ac4f821e771..978eac29815 100644 ---- a/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vdot-3-1.c -+++ b/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vdot-3-1.c -@@ -1,8 +1,9 @@ - /* { dg-do assemble { target { aarch64*-*-* } } } */ -+/* { dg-require-effective-target arm_v8_2a_i8mm_neon_hw } */ - /* { dg-require-effective-target arm_v8_2a_i8mm_ok } */ - /* { dg-add-options arm_v8_2a_i8mm } */ - /* { dg-additional-options "-save-temps" } */ --/* { dg-final { check-function-bodies "**" "" {-O[^0]} } } */ -+/* { dg-final { check-function-bodies "**" "" {-O[^0]} { target { ! aarch64*-*-darwin* } } } } */ - /* { dg-skip-if "" { *-*-* } { "-fno-fat-lto-objects" } } */ - - #include -diff --git a/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vdot-3-2.c b/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vdot-3-2.c -index 61c7c51f5ec..f84ed68e2f7 100644 ---- a/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vdot-3-2.c -+++ b/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vdot-3-2.c -@@ -3,7 +3,7 @@ - /* { dg-require-effective-target arm_v8_2a_i8mm_ok } */ - /* { dg-add-options arm_v8_2a_i8mm } */ - /* { dg-additional-options "-mbig-endian -save-temps" } */ --/* { dg-final { check-function-bodies "**" "" {-O[^0]} } } */ -+/* { dg-final { check-function-bodies "**" "" {-O[^0]} { target { ! aarch64*-*-darwin* } } } } */ - /* { dg-skip-if "" { *-*-* } { "-fno-fat-lto-objects" } } */ - - #include -diff --git a/gcc/testsuite/gcc.target/aarch64/arm_align_max_pwr.c b/gcc/testsuite/gcc.target/aarch64/arm_align_max_pwr.c -index ffa4d229922..38b9ef01eb7 100644 ---- a/gcc/testsuite/gcc.target/aarch64/arm_align_max_pwr.c -+++ b/gcc/testsuite/gcc.target/aarch64/arm_align_max_pwr.c -@@ -19,5 +19,7 @@ dummy () - return result; - } - --/* { dg-final { scan-assembler-times "zero\t4" 2 } } */ --/* { dg-final { scan-assembler "zero\t268435452" } } */ -+/* { dg-final { scan-assembler-times "zero\t4" 2 { target { ! *-*-darwin* } } } } */ -+/* { dg-final { scan-assembler "zero\t268435452" { target { ! *-*-darwin*} } } } */ -+/* { dg-final { scan-assembler-times ".zerofill __DATA,__bss,_y,4,28" 1 { target { *-*-darwin* } } } } */ -+/* { dg-final { scan-assembler-times ".zerofill __DATA,__bss,_x,4,28" 1 { target { *-*-darwin* } } } } */ -diff --git a/gcc/testsuite/gcc.target/aarch64/auto-init-2.c b/gcc/testsuite/gcc.target/aarch64/auto-init-2.c -index 375befd325b..3a0387a5952 100644 ---- a/gcc/testsuite/gcc.target/aarch64/auto-init-2.c -+++ b/gcc/testsuite/gcc.target/aarch64/auto-init-2.c -@@ -12,11 +12,11 @@ enum E { - N3 - }; - --extern void bar (char, short, int, enum E, long, long long, int *, bool); -+extern void bar (unsigned char, short, int, enum E, long, long long, int *, bool); - - void foo() - { -- char temp1; -+ unsigned char temp1; - short temp2; - int temp3; - enum E temp4; -diff --git a/gcc/testsuite/gcc.target/aarch64/auto-init-3.c b/gcc/testsuite/gcc.target/aarch64/auto-init-3.c -index 7008f76b294..85a4e4daeb6 100644 ---- a/gcc/testsuite/gcc.target/aarch64/auto-init-3.c -+++ b/gcc/testsuite/gcc.target/aarch64/auto-init-3.c -@@ -2,13 +2,19 @@ - /* { dg-do compile } */ - /* { dg-options "-ftrivial-auto-var-init=zero -fdump-rtl-expand" } */ - --long double result; -+#ifdef __APPLE__ -+# define TYPE _Float128 -+#else -+# define TYPE long double -+#endif - --long double foo() -+TYPE result; -+ -+TYPE foo() - { - float temp1; - double temp2; -- long double temp3; -+ TYPE temp3; - - result = temp1 + temp2 + temp3; - return result; -diff --git a/gcc/testsuite/gcc.target/aarch64/auto-init-4.c b/gcc/testsuite/gcc.target/aarch64/auto-init-4.c -index 10197045b4c..0c6840ba224 100644 ---- a/gcc/testsuite/gcc.target/aarch64/auto-init-4.c -+++ b/gcc/testsuite/gcc.target/aarch64/auto-init-4.c -@@ -2,13 +2,19 @@ - /* { dg-do compile } */ - /* { dg-options "-O -ftrivial-auto-var-init=pattern -fdump-rtl-expand" } */ - --long double result; -+#ifdef __APPLE__ -+# define TYPE _Float128 -+#else -+# define TYPE long double -+#endif - --long double foo() -+TYPE result; -+ -+TYPE foo() - { - float temp1; - double temp2; -- long double temp3; -+ TYPE temp3; - - result = temp1 + temp2 + temp3; - return result; -diff --git a/gcc/testsuite/gcc.target/aarch64/auto-init-5.c b/gcc/testsuite/gcc.target/aarch64/auto-init-5.c -index ac69ac3df82..0dda3c201d3 100644 ---- a/gcc/testsuite/gcc.target/aarch64/auto-init-5.c -+++ b/gcc/testsuite/gcc.target/aarch64/auto-init-5.c -@@ -2,14 +2,19 @@ - /* { dg-do compile } */ - /* { dg-options "-ftrivial-auto-var-init=zero" } */ - -+#ifdef __APPLE__ -+# define TYPE _Float128 -+#else -+# define TYPE long double -+#endif - --_Complex long double result; -+_Complex TYPE result; - --_Complex long double foo() -+_Complex TYPE foo() - { - _Complex float temp1; - _Complex double temp2; -- _Complex long double temp3; -+ _Complex TYPE temp3; - - result = temp1 + temp2 + temp3; - return result; -diff --git a/gcc/testsuite/gcc.target/aarch64/auto-init-6.c b/gcc/testsuite/gcc.target/aarch64/auto-init-6.c -index 0456c66f496..23323115a11 100644 ---- a/gcc/testsuite/gcc.target/aarch64/auto-init-6.c -+++ b/gcc/testsuite/gcc.target/aarch64/auto-init-6.c -@@ -2,14 +2,19 @@ - /* { dg-do compile } */ - /* { dg-options "-ftrivial-auto-var-init=pattern" } */ - -+#ifdef __APPLE__ -+# define TYPE _Float128 -+#else -+# define TYPE long double -+#endif - --_Complex long double result; -+_Complex TYPE result; - --_Complex long double foo() -+_Complex TYPE foo() - { - _Complex float temp1; - _Complex double temp2; -- _Complex long double temp3; -+ _Complex TYPE temp3; - - result = temp1 + temp2 + temp3; - return result; -diff --git a/gcc/testsuite/gcc.target/aarch64/c-output-template-2.c b/gcc/testsuite/gcc.target/aarch64/c-output-template-2.c -index ced96d04542..86e4f5fa82c 100644 ---- a/gcc/testsuite/gcc.target/aarch64/c-output-template-2.c -+++ b/gcc/testsuite/gcc.target/aarch64/c-output-template-2.c -@@ -6,4 +6,4 @@ test (void) - __asm__ ("@ %c0" : : "S" (test)); - } - --/* { dg-final { scan-assembler "@ test" } } */ -+/* { dg-final { scan-assembler "@ _?test" } } */ -diff --git a/gcc/testsuite/gcc.target/aarch64/c-output-template-3.c b/gcc/testsuite/gcc.target/aarch64/c-output-template-3.c -index 8bde4cbeb0c..4531a381518 100644 ---- a/gcc/testsuite/gcc.target/aarch64/c-output-template-3.c -+++ b/gcc/testsuite/gcc.target/aarch64/c-output-template-3.c -@@ -7,4 +7,4 @@ test (void) - __asm__ ("@ %c0" : : "S" (&test + 4)); - } - --/* { dg-final { scan-assembler "@ test\\+4" } } */ -+/* { dg-final { scan-assembler "@ _?test\\+4" } } */ -diff --git a/gcc/testsuite/gcc.target/aarch64/c-output-template-4.c b/gcc/testsuite/gcc.target/aarch64/c-output-template-4.c -index c5a93915af1..800d52bfab8 100644 ---- a/gcc/testsuite/gcc.target/aarch64/c-output-template-4.c -+++ b/gcc/testsuite/gcc.target/aarch64/c-output-template-4.c -@@ -7,4 +7,4 @@ test (void) - __asm__ ("@ %c0" : : "S" (&test + 4)); - } - --/* { dg-final { scan-assembler "@ test\\+4" } } */ -+/* { dg-final { scan-assembler "@ _?test\\+4" } } */ -diff --git a/gcc/testsuite/gcc.target/aarch64/cpymem-size.c b/gcc/testsuite/gcc.target/aarch64/cpymem-size.c -index 4a6f2495d22..b8ef4745c6d 100644 ---- a/gcc/testsuite/gcc.target/aarch64/cpymem-size.c -+++ b/gcc/testsuite/gcc.target/aarch64/cpymem-size.c -@@ -6,7 +6,7 @@ - /* - ** cpy_127: - ** mov (w|x)2, 127 --** b memcpy -+** b _?memcpy - */ - void - cpy_127 (char *out, char *in) -@@ -17,7 +17,7 @@ cpy_127 (char *out, char *in) - /* - ** cpy_128: - ** mov (w|x)2, 128 --** b memcpy -+** b _?memcpy - */ - void - cpy_128 (char *out, char *in) -diff --git a/gcc/testsuite/gcc.target/aarch64/darwin/aarch64-darwin.exp b/gcc/testsuite/gcc.target/aarch64/darwin/aarch64-darwin.exp -new file mode 100644 -index 00000000000..b0b7f49aede ---- /dev/null -+++ b/gcc/testsuite/gcc.target/aarch64/darwin/aarch64-darwin.exp -@@ -0,0 +1,46 @@ -+# Specific tests for the darwinpcs and codegen. -+# Copyright (C) GNU Toolchain Authors -+# Contributed by Iain Sandoe -+# -+# This file is part of GCC. -+# -+# GCC is free software; you can redistribute it and/or modify it -+# under the terms of the GNU General Public License as published by -+# the Free Software Foundation; either version 3, or (at your option) -+# any later version. -+# -+# GCC is distributed in the hope that it will be useful, but -+# WITHOUT ANY WARRANTY; without even the implied warranty of -+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+# General Public License for more details. -+# -+# You should have received a copy of the GNU General Public License -+# along with GCC; see the file COPYING3. If not see -+# . */ -+ -+# GCC testsuite that uses the `dg.exp' driver. -+ -+# Exit immediately if this isn't aarch64-darwin. -+ -+if { ![istarget aarch64*-*-darwin*] } then { -+ return -+} -+ -+# Load support procs. -+load_lib gcc-dg.exp -+ -+# If a testcase doesn't have special options, use these. -+global DEFAULT_CFLAGS -+if ![info exists DEFAULT_CFLAGS] then { -+ set DEFAULT_CFLAGS " -ansi -pedantic-errors" -+} -+ -+# Initialize `dg'. -+dg-init -+ -+# Main loop. -+dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/*.\[cCS\]]] \ -+ "" $DEFAULT_CFLAGS -+ -+# All done. -+dg-finish -diff --git a/gcc/testsuite/gcc.target/aarch64/darwin/complex-in-regs.c b/gcc/testsuite/gcc.target/aarch64/darwin/complex-in-regs.c -new file mode 100644 -index 00000000000..974f02ca2ec ---- /dev/null -+++ b/gcc/testsuite/gcc.target/aarch64/darwin/complex-in-regs.c -@@ -0,0 +1,103 @@ -+/* { dg-do compile } */ -+/* we need this for complex and gnu initializers. */ -+/* { dg-options "-std=gnu99 " } */ -+/* We use the sections anchors to make the code easier to match. */ -+/* { dg-additional-options " -O -fsection-anchors -fno-schedule-insns -fno-schedule-insns2 " } */ -+/* { dg-final { check-function-bodies "**" "" "" { target *-*-darwin* } } } */ -+ -+ -+__attribute__((__noinline__)) -+_Complex char -+cc_regs_fun (_Complex char r0, _Complex char r1, -+ _Complex char r2, _Complex char r3, -+ _Complex char r4, _Complex char r5, -+ _Complex char r6, _Complex char r7); -+ -+/* -+**call_cc_regs_fun: -+** ... -+** ldrh w7, \[x0\] -+** ldrh w6, \[x0, 2\] -+** ldrh w5, \[x0, 4\] -+** ldrh w4, \[x0, 6\] -+** ldrh w3, \[x0, 8\] -+** ldrh w2, \[x0, 10\] -+** ldrh w1, \[x0, 12\] -+** ldrh w0, \[x0, 14]\ -+** bl _cc_regs_fun -+** ... -+*/ -+ -+_Complex char -+call_cc_regs_fun (void) -+{ -+ return cc_regs_fun ((_Complex char) (1 + 1i), (_Complex char) (2 + 2i), -+ (_Complex char) (3 + 3i), (_Complex char) (4 + 4i), -+ (_Complex char) (5 + 5i), (_Complex char) (6 + 6i), -+ (_Complex char) (7 + 7i), (_Complex char) (8 + 8i)); -+} -+ -+ -+__attribute__((__noinline__)) -+_Complex short -+cs_regs_fun (_Complex short r0, _Complex short r1, -+ _Complex short r2, _Complex short r3, -+ _Complex short r4, _Complex short r5, -+ _Complex short r6, _Complex short r7); -+ -+/* -+**call_cs_regs_fun: -+** ... -+** ldr w7, \[x0, 16\] -+** ldr w6, \[x0, 20\] -+** ldr w5, \[x0, 24\] -+** ldr w4, \[x0, 28\] -+** ldr w3, \[x0, 32\] -+** ldr w2, \[x0, 36\] -+** ldr w1, \[x0, 40\] -+** ldr w0, \[x0, 44\] -+** bl _cs_regs_fun -+** ... -+*/ -+ -+__attribute__((__noinline__)) -+_Complex short -+call_cs_regs_fun (void) -+{ -+ return cs_regs_fun ((_Complex short) (1 + 1i), (_Complex short) (2 + 2i), -+ (_Complex short) (3 + 3i), (_Complex short) (4 + 4i), -+ (_Complex short) (5 + 5i), (_Complex short) (6 + 6i), -+ (_Complex short) (7 + 7i), (_Complex short) (8 + 8i)); -+} -+ -+__attribute__((__noinline__)) -+_Complex int -+ci_regs_fun (_Complex int r0, _Complex int r1, -+ _Complex int r2, _Complex int r3, -+ _Complex int r4, _Complex int r5, -+ _Complex int r6, _Complex int r7); -+ -+/* -+**call_ci_regs_fun: -+** ... -+** ldr x7, \[x0, 48\] -+** ldr x6, \[x0, 56\] -+** ldr x5, \[x0, 64\] -+** ldr x4, \[x0, 72\] -+** ldr x3, \[x0, 80\] -+** ldr x2, \[x0, 88\] -+** ldr x1, \[x0, 96\] -+** ldr x0, \[x0, 104\] -+** bl _ci_regs_fun -+** ... -+*/ -+ -+__attribute__((__noinline__)) -+_Complex int -+call_ci_regs_fun (void) -+{ -+ return ci_regs_fun ((_Complex int) (1 + 1i), (_Complex int) (2 + 2i), -+ (_Complex int) (3 + 3i), (_Complex int) (4 + 4i), -+ (_Complex int) (5 + 5i), (_Complex int) (6 + 6i), -+ (_Complex int) (7 + 7i), (_Complex int) (8 + 8i)); -+} -diff --git a/gcc/testsuite/gcc.target/aarch64/darwin/darwinpcs-d1.c b/gcc/testsuite/gcc.target/aarch64/darwin/darwinpcs-d1.c -new file mode 100644 -index 00000000000..e2dd574fac7 ---- /dev/null -+++ b/gcc/testsuite/gcc.target/aarch64/darwin/darwinpcs-d1.c -@@ -0,0 +1,54 @@ -+/* { dg-do compile } */ -+/* we need this for the empty struct. */ -+/* { dg-options "-std=gnu99 " } */ -+/* { dg-additional-options "-O -fno-schedule-insns -fno-schedule-insns2 " } */ -+/* { dg-final { check-function-bodies "**" "" "" { target *-*-darwin* } } } */ -+ -+/* Make sure we do no consume any registers in passing zero-sized entities */ -+ -+typedef struct es {} Empty; -+ -+__attribute__((__noinline__)) void -+use_no_regs (int a, Empty b, int c, Empty d, Empty e, int f); -+ -+/* -+**call_use_no_regs: -+** ... -+** mov w2, 3 -+** mov w1, 2 -+** mov w0, 1 -+** bl _use_no_regs -+** ... -+*/ -+ -+__attribute__((__noinline__)) void -+call_use_no_regs (void) -+{ -+ Empty e; -+ use_no_regs (1, e, 2, e, e, 3); -+} -+ -+/* Make sure we consume no stack in passing zero-sized entities. */ -+ -+/* -+**call_use_no_stack: -+** ... -+** mov w[0-9]+, 108 -+** strb w[0-9]+, \[sp, 1\] -+** mov w[0-9]+, 106 -+** strb w[0-9]+, \[sp\] -+** ... -+** bl _use_no_stack -+** ... -+*/ -+ -+__attribute__((__noinline__)) void -+use_no_stack (int a, int b, int c, int d, int e, int f, int g, int h, -+ Empty i, char j, Empty k, char l); -+ -+void -+call_use_no_stack (void) -+{ -+ Empty e; -+ use_no_stack (0, 1, 2, 3, 4, 5, 6, 7, e, 'j', e, 'l'); -+} -diff --git a/gcc/testsuite/gcc.target/aarch64/darwin/darwinpcs-d2-00.c b/gcc/testsuite/gcc.target/aarch64/darwin/darwinpcs-d2-00.c -new file mode 100644 -index 00000000000..bd76856308b ---- /dev/null -+++ b/gcc/testsuite/gcc.target/aarch64/darwin/darwinpcs-d2-00.c -@@ -0,0 +1,126 @@ -+/* { dg-do compile } */ -+/* { dg-additional-options " -O -fno-schedule-insns -fno-schedule-insns2 " } */ -+/* { dg-final { check-function-bodies "**" "" "" { target *-*-darwin* } } } */ -+ -+/* In each case we consume the parm registers with 8 ints, forcing -+ the test values to be spilled to the stack. */ -+ -+/* The important thing here is that the chars are assigned to the stack -+ * with no padding - so that they occupy bytes 0-8. */ -+ -+/* -+**call_char_packing: -+** ... -+** mov w[0-9]+, 113 -+** strb w[0-9]+, \[sp, 8\] -+** mov w[0-9]+, 112 -+** strb w[0-9]+, \[sp, 7\] -+** mov w[0-9]+, 111 -+** strb w[0-9]+, \[sp, 6\] -+** mov w[0-9]+, 110 -+** strb w[0-9]+, \[sp, 5\] -+** mov w[0-9]+, 109 -+** strb w[0-9]+, \[sp, 4\] -+** mov w[0-9]+, 108 -+** strb w[0-9]+, \[sp, 3\] -+** mov w[0-9]+, 107 -+** strb w[0-9]+, \[sp, 2\] -+** mov w[0-9]+, 106 -+** strb w[0-9]+, \[sp, 1\] -+** mov w[0-9]+, 105 -+** strb w[0-9]+, \[sp\] -+** mov w7, 7 -+** mov w6, 6 -+** mov w5, 5 -+** mov w4, 4 -+** mov w3, 3 -+** mov w2, 2 -+** mov w1, 1 -+** mov w0, 0 -+** bl _char_packing -+** ... -+*/ -+ -+__attribute__((__noinline__)) void -+char_packing (int a, int b, int c, int d, int e, int f, int g, int h, -+ char i, char j, char k, char l, -+ char m, char n, char o, char p, -+ char q); -+ -+void call_char_packing (void) -+{ -+ char_packing (0, 1, 2, 3, 4, 5, 6, 7, -+ 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q'); -+} -+ -+/* Here we should occupy the first 7 short words on the stack. */ -+ -+/* -+**call_short_packing: -+** ... -+** mov w[0-9]+, 12 -+** strh w[0-9]+, \[sp, 8\] -+** mov w[0-9]+, 11 -+** strh w[0-9]+, \[sp, 6\] -+** mov w[0-9]+, 10 -+** strh w[0-9]+, \[sp, 4\] -+** mov w[0-9]+, 9 -+** strh w[0-9]+, \[sp, 2\] -+** mov w[0-9]+, 8 -+** strh w[0-9]+, \[sp\] -+** mov w7, 7 -+** mov w6, 6 -+** mov w5, 5 -+** mov w4, 4 -+** mov w3, 3 -+** mov w2, 2 -+** mov w1, 1 -+** mov w0, 0 -+** bl _short_packing -+** ... -+*/ -+ -+__attribute__((__noinline__)) void -+short_packing (int a, int b, int c, int d, int e, int f, int g, int h, -+ short i, short j, short k, short l, -+ short m); -+ -+void call_short_packing (void) -+{ -+ short_packing (0, 1, 2, 3, 4, 5, 6, 7, -+ 8, 9, 10, 11, 12); -+} -+ -+/* Here we should occupy the first 3 ints on the stack. */ -+ -+/* -+**call_int_packing: -+** ... -+** mov w[0-9]+, 10 -+** str w[0-9]+, \[sp, 8\] -+** mov w[0-9]+, 9 -+** str w[0-9]+, \[sp, 4\] -+** mov w[0-9]+, 8 -+** str w[0-9]+, \[sp\] -+** mov w7, 7 -+** mov w6, 6 -+** mov w5, 5 -+** mov w4, 4 -+** mov w3, 3 -+** mov w2, 2 -+** mov w1, 1 -+** mov w0, 0 -+** bl _int_packing -+** ... -+*/ -+ -+__attribute__((__noinline__)) void -+int_packing (int a, int b, int c, int d, int e, int f, int g, int h, -+ int i, int j, int k); -+ -+void call_int_packing (void) -+{ -+ int_packing (0, 1, 2, 3, 4, 5, 6, 7, -+ 8, 9, 10); -+} -+ -diff --git a/gcc/testsuite/gcc.target/aarch64/darwin/darwinpcs-d2-01.c b/gcc/testsuite/gcc.target/aarch64/darwin/darwinpcs-d2-01.c -new file mode 100644 -index 00000000000..d21fd551b4a ---- /dev/null -+++ b/gcc/testsuite/gcc.target/aarch64/darwin/darwinpcs-d2-01.c -@@ -0,0 +1,115 @@ -+/* { dg-do compile } */ -+/* { dg-additional-options " -O -fno-schedule-insns -fno-schedule-insns2 " } */ -+/* { dg-final { check-function-bodies "**" "" "" { target *-*-darwin* } } } */ -+ -+/* In each case we consume the parm registers with 8 ints, forcing -+ the test values to be spilled to the stack. */ -+ -+/* char short char short - everything on 2byte boundaries */ -+ -+/* -+**call_c_s_packing: -+** ... -+** mov w[0-9]+, 109 -+** strb w[0-9]+, \[sp, 8\] -+** mov w[0-9]+, 9 -+** strh w[0-9]+, \[sp, 6\] -+** mov w[0-9]+, 107 -+** strb w[0-9]+, \[sp, 4\] -+** mov w[0-9]+, 8 -+** strh w[0-9]+, \[sp, 2\] -+** mov w[0-9]+, 105 -+** strb w[0-9]+, \[sp\] -+** mov w7, 7 -+** mov w6, 6 -+** mov w5, 5 -+** mov w4, 4 -+** mov w3, 3 -+** mov w2, 2 -+** mov w1, 1 -+** mov w0, 0 -+** bl _c_s_packing -+** ... -+*/ -+ -+__attribute__((__noinline__)) void -+c_s_packing (int a, int b, int c, int d, int e, int f, int g, int h, -+ char i, short j, char k, short l, -+ char m); -+ -+void call_c_s_packing (void) -+{ -+ c_s_packing (0, 1, 2, 3, 4, 5, 6, 7, -+ 'i', 8 , 'k', 9, 'm'); -+} -+ -+/* -+**call_s_c_packing: -+** ... -+** mov w[0-9]+, 109 -+** strb w[0-9]+, \[sp, 7\] -+** mov w[0-9]+, 108 -+** strb w[0-9]+, \[sp, 6\] -+** mov w[0-9]+, 9 -+** strh w[0-9]+, \[sp, 4\] -+** mov w[0-9]+, 106 -+** strb w[0-9]+, \[sp, 2\] -+** mov w[0-9]+, 8 -+** strh w[0-9]+, \[sp\] -+** mov w7, 7 -+** mov w6, 6 -+** mov w5, 5 -+** mov w4, 4 -+** mov w3, 3 -+** mov w2, 2 -+** mov w1, 1 -+** mov w0, 0 -+** bl _s_c_packing -+** ... -+*/ -+ -+__attribute__((__noinline__)) void -+s_c_packing (int a, int b, int c, int d, int e, int f, int g, int h, -+ short i, char j, short k, char l, -+ char m); -+ -+void call_s_c_packing (void) -+{ -+ s_c_packing (0, 1, 2, 3, 4, 5, 6, 7, -+ 8, 'j' , 9, 'l', 'm'); -+} -+ -+/* 0, 2, 4, 0 */ -+ -+/* -+**call_csi_packing: -+** ... -+** mov w[0-9]+, 108 -+** strb w[0-9]+, \[sp, 8\] -+** mov w[0-9]+, 9 -+** str w[0-9]+, \[sp, 4\] -+** mov w[0-9]+, 8 -+** strh w[0-9]+, \[sp, 2\] -+** mov w[0-9]+, 105 -+** strb w[0-9]+, \[sp\] -+** mov w7, 7 -+** mov w6, 6 -+** mov w5, 5 -+** mov w4, 4 -+** mov w3, 3 -+** mov w2, 2 -+** mov w1, 1 -+** mov w0, 0 -+** bl _csi_packing -+** ... -+*/ -+ -+__attribute__((__noinline__)) void -+csi_packing (int a, int b, int c, int d, int e, int f, int g, int h, -+ char i, short j, int k, char l); -+ -+void call_csi_packing (void) -+{ -+ csi_packing (0, 1, 2, 3, 4, 5, 6, 7, -+ 'i', 8 , 9, 'l'); -+} -diff --git a/gcc/testsuite/gcc.target/aarch64/darwin/darwinpcs-d2-02.c b/gcc/testsuite/gcc.target/aarch64/darwin/darwinpcs-d2-02.c -new file mode 100644 -index 00000000000..55e5acdaf41 ---- /dev/null -+++ b/gcc/testsuite/gcc.target/aarch64/darwin/darwinpcs-d2-02.c -@@ -0,0 +1,75 @@ -+/* { dg-do compile } */ -+/* we need this for complex literals. */ -+/* { dg-options "-std=gnu99 " } */ -+/* { dg-additional-options "-O -fsection-anchors -fno-schedule-insns -fno-schedule-insns2 " } */ -+/* { dg-final { check-function-bodies "**" "" "" { target *-*-darwin* } } } */ -+ -+ -+__attribute__((__noinline__)) void -+c_cc_packing (int a, int b, int c, int d, int e, int f, int g, int h, -+ _Complex char i, _Complex char j); -+ -+/* We check that these values are not packed on the stack. -+**call_c_cc_packing: -+** ... -+** ldrh w[0-9]+, \[x[0-9]+\] -+** strh w[0-9]+, \[sp, 8\] -+** ldrh w[0-9]+, \[x[0-9]+, 2\] -+** strh w[0-9]+, \[sp\] -+** ... -+** bl _c_cc_packing -+** ... -+*/ -+ -+void -+call_c_cc_packing (void) -+{ -+ c_cc_packing (0, 1, 2, 3, 4, 5, 6, 7, -+ (_Complex char) (1 + 1i),(_Complex char) (2 + 2i)); -+} -+ -+ -+__attribute__((__noinline__)) void -+c_cs_packing (int a, int b, int c, int d, int e, int f, int g, int h, -+ _Complex short i, _Complex short j); -+ -+/* -+**call_c_cs_packing: -+** ... -+** ldr w[0-9]+, \[x[0-9]+, 4\] -+** str w[0-9]+, \[sp, 8\] -+** ldr w[0-9]+, \[x[0-9]+, 8\] -+** str w[0-9]+, \[sp\] -+** ... -+** bl _c_cs_packing -+** ... -+*/ -+ -+void -+call_c_cs_packing (void) -+{ -+ c_cs_packing (0, 1, 2, 3, 4, 5, 6, 7, -+ (_Complex short) (1 + 1i),(_Complex short) (2 + 2i)); -+} -+ -+void c_ci_packing (int a, int b, int c, int d, int e, int f, int g, int h, -+ _Complex int i, _Complex int j); -+ -+/* -+**call_c_ci_packing: -+** ... -+** ldr x[0-9]+, \[x[0-9]+, 12\] -+** str x[0-9]+, \[sp, 8\] -+** ldr x[0-9]+, \[x[0-9]+, 20\] -+** str x[0-9]+, \[sp\] -+** ... -+** bl _c_ci_packing -+** ... -+*/ -+ -+void -+call_c_ci_packing (void) -+{ -+ c_ci_packing (0, 1, 2, 3, 4, 5, 6, 7, -+ (_Complex int) (1 + 1i),(_Complex int) (2 + 2i)); -+} -diff --git a/gcc/testsuite/gcc.target/aarch64/darwin/darwinpcs-d2-03.c b/gcc/testsuite/gcc.target/aarch64/darwin/darwinpcs-d2-03.c -new file mode 100644 -index 00000000000..b0d2593dfd7 ---- /dev/null -+++ b/gcc/testsuite/gcc.target/aarch64/darwin/darwinpcs-d2-03.c -@@ -0,0 +1,67 @@ -+/* { dg-do compile } */ -+ -+/* { dg-additional-options "-O -fno-schedule-insns -fno-schedule-insns2 " } */ -+/* { dg-final { check-function-bodies "**" "" "" { target *-*-darwin* } } } */ -+ -+typedef union u { char a; short b; } U; -+typedef struct sf { float a; float b; float c;} SF; -+ -+__attribute__((__noinline__)) void -+u_packing (int a, int b, int c, int d, int e, int f, int g, int h, -+ U i, U j); -+ -+/* We check that these values are not packed on the stack. -+**call_u_packing: -+** ... -+** strh w[0-9]+, \[sp, 8\] -+** strh w[0-9]+, \[sp\] -+** ... -+** bl _u_packing -+** ... -+*/ -+ -+void -+call_u_packing (void) -+{ -+ U x = { 'a' }; -+ u_packing (0, 1, 2, 3, 4, 5, 6, 7, x, x); -+} -+ -+/* But a homogeneous float aggregate is treated as if it were the contained -+ floats. */ -+ -+__attribute__((__noinline__)) void -+sf_packing (float a, float b, float c, float d, -+ float e, float f, float g, float h, -+ SF i, SF j); -+ -+/* So the stores to sp+12 and 20 pack the floats onto the stack. -+**call_sf_packing: -+** ... -+** fmov s1, 1.0e\+0 -+** str s1, \[sp, 48\] -+** fmov s2, 2.0e\+0 -+** str s2, \[sp, 52\] -+** mov w[0-9]+, 1077936128 -+** ldr x[0-9]+, \[sp, 48\] -+** str x[0-9]+, \[sp, 12\] -+** str w[0-9]+, \[sp, 20\] -+** str x[0-9]+, \[sp\] -+** str w[0-9]+, \[sp, 8\] -+** fmov s7, 7.0e\+0 -+** fmov s6, 6.0e\+0 -+** fmov s5, 5.0e\+0 -+** fmov s4, 4.0e\+0 -+** fmov s3, 3.0e\+0 -+** movi v0.2s, #0 -+** bl _sf_packing -+** ... -+*/ -+ -+void -+call_sf_packing (void) -+{ -+ SF A = {1.0F, 2.0F, 3.0F}; -+ sf_packing (0.0F, 1.0F, 2.0F, 3.0F, 4.0F, 5.0F, 6.0F, 7.0F, -+ A, A); -+} -diff --git a/gcc/testsuite/gcc.target/aarch64/darwin/darwinpcs-d2-04.c b/gcc/testsuite/gcc.target/aarch64/darwin/darwinpcs-d2-04.c -new file mode 100644 -index 00000000000..33c60c69b78 ---- /dev/null -+++ b/gcc/testsuite/gcc.target/aarch64/darwin/darwinpcs-d2-04.c -@@ -0,0 +1,66 @@ -+/* { dg-do compile } */ -+ -+/* { dg-additional-options "-O -fno-schedule-insns -fno-schedule-insns2 " } */ -+/* { dg-final { check-function-bodies "**" "" "" { target *-*-darwin* } } } */ -+ -+typedef short v2hi __attribute__ ((vector_size (4))); -+typedef int v4si __attribute__ ((vector_size (16))); -+ -+v4si t; -+int al = __alignof__ (t); -+ -+__attribute__((__noinline__)) void -+v2hi_packing (v2hi a, v2hi b, v2hi c, v2hi d, v2hi e, v2hi f, v2hi g, v2hi h, -+ v2hi i, v2hi j); -+ -+/* We check that v2hi is packed on the stack. -+**call_v2hi_packing: -+** ... -+** mov w[0-9]+, 1 -+** movk w[0-9]+, 0x2, lsl 16 -+** str w[0-9]+, \[sp, 4\] -+** str w[0-9]+, \[sp\] -+** mov w7, w[0-9]+ -+** mov w6, w[0-9]+ -+** mov w5, w[0-9]+ -+** mov w4, w[0-9]+ -+** mov w3, w[0-9]+ -+** mov w2, w[0-9]+ -+** mov w1, w[0-9]+ -+** bl _v2hi_packing -+** ... -+*/ -+ -+void -+call_v2hi_packing (void) -+{ -+ v2hi x = {1,2}; -+ v2hi_packing (x, x, x, x, x, x, x, x, x, x); -+} -+ -+ -+__attribute__((__noinline__)) void -+v4si_packing (int r0, int r1, int r2, int r3, int r4, int r5, int r6, int r7, -+ v4si a, v4si b, v4si c, v4si d, v4si e, v4si f, v4si g, v4si h, -+ int stack, v4si i, v4si j); -+ -+/* Test that we align a 16b vector on the stack. -+**call_v4si_packing: -+** ... -+** adrp x0, lC0@PAGE -+** ldr q[0-9]+, \[x[0-9]+, #lC0@PAGEOFF\] -+** str q[0-9]+, \[sp, 32\] -+** str q[0-9]+, \[sp, 16\] -+** mov w[0-9]+, 42 -+** str w[0-9]+, \[sp\] -+** ... -+** bl _v4si_packing -+** ... -+*/ -+ -+void -+call_v4si_packing (void) -+{ -+ v4si x = {3,1,2,4}; -+ v4si_packing (0, 1, 2, 3, 4, 5, 6, 7, x, x, x, x, x, x, x, x, 42, x, x); -+} -diff --git a/gcc/testsuite/gcc.target/aarch64/darwin/darwinpcs-d3.c b/gcc/testsuite/gcc.target/aarch64/darwin/darwinpcs-d3.c -new file mode 100644 -index 00000000000..21c6b696b7c ---- /dev/null -+++ b/gcc/testsuite/gcc.target/aarch64/darwin/darwinpcs-d3.c -@@ -0,0 +1,40 @@ -+/* { dg-do compile } */ -+/* { dg-additional-options "-O " } */ -+/* { dg-final { check-function-bodies "**" "" "" { target *-*-darwin* } } } */ -+ -+/* This will fail, because of issue #74 -+**foo: -+** cmp w0, w1 -+** cset w0, eq -+** ret -+*/ -+ -+__attribute__((__noinline__)) -+int -+foo (char a, unsigned char b) -+{ -+ return a == b ? 1 : 0; -+} -+ -+__attribute__((__noinline__)) -+int -+bar (short a, unsigned short b) -+{ -+ return a == b ? 1 : 0; -+} -+ -+void pop (char *, unsigned char *, short *, unsigned short *); -+ -+int main () -+{ -+ char a; -+ unsigned char b; -+ short c; -+ unsigned short d; -+ int result; -+ pop (&a, &b, &c, &d); -+ -+ result = foo (a, b); -+ result += bar (c, d); -+ return result; -+} -diff --git a/gcc/testsuite/gcc.target/aarch64/darwin/darwinpcs-d4.c b/gcc/testsuite/gcc.target/aarch64/darwin/darwinpcs-d4.c -new file mode 100644 -index 00000000000..2aab48260f4 +index 00000000000..d600976f9f9 --- /dev/null -+++ b/gcc/testsuite/gcc.target/aarch64/darwin/darwinpcs-d4.c -@@ -0,0 +1,62 @@ -+/* { dg-do compile } */ -+/* we need this for __int128. */ -+/* { dg-options "-std=gnu99 " } */ -+/* { dg-additional-options "-O -fno-schedule-insns -fno-schedule-insns2 " } */ -+/* { dg-final { check-function-bodies "**" "" "" { target *-*-darwin* } } } */ ++++ b/gcc/testsuite/g++.dg/cpp0x/pr106435.C +@@ -0,0 +1,20 @@ ++// PR c++/106435 ++// { dg-do run { target c++11 } } ++// { dg-additional-sources "pr106435-b.cc" } + -+/* we should use x0, x1 and x2 - not skip x1. -+**foo: -+** eor x0, x0, x1 -+** orr x0, x0, x2 -+** cmp x0, 0 -+** cset w0, eq -+** ret -+*/ ++#include "pr106435.h" + -+__attribute__((__noinline__)) -+int -+foo (unsigned long long x,unsigned __int128 y) -+{ -+ return x == y ? 1 : 0; -+} ++int num_calls = 0; + -+/* we should use x0, x1 and x2. -+**bar: -+** eor x2, x2, x0 -+** orr x2, x2, x1 -+** cmp x2, 0 -+** cset w0, eq -+** ret -+*/ ++extern "C" __attribute__((__noreturn__)) void abort(); + -+__attribute__((__noinline__)) -+int -+bar (unsigned __int128 y, unsigned long long x) -+{ -+ return x == y ? 1 : 0; -+} ++thread_local Foo Bar::bat; + -+int fooo (unsigned long long x, unsigned __int128 y); -+int baro (unsigned __int128 y, unsigned long long x); ++int main() { ++ int v = Bar::foo.func(); ++ if (v != 2) ++ abort(); ++ v = Bar::bat.func(); ++ if (v != 3) ++ abort(); ++} +diff --git a/gcc/testsuite/g++.dg/cpp0x/pr106435.h b/gcc/testsuite/g++.dg/cpp0x/pr106435.h +new file mode 100644 +index 00000000000..240de1ee9a9 +--- /dev/null ++++ b/gcc/testsuite/g++.dg/cpp0x/pr106435.h +@@ -0,0 +1,14 @@ ++// PR c++/106435 ++#pragma once + -+/* we should use x0, x1 and x2 in both calls. -+**main: -+** ... -+** mov x1, 25 -+** mov x2, 0 -+** mov x0, 10 -+** bl _fooo -+** mov x2, 10 -+** mov x0, 25 -+** mov x1, 0 -+** bl _baro -+** ... -+*/ ++extern int num_calls; ++struct Foo { ++ Foo(); ++ int func(); ++}; + -+int main () -+{ -+ unsigned long long x = 10; -+ unsigned __int128 y = 25; -+ int r = fooo (x, y); -+ r += baro (y, x); -+} ++struct Bar { ++ thread_local static Foo foo; ++ thread_local static Foo baz; ++ thread_local static Foo bat; ++}; diff --git a/gcc/testsuite/gcc.target/aarch64/darwin/float128-00.c b/gcc/testsuite/gcc.target/aarch64/darwin/float128-00.c new file mode 100644 index 00000000000..29aec80fbaa @@ -6060,37 +4622,6 @@ index 00000000000..29aec80fbaa +{ + return foo (1.0, 2.0); +} -diff --git a/gcc/testsuite/gcc.target/aarch64/darwin/homogeneous-aggr.c b/gcc/testsuite/gcc.target/aarch64/darwin/homogeneous-aggr.c -new file mode 100644 -index 00000000000..bee97557a4d ---- /dev/null -+++ b/gcc/testsuite/gcc.target/aarch64/darwin/homogeneous-aggr.c -@@ -0,0 +1,25 @@ -+/* { dg-do compile } */ -+/* { dg-additional-options "-O " } */ -+/* { dg-final { check-function-bodies "**" "" "" { target *-*-darwin* } } } */ -+ -+typedef struct sf { float a; float b; float c;} SF; -+ -+__attribute__((__noinline__)) void -+hmg_f (SF a); -+ -+/* we should use registers for each item -+**call_hmg_f: -+** ... -+** fmov s0, 1.0e\+0 -+** fmov s1, 2.0e\+0 -+** fmov s2, 3.0e\+0 -+** bl _hmg_f -+** ... -+*/ -+ -+void -+call_hmg_f (void) -+{ -+ SF A = { 1.0F, 2.0F, 3.0F }; -+ hmg_f (A); -+} diff --git a/gcc/testsuite/gcc.target/aarch64/darwin/k+r-00.c b/gcc/testsuite/gcc.target/aarch64/darwin/k+r-00.c new file mode 100644 index 00000000000..443fb968811 @@ -6125,191 +4656,6 @@ index 00000000000..443fb968811 + return c; + return (char *)0; +} -diff --git a/gcc/testsuite/gcc.target/aarch64/darwin/tu-accesses-0.c b/gcc/testsuite/gcc.target/aarch64/darwin/tu-accesses-0.c -new file mode 100644 -index 00000000000..ba5cc493bc9 ---- /dev/null -+++ b/gcc/testsuite/gcc.target/aarch64/darwin/tu-accesses-0.c -@@ -0,0 +1,82 @@ -+/* { dg-do compile } */ -+/* { dg-options "-O -fcommon -mno-pc-relative-literal-loads" } */ -+/* { dg-final { check-function-bodies "**" "" "" { target *-*-darwin* } } } */ -+ -+/* This checks that we perform the correct accesses for file-scope vars -+ including GOT indirections. */ -+ -+double gd = 1.0; -+ -+__attribute__((__weak__)) -+double wd = 2.0; -+ -+__attribute__((__visibility__("hidden"))) -+double hd = 3.0; -+ -+__attribute__((__weak__, __visibility__("hidden"))) -+double whd = 4.0; -+ -+extern double ed; -+ -+double cd; -+ -+static double sd = 5.0; -+ -+struct { -+ double a; -+ double b; -+} two_dbls = { 1.0, 42.0 }; -+ -+double arr[3] = { 6.0, 7.0, 8.0 }; -+ -+/* -+**test: -+** adrp x[0-9]+, _gd@PAGE -+** ldr d[0-9]+, \[x[0-9]+, #_gd@PAGEOFF\] -+** adrp x[0-9]+, lC0@PAGE -+** ldr d[0-9]+, \[x[0-9]+, #lC0@PAGEOFF\] -+** fadd d[0-9]+, d[0-9]+, d[0-9]+ -+** adrp x[0-9]+, _wd@GOTPAGE -+** ldr x[0-9]+, \[x[0-9]+, _wd@GOTPAGEOFF\] -+** ldr d[0-9]+, \[x[0-9]+\] -+** fadd d[0-9]+, d[0-9]+, d[0-9]+ -+** adrp x[0-9]+, _hd@PAGE -+** ldr d[0-9]+, \[x[0-9]+, #_hd@PAGEOFF\] -+** fadd d[0-9]+, d[0-9]+, d[0-9]+ -+** adrp x[0-9]+, _whd@PAGE -+** ldr d[0-9]+, \[x[0-9]+, #_whd@PAGEOFF\] -+** fadd d[0-9]+, d[0-9]+, d[0-9]+ -+** adrp x[0-9]+, _ed@GOTPAGE -+** ldr x[0-9]+, \[x[0-9]+, _ed@GOTPAGEOFF\] -+** ldr d[0-9]+, \[x[0-9]+\] -+** fadd d[0-9]+, d[0-9]+, d[0-9]+ -+** adrp x[0-9]+, _cd@GOTPAGE -+** ldr x[0-9]+, \[x[0-9]+, _cd@GOTPAGEOFF\] -+** ldr d[0-9]+, \[x[0-9]+\] -+** fadd d[0-9]+, d[0-9]+, d[0-9]+ -+** fmov d[0-9]+, 5.0e\+0 -+** fadd d[0-9]+, d[0-9]+, d[0-9]+ -+** adrp x[0-9]+, _two_dbls@PAGE\+8 -+** ldr d[0-9]+, \[x[0-9]+, #_two_dbls@PAGEOFF\+8\] -+** fadd d[0-9]+, d[0-9]+, d[0-9]+ -+** adrp x[0-9]+, _arr@PAGE\+16 -+** ldr d[0-9]+, \[x[0-9]+, #_arr@PAGEOFF\+16\] -+** fadd d[0-9]+, d[0-9]+, d[0-9]+ -+** ret -+*/ -+ -+double test (void) -+{ -+ double x = 123456123456123456.0; -+ x += gd; -+ x += wd; -+ x += hd; -+ x += whd; -+ x += ed; -+ x += cd; -+ x += sd; -+ x += two_dbls.b; -+ x += arr[2]; -+ -+ return x; -+} -diff --git a/gcc/testsuite/gcc.target/aarch64/darwin/variadic-00.c b/gcc/testsuite/gcc.target/aarch64/darwin/variadic-00.c -new file mode 100644 -index 00000000000..6420fca11d5 ---- /dev/null -+++ b/gcc/testsuite/gcc.target/aarch64/darwin/variadic-00.c -@@ -0,0 +1,91 @@ -+/* { dg-do compile } */ -+ -+/* We use the sections anchors to make the code easier to match. */ -+/* { dg-additional-options " -O -fsection-anchors -fno-schedule-insns -fno-schedule-insns2 " } */ -+/* { dg-final { check-function-bodies "**" "" "" { target *-*-darwin* } } } */ -+ -+#include -+ -+/* What we care about here is that the load of w0 is from the incoming [SP] -+**fooi: -+** sub sp, sp, #16 -+** add x[0-9]+, sp, 24 -+** str x[0-9]+, \[sp, 8\] -+** ldr w0, \[sp, 16\] -+** ... -+*/ -+ -+__attribute__((__noinline__)) int -+fooi (int a, ...) -+{ -+ int x; -+ va_list ap; -+ va_start(ap, a); -+ x = va_arg(ap, int); -+ va_end(ap); -+ return x; -+} -+ -+__attribute__((__noinline__)) int -+fooo (char a, ...); -+ -+/* -+**call_foo: -+** ... -+** mov w[0-9]+, 42 -+** str w[0-9]+, \[sp\] -+** mov w0, 1 -+** bl _fooo -+** ... -+*/ -+ -+__attribute__((__noinline__)) int -+call_foo (void) -+{ -+ int y = fooo (1, 42); -+ return y; -+} -+ -+/* What we care about here is that the load of w0 is from the incoming [SP+8] -+**bari: -+** sub sp, sp, #16 -+** add x[0-9]+, sp, 32 -+** str x[0-9]+, \[sp, 8\] -+** ldr w0, \[sp, 24\] -+** ... -+*/ -+ -+__attribute__((__noinline__)) int -+bari (int a, int b, int c, int d, int e, int f, int g, int h, -+ int i, ...) -+{ -+ int x; -+ va_list ap; -+ va_start(ap, i); -+ x = va_arg(ap, int); -+ va_end(ap); -+ return x; -+} -+ -+/* -+**call_bar: -+** ... -+** mov w[0-9]+, 42 -+** str w[0-9]+, \[sp, 8\] -+** mov w[0-9]+, 9 -+** str w[0-9]+, \[sp\] -+** ... -+ bl _baro -+** ... -+*/ -+ -+__attribute__((__noinline__)) int -+baro (int a, int b, int c, int d, int e, int f, int g, int h, -+ int i, ...); -+ -+__attribute__((__noinline__)) int -+call_bar (void) -+{ -+ int y = baro (1, 2, 3, 4, 5, 6, 7, 8, 9, 42); -+ return y; -+} diff --git a/gcc/testsuite/gcc.target/aarch64/darwin/variadic-01.c b/gcc/testsuite/gcc.target/aarch64/darwin/variadic-01.c new file mode 100644 index 00000000000..c055aeae580 @@ -6528,484 +4874,6 @@ index 00000000000..9d796bfc07f +{ + return baro (2, (__int128)1, 42, (__int128)2); +} -diff --git a/gcc/testsuite/gcc.target/aarch64/dbl_mov_immediate_1.c b/gcc/testsuite/gcc.target/aarch64/dbl_mov_immediate_1.c -index ba6a230457b..cc30dd546f4 100644 ---- a/gcc/testsuite/gcc.target/aarch64/dbl_mov_immediate_1.c -+++ b/gcc/testsuite/gcc.target/aarch64/dbl_mov_immediate_1.c -@@ -41,8 +41,10 @@ double d4(void) - - /* { dg-final { scan-assembler-times "movi\td\[0-9\]+, #?0" 1 } } */ - --/* { dg-final { scan-assembler-times "adrp\tx\[0-9\]+, \.LC\[0-9\]" 2 } } */ --/* { dg-final { scan-assembler-times "ldr\td\[0-9\]+, \\\[x\[0-9\], #:lo12:\.LC\[0-9\]\\\]" 2 } } */ -+/* { dg-final { scan-assembler-times "adrp\tx\[0-9\]+, \.LC\[0-9\]" 2 { target { ! *-*-darwin* } } } } */ -+/* { dg-final { scan-assembler-times "ldr\td\[0-9\]+, \\\[x\[0-9\], #:lo12:\.LC\[0-9\]\\\]" 2 { target { ! *-*-darwin* } } } } */ -+/* { dg-final { scan-assembler-times "adrp\tx\[0-9\]+, lC\[0-9\]@PAGE" 2 { target *-*-darwin* } } } */ -+/* { dg-final { scan-assembler-times "ldr\td\[0-9\]+, \\\[x\[0-9\], #lC\[0-9\]@PAGEOFF\\\]" 2 { target *-*-darwin* } } } */ - - /* { dg-final { scan-assembler-times "fmov\td\[0-9\]+, 1\\\.5e\\\+0" 1 } } */ - -diff --git a/gcc/testsuite/gcc.target/aarch64/dwarf-cfa-reg.c b/gcc/testsuite/gcc.target/aarch64/dwarf-cfa-reg.c -index ae5b3797021..8a691add222 100644 ---- a/gcc/testsuite/gcc.target/aarch64/dwarf-cfa-reg.c -+++ b/gcc/testsuite/gcc.target/aarch64/dwarf-cfa-reg.c -@@ -1,5 +1,6 @@ - /* Verify that CFA register is restored to SP after FP is restored. */ - /* { dg-do compile } */ -+/* { dg-skip-if "no cfi insn support yet" *-*-darwin* } */ - /* { dg-options "-O0 -gdwarf-2" } */ - /* { dg-final { scan-assembler ".cfi_restore 30" } } */ - /* { dg-final { scan-assembler ".cfi_restore 29" } } */ -diff --git a/gcc/testsuite/gcc.target/aarch64/inline-lrint_1.c b/gcc/testsuite/gcc.target/aarch64/inline-lrint_1.c -index 478875ff874..9a2b2e44893 100644 ---- a/gcc/testsuite/gcc.target/aarch64/inline-lrint_1.c -+++ b/gcc/testsuite/gcc.target/aarch64/inline-lrint_1.c -@@ -15,4 +15,4 @@ TEST (fllf, float , long long, l) - - /* { dg-final { scan-assembler-times "frintx\t\[d,s\]\[0-9\]+, \[d,s\]\[0-9\]+" 6 } } */ - /* { dg-final { scan-assembler-times "fcvtzs\tx\[0-9\]+, \[d,s\]\[0-9\]+" 6 } } */ --/* { dg-final { scan-assembler-not "bl" } } */ -+/* { dg-final { scan-assembler-not "bl\t" } } */ -diff --git a/gcc/testsuite/gcc.target/aarch64/ldp_stp_13.c b/gcc/testsuite/gcc.target/aarch64/ldp_stp_13.c -index 9cc3942f153..52c90a92114 100644 ---- a/gcc/testsuite/gcc.target/aarch64/ldp_stp_13.c -+++ b/gcc/testsuite/gcc.target/aarch64/ldp_stp_13.c -@@ -1,4 +1,5 @@ - /* { dg-do compile } */ -+/* { dg-require-effective-target arm_mabi_ilp32 } */ - /* { dg-options "-O2 -mabi=ilp32" } */ - - long long -diff --git a/gcc/testsuite/gcc.target/aarch64/memset-corner-cases-2.c b/gcc/testsuite/gcc.target/aarch64/memset-corner-cases-2.c -index 9ee96f33255..dec73f98506 100644 ---- a/gcc/testsuite/gcc.target/aarch64/memset-corner-cases-2.c -+++ b/gcc/testsuite/gcc.target/aarch64/memset-corner-cases-2.c -@@ -7,7 +7,7 @@ - /* 127 bytes should use libcall for size. - **set127byte: - ** mov x2, 127 --** b memset -+** b _?memset - */ - void __attribute__((__noinline__)) - set127byte (int64_t *src, int c) -@@ -18,7 +18,7 @@ set127byte (int64_t *src, int c) - /* 128 bytes should use libcall for size. - **set128byte: - ** mov x2, 128 --** b memset -+** b _?memset - */ - void __attribute__((__noinline__)) - set128byte (int64_t *src, int c) -diff --git a/gcc/testsuite/gcc.target/aarch64/memset-corner-cases.c b/gcc/testsuite/gcc.target/aarch64/memset-corner-cases.c -index c43f0199adc..733a11e585a 100644 ---- a/gcc/testsuite/gcc.target/aarch64/memset-corner-cases.c -+++ b/gcc/testsuite/gcc.target/aarch64/memset-corner-cases.c -@@ -77,7 +77,7 @@ set256byte (int64_t *src, char c) - **set257byte: - ** mov x2, 257 - ** mov w1, 99 --** b memset -+** b _?memset - */ - void __attribute__((__noinline__)) - set257byte (int64_t *src) -diff --git a/gcc/testsuite/gcc.target/aarch64/no-inline-lrint_1.c b/gcc/testsuite/gcc.target/aarch64/no-inline-lrint_1.c -index d5e9200562c..7f504ad687f 100644 ---- a/gcc/testsuite/gcc.target/aarch64/no-inline-lrint_1.c -+++ b/gcc/testsuite/gcc.target/aarch64/no-inline-lrint_1.c -@@ -14,6 +14,6 @@ TEST (dlld, double, long long, l) - TEST (fllf, float , long long, l) - - /* { dg-final { scan-assembler-times "frintx\t\[d,s\]\[0-9\]+, \[d,s\]\[0-9\]+" 6 } } */ --/* { dg-final { scan-assembler-times "bl\tlrint" 4 } } */ --/* { dg-final { scan-assembler-times "bl\tllrint" 2 } } */ -+/* { dg-final { scan-assembler-times "bl\t_*lrint" 4 } } */ -+/* { dg-final { scan-assembler-times "bl\t_*llrint" 2 } } */ - /* { dg-final { scan-assembler-not "fcvtzs" } } */ -diff --git a/gcc/testsuite/gcc.target/aarch64/pr100518.c b/gcc/testsuite/gcc.target/aarch64/pr100518.c -index 5ca599f5d2e..4e7d6bc7d90 100644 ---- a/gcc/testsuite/gcc.target/aarch64/pr100518.c -+++ b/gcc/testsuite/gcc.target/aarch64/pr100518.c -@@ -1,4 +1,5 @@ - /* { dg-do compile } */ -+/* { dg-require-effective-target arm_mabi_ilp32 } */ - /* { dg-options "-mabi=ilp32 -mstrict-align -O2" } */ - - int unsigned_range_min, unsigned_range_max, a11___trans_tmp_1; -diff --git a/gcc/testsuite/gcc.target/aarch64/pr62308.c b/gcc/testsuite/gcc.target/aarch64/pr62308.c -index 1cf6e212dca..4c1a733e84d 100644 ---- a/gcc/testsuite/gcc.target/aarch64/pr62308.c -+++ b/gcc/testsuite/gcc.target/aarch64/pr62308.c -@@ -1,4 +1,5 @@ - /* { dg-do compile } */ -+/* { dg-skip-if "Darwin platforms do not support big-endian arm64" *-*-darwin* } */ - /* { dg-options "-mbig-endian" } */ - - typedef int __attribute__((vector_size(16))) v4si; -diff --git a/gcc/testsuite/gcc.target/aarch64/pr78255.c b/gcc/testsuite/gcc.target/aarch64/pr78255.c -index b078cf3e1c1..fc5d859ee68 100644 ---- a/gcc/testsuite/gcc.target/aarch64/pr78255.c -+++ b/gcc/testsuite/gcc.target/aarch64/pr78255.c -@@ -1,4 +1,5 @@ - /* { dg-do compile } */ -+/* { dg-skip-if "Darwin platforms do not support tiny" *-*-darwin* } */ - /* { dg-options "-O2 -mcmodel=tiny" } */ - - extern int bar (void *); -diff --git a/gcc/testsuite/gcc.target/aarch64/pr78561.c b/gcc/testsuite/gcc.target/aarch64/pr78561.c -index 048d2d7969f..635214edde1 100644 ---- a/gcc/testsuite/gcc.target/aarch64/pr78561.c -+++ b/gcc/testsuite/gcc.target/aarch64/pr78561.c -@@ -1,4 +1,5 @@ - /* { dg-do compile } */ -+/* { dg-skip-if "Darwin platforms do not support tiny" *-*-darwin* } */ - /* { dg-options "-Og -O3 -mcmodel=tiny" } */ - - int -diff --git a/gcc/testsuite/gcc.target/aarch64/pr80295.c b/gcc/testsuite/gcc.target/aarch64/pr80295.c -index b3866d8d6a9..7a7f127b65f 100644 ---- a/gcc/testsuite/gcc.target/aarch64/pr80295.c -+++ b/gcc/testsuite/gcc.target/aarch64/pr80295.c -@@ -1,4 +1,5 @@ - /* { dg-do compile } */ -+/* { dg-require-effective-target arm_mabi_ilp32 } */ - /* { dg-options "-mabi=ilp32" } */ - - void f (void *b) -diff --git a/gcc/testsuite/gcc.target/aarch64/pr87305.c b/gcc/testsuite/gcc.target/aarch64/pr87305.c -index 8beaa9176e0..c3f98e8eaec 100644 ---- a/gcc/testsuite/gcc.target/aarch64/pr87305.c -+++ b/gcc/testsuite/gcc.target/aarch64/pr87305.c -@@ -1,4 +1,5 @@ - /* { dg-do compile } */ -+/* { dg-skip-if "Darwin platforms do not support big-endian arm64" *-*-darwin* } */ - /* { dg-options "-Ofast -mbig-endian -w" } */ - - int cc; -diff --git a/gcc/testsuite/gcc.target/aarch64/pr92424-1.c b/gcc/testsuite/gcc.target/aarch64/pr92424-1.c -index c413a2c306e..59f7435dc83 100644 ---- a/gcc/testsuite/gcc.target/aarch64/pr92424-1.c -+++ b/gcc/testsuite/gcc.target/aarch64/pr92424-1.c -@@ -1,6 +1,7 @@ - /* { dg-do "compile" } */ - /* { dg-options "-O1" } */ - /* { dg-final { check-function-bodies "**" "" } } */ -+/* { dg-skip-if "unimplemented patchable function entry" *-*-darwin* } */ - - /* Note: this test only checks the instructions in the function bodies, - not the placement of the patch label or nops before the futncion. */ -diff --git a/gcc/testsuite/gcc.target/aarch64/pr94201.c b/gcc/testsuite/gcc.target/aarch64/pr94201.c -index 69176169186..051c742e98e 100644 ---- a/gcc/testsuite/gcc.target/aarch64/pr94201.c -+++ b/gcc/testsuite/gcc.target/aarch64/pr94201.c -@@ -1,4 +1,5 @@ - /* { dg-do compile } */ -+/* { dg-require-effective-target arm_mabi_ilp32 } */ - /* { dg-options "-mcmodel=tiny -mabi=ilp32 -fPIC" } */ - - extern int bar (void *); -diff --git a/gcc/testsuite/gcc.target/aarch64/pr94577.c b/gcc/testsuite/gcc.target/aarch64/pr94577.c -index 6f2d3612c26..6a52e52dc39 100644 ---- a/gcc/testsuite/gcc.target/aarch64/pr94577.c -+++ b/gcc/testsuite/gcc.target/aarch64/pr94577.c -@@ -1,4 +1,5 @@ - /* { dg-do compile } */ -+/* { dg-require-effective-target arm_mabi_ilp32 } */ - /* { dg-options "-mcmodel=large -mabi=ilp32" } */ - - void -diff --git a/gcc/testsuite/gcc.target/aarch64/pr97535.c b/gcc/testsuite/gcc.target/aarch64/pr97535.c -index 7d4db485f1f..6f1ee8035eb 100644 ---- a/gcc/testsuite/gcc.target/aarch64/pr97535.c -+++ b/gcc/testsuite/gcc.target/aarch64/pr97535.c -@@ -13,4 +13,4 @@ void setRaw(const void *raw) - - /* At any optimization level this should be a function call - and not inlined. */ --/* { dg-final { scan-assembler "bl\tmemcpy" } } */ -+/* { dg-final { scan-assembler "bl\t_*memcpy" } } */ -diff --git a/gcc/testsuite/gcc.target/aarch64/simd_pcs_attribute-2.c b/gcc/testsuite/gcc.target/aarch64/simd_pcs_attribute-2.c -index 8eec6824f37..193c65717ed 100644 ---- a/gcc/testsuite/gcc.target/aarch64/simd_pcs_attribute-2.c -+++ b/gcc/testsuite/gcc.target/aarch64/simd_pcs_attribute-2.c -@@ -1,5 +1,6 @@ - /* { dg-do compile } */ - /* { dg-options "-Ofast" } */ -+/* { dg-skip-if "no system variant_pcs support" *-*-darwin* } */ - - __attribute__ ((__simd__ ("notinbranch"))) - __attribute__ ((__nothrow__ , __leaf__ , __const__)) -@@ -12,5 +13,5 @@ void bar(double * f, int n) - f[i] = foo(f[i]); - } - --/* { dg-final { scan-assembler-not {\.variant_pcs\tfoo} } } */ --/* { dg-final { scan-assembler-times {\.variant_pcs\t_ZGVnN2v_foo} 1 } } */ -+/* { dg-final { scan-assembler-not {\.variant_pcs\t_?foo} } } */ -+/* { dg-final { scan-assembler-times {\.variant_pcs\t_?_ZGVnN2v_foo} 1 } } */ -diff --git a/gcc/testsuite/gcc.target/aarch64/simd_pcs_attribute-3.c b/gcc/testsuite/gcc.target/aarch64/simd_pcs_attribute-3.c -index 95f6a6803e8..6fd57735b3a 100644 ---- a/gcc/testsuite/gcc.target/aarch64/simd_pcs_attribute-3.c -+++ b/gcc/testsuite/gcc.target/aarch64/simd_pcs_attribute-3.c -@@ -1,5 +1,6 @@ - /* { dg-do compile } */ - /* { dg-options "-Ofast" } */ -+/* { dg-skip-if "no system variant_pcs support" *-*-darwin* } */ - - __attribute__ ((__simd__)) - __attribute__ ((__nothrow__ , __leaf__ , __const__)) -@@ -17,8 +18,8 @@ double foo(double x) - return x * x / 3.0; - } - --/* { dg-final { scan-assembler-not {\.variant_pcs\tfoo} } } */ --/* { dg-final { scan-assembler-times {\.variant_pcs\t_ZGVnM1v_foo} 1 } } */ --/* { dg-final { scan-assembler-times {\.variant_pcs\t_ZGVnM2v_foo} 1 } } */ --/* { dg-final { scan-assembler-times {\.variant_pcs\t_ZGVnN1v_foo} 1 } } */ --/* { dg-final { scan-assembler-times {\.variant_pcs\t_ZGVnN2v_foo} 1 } } */ -+/* { dg-final { scan-assembler-not {\.variant_pcs\t_?foo} } } */ -+/* { dg-final { scan-assembler-times {\.variant_pcs\t_?_ZGVnM1v_foo} 1 } } */ -+/* { dg-final { scan-assembler-times {\.variant_pcs\t_?_ZGVnM2v_foo} 1 } } */ -+/* { dg-final { scan-assembler-times {\.variant_pcs\t_?_ZGVnN1v_foo} 1 } } */ -+/* { dg-final { scan-assembler-times {\.variant_pcs\t_?_ZGVnN2v_foo} 1 } } */ -diff --git a/gcc/testsuite/gcc.target/aarch64/simd_pcs_attribute.c b/gcc/testsuite/gcc.target/aarch64/simd_pcs_attribute.c -index eddcef3597c..62ee482a892 100644 ---- a/gcc/testsuite/gcc.target/aarch64/simd_pcs_attribute.c -+++ b/gcc/testsuite/gcc.target/aarch64/simd_pcs_attribute.c -@@ -1,5 +1,6 @@ - /* { dg-do compile } */ - /* { dg-options "-Ofast" } */ -+/* { dg-skip-if "no system variant_pcs support" *-*-darwin* } */ - - __attribute__ ((__simd__ ("notinbranch"))) - __attribute__ ((__nothrow__ , __leaf__ , __const__)) -@@ -12,5 +13,5 @@ void foo(double *f, int n) - f[i] = log(f[i]); - } - --/* { dg-final { scan-assembler-not {\.variant_pcs\tlog} } } */ --/* { dg-final { scan-assembler-times {\.variant_pcs\t_ZGVnN2v_log} 1 } } */ -+/* { dg-final { scan-assembler-not {\.variant_pcs\t_?log} } } */ -+/* { dg-final { scan-assembler-times {\.variant_pcs\t_?_ZGVnN2v_log} 1 } } */ -diff --git a/gcc/testsuite/gcc.target/aarch64/stack-check-cfa-1.c b/gcc/testsuite/gcc.target/aarch64/stack-check-cfa-1.c -index 6885894a97e..ebba23c9d02 100644 ---- a/gcc/testsuite/gcc.target/aarch64/stack-check-cfa-1.c -+++ b/gcc/testsuite/gcc.target/aarch64/stack-check-cfa-1.c -@@ -1,6 +1,7 @@ - /* { dg-do compile } */ - /* { dg-options "-O2 -fstack-clash-protection --param stack-clash-protection-guard-size=16 -funwind-tables" } */ - /* { dg-require-effective-target supports_stack_clash_protection } */ -+/* { dg-skip-if "no cfi insn support yet" *-*-darwin* } */ - - #define SIZE 128*1024 - #include "stack-check-prologue.h" -diff --git a/gcc/testsuite/gcc.target/aarch64/stack-check-cfa-2.c b/gcc/testsuite/gcc.target/aarch64/stack-check-cfa-2.c -index 5796a53be06..e15fbd6196c 100644 ---- a/gcc/testsuite/gcc.target/aarch64/stack-check-cfa-2.c -+++ b/gcc/testsuite/gcc.target/aarch64/stack-check-cfa-2.c -@@ -1,6 +1,7 @@ - /* { dg-do compile } */ - /* { dg-options "-O2 -fstack-clash-protection --param stack-clash-protection-guard-size=16 -funwind-tables" } */ - /* { dg-require-effective-target supports_stack_clash_protection } */ -+/* { dg-skip-if "no cfi insn support yet" *-*-darwin* } */ - - #define SIZE 1280*1024 + 512 - #include "stack-check-prologue.h" -diff --git a/gcc/testsuite/gcc.target/aarch64/stack-check-cfa-3.c b/gcc/testsuite/gcc.target/aarch64/stack-check-cfa-3.c -index c4b7bb601c4..ccaf2e6f8cf 100644 ---- a/gcc/testsuite/gcc.target/aarch64/stack-check-cfa-3.c -+++ b/gcc/testsuite/gcc.target/aarch64/stack-check-cfa-3.c -@@ -1,6 +1,7 @@ - /* { dg-do compile } */ - /* { dg-options "-O3 -fopenmp-simd -march=armv8-a+sve -fstack-clash-protection --param stack-clash-protection-guard-size=16 -funwind-tables" } */ - /* { dg-require-effective-target supports_stack_clash_protection } */ -+/* { dg-skip-if "no cfi insn support yet" *-*-darwin* } */ - - #include "stack-check-prologue-16.c" - -diff --git a/gcc/testsuite/gcc.target/aarch64/sve/aarch64-sve.exp b/gcc/testsuite/gcc.target/aarch64/sve/aarch64-sve.exp -index 71dd6687c6b..7a62814edbb 100644 ---- a/gcc/testsuite/gcc.target/aarch64/sve/aarch64-sve.exp -+++ b/gcc/testsuite/gcc.target/aarch64/sve/aarch64-sve.exp -@@ -25,6 +25,11 @@ if {![istarget aarch64*-*-*] } then { - return - } - -+# Darwin doesn't support sve -+if { [istarget *-*-darwin*] } then { -+ return -+} -+ - # Load support procs. - load_lib gcc-dg.exp - -diff --git a/gcc/testsuite/gcc.target/aarch64/sve/acle/aarch64-sve-acle-asm.exp b/gcc/testsuite/gcc.target/aarch64/sve/acle/aarch64-sve-acle-asm.exp -index a271f1793f4..2da5720d1f3 100644 ---- a/gcc/testsuite/gcc.target/aarch64/sve/acle/aarch64-sve-acle-asm.exp -+++ b/gcc/testsuite/gcc.target/aarch64/sve/acle/aarch64-sve-acle-asm.exp -@@ -24,6 +24,11 @@ if {![istarget aarch64*-*-*] } { - return - } - -+# Darwin doesn't support sve -+if { [istarget *-*-darwin*] } then { -+ return -+} -+ - # Load support procs. - load_lib gcc-dg.exp - -diff --git a/gcc/testsuite/gcc.target/aarch64/sve/acle/aarch64-sve-acle.exp b/gcc/testsuite/gcc.target/aarch64/sve/acle/aarch64-sve-acle.exp -index ce71c9c1fd4..c7bd136f202 100644 ---- a/gcc/testsuite/gcc.target/aarch64/sve/acle/aarch64-sve-acle.exp -+++ b/gcc/testsuite/gcc.target/aarch64/sve/acle/aarch64-sve-acle.exp -@@ -25,6 +25,11 @@ if {![istarget aarch64*-*-*] } { - return - } - -+# Darwin doesn't support sve -+if { [istarget *-*-darwin*] } then { -+ return -+} -+ - # Load support procs. - load_lib gcc-dg.exp - -diff --git a/gcc/testsuite/gcc.target/aarch64/sve/pcs/aarch64-sve-pcs.exp b/gcc/testsuite/gcc.target/aarch64/sve/pcs/aarch64-sve-pcs.exp -index 83786733f35..9ab68902def 100644 ---- a/gcc/testsuite/gcc.target/aarch64/sve/pcs/aarch64-sve-pcs.exp -+++ b/gcc/testsuite/gcc.target/aarch64/sve/pcs/aarch64-sve-pcs.exp -@@ -25,6 +25,10 @@ if {![istarget aarch64*-*-*] } then { - return - } - -+if { [istarget *-*-darwin*] } then { -+ return -+} -+ - # Load support procs. - load_lib gcc-dg.exp - -diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/aarch64-sve2.exp b/gcc/testsuite/gcc.target/aarch64/sve2/aarch64-sve2.exp -index 60652dbf8fb..010e32132cb 100644 ---- a/gcc/testsuite/gcc.target/aarch64/sve2/aarch64-sve2.exp -+++ b/gcc/testsuite/gcc.target/aarch64/sve2/aarch64-sve2.exp -@@ -25,6 +25,11 @@ if {![istarget aarch64*-*-*] } then { - return - } - -+# Darwin doesn't support sve -+if { [istarget *-*-darwin*] } then { -+ return -+} -+ - # Load support procs. - load_lib gcc-dg.exp - -diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/aarch64-sve2-acle-asm.exp b/gcc/testsuite/gcc.target/aarch64/sve2/acle/aarch64-sve2-acle-asm.exp -index e08cd612190..a7e5f364770 100644 ---- a/gcc/testsuite/gcc.target/aarch64/sve2/acle/aarch64-sve2-acle-asm.exp -+++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/aarch64-sve2-acle-asm.exp -@@ -24,6 +24,11 @@ if {![istarget aarch64*-*-*] } { - return - } - -+# Darwin doesn't support sve -+if { [istarget *-*-darwin*] } then { -+ return -+} -+ - # Load support procs. - load_lib gcc-dg.exp - -diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/aarch64-sve2-acle.exp b/gcc/testsuite/gcc.target/aarch64/sve2/acle/aarch64-sve2-acle.exp -index f0255967c9d..82092e337f6 100644 ---- a/gcc/testsuite/gcc.target/aarch64/sve2/acle/aarch64-sve2-acle.exp -+++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/aarch64-sve2-acle.exp -@@ -25,6 +25,11 @@ if {![istarget aarch64*-*-*] } { - return - } - -+# Darwin doesn't support sve -+if { [istarget *-*-darwin*] } then { -+ return -+} -+ - # Load support procs. - load_lib gcc-dg.exp - -diff --git a/gcc/testsuite/gcc.target/aarch64/symbol-range-tiny.c b/gcc/testsuite/gcc.target/aarch64/symbol-range-tiny.c -index fc6a4f3ec78..2d9e94bc625 100644 ---- a/gcc/testsuite/gcc.target/aarch64/symbol-range-tiny.c -+++ b/gcc/testsuite/gcc.target/aarch64/symbol-range-tiny.c -@@ -1,4 +1,5 @@ - /* { dg-do link } */ -+/* { dg-skip-if "no mcmodel tiny" *-*-darwin* } */ - /* { dg-options "-O3 -save-temps -mcmodel=tiny" } */ - - char fixed_regs[0x00080000]; -diff --git a/gcc/testsuite/gcc.target/aarch64/uaddw-3.c b/gcc/testsuite/gcc.target/aarch64/uaddw-3.c -index 39cbd6b6cc2..b4ed187bd2c 100644 ---- a/gcc/testsuite/gcc.target/aarch64/uaddw-3.c -+++ b/gcc/testsuite/gcc.target/aarch64/uaddw-3.c -@@ -1,10 +1,11 @@ - /* { dg-do compile } */ - /* { dg-options "-O3" } */ -+/* { dg-additional-options "-fno-signed-char" { target *-*-darwin* } } */ - - #pragma GCC target "+nosve" - - int --t6(int len, void * dummy, char * __restrict x) -+t6(int len, void * dummy, unsigned char * __restrict x) - { - len = len & ~31; - unsigned short result = 0; -diff --git a/gcc/testsuite/gcc.target/aarch64/vect-cse-codegen.c b/gcc/testsuite/gcc.target/aarch64/vect-cse-codegen.c -index d025e989a1e..f218504c719 100644 ---- a/gcc/testsuite/gcc.target/aarch64/vect-cse-codegen.c -+++ b/gcc/testsuite/gcc.target/aarch64/vect-cse-codegen.c -@@ -6,8 +6,8 @@ - - /* - **test1: --** adrp x[0-9]+, .LC[0-9]+ --** ldr q[0-9]+, \[x[0-9]+, #:lo12:.LC[0-9]+\] -+** adrp x[0-9]+, (.LC[0-9]+|lC[0-9]+@PAGE) -+** ldr q[0-9]+, \[x[0-9]+, #(:lo12:.LC[0-9]+|lC[0-9]+@PAGEOFF)\] - ** add v[0-9]+.2d, v[0-9]+.2d, v[0-9]+.2d - ** str q[0-9]+, \[x[0-9]+\] - ** fmov x[0-9]+, d[0-9]+ -@@ -27,13 +27,14 @@ test1 (uint64_t a, uint64x2_t b, uint64x2_t* rt) - - /* - **test2: --** adrp x[0-9]+, .LC[0-1]+ --** ldr q[0-9]+, \[x[0-9]+, #:lo12:.LC[0-9]+\] -+** adrp x[0-9]+, (.LC[0-1]+|lC[0-1]+@PAGE) -+** ldr q[0-9]+, \[x[0-9]+, #(:lo12:.LC[0-9]+|lC[0-9]+@PAGEOFF)\] - ** add v[0-9]+.2d, v[0-9]+.2d, v[0-9]+.2d - ** str q[0-9]+, \[x[0-9]+\] - ** fmov x[0-9]+, d[0-9]+ - ** orr x[0-9]+, x[0-9]+, x[0-9]+ - ** ret -+ - */ - - uint64_t -@@ -48,8 +49,8 @@ test2 (uint64_t a, uint64x2_t b, uint64x2_t* rt) - - /* - **test3: --** adrp x[0-9]+, .LC[0-9]+ --** ldr q[0-9]+, \[x[0-9]+, #:lo12:.LC[0-9]+\] -+** adrp x[0-9]+, (.LC[0-9]+|lC[0-9]+@PAGE) -+** ldr q[0-9]+, \[x[0-9]+, #(:lo12:.LC[0-9]+|lC[0-9]+@PAGEOFF)\] - ** add v[0-9]+.4s, v[0-9]+.4s, v[0-9]+.4s - ** str q[0-9]+, \[x1\] - ** fmov w[0-9]+, s[0-9]+ diff --git a/gcc/testsuite/gfortran.dg/coarray/caf.exp b/gcc/testsuite/gfortran.dg/coarray/caf.exp index 8683a2ab435..e76cb69dcd9 100644 --- a/gcc/testsuite/gfortran.dg/coarray/caf.exp @@ -7095,21 +4963,6 @@ index bd7ad95ad0d..36fc2972b2e 100644 # All done. -diff --git a/gcc/testsuite/gfortran.dg/pr95690.f90 b/gcc/testsuite/gfortran.dg/pr95690.f90 -index 47a5df9e894..1afa9d3c467 100644 ---- a/gcc/testsuite/gfortran.dg/pr95690.f90 -+++ b/gcc/testsuite/gfortran.dg/pr95690.f90 -@@ -2,8 +2,8 @@ - module m - contains - subroutine s -- print *, (erfc) ! { dg-error "not a floating constant" "" { target i?86-*-* x86_64-*-* sparc*-*-* cris-*-* } } -- end ! { dg-error "not a floating constant" "" { target { ! "i?86-*-* x86_64-*-* sparc*-*-* cris-*-*" } } } -+ print *, (erfc) ! { dg-error "not a floating constant" "" { target i?86-*-* x86_64-*-* sparc*-*-* cris-*-* aarch64-apple-darwin* } } -+ end ! { dg-error "not a floating constant" "" { target { ! "i?86-*-* x86_64-*-* sparc*-*-* cris-*-* aarch64-apple-darwin*" } } } - function erfc() - end - end diff --git a/gcc/testsuite/lib/asan-dg.exp b/gcc/testsuite/lib/asan-dg.exp index 7e0f85dc9b0..88c6ece8caa 100644 --- a/gcc/testsuite/lib/asan-dg.exp @@ -7136,104 +4989,8 @@ index 86dcfa674ea..c9244fb6cac 100644 append ld_library_path ":${gccpath}/libatomic/.libs" } } else { -diff --git a/gcc/testsuite/lib/scanasm.exp b/gcc/testsuite/lib/scanasm.exp -index a80630bb2a8..195611f1f72 100644 ---- a/gcc/testsuite/lib/scanasm.exp -+++ b/gcc/testsuite/lib/scanasm.exp -@@ -763,7 +763,7 @@ proc scan-lto-assembler { args } { - # to function bodies in array RESULT. FILENAME has already been uploaded - # locally where necessary and is known to exist. - --proc parse_function_bodies { filename result } { -+proc parse_ELF_function_bodies { filename result } { - upvar $result up_result - - # Regexp for the start of a function definition (name in \1). -@@ -793,6 +793,44 @@ proc parse_function_bodies { filename result } { - close $fd - } - -+proc parse_MACHO_function_bodies { filename result } { -+ upvar $result up_result -+ -+ # Regexp for the start of a function definition (name in \1). -+ set label {^(_[a-zA-Z_]\S+):$} -+ set start {^LFB[0-9]+} -+ -+ # Regexp for the end of a function definition. -+ set terminator {^LFE[0-9]+} -+ -+ # Regexp for lines that aren't interesting. -+ set fluff {^\s*(?:\.|//|@)} -+ set fluff3 {^L[0-9ACESV]} -+ -+ set fd [open $filename r] -+ set in_function 0 -+ while { [gets $fd line] >= 0 } { -+ if { !$in_function && [regexp $label $line dummy function_name] } { -+ set in_function 1 -+ set function_body "" -+ } elseif { $in_function == 1 } { -+ if { [regexp $start $line] } { -+ set in_function 2 -+ } else { -+ set in_function 0 -+ } -+ } elseif { $in_function == 2 } { -+ if { [regexp $terminator $line] } { -+ set up_result($function_name) $function_body -+ set in_function 0 -+ } elseif { ![regexp $fluff $line] && ![regexp $fluff3 $line] } { -+ append function_body $line "\n" -+ } -+ } -+ } -+ close $fd -+} -+ - # FUNCTIONS is an array that maps function names to function bodies. - # Return true if it contains a definition of function NAME and if - # that definition matches BODY_REGEXP. -@@ -820,6 +858,14 @@ proc check-function-bodies { args } { - error "too many arguments to check-function-bodies" - } - -+ set isELF 1 -+ # some targets have a __USER_LABEL_PREFIX__ -+ set needsULP 0 -+ if { [istarget *-*-darwin*] } { -+ set isELF 0 -+ set needsULP 1 -+ } -+ - if { [llength $args] >= 3 } { - set required_flags [lindex $args 2] - -@@ -876,7 +922,11 @@ proc check-function-bodies { args } { - remote_upload host "$filename" - } - if { [file exists $output_filename] } { -- parse_function_bodies $output_filename functions -+ if { $isELF } { -+ parse_ELF_function_bodies $output_filename functions -+ } else { -+ parse_MACHO_function_bodies $output_filename functions -+ } - set have_bodies 1 - } else { - verbose -log "$testcase: output file does not exist" -@@ -921,6 +971,9 @@ proc check-function-bodies { args } { - if { $xfail_all || [string equal $selector "F"] } { - setup_xfail "*-*-*" - } -+ if { $needsULP } { -+ set function_name "_$function_name" -+ } - set testname "$testcase check-function-bodies $function_name" - if { !$have_bodies } { - unresolved $testname diff --git a/gcc/testsuite/lib/target-libpath.exp b/gcc/testsuite/lib/target-libpath.exp -index d09cd515d20..280ce390845 100644 +index d09cd515d20..29bfbaf4726 100644 --- a/gcc/testsuite/lib/target-libpath.exp +++ b/gcc/testsuite/lib/target-libpath.exp @@ -67,6 +67,7 @@ proc set_ld_library_path_env_vars { } { @@ -7263,7 +5020,7 @@ index d09cd515d20..280ce390845 100644 } + if { [istarget *-*-darwin*] } { + if { [info exists ENABLE_DARWIN_AT_RPATH] || [istarget *-*-darwin1\[5-9\]*] -+ || [istarget *-*-darwin2*] } { ++ || [istarget *-*-darwin20*] } { + # Either we are not using DYLD_LIBRARY_PATH or we're on a version of the + # OS for which it is not passed through system exes. + if [info exists env(DYLD_LIBRARY_PATH)] { @@ -7288,165 +5045,8 @@ index d09cd515d20..280ce390845 100644 verbose -log "LD_LIBRARY_PATH=[getenv LD_LIBRARY_PATH]" verbose -log "LD_RUN_PATH=[getenv LD_RUN_PATH]" verbose -log "SHLIB_PATH=[getenv SHLIB_PATH]" -diff --git a/gcc/testsuite/lib/target-supports.exp b/gcc/testsuite/lib/target-supports.exp -index 244fe2306f4..75581914d6c 100644 ---- a/gcc/testsuite/lib/target-supports.exp -+++ b/gcc/testsuite/lib/target-supports.exp -@@ -8485,7 +8485,7 @@ proc check_effective_target_section_anchors { } { - return [check_cached_effective_target section_anchors { - expr { [istarget powerpc*-*-*] - || [istarget arm*-*-*] -- || [istarget aarch64*-*-*] }}] -+ || ([istarget aarch64*-*-*] && ![istarget aarch64*-*-darwin*]) }}] - } - - # Return 1 if the target supports atomic operations on "int_128" values. -@@ -11526,6 +11526,15 @@ proc check_effective_target_arm_thumb2_ok_no_arm_v8_1_lob { } { - return 0 - } - -+# Return 1 if this is an ARM target where -mabi=ilp32 can be used. -+ -+proc check_effective_target_arm_mabi_ilp32 { } { -+ return [check_no_compiler_messages_nocache arm_mabi_ilp32 assembly { -+ int main() { return 0; } -+ } "-mabi=ilp32"] -+} -+ -+ - # Returns 1 if the target is using glibc, 0 otherwise. - - proc check_effective_target_glibc { } { -diff --git a/gcc/testsuite/obj-c++.dg/gnu-api-2-class-meta.mm b/gcc/testsuite/obj-c++.dg/gnu-api-2-class-meta.mm -index 92852c3ecea..e0974539ecf 100644 ---- a/gcc/testsuite/obj-c++.dg/gnu-api-2-class-meta.mm -+++ b/gcc/testsuite/obj-c++.dg/gnu-api-2-class-meta.mm -@@ -19,6 +19,7 @@ this behavior may be defined or documented (for example, if class - - /* { dg-do run } */ - /* { dg-skip-if "No API#2 pre-Darwin9" { *-*-darwin[5-8]* } { "-fnext-runtime" } { "" } } */ -+/* { dg-skip-if "API unsupported" { arm64*-*-darwin* aarch64*-*-darwin* } { "-fnext-runtime" } { "" } } */ - /* { dg-xfail-run-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "" } } */ - /* { dg-additional-options "-DOBJC_OLD_DISPATCH_PROTOTYPES" { target { *-*-darwin* } } } */ - // { dg-additional-options "-Wno-objc-root-class" } -diff --git a/gcc/testsuite/obj-c++.dg/gnu-api-2-class.mm b/gcc/testsuite/obj-c++.dg/gnu-api-2-class.mm -index f6e3d8d22e0..a23968a89b5 100644 ---- a/gcc/testsuite/obj-c++.dg/gnu-api-2-class.mm -+++ b/gcc/testsuite/obj-c++.dg/gnu-api-2-class.mm -@@ -6,6 +6,7 @@ - - /* { dg-do run } */ - /* { dg-skip-if "No API#2 pre-Darwin9" { *-*-darwin[5-8]* } { "-fnext-runtime" } { "" } } */ -+/* { dg-skip-if "API unsupported" { arm64*-*-darwin* aarch64*-*-darwin* } { "-fnext-runtime" } { "" } } */ - /* { dg-xfail-run-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "" } } */ - /* { dg-additional-options "-DOBJC_OLD_DISPATCH_PROTOTYPES" { target { *-*-darwin* } } } */ - // { dg-additional-options "-Wno-objc-root-class" } -diff --git a/gcc/testsuite/obj-c++.dg/torture/strings/const-cfstring-4.mm b/gcc/testsuite/obj-c++.dg/torture/strings/const-cfstring-4.mm -index 1155db5f83f..e0dd8062373 100644 ---- a/gcc/testsuite/obj-c++.dg/torture/strings/const-cfstring-4.mm -+++ b/gcc/testsuite/obj-c++.dg/torture/strings/const-cfstring-4.mm -@@ -18,4 +18,4 @@ - - /* { dg-final { scan-assembler ".section __DATA, __cfstring" } } */ - /* { dg-final { scan-assembler ".long\t___CFConstantStringClassReference\n\t.long\t1992\n\t.long\t.*\n\t.long\t19\n" { target { *-*-darwin* && { ! lp64 } } } } } */ --/* { dg-final { scan-assembler ".quad\t___CFConstantStringClassReference\n\t.long\t1992\n\t.space 4\n\t.quad\t.*\n\t.quad\t19\n" { target { *-*-darwin* && { lp64 } } } } } */ -+/* { dg-final { scan-assembler {.(quad|xword)\t___CFConstantStringClassReference\n\t.(long|word)\t1992\n\t.space 4\n\t.(quad|xword)\t.*\n\t.(quad|xword)\t19\n} { target { *-*-darwin* && { lp64 } } } } } */ -diff --git a/gcc/testsuite/obj-c++.dg/torture/strings/const-str-10.mm b/gcc/testsuite/obj-c++.dg/torture/strings/const-str-10.mm -index e1dad124cd6..eb89710d890 100644 ---- a/gcc/testsuite/obj-c++.dg/torture/strings/const-str-10.mm -+++ b/gcc/testsuite/obj-c++.dg/torture/strings/const-str-10.mm -@@ -33,4 +33,4 @@ @interface NSConstantString : NSSimpleCString - /* { dg-final { scan-assembler ".section __OBJC, __cstring_object" { target { *-*-darwin* && { ! lp64 } } } } } */ - /* { dg-final { scan-assembler ".section __DATA, __objc_stringobj" { target { *-*-darwin* && { lp64 } } } } } */ - /* { dg-final { scan-assembler ".long\t__NSConstantStringClassReference\n\t.long\t.*\n\t.long\t5\n\t.data" { target { *-*-darwin* && { ! lp64 } } } } } */ --/* { dg-final { scan-assembler ".quad\t_OBJC_CLASS_._NSConstantString\n\t.quad\t.*\n\t.long\t5\n\t.space" { target { *-*-darwin* && { lp64 } } } } } */ -+/* { dg-final { scan-assembler {.(quad|xword)\t_OBJC_CLASS_._NSConstantString\n\t.(quad|xword)\t.*\n\t.(long|word)\t5\n\t.space} { target { *-*-darwin* && { lp64 } } } } } */ -diff --git a/gcc/testsuite/obj-c++.dg/torture/strings/const-str-11.mm b/gcc/testsuite/obj-c++.dg/torture/strings/const-str-11.mm -index 30a9228a64e..c1b58dc6cb8 100644 ---- a/gcc/testsuite/obj-c++.dg/torture/strings/const-str-11.mm -+++ b/gcc/testsuite/obj-c++.dg/torture/strings/const-str-11.mm -@@ -33,4 +33,4 @@ @interface XStr : XString { - /* { dg-final { scan-assembler ".section __OBJC, __cstring_object" { target { *-*-darwin* && { ! lp64 } } } } } */ - /* { dg-final { scan-assembler ".section __DATA, __objc_stringobj" { target { *-*-darwin* && { lp64 } } } } } */ - /* { dg-final { scan-assembler ".long\t__XStrClassReference\n\t.long\t.*\n\t.long\t5\n\t.data" { target { *-*-darwin* && { ! lp64 } } } } } */ --/* { dg-final { scan-assembler ".quad\t_OBJC_CLASS_._XStr\n\t.quad\t.*\n\t.long\t5\n\t.space" { target { *-*-darwin* && { lp64 } } } } } */ -+/* { dg-final { scan-assembler {.(quad|xword)\t_OBJC_CLASS_._XStr\n\t.(quad|xword)\t.*\n\t.(long|word)\t5\n\t.space} { target { *-*-darwin* && { lp64 } } } } } */ -diff --git a/gcc/testsuite/obj-c++.dg/torture/strings/const-str-9.mm b/gcc/testsuite/obj-c++.dg/torture/strings/const-str-9.mm -index a1a14295e90..8457f46be53 100644 ---- a/gcc/testsuite/obj-c++.dg/torture/strings/const-str-9.mm -+++ b/gcc/testsuite/obj-c++.dg/torture/strings/const-str-9.mm -@@ -25,4 +25,4 @@ @interface NSConstantString: NSObject { - /* { dg-final { scan-assembler ".section __OBJC, __cstring_object" { target { *-*-darwin* && { ! lp64 } } } } } */ - /* { dg-final { scan-assembler ".section __DATA, __objc_stringobj" { target { *-*-darwin* && { lp64 } } } } } */ - /* { dg-final { scan-assembler ".long\t__NSConstantStringClassReference\n\t.long\t.*\n\t.long\t5\n\t.data" { target { *-*-darwin* && { ! lp64 } } } } } */ --/* { dg-final { scan-assembler ".quad\t_OBJC_CLASS_._NSConstantString\n\t.quad\t.*\n\t.long\t5\n\t.space" { target { *-*-darwin* && { lp64 } } } } } */ -+/* { dg-final { scan-assembler {.(quad|xword)\t_OBJC_CLASS_._NSConstantString\n\t.(quad|xword)\t.*\n\t.(long|word)\t5\n\t.space} { target { *-*-darwin* && { lp64 } } } } } */ -diff --git a/gcc/testsuite/objc.dg/gnu-api-2-class-meta.m b/gcc/testsuite/objc.dg/gnu-api-2-class-meta.m -index 6c1c76a87a3..41a48f9c685 100644 ---- a/gcc/testsuite/objc.dg/gnu-api-2-class-meta.m -+++ b/gcc/testsuite/objc.dg/gnu-api-2-class-meta.m -@@ -19,6 +19,7 @@ this behavior may be defined or documented (for example, if class - - /* { dg-do run } */ - /* { dg-skip-if "No API#2 pre-Darwin9" { *-*-darwin[5-8]* } { "-fnext-runtime" } { "" } } */ -+/* { dg-skip-if "API unsupported" { arm64*-*-darwin* aarch64*-*-darwin* } { "-fnext-runtime" } { "" } } */ - /* { dg-xfail-run-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "" } } */ - /* { dg-additional-options "-Wno-objc-root-class" } */ - /* { dg-additional-options "-DOBJC_OLD_DISPATCH_PROTOTYPES" { target { *-*-darwin* } } } */ -diff --git a/gcc/testsuite/objc.dg/gnu-api-2-class.m b/gcc/testsuite/objc.dg/gnu-api-2-class.m -index d11dae0e6dc..1386ebc2f99 100644 ---- a/gcc/testsuite/objc.dg/gnu-api-2-class.m -+++ b/gcc/testsuite/objc.dg/gnu-api-2-class.m -@@ -6,6 +6,7 @@ - - /* { dg-do run } */ - /* { dg-skip-if "No API#2 pre-Darwin9" { *-*-darwin[5-8]* } { "-fnext-runtime" } { "" } } */ -+/* { dg-skip-if "API unsupported" { arm64*-*-darwin* aarch64*-*-darwin* } { "-fnext-runtime" } { "" } } */ - /* { dg-xfail-run-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "" } } */ - /* { dg-additional-options "-Wno-objc-root-class" } */ - /* { dg-additional-options "-DOBJC_OLD_DISPATCH_PROTOTYPES" { target { *-*-darwin* } } } */ -diff --git a/gcc/testsuite/objc.dg/torture/strings/const-cfstring-4.m b/gcc/testsuite/objc.dg/torture/strings/const-cfstring-4.m -index 1155db5f83f..e0dd8062373 100644 ---- a/gcc/testsuite/objc.dg/torture/strings/const-cfstring-4.m -+++ b/gcc/testsuite/objc.dg/torture/strings/const-cfstring-4.m -@@ -18,4 +18,4 @@ - - /* { dg-final { scan-assembler ".section __DATA, __cfstring" } } */ - /* { dg-final { scan-assembler ".long\t___CFConstantStringClassReference\n\t.long\t1992\n\t.long\t.*\n\t.long\t19\n" { target { *-*-darwin* && { ! lp64 } } } } } */ --/* { dg-final { scan-assembler ".quad\t___CFConstantStringClassReference\n\t.long\t1992\n\t.space 4\n\t.quad\t.*\n\t.quad\t19\n" { target { *-*-darwin* && { lp64 } } } } } */ -+/* { dg-final { scan-assembler {.(quad|xword)\t___CFConstantStringClassReference\n\t.(long|word)\t1992\n\t.space 4\n\t.(quad|xword)\t.*\n\t.(quad|xword)\t19\n} { target { *-*-darwin* && { lp64 } } } } } */ -diff --git a/gcc/testsuite/objc.dg/torture/strings/const-str-10.m b/gcc/testsuite/objc.dg/torture/strings/const-str-10.m -index 6565dc20007..81b0d326c56 100644 ---- a/gcc/testsuite/objc.dg/torture/strings/const-str-10.m -+++ b/gcc/testsuite/objc.dg/torture/strings/const-str-10.m -@@ -34,4 +34,4 @@ @interface NSConstantString : NSSimpleCString - /* { dg-final { scan-assembler ".section __OBJC, __cstring_object" { target { *-*-darwin* && { ! lp64 } } } } } */ - /* { dg-final { scan-assembler ".section __DATA, __objc_stringobj" { target { *-*-darwin* && { lp64 } } } } } */ - /* { dg-final { scan-assembler ".long\t__NSConstantStringClassReference\n\t.long\t.*\n\t.long\t5\n\t.data" { target { *-*-darwin* && { ! lp64 } } } } } */ --/* { dg-final { scan-assembler ".quad\t_OBJC_CLASS_._NSConstantString\n\t.quad\t.*\n\t.long\t5\n\t.space" { target { *-*-darwin* && { lp64 } } } } } */ -+/* { dg-final { scan-assembler {.(quad|xword)\t_OBJC_CLASS_._NSConstantString\n\t.(quad|xword)\t.*\n\t.(long|word)\t5\n\t.space} { target { *-*-darwin* && { lp64 } } } } } */ -diff --git a/gcc/testsuite/objc.dg/torture/strings/const-str-11.m b/gcc/testsuite/objc.dg/torture/strings/const-str-11.m -index 2bdb1531e1d..b044b0fd8c7 100644 ---- a/gcc/testsuite/objc.dg/torture/strings/const-str-11.m -+++ b/gcc/testsuite/objc.dg/torture/strings/const-str-11.m -@@ -33,4 +33,4 @@ @interface XStr : XString { - /* { dg-final { scan-assembler ".section __OBJC, __cstring_object" { target { *-*-darwin* && { ! lp64 } } } } } */ - /* { dg-final { scan-assembler ".section __DATA, __objc_stringobj" { target { *-*-darwin* && { lp64 } } } } } */ - /* { dg-final { scan-assembler ".long\t__XStrClassReference\n\t.long\t.*\n\t.long\t5\n\t.data" { target { *-*-darwin* && { ! lp64 } } } } } */ --/* { dg-final { scan-assembler ".quad\t_OBJC_CLASS_._XStr\n\t.quad\t.*\n\t.long\t5\n\t.space" { target { *-*-darwin* && { lp64 } } } } } */ -+/* { dg-final { scan-assembler {.(quad|xword)\t_OBJC_CLASS_._XStr\n\t.(quad|xword)\t.*\n\t.(long|word)\t5\n\t.space} { target { *-*-darwin* && { lp64 } } } } } */ -diff --git a/gcc/testsuite/objc.dg/torture/strings/const-str-9.m b/gcc/testsuite/objc.dg/torture/strings/const-str-9.m -index 966ea5e498d..d3d2916ed06 100644 ---- a/gcc/testsuite/objc.dg/torture/strings/const-str-9.m -+++ b/gcc/testsuite/objc.dg/torture/strings/const-str-9.m -@@ -25,4 +25,4 @@ @interface NSConstantString: NSObject { - /* { dg-final { scan-assembler ".section __OBJC, __cstring_object" { target { *-*-darwin* && { ! lp64 } } } } } */ - /* { dg-final { scan-assembler ".section __DATA, __objc_stringobj" { target { *-*-darwin* && { lp64 } } } } } */ - /* { dg-final { scan-assembler ".long\t__NSConstantStringClassReference\n\t.long\t.*\n\t.long\t5\n\t.data" { target { *-*-darwin* && { ! lp64 } } } } } */ --/* { dg-final { scan-assembler ".quad\t_OBJC_CLASS_._NSConstantString\n\t.quad\t.*\n\t.long\t5\n\t.space" { target { *-*-darwin* && { lp64 } } } } } */ -+/* { dg-final { scan-assembler {.(quad|xword)\t_OBJC_CLASS_._NSConstantString\n\t.(quad|xword)\t.*\n\t.(long|word)\t5\n\t.space} { target { *-*-darwin* && { lp64 } } } } } */ diff --git a/gcc/tree-nested.cc b/gcc/tree-nested.cc -index 078ceab3ca3..0308f558036 100644 +index 3956e495f92..9e1f4bf3d52 100644 --- a/gcc/tree-nested.cc +++ b/gcc/tree-nested.cc @@ -611,6 +611,14 @@ get_trampoline_type (struct nesting_info *info) @@ -7608,10 +5208,10 @@ index 078ceab3ca3..0308f558036 100644 /* If a chain_decl was created, then it needs to be registered with diff --git a/gcc/tree.cc b/gcc/tree.cc -index 4cf3785270b..5cba2ab8171 100644 +index e6593de87b6..0a81ce7a7e4 100644 --- a/gcc/tree.cc +++ b/gcc/tree.cc -@@ -9766,6 +9766,23 @@ build_common_builtin_nodes (void) +@@ -9795,6 +9795,23 @@ build_common_builtin_nodes (void) "__builtin_nonlocal_goto", ECF_NORETURN | ECF_NOTHROW); @@ -8164,19 +5764,10 @@ index f8f590d71e9..440567a47d2 100644 compiler.cc compiler.hh names.cc names.hh $(shared_source) \ $(marshall_c_source) $(marshall_cxx_source) diff --git a/libcc1/configure b/libcc1/configure -index 01cfb2806da..42fb85a4047 100755 +index 01cfb2806da..85d29f13f40 100755 --- a/libcc1/configure +++ b/libcc1/configure -@@ -646,6 +646,8 @@ gcc_version - get_gcc_base_ver - CET_HOST_FLAGS - visibility -+ENABLE_DARWIN_AT_RPATH_FALSE -+ENABLE_DARWIN_AT_RPATH_TRUE - CXXCPP - am__fastdepCXX_FALSE - am__fastdepCXX_TRUE -@@ -787,6 +789,7 @@ with_pic +@@ -787,6 +787,7 @@ with_pic enable_fast_install with_gnu_ld enable_libtool_lock @@ -8184,7 +5775,7 @@ index 01cfb2806da..42fb85a4047 100755 enable_cet with_gcc_major_version_only enable_werror_always -@@ -1439,6 +1442,8 @@ Optional Features: +@@ -1439,6 +1440,8 @@ Optional Features: --enable-fast-install[=PKGS] optimize for fast installation [default=yes] --disable-libtool-lock avoid locking (might break parallel builds) @@ -8193,7 +5784,7 @@ index 01cfb2806da..42fb85a4047 100755 --enable-cet enable Intel CET in host libraries [default=auto] --enable-werror-always enable -Werror despite compiler version --enable-plugin enable plugin support -@@ -8971,6 +8976,47 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi +@@ -8971,6 +8974,47 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi darwin* | rhapsody*) @@ -8241,7 +5832,7 @@ index 01cfb2806da..42fb85a4047 100755 archive_cmds_need_lc=no hardcode_direct=no hardcode_automatic=yes -@@ -8988,10 +9034,19 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi +@@ -8988,10 +9032,19 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi esac if test "$_lt_dar_can_shared" = "yes"; then output_verbose_link_cmd=func_echo_all @@ -8265,25 +5856,25 @@ index 01cfb2806da..42fb85a4047 100755 else ld_shlibs=no -@@ -10777,7 +10832,7 @@ else +@@ -10777,7 +10830,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 10780 "configure" -+#line 10835 "configure" ++#line 10833 "configure" #include "confdefs.h" #if HAVE_DLFCN_H -@@ -10883,7 +10938,7 @@ else +@@ -10883,7 +10936,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 10886 "configure" -+#line 10941 "configure" ++#line 10939 "configure" #include "confdefs.h" #if HAVE_DLFCN_H -@@ -12165,6 +12220,47 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi +@@ -12165,6 +12218,47 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi darwin* | rhapsody*) @@ -8331,7 +5922,7 @@ index 01cfb2806da..42fb85a4047 100755 archive_cmds_need_lc_CXX=no hardcode_direct_CXX=no hardcode_automatic_CXX=yes -@@ -12182,12 +12278,25 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi +@@ -12182,12 +12276,25 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi esac if test "$_lt_dar_can_shared" = "yes"; then output_verbose_link_cmd=func_echo_all @@ -8362,44 +5953,6 @@ index 01cfb2806da..42fb85a4047 100755 archive_expsym_cmds_CXX="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}" fi -@@ -14518,6 +14627,14 @@ ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $ - ac_compiler_gnu=$ac_cv_c_compiler_gnu - - -+ if test x$enable_darwin_at_rpath = xyes; then -+ ENABLE_DARWIN_AT_RPATH_TRUE= -+ ENABLE_DARWIN_AT_RPATH_FALSE='#' -+else -+ ENABLE_DARWIN_AT_RPATH_TRUE='#' -+ ENABLE_DARWIN_AT_RPATH_FALSE= -+fi -+ - - visibility= - if test "$GXX" = yes; then -@@ -15369,6 +15486,10 @@ if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then - as_fn_error $? "conditional \"am__fastdepCXX\" was never defined. - Usually this means the macro was only invoked conditionally." "$LINENO" 5 - fi -+if test -z "${ENABLE_DARWIN_AT_RPATH_TRUE}" && test -z "${ENABLE_DARWIN_AT_RPATH_FALSE}"; then -+ as_fn_error $? "conditional \"ENABLE_DARWIN_AT_RPATH\" was never defined. -+Usually this means the macro was only invoked conditionally." "$LINENO" 5 -+fi - if test -z "${DARWIN_DYNAMIC_LOOKUP_TRUE}" && test -z "${DARWIN_DYNAMIC_LOOKUP_FALSE}"; then - as_fn_error $? "conditional \"DARWIN_DYNAMIC_LOOKUP\" was never defined. - Usually this means the macro was only invoked conditionally." "$LINENO" 5 -diff --git a/libcc1/configure.ac b/libcc1/configure.ac -index 36f5a7e09f1..e8d068e0ac4 100644 ---- a/libcc1/configure.ac -+++ b/libcc1/configure.ac -@@ -38,6 +38,7 @@ AM_MAINTAINER_MODE - LT_INIT([disable-static]) - AM_PROG_LIBTOOL - AC_PROG_CXX -+AM_CONDITIONAL([ENABLE_DARWIN_AT_RPATH], [test x$enable_darwin_at_rpath = xyes]) - - visibility= - if test "$GXX" = yes; then diff --git a/libffi/Makefile.am b/libffi/Makefile.am index c6d6f849c53..d2ae0c04c7b 100644 --- a/libffi/Makefile.am @@ -10452,7 +8005,7 @@ index 3378316dced..1a00b771fe1 100644 m4_include([../config/warnings.m4]) m4_include([acinclude.m4]) diff --git a/libiberty/configure b/libiberty/configure -index 0a797255c70..a346be40cc2 100755 +index ca83f89da6d..bdcdd31b6d8 100755 --- a/libiberty/configure +++ b/libiberty/configure @@ -632,6 +632,8 @@ PICFLAG @@ -10500,7 +8053,7 @@ index 0a797255c70..a346be40cc2 100755 mips-sgi-irix6*) # PIC is the default. ;; -@@ -7837,6 +7854,10 @@ LTLIBOBJS=$ac_ltlibobjs +@@ -7845,6 +7862,10 @@ LTLIBOBJS=$ac_ltlibobjs @@ -12546,7 +10099,7 @@ index 2476fbc5a26..e88e5e0b0a7 100644 # Work around what appears to be a GNU make bug handling MAKEFLAGS # values defined in terms of make variables, as is the case for CC and diff --git a/libsanitizer/configure b/libsanitizer/configure -index 771b135573a..dfd99e34288 100755 +index ae8c1bd7e83..209582f35e3 100755 --- a/libsanitizer/configure +++ b/libsanitizer/configure @@ -666,6 +666,8 @@ LSAN_SUPPORTED_FALSE @@ -12760,7 +10313,7 @@ index 771b135573a..dfd99e34288 100755 # The cast to long int works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. -@@ -17152,6 +17270,10 @@ if test -z "${am__fastdepCCAS_TRUE}" && test -z "${am__fastdepCCAS_FALSE}"; then +@@ -17153,6 +17271,10 @@ if test -z "${am__fastdepCCAS_TRUE}" && test -z "${am__fastdepCCAS_FALSE}"; then as_fn_error $? "conditional \"am__fastdepCCAS\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi @@ -12772,7 +10325,7 @@ index 771b135573a..dfd99e34288 100755 as_fn_error $? "conditional \"TSAN_SUPPORTED\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 diff --git a/libsanitizer/configure.ac b/libsanitizer/configure.ac -index 7f1ef3979c4..3549b904c62 100644 +index ad49f29db7e..7115c782c82 100644 --- a/libsanitizer/configure.ac +++ b/libsanitizer/configure.ac @@ -85,6 +85,8 @@ esac @@ -12784,6 +10337,19 @@ index 7f1ef3979c4..3549b904c62 100644 AC_CHECK_SIZEOF([void *]) if test "${multilib}" = "yes"; then +diff --git a/libsanitizer/configure.tgt b/libsanitizer/configure.tgt +index fb89df4935c..bc169c365f2 100644 +--- a/libsanitizer/configure.tgt ++++ b/libsanitizer/configure.tgt +@@ -64,7 +64,7 @@ case "${target}" in + HWASAN_SUPPORTED=yes + fi + ;; +- x86_64-*-darwin2* | x86_64-*-darwin1[2-9]* | i?86-*-darwin1[2-9]*) ++ x86_64-*-darwin2[01]* | x86_64-*-darwin1[2-9]* | i?86-*-darwin1[2-9]*) + TSAN_SUPPORTED=no + EXTRA_CXXFLAGS="${EXTRA_CXXFLAGS} -Wl,-undefined,dynamic_lookup" + ;; diff --git a/libsanitizer/hwasan/Makefile.am b/libsanitizer/hwasan/Makefile.am index e12c0a0ce71..4061078c734 100644 --- a/libsanitizer/hwasan/Makefile.am @@ -13204,7 +10770,7 @@ index f30f81c54f6..90778e2355d 100644 # Also toolexecdir, though it's only used in toolexeclibdir case ${version_specific_libs} in diff --git a/libstdc++-v3/configure b/libstdc++-v3/configure -index eac60392121..bdaa160dac6 100755 +index c07e2756974..6d2edbc9a3d 100755 --- a/libstdc++-v3/configure +++ b/libstdc++-v3/configure @@ -786,6 +786,8 @@ GLIBCXX_HOSTED_TRUE