This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: [fortran patch] Don't use TREE_LISTs for storing arguments to intrinsic functions
I'll let Brooks give the final review, but I noted a problem with it
because I'm working on a patch to gfc_conv_intrinsic_minmax() that
builds on top of yours.
@@ -1381,13 +1415,18 @@ gfc_conv_intrinsic_minmax (gfc_se * se,
tree val;
tree thencase;
tree elsecase;
- tree arg;
tree type;
+ tree *args;
+ unsigned int num_args;
+ unsigned int i;
+
+ num_args = gfc_intrinsic_argument_list_length (expr);
+ args = alloca (sizeof (tree) * num_args);
- arg = gfc_conv_intrinsic_function_args (se, expr);
+ gfc_conv_intrinsic_function_args (se, expr, args, num_args);
type = gfc_typenode_for_spec (&expr->ts);
- limit = TREE_VALUE (arg);
+ limit = args[0];
if (TREE_TYPE (limit) != type)
limit = convert (type, limit);
/* Only evaluate the argument once. */
@@ -1396,9 +1435,9 @@ gfc_conv_intrinsic_minmax (gfc_se * se,
mvar = gfc_create_var (type, "M");
elsecase = build2_v (MODIFY_EXPR, mvar, limit);
- for (arg = TREE_CHAIN (arg); arg != NULL_TREE; arg = TREE_CHAIN
(arg))
+ for (i = 0; i < num_args; i++)
{
- val = TREE_VALUE (arg);
+ val = args[i];
if (TREE_TYPE (val) != type)
val = convert (type, val);
I think the for-loop at then end of that hunk should start with i =
1. Otherwise, the generated code for MAX(a,b) start with comparing "a
> a". Can you check that?
FX