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;
        }

Reply via email to