As described in the PR thread, Darwin was already using the TARGET_FOLD_BUILTIN hook to process CFstrings.
The patch fixes the breakage by calling a SUBTARGET_FOLD_BUILTIN where defined (following similar patterns for other items that require sub-target handling). OK for trunk? Iain gcc: PR target/53283 * config/i386/i386.c (ix86_fold_builtin): Call SUBTARGET_FOLD_BUILTIN if defined. * config/darwin.h: Rename TARGET_FOLD_BUILTIN to SUBTARGET_FOLD_BUILTIN. * config/rs6000/darwin.h: Map TARGET_FOLD_BUILTIN onto SUBTARGET_FOLD_BUILTIN. Index: gcc/config/i386/i386.c =================================================================== --- gcc/config/i386/i386.c (revision 188918) +++ gcc/config/i386/i386.c (working copy) @@ -28030,6 +28030,10 @@ ix86_fold_builtin (tree fndecl, int n_args, } } +#ifdef SUBTARGET_FOLD_BUILTIN + return SUBTARGET_FOLD_BUILTIN (fndecl, n_args, args, ignore); +#endif + return NULL_TREE; } Index: gcc/config/rs6000/darwin.h =================================================================== --- gcc/config/rs6000/darwin.h (revision 188918) +++ gcc/config/rs6000/darwin.h (working copy) @@ -422,3 +422,7 @@ do { \ rs6000_builtin_decls[(unsigned) (RS6000_BUILTIN_CFSTRING)] \ = darwin_init_cfstring_builtins ((unsigned) (RS6000_BUILTIN_CFSTRING)); \ } while(0) + +/* So far, there is no rs6000_fold_builtin, if one is introduced, then + this will need to be modified similar to the x86 case. */ +#define TARGET_FOLD_BUILTIN SUBTARGET_FOLD_BUILTIN Index: gcc/config/darwin.h =================================================================== --- gcc/config/darwin.h (revision 188918) +++ gcc/config/darwin.h (working copy) @@ -912,7 +909,7 @@ void add_framework_path (char *); #define TARGET_KEXTABI flag_apple_kext /* We have target-specific builtins. */ -#define TARGET_FOLD_BUILTIN darwin_fold_builtin +#define SUBTARGET_FOLD_BUILTIN darwin_fold_builtin #define TARGET_N_FORMAT_TYPES 1 #define TARGET_FORMAT_TYPES darwin_additional_format_types