As $SUBJECT suggests. The only tricky bit is the initialization of `args' to NULL_TREEs so that we can safely pass all of the relevant args to build_function_type_list, regardless of whether the function type in question has that many args.
Tested with cross to sh-elf. OK to commit? -Nathan * config/sh/sh.c (sh_media_init_builtins): Call build_function_type_list instead of build_function_type. diff --git a/gcc/config/sh/sh.c b/gcc/config/sh/sh.c index 78f6f0f..0f158d5 100644 --- a/gcc/config/sh/sh.c +++ b/gcc/config/sh/sh.c @@ -11222,6 +11222,7 @@ sh_media_init_builtins (void) else { int has_result = signature_args[signature][0] != 0; + tree args[3]; if ((signature_args[signature][1] & 8) && (((signature_args[signature][1] & 1) && TARGET_SHMEDIA32) @@ -11230,7 +11231,8 @@ sh_media_init_builtins (void) if (! TARGET_FPU_ANY && FLOAT_MODE_P (insn_data[d->icode].operand[0].mode)) continue; - type = void_list_node; + for (i = 0; i < (int) ARRAY_SIZE (args); i++) + args[i] = NULL_TREE; for (i = 3; ; i--) { int arg = signature_args[signature][i]; @@ -11248,9 +11250,10 @@ sh_media_init_builtins (void) arg_type = void_type_node; if (i == 0) break; - type = tree_cons (NULL_TREE, arg_type, type); + args[i-1] = arg_type; } - type = build_function_type (arg_type, type); + type = build_function_type_list (arg_type, args[0], args[1], + args[2], NULL_TREE); if (signature < SH_BLTIN_NUM_SHARED_SIGNATURES) shared[signature] = type; }