* expr.c (gfc_type_convert_binary): Typo in comment.
[official-gcc.git] / gcc / fortran / expr.c
blob7231fab1e4f460c612173eff48202284b1894bae
1 /* Routines for manipulation of expression nodes.
2 Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation,
3 Inc.
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
11 version.
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
16 for more details.
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
21 02111-1307, USA. */
23 #include "config.h"
24 #include "system.h"
25 #include "gfortran.h"
26 #include "arith.h"
27 #include "match.h"
29 /* Get a new expr node. */
31 gfc_expr *
32 gfc_get_expr (void)
34 gfc_expr *e;
36 e = gfc_getmem (sizeof (gfc_expr));
38 gfc_clear_ts (&e->ts);
39 e->op1 = NULL;
40 e->op2 = NULL;
41 e->shape = NULL;
42 e->ref = NULL;
43 e->symtree = NULL;
44 e->uop = NULL;
46 return e;
50 /* Free an argument list and everything below it. */
52 void
53 gfc_free_actual_arglist (gfc_actual_arglist * a1)
55 gfc_actual_arglist *a2;
57 while (a1)
59 a2 = a1->next;
60 gfc_free_expr (a1->expr);
61 gfc_free (a1);
62 a1 = a2;
67 /* Copy an arglist structure and all of the arguments. */
69 gfc_actual_arglist *
70 gfc_copy_actual_arglist (gfc_actual_arglist * p)
72 gfc_actual_arglist *head, *tail, *new;
74 head = tail = NULL;
76 for (; p; p = p->next)
78 new = gfc_get_actual_arglist ();
79 *new = *p;
81 new->expr = gfc_copy_expr (p->expr);
82 new->next = NULL;
84 if (head == NULL)
85 head = new;
86 else
87 tail->next = new;
89 tail = new;
92 return head;
96 /* Free a list of reference structures. */
98 void
99 gfc_free_ref_list (gfc_ref * p)
101 gfc_ref *q;
102 int i;
104 for (; p; p = q)
106 q = p->next;
108 switch (p->type)
110 case REF_ARRAY:
111 for (i = 0; i < GFC_MAX_DIMENSIONS; i++)
113 gfc_free_expr (p->u.ar.start[i]);
114 gfc_free_expr (p->u.ar.end[i]);
115 gfc_free_expr (p->u.ar.stride[i]);
118 break;
120 case REF_SUBSTRING:
121 gfc_free_expr (p->u.ss.start);
122 gfc_free_expr (p->u.ss.end);
123 break;
125 case REF_COMPONENT:
126 break;
129 gfc_free (p);
134 /* Workhorse function for gfc_free_expr() that frees everything
135 beneath an expression node, but not the node itself. This is
136 useful when we want to simplify a node and replace it with
137 something else or the expression node belongs to another structure. */
139 static void
140 free_expr0 (gfc_expr * e)
142 int n;
144 switch (e->expr_type)
146 case EXPR_CONSTANT:
147 switch (e->ts.type)
149 case BT_INTEGER:
150 mpz_clear (e->value.integer);
151 break;
153 case BT_REAL:
154 mpfr_clear (e->value.real);
155 break;
157 case BT_CHARACTER:
158 gfc_free (e->value.character.string);
159 break;
161 case BT_COMPLEX:
162 mpfr_clear (e->value.complex.r);
163 mpfr_clear (e->value.complex.i);
164 break;
166 default:
167 break;
170 break;
172 case EXPR_OP:
173 if (e->op1 != NULL)
174 gfc_free_expr (e->op1);
175 if (e->op2 != NULL)
176 gfc_free_expr (e->op2);
177 break;
179 case EXPR_FUNCTION:
180 gfc_free_actual_arglist (e->value.function.actual);
181 break;
183 case EXPR_VARIABLE:
184 break;
186 case EXPR_ARRAY:
187 case EXPR_STRUCTURE:
188 gfc_free_constructor (e->value.constructor);
189 break;
191 case EXPR_SUBSTRING:
192 gfc_free (e->value.character.string);
193 break;
195 case EXPR_NULL:
196 break;
198 default:
199 gfc_internal_error ("free_expr0(): Bad expr type");
202 /* Free a shape array. */
203 if (e->shape != NULL)
205 for (n = 0; n < e->rank; n++)
206 mpz_clear (e->shape[n]);
208 gfc_free (e->shape);
211 gfc_free_ref_list (e->ref);
213 memset (e, '\0', sizeof (gfc_expr));
217 /* Free an expression node and everything beneath it. */
219 void
220 gfc_free_expr (gfc_expr * e)
223 if (e == NULL)
224 return;
226 free_expr0 (e);
227 gfc_free (e);
231 /* Graft the *src expression onto the *dest subexpression. */
233 void
234 gfc_replace_expr (gfc_expr * dest, gfc_expr * src)
237 free_expr0 (dest);
238 *dest = *src;
240 gfc_free (src);
244 /* Try to extract an integer constant from the passed expression node.
245 Returns an error message or NULL if the result is set. It is
246 tempting to generate an error and return SUCCESS or FAILURE, but
247 failure is OK for some callers. */
249 const char *
250 gfc_extract_int (gfc_expr * expr, int *result)
253 if (expr->expr_type != EXPR_CONSTANT)
254 return "Constant expression required at %C";
256 if (expr->ts.type != BT_INTEGER)
257 return "Integer expression required at %C";
259 if ((mpz_cmp_si (expr->value.integer, INT_MAX) > 0)
260 || (mpz_cmp_si (expr->value.integer, INT_MIN) < 0))
262 return "Integer value too large in expression at %C";
265 *result = (int) mpz_get_si (expr->value.integer);
267 return NULL;
271 /* Recursively copy a list of reference structures. */
273 static gfc_ref *
274 copy_ref (gfc_ref * src)
276 gfc_array_ref *ar;
277 gfc_ref *dest;
279 if (src == NULL)
280 return NULL;
282 dest = gfc_get_ref ();
283 dest->type = src->type;
285 switch (src->type)
287 case REF_ARRAY:
288 ar = gfc_copy_array_ref (&src->u.ar);
289 dest->u.ar = *ar;
290 gfc_free (ar);
291 break;
293 case REF_COMPONENT:
294 dest->u.c = src->u.c;
295 break;
297 case REF_SUBSTRING:
298 dest->u.ss = src->u.ss;
299 dest->u.ss.start = gfc_copy_expr (src->u.ss.start);
300 dest->u.ss.end = gfc_copy_expr (src->u.ss.end);
301 break;
304 dest->next = copy_ref (src->next);
306 return dest;
310 /* Copy a shape array. */
312 mpz_t *
313 gfc_copy_shape (mpz_t * shape, int rank)
315 mpz_t *new_shape;
316 int n;
318 if (shape == NULL)
319 return NULL;
321 new_shape = gfc_get_shape (rank);
323 for (n = 0; n < rank; n++)
324 mpz_init_set (new_shape[n], shape[n]);
326 return new_shape;
330 /* Copy a shape array excluding dimension N, where N is an integer
331 constant expression. Dimensions are numbered in fortran style --
332 starting with ONE.
334 So, if the original shape array contains R elements
335 { s1 ... sN-1 sN sN+1 ... sR-1 sR}
336 the result contains R-1 elements:
337 { s1 ... sN-1 sN+1 ... sR-1}
339 If anything goes wrong -- N is not a constant, its value is out
340 of range -- or anything else, just returns NULL.
343 mpz_t *
344 gfc_copy_shape_excluding (mpz_t * shape, int rank, gfc_expr * dim)
346 mpz_t *new_shape, *s;
347 int i, n;
349 if (shape == NULL
350 || rank <= 1
351 || dim == NULL
352 || dim->expr_type != EXPR_CONSTANT
353 || dim->ts.type != BT_INTEGER)
354 return NULL;
356 n = mpz_get_si (dim->value.integer);
357 n--; /* Convert to zero based index */
358 if (n < 0 && n >= rank)
359 return NULL;
361 s = new_shape = gfc_get_shape (rank-1);
363 for (i = 0; i < rank; i++)
365 if (i == n)
366 continue;
367 mpz_init_set (*s, shape[i]);
368 s++;
371 return new_shape;
374 /* Given an expression pointer, return a copy of the expression. This
375 subroutine is recursive. */
377 gfc_expr *
378 gfc_copy_expr (gfc_expr * p)
380 gfc_expr *q;
381 char *s;
383 if (p == NULL)
384 return NULL;
386 q = gfc_get_expr ();
387 *q = *p;
389 switch (q->expr_type)
391 case EXPR_SUBSTRING:
392 s = gfc_getmem (p->value.character.length + 1);
393 q->value.character.string = s;
395 memcpy (s, p->value.character.string, p->value.character.length + 1);
396 break;
398 case EXPR_CONSTANT:
399 switch (q->ts.type)
401 case BT_INTEGER:
402 mpz_init_set (q->value.integer, p->value.integer);
403 break;
405 case BT_REAL:
406 gfc_set_model_kind (q->ts.kind);
407 mpfr_init (q->value.real);
408 mpfr_set (q->value.real, p->value.real, GFC_RND_MODE);
409 break;
411 case BT_COMPLEX:
412 gfc_set_model_kind (q->ts.kind);
413 mpfr_init (q->value.complex.r);
414 mpfr_init (q->value.complex.i);
415 mpfr_set (q->value.complex.r, p->value.complex.r, GFC_RND_MODE);
416 mpfr_set (q->value.complex.i, p->value.complex.i, GFC_RND_MODE);
417 break;
419 case BT_CHARACTER:
420 s = gfc_getmem (p->value.character.length + 1);
421 q->value.character.string = s;
423 memcpy (s, p->value.character.string,
424 p->value.character.length + 1);
425 break;
427 case BT_LOGICAL:
428 case BT_DERIVED:
429 break; /* Already done */
431 case BT_PROCEDURE:
432 case BT_UNKNOWN:
433 gfc_internal_error ("gfc_copy_expr(): Bad expr node");
434 /* Not reached */
437 break;
439 case EXPR_OP:
440 switch (q->operator)
442 case INTRINSIC_NOT:
443 case INTRINSIC_UPLUS:
444 case INTRINSIC_UMINUS:
445 q->op1 = gfc_copy_expr (p->op1);
446 break;
448 default: /* Binary operators */
449 q->op1 = gfc_copy_expr (p->op1);
450 q->op2 = gfc_copy_expr (p->op2);
451 break;
454 break;
456 case EXPR_FUNCTION:
457 q->value.function.actual =
458 gfc_copy_actual_arglist (p->value.function.actual);
459 break;
461 case EXPR_STRUCTURE:
462 case EXPR_ARRAY:
463 q->value.constructor = gfc_copy_constructor (p->value.constructor);
464 break;
466 case EXPR_VARIABLE:
467 case EXPR_NULL:
468 break;
471 q->shape = gfc_copy_shape (p->shape, p->rank);
473 q->ref = copy_ref (p->ref);
475 return q;
479 /* Return the maximum kind of two expressions. In general, higher
480 kind numbers mean more precision for numeric types. */
483 gfc_kind_max (gfc_expr * e1, gfc_expr * e2)
486 return (e1->ts.kind > e2->ts.kind) ? e1->ts.kind : e2->ts.kind;
490 /* Returns nonzero if the type is numeric, zero otherwise. */
492 static int
493 numeric_type (bt type)
496 return type == BT_COMPLEX || type == BT_REAL || type == BT_INTEGER;
500 /* Returns nonzero if the typespec is a numeric type, zero otherwise. */
503 gfc_numeric_ts (gfc_typespec * ts)
506 return numeric_type (ts->type);
510 /* Returns an expression node that is an integer constant. */
512 gfc_expr *
513 gfc_int_expr (int i)
515 gfc_expr *p;
517 p = gfc_get_expr ();
519 p->expr_type = EXPR_CONSTANT;
520 p->ts.type = BT_INTEGER;
521 p->ts.kind = gfc_default_integer_kind;
523 p->where = gfc_current_locus;
524 mpz_init_set_si (p->value.integer, i);
526 return p;
530 /* Returns an expression node that is a logical constant. */
532 gfc_expr *
533 gfc_logical_expr (int i, locus * where)
535 gfc_expr *p;
537 p = gfc_get_expr ();
539 p->expr_type = EXPR_CONSTANT;
540 p->ts.type = BT_LOGICAL;
541 p->ts.kind = gfc_default_logical_kind;
543 if (where == NULL)
544 where = &gfc_current_locus;
545 p->where = *where;
546 p->value.logical = i;
548 return p;
552 /* Return an expression node with an optional argument list attached.
553 A variable number of gfc_expr pointers are strung together in an
554 argument list with a NULL pointer terminating the list. */
556 gfc_expr *
557 gfc_build_conversion (gfc_expr * e)
559 gfc_expr *p;
561 p = gfc_get_expr ();
562 p->expr_type = EXPR_FUNCTION;
563 p->symtree = NULL;
564 p->value.function.actual = NULL;
566 p->value.function.actual = gfc_get_actual_arglist ();
567 p->value.function.actual->expr = e;
569 return p;
573 /* Given an expression node with some sort of numeric binary
574 expression, insert type conversions required to make the operands
575 have the same type.
577 The exception is that the operands of an exponential don't have to
578 have the same type. If possible, the base is promoted to the type
579 of the exponent. For example, 1**2.3 becomes 1.0**2.3, but
580 1.0**2 stays as it is. */
582 void
583 gfc_type_convert_binary (gfc_expr * e)
585 gfc_expr *op1, *op2;
587 op1 = e->op1;
588 op2 = e->op2;
590 if (op1->ts.type == BT_UNKNOWN || op2->ts.type == BT_UNKNOWN)
592 gfc_clear_ts (&e->ts);
593 return;
596 /* Kind conversions of same type. */
597 if (op1->ts.type == op2->ts.type)
600 if (op1->ts.kind == op2->ts.kind)
602 /* No type conversions. */
603 e->ts = op1->ts;
604 goto done;
607 if (op1->ts.kind > op2->ts.kind)
608 gfc_convert_type (op2, &op1->ts, 2);
609 else
610 gfc_convert_type (op1, &op2->ts, 2);
612 e->ts = op1->ts;
613 goto done;
616 /* Integer combined with real or complex. */
617 if (op2->ts.type == BT_INTEGER)
619 e->ts = op1->ts;
621 /* Special case for ** operator. */
622 if (e->operator == INTRINSIC_POWER)
623 goto done;
625 gfc_convert_type (e->op2, &e->ts, 2);
626 goto done;
629 if (op1->ts.type == BT_INTEGER)
631 e->ts = op2->ts;
632 gfc_convert_type (e->op1, &e->ts, 2);
633 goto done;
636 /* Real combined with complex. */
637 e->ts.type = BT_COMPLEX;
638 if (op1->ts.kind > op2->ts.kind)
639 e->ts.kind = op1->ts.kind;
640 else
641 e->ts.kind = op2->ts.kind;
642 if (op1->ts.type != BT_COMPLEX || op1->ts.kind != e->ts.kind)
643 gfc_convert_type (e->op1, &e->ts, 2);
644 if (op2->ts.type != BT_COMPLEX || op2->ts.kind != e->ts.kind)
645 gfc_convert_type (e->op2, &e->ts, 2);
647 done:
648 return;
652 /* Function to determine if an expression is constant or not. This
653 function expects that the expression has already been simplified. */
656 gfc_is_constant_expr (gfc_expr * e)
658 gfc_constructor *c;
659 gfc_actual_arglist *arg;
660 int rv;
662 if (e == NULL)
663 return 1;
665 switch (e->expr_type)
667 case EXPR_OP:
668 rv = (gfc_is_constant_expr (e->op1)
669 && (e->op2 == NULL
670 || gfc_is_constant_expr (e->op2)));
672 break;
674 case EXPR_VARIABLE:
675 rv = 0;
676 break;
678 case EXPR_FUNCTION:
679 /* Call to intrinsic with at least one argument. */
680 rv = 0;
681 if (e->value.function.isym && e->value.function.actual)
683 for (arg = e->value.function.actual; arg; arg = arg->next)
685 if (!gfc_is_constant_expr (arg->expr))
686 break;
688 if (arg == NULL)
689 rv = 1;
691 break;
693 case EXPR_CONSTANT:
694 case EXPR_NULL:
695 rv = 1;
696 break;
698 case EXPR_SUBSTRING:
699 rv = (gfc_is_constant_expr (e->ref->u.ss.start)
700 && gfc_is_constant_expr (e->ref->u.ss.end));
701 break;
703 case EXPR_STRUCTURE:
704 rv = 0;
705 for (c = e->value.constructor; c; c = c->next)
706 if (!gfc_is_constant_expr (c->expr))
707 break;
709 if (c == NULL)
710 rv = 1;
711 break;
713 case EXPR_ARRAY:
714 rv = gfc_constant_ac (e);
715 break;
717 default:
718 gfc_internal_error ("gfc_is_constant_expr(): Unknown expression type");
721 return rv;
725 /* Try to collapse intrinsic expressions. */
727 static try
728 simplify_intrinsic_op (gfc_expr * p, int type)
730 gfc_expr *op1, *op2, *result;
732 if (p->operator == INTRINSIC_USER)
733 return SUCCESS;
735 op1 = p->op1;
736 op2 = p->op2;
738 if (gfc_simplify_expr (op1, type) == FAILURE)
739 return FAILURE;
740 if (gfc_simplify_expr (op2, type) == FAILURE)
741 return FAILURE;
743 if (!gfc_is_constant_expr (op1)
744 || (op2 != NULL && !gfc_is_constant_expr (op2)))
745 return SUCCESS;
747 /* Rip p apart */
748 p->op1 = NULL;
749 p->op2 = NULL;
751 switch (p->operator)
753 case INTRINSIC_UPLUS:
754 result = gfc_uplus (op1);
755 break;
757 case INTRINSIC_UMINUS:
758 result = gfc_uminus (op1);
759 break;
761 case INTRINSIC_PLUS:
762 result = gfc_add (op1, op2);
763 break;
765 case INTRINSIC_MINUS:
766 result = gfc_subtract (op1, op2);
767 break;
769 case INTRINSIC_TIMES:
770 result = gfc_multiply (op1, op2);
771 break;
773 case INTRINSIC_DIVIDE:
774 result = gfc_divide (op1, op2);
775 break;
777 case INTRINSIC_POWER:
778 result = gfc_power (op1, op2);
779 break;
781 case INTRINSIC_CONCAT:
782 result = gfc_concat (op1, op2);
783 break;
785 case INTRINSIC_EQ:
786 result = gfc_eq (op1, op2);
787 break;
789 case INTRINSIC_NE:
790 result = gfc_ne (op1, op2);
791 break;
793 case INTRINSIC_GT:
794 result = gfc_gt (op1, op2);
795 break;
797 case INTRINSIC_GE:
798 result = gfc_ge (op1, op2);
799 break;
801 case INTRINSIC_LT:
802 result = gfc_lt (op1, op2);
803 break;
805 case INTRINSIC_LE:
806 result = gfc_le (op1, op2);
807 break;
809 case INTRINSIC_NOT:
810 result = gfc_not (op1);
811 break;
813 case INTRINSIC_AND:
814 result = gfc_and (op1, op2);
815 break;
817 case INTRINSIC_OR:
818 result = gfc_or (op1, op2);
819 break;
821 case INTRINSIC_EQV:
822 result = gfc_eqv (op1, op2);
823 break;
825 case INTRINSIC_NEQV:
826 result = gfc_neqv (op1, op2);
827 break;
829 default:
830 gfc_internal_error ("simplify_intrinsic_op(): Bad operator");
833 if (result == NULL)
835 gfc_free_expr (op1);
836 gfc_free_expr (op2);
837 return FAILURE;
840 gfc_replace_expr (p, result);
842 return SUCCESS;
846 /* Subroutine to simplify constructor expressions. Mutually recursive
847 with gfc_simplify_expr(). */
849 static try
850 simplify_constructor (gfc_constructor * c, int type)
853 for (; c; c = c->next)
855 if (c->iterator
856 && (gfc_simplify_expr (c->iterator->start, type) == FAILURE
857 || gfc_simplify_expr (c->iterator->end, type) == FAILURE
858 || gfc_simplify_expr (c->iterator->step, type) == FAILURE))
859 return FAILURE;
861 if (c->expr && gfc_simplify_expr (c->expr, type) == FAILURE)
862 return FAILURE;
865 return SUCCESS;
869 /* Pull a single array element out of an array constructor. */
871 static gfc_constructor *
872 find_array_element (gfc_constructor * cons, gfc_array_ref * ar)
874 unsigned long nelemen;
875 int i;
876 mpz_t delta;
877 mpz_t offset;
879 mpz_init_set_ui (offset, 0);
880 mpz_init (delta);
881 for (i = 0; i < ar->dimen; i++)
883 if (ar->start[i]->expr_type != EXPR_CONSTANT)
885 cons = NULL;
886 break;
888 mpz_sub (delta, ar->start[i]->value.integer,
889 ar->as->lower[i]->value.integer);
890 mpz_add (offset, offset, delta);
893 if (cons)
895 if (mpz_fits_ulong_p (offset))
897 for (nelemen = mpz_get_ui (offset); nelemen > 0; nelemen--)
899 if (cons->iterator)
901 cons = NULL;
902 break;
904 cons = cons->next;
907 else
908 cons = NULL;
911 mpz_clear (delta);
912 mpz_clear (offset);
914 return cons;
918 /* Find a component of a structure constructor. */
920 static gfc_constructor *
921 find_component_ref (gfc_constructor * cons, gfc_ref * ref)
923 gfc_component *comp;
924 gfc_component *pick;
926 comp = ref->u.c.sym->components;
927 pick = ref->u.c.component;
928 while (comp != pick)
930 comp = comp->next;
931 cons = cons->next;
934 return cons;
938 /* Replace an expression with the contents of a constructor, removing
939 the subobject reference in the process. */
941 static void
942 remove_subobject_ref (gfc_expr * p, gfc_constructor * cons)
944 gfc_expr *e;
946 e = cons->expr;
947 cons->expr = NULL;
948 e->ref = p->ref->next;
949 p->ref->next = NULL;
950 gfc_replace_expr (p, e);
954 /* Simplify a subobject reference of a constructor. This occurs when
955 parameter variable values are substituted. */
957 static try
958 simplify_const_ref (gfc_expr * p)
960 gfc_constructor *cons;
962 while (p->ref)
964 switch (p->ref->type)
966 case REF_ARRAY:
967 switch (p->ref->u.ar.type)
969 case AR_ELEMENT:
970 cons = find_array_element (p->value.constructor, &p->ref->u.ar);
971 if (!cons)
972 return SUCCESS;
973 remove_subobject_ref (p, cons);
974 break;
976 case AR_FULL:
977 if (p->ref->next != NULL)
979 /* TODO: Simplify array subobject references. */
980 return SUCCESS;
982 gfc_free_ref_list (p->ref);
983 p->ref = NULL;
984 break;
986 default:
987 /* TODO: Simplify array subsections. */
988 return SUCCESS;
991 break;
993 case REF_COMPONENT:
994 cons = find_component_ref (p->value.constructor, p->ref);
995 remove_subobject_ref (p, cons);
996 break;
998 case REF_SUBSTRING:
999 /* TODO: Constant substrings. */
1000 return SUCCESS;
1004 return SUCCESS;
1008 /* Simplify a chain of references. */
1010 static try
1011 simplify_ref_chain (gfc_ref * ref, int type)
1013 int n;
1015 for (; ref; ref = ref->next)
1017 switch (ref->type)
1019 case REF_ARRAY:
1020 for (n = 0; n < ref->u.ar.dimen; n++)
1022 if (gfc_simplify_expr (ref->u.ar.start[n], type)
1023 == FAILURE)
1024 return FAILURE;
1025 if (gfc_simplify_expr (ref->u.ar.end[n], type)
1026 == FAILURE)
1027 return FAILURE;
1028 if (gfc_simplify_expr (ref->u.ar.stride[n], type)
1029 == FAILURE)
1030 return FAILURE;
1032 break;
1034 case REF_SUBSTRING:
1035 if (gfc_simplify_expr (ref->u.ss.start, type) == FAILURE)
1036 return FAILURE;
1037 if (gfc_simplify_expr (ref->u.ss.end, type) == FAILURE)
1038 return FAILURE;
1039 break;
1041 default:
1042 break;
1045 return SUCCESS;
1049 /* Try to substitute the value of a parameter variable. */
1050 static try
1051 simplify_parameter_variable (gfc_expr * p, int type)
1053 gfc_expr *e;
1054 try t;
1056 e = gfc_copy_expr (p->symtree->n.sym->value);
1057 if (p->ref)
1058 e->ref = copy_ref (p->ref);
1059 t = gfc_simplify_expr (e, type);
1061 /* Only use the simplification if it eliminated all subobject
1062 references. */
1063 if (t == SUCCESS && ! e->ref)
1064 gfc_replace_expr (p, e);
1065 else
1066 gfc_free_expr (e);
1068 return t;
1071 /* Given an expression, simplify it by collapsing constant
1072 expressions. Most simplification takes place when the expression
1073 tree is being constructed. If an intrinsic function is simplified
1074 at some point, we get called again to collapse the result against
1075 other constants.
1077 We work by recursively simplifying expression nodes, simplifying
1078 intrinsic functions where possible, which can lead to further
1079 constant collapsing. If an operator has constant operand(s), we
1080 rip the expression apart, and rebuild it, hoping that it becomes
1081 something simpler.
1083 The expression type is defined for:
1084 0 Basic expression parsing
1085 1 Simplifying array constructors -- will substitute
1086 iterator values.
1087 Returns FAILURE on error, SUCCESS otherwise.
1088 NOTE: Will return SUCCESS even if the expression can not be simplified. */
1091 gfc_simplify_expr (gfc_expr * p, int type)
1093 gfc_actual_arglist *ap;
1095 if (p == NULL)
1096 return SUCCESS;
1098 switch (p->expr_type)
1100 case EXPR_CONSTANT:
1101 case EXPR_NULL:
1102 break;
1104 case EXPR_FUNCTION:
1105 for (ap = p->value.function.actual; ap; ap = ap->next)
1106 if (gfc_simplify_expr (ap->expr, type) == FAILURE)
1107 return FAILURE;
1109 if (p->value.function.isym != NULL
1110 && gfc_intrinsic_func_interface (p, 1) == MATCH_ERROR)
1111 return FAILURE;
1113 break;
1115 case EXPR_SUBSTRING:
1116 if (simplify_ref_chain (p->ref, type) == FAILURE)
1117 return FAILURE;
1119 /* TODO: evaluate constant substrings. */
1120 break;
1122 case EXPR_OP:
1123 if (simplify_intrinsic_op (p, type) == FAILURE)
1124 return FAILURE;
1125 break;
1127 case EXPR_VARIABLE:
1128 /* Only substitute array parameter variables if we are in an
1129 initialization expression, or we want a subsection. */
1130 if (p->symtree->n.sym->attr.flavor == FL_PARAMETER
1131 && (gfc_init_expr || p->ref
1132 || p->symtree->n.sym->value->expr_type != EXPR_ARRAY))
1134 if (simplify_parameter_variable (p, type) == FAILURE)
1135 return FAILURE;
1136 break;
1139 if (type == 1)
1141 gfc_simplify_iterator_var (p);
1144 /* Simplify subcomponent references. */
1145 if (simplify_ref_chain (p->ref, type) == FAILURE)
1146 return FAILURE;
1148 break;
1150 case EXPR_STRUCTURE:
1151 case EXPR_ARRAY:
1152 if (simplify_ref_chain (p->ref, type) == FAILURE)
1153 return FAILURE;
1155 if (simplify_constructor (p->value.constructor, type) == FAILURE)
1156 return FAILURE;
1158 if (p->expr_type == EXPR_ARRAY)
1159 gfc_expand_constructor (p);
1161 if (simplify_const_ref (p) == FAILURE)
1162 return FAILURE;
1164 break;
1167 return SUCCESS;
1171 /* Returns the type of an expression with the exception that iterator
1172 variables are automatically integers no matter what else they may
1173 be declared as. */
1175 static bt
1176 et0 (gfc_expr * e)
1179 if (e->expr_type == EXPR_VARIABLE && gfc_check_iter_variable (e) == SUCCESS)
1180 return BT_INTEGER;
1182 return e->ts.type;
1186 /* Check an intrinsic arithmetic operation to see if it is consistent
1187 with some type of expression. */
1189 static try check_init_expr (gfc_expr *);
1191 static try
1192 check_intrinsic_op (gfc_expr * e, try (*check_function) (gfc_expr *))
1195 if ((*check_function) (e->op1) == FAILURE)
1196 return FAILURE;
1198 switch (e->operator)
1200 case INTRINSIC_UPLUS:
1201 case INTRINSIC_UMINUS:
1202 if (!numeric_type (et0 (e->op1)))
1203 goto not_numeric;
1204 break;
1206 case INTRINSIC_EQ:
1207 case INTRINSIC_NE:
1208 case INTRINSIC_GT:
1209 case INTRINSIC_GE:
1210 case INTRINSIC_LT:
1211 case INTRINSIC_LE:
1212 if ((*check_function) (e->op2) == FAILURE)
1213 return FAILURE;
1215 if (!(et0 (e->op1) == BT_CHARACTER && et0 (e->op2) == BT_CHARACTER)
1216 && !(numeric_type (et0 (e->op1)) && numeric_type (et0 (e->op2))))
1218 gfc_error ("Numeric or CHARACTER operands are required in "
1219 "expression at %L", &e->where);
1220 return FAILURE;
1222 break;
1224 case INTRINSIC_PLUS:
1225 case INTRINSIC_MINUS:
1226 case INTRINSIC_TIMES:
1227 case INTRINSIC_DIVIDE:
1228 case INTRINSIC_POWER:
1229 if ((*check_function) (e->op2) == FAILURE)
1230 return FAILURE;
1232 if (!numeric_type (et0 (e->op1)) || !numeric_type (et0 (e->op2)))
1233 goto not_numeric;
1235 if (e->operator == INTRINSIC_POWER
1236 && check_function == check_init_expr && et0 (e->op2) != BT_INTEGER)
1238 gfc_error ("Exponent at %L must be INTEGER for an initialization "
1239 "expression", &e->op2->where);
1240 return FAILURE;
1243 break;
1245 case INTRINSIC_CONCAT:
1246 if ((*check_function) (e->op2) == FAILURE)
1247 return FAILURE;
1249 if (et0 (e->op1) != BT_CHARACTER || et0 (e->op2) != BT_CHARACTER)
1251 gfc_error ("Concatenation operator in expression at %L "
1252 "must have two CHARACTER operands", &e->op1->where);
1253 return FAILURE;
1256 if (e->op1->ts.kind != e->op2->ts.kind)
1258 gfc_error ("Concat operator at %L must concatenate strings of the "
1259 "same kind", &e->where);
1260 return FAILURE;
1263 break;
1265 case INTRINSIC_NOT:
1266 if (et0 (e->op1) != BT_LOGICAL)
1268 gfc_error (".NOT. operator in expression at %L must have a LOGICAL "
1269 "operand", &e->op1->where);
1270 return FAILURE;
1273 break;
1275 case INTRINSIC_AND:
1276 case INTRINSIC_OR:
1277 case INTRINSIC_EQV:
1278 case INTRINSIC_NEQV:
1279 if ((*check_function) (e->op2) == FAILURE)
1280 return FAILURE;
1282 if (et0 (e->op1) != BT_LOGICAL || et0 (e->op2) != BT_LOGICAL)
1284 gfc_error ("LOGICAL operands are required in expression at %L",
1285 &e->where);
1286 return FAILURE;
1289 break;
1291 default:
1292 gfc_error ("Only intrinsic operators can be used in expression at %L",
1293 &e->where);
1294 return FAILURE;
1297 return SUCCESS;
1299 not_numeric:
1300 gfc_error ("Numeric operands are required in expression at %L", &e->where);
1302 return FAILURE;
1307 /* Certain inquiry functions are specifically allowed to have variable
1308 arguments, which is an exception to the normal requirement that an
1309 initialization function have initialization arguments. We head off
1310 this problem here. */
1312 static try
1313 check_inquiry (gfc_expr * e)
1315 const char *name;
1317 /* FIXME: This should be moved into the intrinsic definitions,
1318 to eliminate this ugly hack. */
1319 static const char * const inquiry_function[] = {
1320 "digits", "epsilon", "huge", "kind", "maxexponent", "minexponent",
1321 "precision", "radix", "range", "tiny", "bit_size", "size", "shape",
1322 "lbound", "ubound", NULL
1325 int i;
1327 name = e->symtree->n.sym->name;
1329 for (i = 0; inquiry_function[i]; i++)
1330 if (strcmp (inquiry_function[i], name) == 0)
1331 break;
1333 if (inquiry_function[i] == NULL)
1334 return FAILURE;
1336 e = e->value.function.actual->expr;
1338 if (e == NULL || e->expr_type != EXPR_VARIABLE)
1339 return FAILURE;
1341 /* At this point we have a numeric inquiry function with a variable
1342 argument. The type of the variable might be undefined, but we
1343 need it now, because the arguments of these functions are allowed
1344 to be undefined. */
1346 if (e->ts.type == BT_UNKNOWN)
1348 if (e->symtree->n.sym->ts.type == BT_UNKNOWN
1349 && gfc_set_default_type (e->symtree->n.sym, 0, gfc_current_ns)
1350 == FAILURE)
1351 return FAILURE;
1353 e->ts = e->symtree->n.sym->ts;
1356 return SUCCESS;
1360 /* Verify that an expression is an initialization expression. A side
1361 effect is that the expression tree is reduced to a single constant
1362 node if all goes well. This would normally happen when the
1363 expression is constructed but function references are assumed to be
1364 intrinsics in the context of initialization expressions. If
1365 FAILURE is returned an error message has been generated. */
1367 static try
1368 check_init_expr (gfc_expr * e)
1370 gfc_actual_arglist *ap;
1371 match m;
1372 try t;
1374 if (e == NULL)
1375 return SUCCESS;
1377 switch (e->expr_type)
1379 case EXPR_OP:
1380 t = check_intrinsic_op (e, check_init_expr);
1381 if (t == SUCCESS)
1382 t = gfc_simplify_expr (e, 0);
1384 break;
1386 case EXPR_FUNCTION:
1387 t = SUCCESS;
1389 if (check_inquiry (e) != SUCCESS)
1391 t = SUCCESS;
1392 for (ap = e->value.function.actual; ap; ap = ap->next)
1393 if (check_init_expr (ap->expr) == FAILURE)
1395 t = FAILURE;
1396 break;
1400 if (t == SUCCESS)
1402 m = gfc_intrinsic_func_interface (e, 0);
1404 if (m == MATCH_NO)
1405 gfc_error ("Function '%s' in initialization expression at %L "
1406 "must be an intrinsic function",
1407 e->symtree->n.sym->name, &e->where);
1409 if (m != MATCH_YES)
1410 t = FAILURE;
1413 break;
1415 case EXPR_VARIABLE:
1416 t = SUCCESS;
1418 if (gfc_check_iter_variable (e) == SUCCESS)
1419 break;
1421 if (e->symtree->n.sym->attr.flavor == FL_PARAMETER)
1423 t = simplify_parameter_variable (e, 0);
1424 break;
1427 gfc_error ("Variable '%s' at %L cannot appear in an initialization "
1428 "expression", e->symtree->n.sym->name, &e->where);
1429 t = FAILURE;
1430 break;
1432 case EXPR_CONSTANT:
1433 case EXPR_NULL:
1434 t = SUCCESS;
1435 break;
1437 case EXPR_SUBSTRING:
1438 t = check_init_expr (e->ref->u.ss.start);
1439 if (t == FAILURE)
1440 break;
1442 t = check_init_expr (e->ref->u.ss.end);
1443 if (t == SUCCESS)
1444 t = gfc_simplify_expr (e, 0);
1446 break;
1448 case EXPR_STRUCTURE:
1449 t = gfc_check_constructor (e, check_init_expr);
1450 break;
1452 case EXPR_ARRAY:
1453 t = gfc_check_constructor (e, check_init_expr);
1454 if (t == FAILURE)
1455 break;
1457 t = gfc_expand_constructor (e);
1458 if (t == FAILURE)
1459 break;
1461 t = gfc_check_constructor_type (e);
1462 break;
1464 default:
1465 gfc_internal_error ("check_init_expr(): Unknown expression type");
1468 return t;
1472 /* Match an initialization expression. We work by first matching an
1473 expression, then reducing it to a constant. */
1475 match
1476 gfc_match_init_expr (gfc_expr ** result)
1478 gfc_expr *expr;
1479 match m;
1480 try t;
1482 m = gfc_match_expr (&expr);
1483 if (m != MATCH_YES)
1484 return m;
1486 gfc_init_expr = 1;
1487 t = gfc_resolve_expr (expr);
1488 if (t == SUCCESS)
1489 t = check_init_expr (expr);
1490 gfc_init_expr = 0;
1492 if (t == FAILURE)
1494 gfc_free_expr (expr);
1495 return MATCH_ERROR;
1498 if (expr->expr_type == EXPR_ARRAY
1499 && (gfc_check_constructor_type (expr) == FAILURE
1500 || gfc_expand_constructor (expr) == FAILURE))
1502 gfc_free_expr (expr);
1503 return MATCH_ERROR;
1506 if (!gfc_is_constant_expr (expr))
1507 gfc_internal_error ("Initialization expression didn't reduce %C");
1509 *result = expr;
1511 return MATCH_YES;
1516 static try check_restricted (gfc_expr *);
1518 /* Given an actual argument list, test to see that each argument is a
1519 restricted expression and optionally if the expression type is
1520 integer or character. */
1522 static try
1523 restricted_args (gfc_actual_arglist * a)
1525 for (; a; a = a->next)
1527 if (check_restricted (a->expr) == FAILURE)
1528 return FAILURE;
1531 return SUCCESS;
1535 /************* Restricted/specification expressions *************/
1538 /* Make sure a non-intrinsic function is a specification function. */
1540 static try
1541 external_spec_function (gfc_expr * e)
1543 gfc_symbol *f;
1545 f = e->value.function.esym;
1547 if (f->attr.proc == PROC_ST_FUNCTION)
1549 gfc_error ("Specification function '%s' at %L cannot be a statement "
1550 "function", f->name, &e->where);
1551 return FAILURE;
1554 if (f->attr.proc == PROC_INTERNAL)
1556 gfc_error ("Specification function '%s' at %L cannot be an internal "
1557 "function", f->name, &e->where);
1558 return FAILURE;
1561 if (!f->attr.pure)
1563 gfc_error ("Specification function '%s' at %L must be PURE", f->name,
1564 &e->where);
1565 return FAILURE;
1568 if (f->attr.recursive)
1570 gfc_error ("Specification function '%s' at %L cannot be RECURSIVE",
1571 f->name, &e->where);
1572 return FAILURE;
1575 return restricted_args (e->value.function.actual);
1579 /* Check to see that a function reference to an intrinsic is a
1580 restricted expression. */
1582 static try
1583 restricted_intrinsic (gfc_expr * e)
1585 /* TODO: Check constraints on inquiry functions. 7.1.6.2 (7). */
1586 if (check_inquiry (e) == SUCCESS)
1587 return SUCCESS;
1589 return restricted_args (e->value.function.actual);
1593 /* Verify that an expression is a restricted expression. Like its
1594 cousin check_init_expr(), an error message is generated if we
1595 return FAILURE. */
1597 static try
1598 check_restricted (gfc_expr * e)
1600 gfc_symbol *sym;
1601 try t;
1603 if (e == NULL)
1604 return SUCCESS;
1606 switch (e->expr_type)
1608 case EXPR_OP:
1609 t = check_intrinsic_op (e, check_restricted);
1610 if (t == SUCCESS)
1611 t = gfc_simplify_expr (e, 0);
1613 break;
1615 case EXPR_FUNCTION:
1616 t = e->value.function.esym ?
1617 external_spec_function (e) : restricted_intrinsic (e);
1619 break;
1621 case EXPR_VARIABLE:
1622 sym = e->symtree->n.sym;
1623 t = FAILURE;
1625 if (sym->attr.optional)
1627 gfc_error ("Dummy argument '%s' at %L cannot be OPTIONAL",
1628 sym->name, &e->where);
1629 break;
1632 if (sym->attr.intent == INTENT_OUT)
1634 gfc_error ("Dummy argument '%s' at %L cannot be INTENT(OUT)",
1635 sym->name, &e->where);
1636 break;
1639 if (sym->attr.in_common
1640 || sym->attr.use_assoc
1641 || sym->attr.dummy
1642 || sym->ns != gfc_current_ns
1643 || (sym->ns->proc_name != NULL
1644 && sym->ns->proc_name->attr.flavor == FL_MODULE))
1646 t = SUCCESS;
1647 break;
1650 gfc_error ("Variable '%s' cannot appear in the expression at %L",
1651 sym->name, &e->where);
1653 break;
1655 case EXPR_NULL:
1656 case EXPR_CONSTANT:
1657 t = SUCCESS;
1658 break;
1660 case EXPR_SUBSTRING:
1661 t = gfc_specification_expr (e->ref->u.ss.start);
1662 if (t == FAILURE)
1663 break;
1665 t = gfc_specification_expr (e->ref->u.ss.end);
1666 if (t == SUCCESS)
1667 t = gfc_simplify_expr (e, 0);
1669 break;
1671 case EXPR_STRUCTURE:
1672 t = gfc_check_constructor (e, check_restricted);
1673 break;
1675 case EXPR_ARRAY:
1676 t = gfc_check_constructor (e, check_restricted);
1677 break;
1679 default:
1680 gfc_internal_error ("check_restricted(): Unknown expression type");
1683 return t;
1687 /* Check to see that an expression is a specification expression. If
1688 we return FAILURE, an error has been generated. */
1691 gfc_specification_expr (gfc_expr * e)
1694 if (e->ts.type != BT_INTEGER)
1696 gfc_error ("Expression at %L must be of INTEGER type", &e->where);
1697 return FAILURE;
1700 if (e->rank != 0)
1702 gfc_error ("Expression at %L must be scalar", &e->where);
1703 return FAILURE;
1706 if (gfc_simplify_expr (e, 0) == FAILURE)
1707 return FAILURE;
1709 return check_restricted (e);
1713 /************** Expression conformance checks. *************/
1715 /* Given two expressions, make sure that the arrays are conformable. */
1718 gfc_check_conformance (const char *optype, gfc_expr * op1, gfc_expr * op2)
1720 int op1_flag, op2_flag, d;
1721 mpz_t op1_size, op2_size;
1722 try t;
1724 if (op1->rank == 0 || op2->rank == 0)
1725 return SUCCESS;
1727 if (op1->rank != op2->rank)
1729 gfc_error ("Incompatible ranks in %s at %L", optype, &op1->where);
1730 return FAILURE;
1733 t = SUCCESS;
1735 for (d = 0; d < op1->rank; d++)
1737 op1_flag = gfc_array_dimen_size (op1, d, &op1_size) == SUCCESS;
1738 op2_flag = gfc_array_dimen_size (op2, d, &op2_size) == SUCCESS;
1740 if (op1_flag && op2_flag && mpz_cmp (op1_size, op2_size) != 0)
1742 gfc_error ("%s at %L has different shape on dimension %d (%d/%d)",
1743 optype, &op1->where, d + 1, (int) mpz_get_si (op1_size),
1744 (int) mpz_get_si (op2_size));
1746 t = FAILURE;
1749 if (op1_flag)
1750 mpz_clear (op1_size);
1751 if (op2_flag)
1752 mpz_clear (op2_size);
1754 if (t == FAILURE)
1755 return FAILURE;
1758 return SUCCESS;
1762 /* Given an assignable expression and an arbitrary expression, make
1763 sure that the assignment can take place. */
1766 gfc_check_assign (gfc_expr * lvalue, gfc_expr * rvalue, int conform)
1768 gfc_symbol *sym;
1770 sym = lvalue->symtree->n.sym;
1772 if (sym->attr.intent == INTENT_IN)
1774 gfc_error ("Can't assign to INTENT(IN) variable '%s' at %L",
1775 sym->name, &lvalue->where);
1776 return FAILURE;
1779 if (rvalue->rank != 0 && lvalue->rank != rvalue->rank)
1781 gfc_error ("Incompatible ranks %d and %d in assignment at %L",
1782 lvalue->rank, rvalue->rank, &lvalue->where);
1783 return FAILURE;
1786 if (lvalue->ts.type == BT_UNKNOWN)
1788 gfc_error ("Variable type is UNKNOWN in assignment at %L",
1789 &lvalue->where);
1790 return FAILURE;
1793 /* This is a guaranteed segfault and possibly a typo: p = NULL()
1794 instead of p => NULL() */
1795 if (rvalue->expr_type == EXPR_NULL)
1796 gfc_warning ("NULL appears on right-hand side in assignment at %L",
1797 &rvalue->where);
1799 /* This is possibly a typo: x = f() instead of x => f() */
1800 if (gfc_option.warn_surprising
1801 && rvalue->expr_type == EXPR_FUNCTION
1802 && rvalue->symtree->n.sym->attr.pointer)
1803 gfc_warning ("POINTER valued function appears on right-hand side of "
1804 "assignment at %L", &rvalue->where);
1806 /* Check size of array assignments. */
1807 if (lvalue->rank != 0 && rvalue->rank != 0
1808 && gfc_check_conformance ("Array assignment", lvalue, rvalue) != SUCCESS)
1809 return FAILURE;
1811 if (gfc_compare_types (&lvalue->ts, &rvalue->ts))
1812 return SUCCESS;
1814 if (!conform)
1816 if (gfc_numeric_ts (&lvalue->ts) && gfc_numeric_ts (&rvalue->ts))
1817 return SUCCESS;
1819 if (lvalue->ts.type == BT_LOGICAL && rvalue->ts.type == BT_LOGICAL)
1820 return SUCCESS;
1822 gfc_error ("Incompatible types in assignment at %L, %s to %s",
1823 &rvalue->where, gfc_typename (&rvalue->ts),
1824 gfc_typename (&lvalue->ts));
1826 return FAILURE;
1829 return gfc_convert_type (rvalue, &lvalue->ts, 1);
1833 /* Check that a pointer assignment is OK. We first check lvalue, and
1834 we only check rvalue if it's not an assignment to NULL() or a
1835 NULLIFY statement. */
1838 gfc_check_pointer_assign (gfc_expr * lvalue, gfc_expr * rvalue)
1840 symbol_attribute attr;
1841 int is_pure;
1843 if (lvalue->symtree->n.sym->ts.type == BT_UNKNOWN)
1845 gfc_error ("Pointer assignment target is not a POINTER at %L",
1846 &lvalue->where);
1847 return FAILURE;
1850 attr = gfc_variable_attr (lvalue, NULL);
1851 if (!attr.pointer)
1853 gfc_error ("Pointer assignment to non-POINTER at %L", &lvalue->where);
1854 return FAILURE;
1857 is_pure = gfc_pure (NULL);
1859 if (is_pure && gfc_impure_variable (lvalue->symtree->n.sym))
1861 gfc_error ("Bad pointer object in PURE procedure at %L",
1862 &lvalue->where);
1863 return FAILURE;
1866 /* If rvalue is a NULL() or NULLIFY, we're done. Otherwise the type,
1867 kind, etc for lvalue and rvalue must match, and rvalue must be a
1868 pure variable if we're in a pure function. */
1869 if (rvalue->expr_type == EXPR_NULL)
1870 return SUCCESS;
1872 if (!gfc_compare_types (&lvalue->ts, &rvalue->ts))
1874 gfc_error ("Different types in pointer assignment at %L",
1875 &lvalue->where);
1876 return FAILURE;
1879 if (lvalue->ts.kind != rvalue->ts.kind)
1881 gfc_error ("Different kind type parameters in pointer "
1882 "assignment at %L", &lvalue->where);
1883 return FAILURE;
1886 attr = gfc_expr_attr (rvalue);
1887 if (!attr.target && !attr.pointer)
1889 gfc_error ("Pointer assignment target is neither TARGET "
1890 "nor POINTER at %L", &rvalue->where);
1891 return FAILURE;
1894 if (is_pure && gfc_impure_variable (rvalue->symtree->n.sym))
1896 gfc_error ("Bad target in pointer assignment in PURE "
1897 "procedure at %L", &rvalue->where);
1900 if (lvalue->rank != rvalue->rank)
1902 gfc_error ("Unequal ranks %d and %d in pointer assignment at %L",
1903 lvalue->rank, rvalue->rank, &rvalue->where);
1904 return FAILURE;
1907 return SUCCESS;
1911 /* Relative of gfc_check_assign() except that the lvalue is a single
1912 symbol. Used for initialization assignments. */
1915 gfc_check_assign_symbol (gfc_symbol * sym, gfc_expr * rvalue)
1917 gfc_expr lvalue;
1918 try r;
1920 memset (&lvalue, '\0', sizeof (gfc_expr));
1922 lvalue.expr_type = EXPR_VARIABLE;
1923 lvalue.ts = sym->ts;
1924 if (sym->as)
1925 lvalue.rank = sym->as->rank;
1926 lvalue.symtree = (gfc_symtree *)gfc_getmem (sizeof (gfc_symtree));
1927 lvalue.symtree->n.sym = sym;
1928 lvalue.where = sym->declared_at;
1930 if (sym->attr.pointer)
1931 r = gfc_check_pointer_assign (&lvalue, rvalue);
1932 else
1933 r = gfc_check_assign (&lvalue, rvalue, 1);
1935 gfc_free (lvalue.symtree);
1937 return r;
1941 /* Get an expression for a default initializer. */
1943 gfc_expr *
1944 gfc_default_initializer (gfc_typespec *ts)
1946 gfc_constructor *tail;
1947 gfc_expr *init;
1948 gfc_component *c;
1950 init = NULL;
1952 /* See if we have a default initializer. */
1953 for (c = ts->derived->components; c; c = c->next)
1955 if (c->initializer && init == NULL)
1956 init = gfc_get_expr ();
1959 if (init == NULL)
1960 return NULL;
1962 /* Build the constructor. */
1963 init->expr_type = EXPR_STRUCTURE;
1964 init->ts = *ts;
1965 init->where = ts->derived->declared_at;
1966 tail = NULL;
1967 for (c = ts->derived->components; c; c = c->next)
1969 if (tail == NULL)
1970 init->value.constructor = tail = gfc_get_constructor ();
1971 else
1973 tail->next = gfc_get_constructor ();
1974 tail = tail->next;
1977 if (c->initializer)
1978 tail->expr = gfc_copy_expr (c->initializer);
1980 return init;
1984 /* Given a symbol, create an expression node with that symbol as a
1985 variable. If the symbol is array valued, setup a reference of the
1986 whole array. */
1988 gfc_expr *
1989 gfc_get_variable_expr (gfc_symtree * var)
1991 gfc_expr *e;
1993 e = gfc_get_expr ();
1994 e->expr_type = EXPR_VARIABLE;
1995 e->symtree = var;
1996 e->ts = var->n.sym->ts;
1998 if (var->n.sym->as != NULL)
2000 e->rank = var->n.sym->as->rank;
2001 e->ref = gfc_get_ref ();
2002 e->ref->type = REF_ARRAY;
2003 e->ref->u.ar.type = AR_FULL;
2006 return e;