1 /* Routines for manipulation of expression nodes.
2 Copyright (C) 2000, 2001, 2002, 2003, 2004 Free Software Foundation,
4 Contributed by Andy Vaught
6 This file is part of GCC.
8 GCC is free software; you can redistribute it and/or modify it under
9 the terms of the GNU General Public License as published by the Free
10 Software Foundation; either version 2, or (at your option) any later
13 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
14 WARRANTY; without even the implied warranty of MERCHANTABILITY or
15 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
18 You should have received a copy of the GNU General Public License
19 along with GCC; see the file COPYING. If not, write to the Free
20 Software Foundation, 59 Temple Place - Suite 330, Boston, MA
32 /* Get a new expr node. */
39 e
= gfc_getmem (sizeof (gfc_expr
));
41 gfc_clear_ts (&e
->ts
);
53 /* Free an argument list and everything below it. */
56 gfc_free_actual_arglist (gfc_actual_arglist
* a1
)
58 gfc_actual_arglist
*a2
;
63 gfc_free_expr (a1
->expr
);
70 /* Copy an arglist structure and all of the arguments. */
73 gfc_copy_actual_arglist (gfc_actual_arglist
* p
)
75 gfc_actual_arglist
*head
, *tail
, *new;
79 for (; p
; p
= p
->next
)
81 new = gfc_get_actual_arglist ();
84 new->expr
= gfc_copy_expr (p
->expr
);
99 /* Free a list of reference structures. */
102 gfc_free_ref_list (gfc_ref
* p
)
114 for (i
= 0; i
< GFC_MAX_DIMENSIONS
; i
++)
116 gfc_free_expr (p
->u
.ar
.start
[i
]);
117 gfc_free_expr (p
->u
.ar
.end
[i
]);
118 gfc_free_expr (p
->u
.ar
.stride
[i
]);
124 gfc_free_expr (p
->u
.ss
.start
);
125 gfc_free_expr (p
->u
.ss
.end
);
137 /* Workhorse function for gfc_free_expr() that frees everything
138 beneath an expression node, but not the node itself. This is
139 useful when we want to simplify a node and replace it with
140 something else or the expression node belongs to another structure. */
143 free_expr0 (gfc_expr
* e
)
147 switch (e
->expr_type
)
153 mpz_clear (e
->value
.integer
);
157 mpf_clear (e
->value
.real
);
161 gfc_free (e
->value
.character
.string
);
165 mpf_clear (e
->value
.complex.r
);
166 mpf_clear (e
->value
.complex.i
);
177 gfc_free_expr (e
->op1
);
179 gfc_free_expr (e
->op2
);
183 gfc_free_actual_arglist (e
->value
.function
.actual
);
191 gfc_free_constructor (e
->value
.constructor
);
195 gfc_free (e
->value
.character
.string
);
202 gfc_internal_error ("free_expr0(): Bad expr type");
205 /* Free a shape array. */
206 if (e
->shape
!= NULL
)
208 for (n
= 0; n
< e
->rank
; n
++)
209 mpz_clear (e
->shape
[n
]);
214 gfc_free_ref_list (e
->ref
);
216 memset (e
, '\0', sizeof (gfc_expr
));
220 /* Free an expression node and everything beneath it. */
223 gfc_free_expr (gfc_expr
* e
)
234 /* Graft the *src expression onto the *dest subexpression. */
237 gfc_replace_expr (gfc_expr
* dest
, gfc_expr
* src
)
247 /* Try to extract an integer constant from the passed expression node.
248 Returns an error message or NULL if the result is set. It is
249 tempting to generate an error and return SUCCESS or FAILURE, but
250 failure is OK for some callers. */
253 gfc_extract_int (gfc_expr
* expr
, int *result
)
256 if (expr
->expr_type
!= EXPR_CONSTANT
)
257 return "Constant expression required at %C";
259 if (expr
->ts
.type
!= BT_INTEGER
)
260 return "Integer expression required at %C";
262 if ((mpz_cmp_si (expr
->value
.integer
, INT_MAX
) > 0)
263 || (mpz_cmp_si (expr
->value
.integer
, INT_MIN
) < 0))
265 return "Integer value too large in expression at %C";
268 *result
= (int) mpz_get_si (expr
->value
.integer
);
274 /* Recursively copy a list of reference structures. */
277 copy_ref (gfc_ref
* src
)
285 dest
= gfc_get_ref ();
286 dest
->type
= src
->type
;
291 ar
= gfc_copy_array_ref (&src
->u
.ar
);
297 dest
->u
.c
= src
->u
.c
;
301 dest
->u
.ss
= src
->u
.ss
;
302 dest
->u
.ss
.start
= gfc_copy_expr (src
->u
.ss
.start
);
303 dest
->u
.ss
.end
= gfc_copy_expr (src
->u
.ss
.end
);
307 dest
->next
= copy_ref (src
->next
);
313 /* Copy a shape array. */
316 gfc_copy_shape (mpz_t
* shape
, int rank
)
324 new_shape
= gfc_get_shape (rank
);
326 for (n
= 0; n
< rank
; n
++)
327 mpz_init_set (new_shape
[n
], shape
[n
]);
333 /* Given an expression pointer, return a copy of the expression. This
334 subroutine is recursive. */
337 gfc_copy_expr (gfc_expr
* p
)
348 switch (q
->expr_type
)
351 s
= gfc_getmem (p
->value
.character
.length
+ 1);
352 q
->value
.character
.string
= s
;
354 memcpy (s
, p
->value
.character
.string
, p
->value
.character
.length
+ 1);
356 q
->op1
= gfc_copy_expr (p
->op1
);
357 q
->op2
= gfc_copy_expr (p
->op2
);
364 mpz_init_set (q
->value
.integer
, p
->value
.integer
);
368 mpf_init_set (q
->value
.real
, p
->value
.real
);
372 mpf_init_set (q
->value
.complex.r
, p
->value
.complex.r
);
373 mpf_init_set (q
->value
.complex.i
, p
->value
.complex.i
);
377 s
= gfc_getmem (p
->value
.character
.length
+ 1);
378 q
->value
.character
.string
= s
;
380 memcpy (s
, p
->value
.character
.string
,
381 p
->value
.character
.length
+ 1);
386 break; /* Already done */
390 gfc_internal_error ("gfc_copy_expr(): Bad expr node");
400 case INTRINSIC_UPLUS
:
401 case INTRINSIC_UMINUS
:
402 q
->op1
= gfc_copy_expr (p
->op1
);
405 default: /* Binary operators */
406 q
->op1
= gfc_copy_expr (p
->op1
);
407 q
->op2
= gfc_copy_expr (p
->op2
);
414 q
->value
.function
.actual
=
415 gfc_copy_actual_arglist (p
->value
.function
.actual
);
420 q
->value
.constructor
= gfc_copy_constructor (p
->value
.constructor
);
428 q
->shape
= gfc_copy_shape (p
->shape
, p
->rank
);
430 q
->ref
= copy_ref (p
->ref
);
436 /* Return the maximum kind of two expressions. In general, higher
437 kind numbers mean more precision for numeric types. */
440 gfc_kind_max (gfc_expr
* e1
, gfc_expr
* e2
)
443 return (e1
->ts
.kind
> e2
->ts
.kind
) ? e1
->ts
.kind
: e2
->ts
.kind
;
447 /* Returns nonzero if the type is numeric, zero otherwise. */
450 numeric_type (bt type
)
453 return type
== BT_COMPLEX
|| type
== BT_REAL
|| type
== BT_INTEGER
;
457 /* Returns nonzero if the typespec is a numeric type, zero otherwise. */
460 gfc_numeric_ts (gfc_typespec
* ts
)
463 return numeric_type (ts
->type
);
467 /* Returns an expression node that is an integer constant. */
476 p
->expr_type
= EXPR_CONSTANT
;
477 p
->ts
.type
= BT_INTEGER
;
478 p
->ts
.kind
= gfc_default_integer_kind ();
480 p
->where
= gfc_current_locus
;
481 mpz_init_set_si (p
->value
.integer
, i
);
487 /* Returns an expression node that is a logical constant. */
490 gfc_logical_expr (int i
, locus
* where
)
496 p
->expr_type
= EXPR_CONSTANT
;
497 p
->ts
.type
= BT_LOGICAL
;
498 p
->ts
.kind
= gfc_default_logical_kind ();
501 where
= &gfc_current_locus
;
503 p
->value
.logical
= i
;
509 /* Return an expression node with an optional argument list attached.
510 A variable number of gfc_expr pointers are strung together in an
511 argument list with a NULL pointer terminating the list. */
514 gfc_build_conversion (gfc_expr
* e
)
519 p
->expr_type
= EXPR_FUNCTION
;
521 p
->value
.function
.actual
= NULL
;
523 p
->value
.function
.actual
= gfc_get_actual_arglist ();
524 p
->value
.function
.actual
->expr
= e
;
530 /* Given an expression node with some sort of numeric binary
531 expression, insert type conversions required to make the operands
534 The exception is that the operands of an exponential don't have to
535 have the same type. If possible, the base is promoted to the type
536 of the exponent. For example, 1**2.3 becomes 1.0**2.3, but
537 1.0**2 stays as it is. */
540 gfc_type_convert_binary (gfc_expr
* e
)
547 if (op1
->ts
.type
== BT_UNKNOWN
|| op2
->ts
.type
== BT_UNKNOWN
)
549 gfc_clear_ts (&e
->ts
);
553 /* Kind conversions of same type. */
554 if (op1
->ts
.type
== op2
->ts
.type
)
557 if (op1
->ts
.kind
== op2
->ts
.kind
)
559 /* No type conversions. */
564 if (op1
->ts
.kind
> op2
->ts
.kind
)
565 gfc_convert_type (op2
, &op1
->ts
, 2);
567 gfc_convert_type (op1
, &op2
->ts
, 2);
573 /* Integer combined with real or complex. */
574 if (op2
->ts
.type
== BT_INTEGER
)
578 /* Special cose for ** operator. */
579 if (e
->operator == INTRINSIC_POWER
)
582 gfc_convert_type (e
->op2
, &e
->ts
, 2);
586 if (op1
->ts
.type
== BT_INTEGER
)
589 gfc_convert_type (e
->op1
, &e
->ts
, 2);
593 /* Real combined with complex. */
594 e
->ts
.type
= BT_COMPLEX
;
595 if (op1
->ts
.kind
> op2
->ts
.kind
)
596 e
->ts
.kind
= op1
->ts
.kind
;
598 e
->ts
.kind
= op2
->ts
.kind
;
599 if (op1
->ts
.type
!= BT_COMPLEX
|| op1
->ts
.kind
!= e
->ts
.kind
)
600 gfc_convert_type (e
->op1
, &e
->ts
, 2);
601 if (op2
->ts
.type
!= BT_COMPLEX
|| op2
->ts
.kind
!= e
->ts
.kind
)
602 gfc_convert_type (e
->op2
, &e
->ts
, 2);
609 /* Function to determine if an expression is constant or not. This
610 function expects that the expression has already been simplified. */
613 gfc_is_constant_expr (gfc_expr
* e
)
616 gfc_actual_arglist
*arg
;
622 switch (e
->expr_type
)
625 rv
= (gfc_is_constant_expr (e
->op1
)
627 || gfc_is_constant_expr (e
->op2
)));
636 /* Call to intrinsic with at least one argument. */
638 if (e
->value
.function
.isym
&& e
->value
.function
.actual
)
640 for (arg
= e
->value
.function
.actual
; arg
; arg
= arg
->next
)
642 if (!gfc_is_constant_expr (arg
->expr
))
656 rv
= gfc_is_constant_expr (e
->op1
) && gfc_is_constant_expr (e
->op2
);
661 for (c
= e
->value
.constructor
; c
; c
= c
->next
)
662 if (!gfc_is_constant_expr (c
->expr
))
670 rv
= gfc_constant_ac (e
);
674 gfc_internal_error ("gfc_is_constant_expr(): Unknown expression type");
681 /* Try to collapse intrinsic expressions. */
684 simplify_intrinsic_op (gfc_expr
* p
, int type
)
686 gfc_expr
*op1
, *op2
, *result
;
688 if (p
->operator == INTRINSIC_USER
)
694 if (gfc_simplify_expr (op1
, type
) == FAILURE
)
696 if (gfc_simplify_expr (op2
, type
) == FAILURE
)
699 if (!gfc_is_constant_expr (op1
)
700 || (op2
!= NULL
&& !gfc_is_constant_expr (op2
)))
709 case INTRINSIC_UPLUS
:
710 result
= gfc_uplus (op1
);
713 case INTRINSIC_UMINUS
:
714 result
= gfc_uminus (op1
);
718 result
= gfc_add (op1
, op2
);
721 case INTRINSIC_MINUS
:
722 result
= gfc_subtract (op1
, op2
);
725 case INTRINSIC_TIMES
:
726 result
= gfc_multiply (op1
, op2
);
729 case INTRINSIC_DIVIDE
:
730 result
= gfc_divide (op1
, op2
);
733 case INTRINSIC_POWER
:
734 result
= gfc_power (op1
, op2
);
737 case INTRINSIC_CONCAT
:
738 result
= gfc_concat (op1
, op2
);
742 result
= gfc_eq (op1
, op2
);
746 result
= gfc_ne (op1
, op2
);
750 result
= gfc_gt (op1
, op2
);
754 result
= gfc_ge (op1
, op2
);
758 result
= gfc_lt (op1
, op2
);
762 result
= gfc_le (op1
, op2
);
766 result
= gfc_not (op1
);
770 result
= gfc_and (op1
, op2
);
774 result
= gfc_or (op1
, op2
);
778 result
= gfc_eqv (op1
, op2
);
782 result
= gfc_neqv (op1
, op2
);
786 gfc_internal_error ("simplify_intrinsic_op(): Bad operator");
796 gfc_replace_expr (p
, result
);
802 /* Subroutine to simplify constructor expressions. Mutually recursive
803 with gfc_simplify_expr(). */
806 simplify_constructor (gfc_constructor
* c
, int type
)
809 for (; c
; c
= c
->next
)
812 && (gfc_simplify_expr (c
->iterator
->start
, type
) == FAILURE
813 || gfc_simplify_expr (c
->iterator
->end
, type
) == FAILURE
814 || gfc_simplify_expr (c
->iterator
->step
, type
) == FAILURE
))
817 if (c
->expr
&& gfc_simplify_expr (c
->expr
, type
) == FAILURE
)
825 /* Pull a single array element out of an array constructor. */
827 static gfc_constructor
*
828 find_array_element (gfc_constructor
* cons
, gfc_array_ref
* ar
)
830 unsigned long nelemen
;
835 mpz_init_set_ui (offset
, 0);
837 for (i
= 0; i
< ar
->dimen
; i
++)
839 if (ar
->start
[i
]->expr_type
!= EXPR_CONSTANT
)
844 mpz_sub (delta
, ar
->start
[i
]->value
.integer
,
845 ar
->as
->lower
[i
]->value
.integer
);
846 mpz_add (offset
, offset
, delta
);
851 if (mpz_fits_ulong_p (offset
))
853 for (nelemen
= mpz_get_ui (offset
); nelemen
> 0; nelemen
--)
874 /* Find a component of a structure constructor. */
876 static gfc_constructor
*
877 find_component_ref (gfc_constructor
* cons
, gfc_ref
* ref
)
882 comp
= ref
->u
.c
.sym
->components
;
883 pick
= ref
->u
.c
.component
;
894 /* Replace an expression with the contents of a constructor, removing
895 the subobject reference in the process. */
898 remove_subobject_ref (gfc_expr
* p
, gfc_constructor
* cons
)
904 e
->ref
= p
->ref
->next
;
906 gfc_replace_expr (p
, e
);
910 /* Simplify a subobject reference of a constructor. This occurs when
911 parameter variable values are substituted. */
914 simplify_const_ref (gfc_expr
* p
)
916 gfc_constructor
*cons
;
920 switch (p
->ref
->type
)
923 switch (p
->ref
->u
.ar
.type
)
926 cons
= find_array_element (p
->value
.constructor
, &p
->ref
->u
.ar
);
929 remove_subobject_ref (p
, cons
);
933 if (p
->ref
->next
!= NULL
)
935 /* TODO: Simplify array subobject references. */
938 gfc_free_ref_list (p
->ref
);
943 /* TODO: Simplify array subsections. */
950 cons
= find_component_ref (p
->value
.constructor
, p
->ref
);
951 remove_subobject_ref (p
, cons
);
955 /* TODO: Constant substrings. */
964 /* Simplify a chain of references. */
967 simplify_ref_chain (gfc_ref
* ref
, int type
)
971 for (; ref
; ref
= ref
->next
)
976 for (n
= 0; n
< ref
->u
.ar
.dimen
; n
++)
978 if (gfc_simplify_expr (ref
->u
.ar
.start
[n
], type
)
981 if (gfc_simplify_expr (ref
->u
.ar
.end
[n
], type
)
984 if (gfc_simplify_expr (ref
->u
.ar
.stride
[n
], type
)
991 if (gfc_simplify_expr (ref
->u
.ss
.start
, type
) == FAILURE
)
993 if (gfc_simplify_expr (ref
->u
.ss
.end
, type
) == FAILURE
)
1005 /* Try to substitute the value of a parameter variable. */
1007 simplify_parameter_variable (gfc_expr
* p
, int type
)
1012 e
= gfc_copy_expr (p
->symtree
->n
.sym
->value
);
1014 e
->ref
= copy_ref (p
->ref
);
1015 t
= gfc_simplify_expr (e
, type
);
1017 /* Only use the simplification if it eliminated all subobject
1019 if (t
== SUCCESS
&& ! e
->ref
)
1020 gfc_replace_expr (p
, e
);
1027 /* Given an expression, simplify it by collapsing constant
1028 expressions. Most simplification takes place when the expression
1029 tree is being constructed. If an intrinsic function is simplified
1030 at some point, we get called again to collapse the result against
1033 We work by recursively simplifying expression nodes, simplifying
1034 intrinsic functions where possible, which can lead to further
1035 constant collapsing. If an operator has constant operand(s), we
1036 rip the expression apart, and rebuild it, hoping that it becomes
1039 The expression type is defined for:
1040 0 Basic expression parsing
1041 1 Simplifying array constructors -- will substitute
1043 Returns FAILURE on error, SUCCESS otherwise.
1044 NOTE: Will return SUCCESS even if the expression can not be simplified. */
1047 gfc_simplify_expr (gfc_expr
* p
, int type
)
1049 gfc_actual_arglist
*ap
;
1054 switch (p
->expr_type
)
1061 for (ap
= p
->value
.function
.actual
; ap
; ap
= ap
->next
)
1062 if (gfc_simplify_expr (ap
->expr
, type
) == FAILURE
)
1065 if (p
->value
.function
.isym
!= NULL
1066 && gfc_intrinsic_func_interface (p
, 1) == MATCH_ERROR
)
1071 case EXPR_SUBSTRING
:
1072 if (gfc_simplify_expr (p
->op1
, type
) == FAILURE
1073 || gfc_simplify_expr (p
->op2
, type
) == FAILURE
)
1076 /* TODO: evaluate constant substrings. */
1081 if (simplify_intrinsic_op (p
, type
) == FAILURE
)
1086 /* Only substitute array parameter variables if we are in an
1087 initialization expression, or we want a subsection. */
1088 if (p
->symtree
->n
.sym
->attr
.flavor
== FL_PARAMETER
1089 && (gfc_init_expr
|| p
->ref
1090 || p
->symtree
->n
.sym
->value
->expr_type
!= EXPR_ARRAY
))
1092 if (simplify_parameter_variable (p
, type
) == FAILURE
)
1099 gfc_simplify_iterator_var (p
);
1102 /* Simplify subcomponent references. */
1103 if (simplify_ref_chain (p
->ref
, type
) == FAILURE
)
1108 case EXPR_STRUCTURE
:
1110 if (simplify_ref_chain (p
->ref
, type
) == FAILURE
)
1113 if (simplify_constructor (p
->value
.constructor
, type
) == FAILURE
)
1116 if (p
->expr_type
== EXPR_ARRAY
)
1117 gfc_expand_constructor (p
);
1119 if (simplify_const_ref (p
) == FAILURE
)
1129 /* Returns the type of an expression with the exception that iterator
1130 variables are automatically integers no matter what else they may
1137 if (e
->expr_type
== EXPR_VARIABLE
&& gfc_check_iter_variable (e
) == SUCCESS
)
1144 /* Check an intrinsic arithmetic operation to see if it is consistent
1145 with some type of expression. */
1147 static try check_init_expr (gfc_expr
*);
1150 check_intrinsic_op (gfc_expr
* e
, try (*check_function
) (gfc_expr
*))
1153 if ((*check_function
) (e
->op1
) == FAILURE
)
1156 switch (e
->operator)
1158 case INTRINSIC_UPLUS
:
1159 case INTRINSIC_UMINUS
:
1160 if (!numeric_type (et0 (e
->op1
)))
1171 case INTRINSIC_PLUS
:
1172 case INTRINSIC_MINUS
:
1173 case INTRINSIC_TIMES
:
1174 case INTRINSIC_DIVIDE
:
1175 case INTRINSIC_POWER
:
1176 if ((*check_function
) (e
->op2
) == FAILURE
)
1179 if (!numeric_type (et0 (e
->op1
)) || !numeric_type (et0 (e
->op2
)))
1182 if (e
->operator != INTRINSIC_POWER
)
1185 if (check_function
== check_init_expr
&& et0 (e
->op2
) != BT_INTEGER
)
1187 gfc_error ("Exponent at %L must be INTEGER for an initialization "
1188 "expression", &e
->op2
->where
);
1194 case INTRINSIC_CONCAT
:
1195 if ((*check_function
) (e
->op2
) == FAILURE
)
1198 if (et0 (e
->op1
) != BT_CHARACTER
|| et0 (e
->op2
) != BT_CHARACTER
)
1200 gfc_error ("Concatenation operator in expression at %L "
1201 "must have two CHARACTER operands", &e
->op1
->where
);
1205 if (e
->op1
->ts
.kind
!= e
->op2
->ts
.kind
)
1207 gfc_error ("Concat operator at %L must concatenate strings of the "
1208 "same kind", &e
->where
);
1215 if (et0 (e
->op1
) != BT_LOGICAL
)
1217 gfc_error (".NOT. operator in expression at %L must have a LOGICAL "
1218 "operand", &e
->op1
->where
);
1227 case INTRINSIC_NEQV
:
1228 if ((*check_function
) (e
->op2
) == FAILURE
)
1231 if (et0 (e
->op1
) != BT_LOGICAL
|| et0 (e
->op2
) != BT_LOGICAL
)
1233 gfc_error ("LOGICAL operands are required in expression at %L",
1241 gfc_error ("Only intrinsic operators can be used in expression at %L",
1249 gfc_error ("Numeric operands are required in expression at %L", &e
->where
);
1256 /* Certain inquiry functions are specifically allowed to have variable
1257 arguments, which is an exception to the normal requirement that an
1258 initialization function have initialization arguments. We head off
1259 this problem here. */
1262 check_inquiry (gfc_expr
* e
)
1266 /* FIXME: This should be moved into the intrinsic definitions,
1267 to eliminate this ugly hack. */
1268 static const char * const inquiry_function
[] = {
1269 "digits", "epsilon", "huge", "kind", "maxexponent", "minexponent",
1270 "precision", "radix", "range", "tiny", "bit_size", "size", "shape",
1271 "lbound", "ubound", NULL
1276 name
= e
->symtree
->n
.sym
->name
;
1278 for (i
= 0; inquiry_function
[i
]; i
++)
1279 if (strcmp (inquiry_function
[i
], name
) == 0)
1282 if (inquiry_function
[i
] == NULL
)
1285 e
= e
->value
.function
.actual
->expr
;
1287 if (e
== NULL
|| e
->expr_type
!= EXPR_VARIABLE
)
1290 /* At this point we have a numeric inquiry function with a variable
1291 argument. The type of the variable might be undefined, but we
1292 need it now, because the arguments of these functions are allowed
1295 if (e
->ts
.type
== BT_UNKNOWN
)
1297 if (e
->symtree
->n
.sym
->ts
.type
== BT_UNKNOWN
1298 && gfc_set_default_type (e
->symtree
->n
.sym
, 0, gfc_current_ns
)
1302 e
->ts
= e
->symtree
->n
.sym
->ts
;
1309 /* Verify that an expression is an initialization expression. A side
1310 effect is that the expression tree is reduced to a single constant
1311 node if all goes well. This would normally happen when the
1312 expression is constructed but function references are assumed to be
1313 intrinsics in the context of initialization expressions. If
1314 FAILURE is returned an error message has been generated. */
1317 check_init_expr (gfc_expr
* e
)
1319 gfc_actual_arglist
*ap
;
1326 switch (e
->expr_type
)
1329 t
= check_intrinsic_op (e
, check_init_expr
);
1331 t
= gfc_simplify_expr (e
, 0);
1338 if (check_inquiry (e
) != SUCCESS
)
1341 for (ap
= e
->value
.function
.actual
; ap
; ap
= ap
->next
)
1342 if (check_init_expr (ap
->expr
) == FAILURE
)
1351 m
= gfc_intrinsic_func_interface (e
, 0);
1354 gfc_error ("Function '%s' in initialization expression at %L "
1355 "must be an intrinsic function",
1356 e
->symtree
->n
.sym
->name
, &e
->where
);
1367 if (gfc_check_iter_variable (e
) == SUCCESS
)
1370 if (e
->symtree
->n
.sym
->attr
.flavor
== FL_PARAMETER
)
1372 t
= simplify_parameter_variable (e
, 0);
1376 gfc_error ("Variable '%s' at %L cannot appear in an initialization "
1377 "expression", e
->symtree
->n
.sym
->name
, &e
->where
);
1386 case EXPR_SUBSTRING
:
1387 t
= check_init_expr (e
->op1
);
1391 t
= check_init_expr (e
->op2
);
1393 t
= gfc_simplify_expr (e
, 0);
1397 case EXPR_STRUCTURE
:
1398 t
= gfc_check_constructor (e
, check_init_expr
);
1402 t
= gfc_check_constructor (e
, check_init_expr
);
1406 t
= gfc_expand_constructor (e
);
1410 t
= gfc_check_constructor_type (e
);
1414 gfc_internal_error ("check_init_expr(): Unknown expression type");
1421 /* Match an initialization expression. We work by first matching an
1422 expression, then reducing it to a constant. */
1425 gfc_match_init_expr (gfc_expr
** result
)
1431 m
= gfc_match_expr (&expr
);
1436 t
= gfc_resolve_expr (expr
);
1438 t
= check_init_expr (expr
);
1443 gfc_free_expr (expr
);
1447 if (expr
->expr_type
== EXPR_ARRAY
1448 && (gfc_check_constructor_type (expr
) == FAILURE
1449 || gfc_expand_constructor (expr
) == FAILURE
))
1451 gfc_free_expr (expr
);
1455 if (!gfc_is_constant_expr (expr
))
1456 gfc_internal_error ("Initialization expression didn't reduce %C");
1465 static try check_restricted (gfc_expr
*);
1467 /* Given an actual argument list, test to see that each argument is a
1468 restricted expression and optionally if the expression type is
1469 integer or character. */
1472 restricted_args (gfc_actual_arglist
* a
)
1474 for (; a
; a
= a
->next
)
1476 if (check_restricted (a
->expr
) == FAILURE
)
1484 /************* Restricted/specification expressions *************/
1487 /* Make sure a non-intrinsic function is a specification function. */
1490 external_spec_function (gfc_expr
* e
)
1494 f
= e
->value
.function
.esym
;
1496 if (f
->attr
.proc
== PROC_ST_FUNCTION
)
1498 gfc_error ("Specification function '%s' at %L cannot be a statement "
1499 "function", f
->name
, &e
->where
);
1503 if (f
->attr
.proc
== PROC_INTERNAL
)
1505 gfc_error ("Specification function '%s' at %L cannot be an internal "
1506 "function", f
->name
, &e
->where
);
1512 gfc_error ("Specification function '%s' at %L must be PURE", f
->name
,
1517 if (f
->attr
.recursive
)
1519 gfc_error ("Specification function '%s' at %L cannot be RECURSIVE",
1520 f
->name
, &e
->where
);
1524 return restricted_args (e
->value
.function
.actual
);
1528 /* Check to see that a function reference to an intrinsic is a
1529 restricted expression. */
1532 restricted_intrinsic (gfc_expr
* e
)
1534 /* TODO: Check constraints on inquiry functions. 7.1.6.2 (7). */
1535 if (check_inquiry (e
) == SUCCESS
)
1538 return restricted_args (e
->value
.function
.actual
);
1542 /* Verify that an expression is a restricted expression. Like its
1543 cousin check_init_expr(), an error message is generated if we
1547 check_restricted (gfc_expr
* e
)
1555 switch (e
->expr_type
)
1558 t
= check_intrinsic_op (e
, check_restricted
);
1560 t
= gfc_simplify_expr (e
, 0);
1565 t
= e
->value
.function
.esym
?
1566 external_spec_function (e
) : restricted_intrinsic (e
);
1571 sym
= e
->symtree
->n
.sym
;
1574 if (sym
->attr
.optional
)
1576 gfc_error ("Dummy argument '%s' at %L cannot be OPTIONAL",
1577 sym
->name
, &e
->where
);
1581 if (sym
->attr
.intent
== INTENT_OUT
)
1583 gfc_error ("Dummy argument '%s' at %L cannot be INTENT(OUT)",
1584 sym
->name
, &e
->where
);
1588 if (sym
->attr
.in_common
1589 || sym
->attr
.use_assoc
1591 || sym
->ns
!= gfc_current_ns
1592 || (sym
->ns
->proc_name
!= NULL
1593 && sym
->ns
->proc_name
->attr
.flavor
== FL_MODULE
))
1599 gfc_error ("Variable '%s' cannot appear in the expression at %L",
1600 sym
->name
, &e
->where
);
1609 case EXPR_SUBSTRING
:
1610 t
= gfc_specification_expr (e
->op1
);
1614 t
= gfc_specification_expr (e
->op2
);
1616 t
= gfc_simplify_expr (e
, 0);
1620 case EXPR_STRUCTURE
:
1621 t
= gfc_check_constructor (e
, check_restricted
);
1625 t
= gfc_check_constructor (e
, check_restricted
);
1629 gfc_internal_error ("check_restricted(): Unknown expression type");
1636 /* Check to see that an expression is a specification expression. If
1637 we return FAILURE, an error has been generated. */
1640 gfc_specification_expr (gfc_expr
* e
)
1643 if (e
->ts
.type
!= BT_INTEGER
)
1645 gfc_error ("Expression at %L must be of INTEGER type", &e
->where
);
1651 gfc_error ("Expression at %L must be scalar", &e
->where
);
1655 if (gfc_simplify_expr (e
, 0) == FAILURE
)
1658 return check_restricted (e
);
1662 /************** Expression conformance checks. *************/
1664 /* Given two expressions, make sure that the arrays are conformable. */
1667 gfc_check_conformance (const char *optype
, gfc_expr
* op1
, gfc_expr
* op2
)
1669 int op1_flag
, op2_flag
, d
;
1670 mpz_t op1_size
, op2_size
;
1673 if (op1
->rank
== 0 || op2
->rank
== 0)
1676 if (op1
->rank
!= op2
->rank
)
1678 gfc_error ("Incompatible ranks in %s at %L", optype
, &op1
->where
);
1684 for (d
= 0; d
< op1
->rank
; d
++)
1686 op1_flag
= gfc_array_dimen_size (op1
, d
, &op1_size
) == SUCCESS
;
1687 op2_flag
= gfc_array_dimen_size (op2
, d
, &op2_size
) == SUCCESS
;
1689 if (op1_flag
&& op2_flag
&& mpz_cmp (op1_size
, op2_size
) != 0)
1691 gfc_error ("%s at %L has different shape on dimension %d (%d/%d)",
1692 optype
, &op1
->where
, d
+ 1, (int) mpz_get_si (op1_size
),
1693 (int) mpz_get_si (op2_size
));
1699 mpz_clear (op1_size
);
1701 mpz_clear (op2_size
);
1711 /* Given an assignable expression and an arbitrary expression, make
1712 sure that the assignment can take place. */
1715 gfc_check_assign (gfc_expr
* lvalue
, gfc_expr
* rvalue
, int conform
)
1719 sym
= lvalue
->symtree
->n
.sym
;
1721 if (sym
->attr
.intent
== INTENT_IN
)
1723 gfc_error ("Can't assign to INTENT(IN) variable '%s' at %L",
1724 sym
->name
, &lvalue
->where
);
1728 if (rvalue
->rank
!= 0 && lvalue
->rank
!= rvalue
->rank
)
1730 gfc_error ("Incompatible ranks in assignment at %L", &lvalue
->where
);
1734 if (lvalue
->ts
.type
== BT_UNKNOWN
)
1736 gfc_error ("Variable type is UNKNOWN in assignment at %L",
1741 /* Check size of array assignments. */
1742 if (lvalue
->rank
!= 0 && rvalue
->rank
!= 0
1743 && gfc_check_conformance ("Array assignment", lvalue
, rvalue
) != SUCCESS
)
1746 if (gfc_compare_types (&lvalue
->ts
, &rvalue
->ts
))
1751 if (gfc_numeric_ts (&lvalue
->ts
) && gfc_numeric_ts (&rvalue
->ts
))
1754 gfc_error ("Incompatible types in assignment at %L, %s to %s",
1755 &rvalue
->where
, gfc_typename (&rvalue
->ts
),
1756 gfc_typename (&lvalue
->ts
));
1761 return gfc_convert_type (rvalue
, &lvalue
->ts
, 1);
1765 /* Check that a pointer assignment is OK. We first check lvalue, and
1766 we only check rvalue if it's not an assignment to NULL() or a
1767 NULLIFY statement. */
1770 gfc_check_pointer_assign (gfc_expr
* lvalue
, gfc_expr
* rvalue
)
1772 symbol_attribute attr
;
1775 if (lvalue
->symtree
->n
.sym
->ts
.type
== BT_UNKNOWN
)
1777 gfc_error ("Pointer assignment target is not a POINTER at %L",
1782 attr
= gfc_variable_attr (lvalue
, NULL
);
1785 gfc_error ("Pointer assignment to non-POINTER at %L", &lvalue
->where
);
1789 is_pure
= gfc_pure (NULL
);
1791 if (is_pure
&& gfc_impure_variable (lvalue
->symtree
->n
.sym
))
1793 gfc_error ("Bad pointer object in PURE procedure at %L",
1798 /* If rvalue is a NULL() or NULLIFY, we're done. Otherwise the type,
1799 kind, etc for lvalue and rvalue must match, and rvalue must be a
1800 pure variable if we're in a pure function. */
1801 if (rvalue
->expr_type
!= EXPR_NULL
)
1804 if (!gfc_compare_types (&lvalue
->ts
, &rvalue
->ts
))
1806 gfc_error ("Different types in pointer assignment at %L",
1811 if (lvalue
->ts
.kind
!= rvalue
->ts
.kind
)
1814 ("Different kind type parameters in pointer assignment at %L",
1819 attr
= gfc_expr_attr (rvalue
);
1820 if (!attr
.target
&& !attr
.pointer
)
1823 ("Pointer assignment target is neither TARGET nor POINTER at "
1824 "%L", &rvalue
->where
);
1828 if (is_pure
&& gfc_impure_variable (rvalue
->symtree
->n
.sym
))
1831 ("Bad target in pointer assignment in PURE procedure at %L",
1840 /* Relative of gfc_check_assign() except that the lvalue is a single
1844 gfc_check_assign_symbol (gfc_symbol
* sym
, gfc_expr
* rvalue
)
1849 memset (&lvalue
, '\0', sizeof (gfc_expr
));
1851 lvalue
.expr_type
= EXPR_VARIABLE
;
1852 lvalue
.ts
= sym
->ts
;
1854 lvalue
.rank
= sym
->as
->rank
;
1855 lvalue
.symtree
= (gfc_symtree
*)gfc_getmem (sizeof (gfc_symtree
));
1856 lvalue
.symtree
->n
.sym
= sym
;
1857 lvalue
.where
= sym
->declared_at
;
1859 r
= gfc_check_assign (&lvalue
, rvalue
, 1);
1861 gfc_free (lvalue
.symtree
);
1867 /* Get an expression for a default initializer. */
1870 gfc_default_initializer (gfc_typespec
*ts
)
1872 gfc_constructor
*tail
;
1878 /* See if we have a default initializer. */
1879 for (c
= ts
->derived
->components
; c
; c
= c
->next
)
1881 if (c
->initializer
&& init
== NULL
)
1882 init
= gfc_get_expr ();
1888 /* Build the constructor. */
1889 init
->expr_type
= EXPR_STRUCTURE
;
1891 init
->where
= ts
->derived
->declared_at
;
1893 for (c
= ts
->derived
->components
; c
; c
= c
->next
)
1896 init
->value
.constructor
= tail
= gfc_get_constructor ();
1899 tail
->next
= gfc_get_constructor ();
1904 tail
->expr
= gfc_copy_expr (c
->initializer
);