OSDN Git Service

2005-06-01 Paul Thomas <pault@gcc.gnu.org>
[pf3gnuchains/gcc-fork.git] / gcc / fortran / expr.c
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
5
6 This file is part of GCC.
7
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.
12
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.
17
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.  */
22
23 #include "config.h"
24 #include "system.h"
25 #include "gfortran.h"
26 #include "arith.h"
27 #include "match.h"
28
29 /* Get a new expr node.  */
30
31 gfc_expr *
32 gfc_get_expr (void)
33 {
34   gfc_expr *e;
35
36   e = gfc_getmem (sizeof (gfc_expr));
37
38   gfc_clear_ts (&e->ts);
39   e->shape = NULL;
40   e->ref = NULL;
41   e->symtree = NULL;
42
43   return e;
44 }
45
46
47 /* Free an argument list and everything below it.  */
48
49 void
50 gfc_free_actual_arglist (gfc_actual_arglist * a1)
51 {
52   gfc_actual_arglist *a2;
53
54   while (a1)
55     {
56       a2 = a1->next;
57       gfc_free_expr (a1->expr);
58       gfc_free (a1);
59       a1 = a2;
60     }
61 }
62
63
64 /* Copy an arglist structure and all of the arguments.  */
65
66 gfc_actual_arglist *
67 gfc_copy_actual_arglist (gfc_actual_arglist * p)
68 {
69   gfc_actual_arglist *head, *tail, *new;
70
71   head = tail = NULL;
72
73   for (; p; p = p->next)
74     {
75       new = gfc_get_actual_arglist ();
76       *new = *p;
77
78       new->expr = gfc_copy_expr (p->expr);
79       new->next = NULL;
80
81       if (head == NULL)
82         head = new;
83       else
84         tail->next = new;
85
86       tail = new;
87     }
88
89   return head;
90 }
91
92
93 /* Free a list of reference structures.  */
94
95 void
96 gfc_free_ref_list (gfc_ref * p)
97 {
98   gfc_ref *q;
99   int i;
100
101   for (; p; p = q)
102     {
103       q = p->next;
104
105       switch (p->type)
106         {
107         case REF_ARRAY:
108           for (i = 0; i < GFC_MAX_DIMENSIONS; i++)
109             {
110               gfc_free_expr (p->u.ar.start[i]);
111               gfc_free_expr (p->u.ar.end[i]);
112               gfc_free_expr (p->u.ar.stride[i]);
113             }
114
115           break;
116
117         case REF_SUBSTRING:
118           gfc_free_expr (p->u.ss.start);
119           gfc_free_expr (p->u.ss.end);
120           break;
121
122         case REF_COMPONENT:
123           break;
124         }
125
126       gfc_free (p);
127     }
128 }
129
130
131 /* Workhorse function for gfc_free_expr() that frees everything
132    beneath an expression node, but not the node itself.  This is
133    useful when we want to simplify a node and replace it with
134    something else or the expression node belongs to another structure.  */
135
136 static void
137 free_expr0 (gfc_expr * e)
138 {
139   int n;
140
141   switch (e->expr_type)
142     {
143     case EXPR_CONSTANT:
144       switch (e->ts.type)
145         {
146         case BT_INTEGER:
147           mpz_clear (e->value.integer);
148           break;
149
150         case BT_REAL:
151           mpfr_clear (e->value.real);
152           break;
153
154         case BT_CHARACTER:
155           gfc_free (e->value.character.string);
156           break;
157
158         case BT_COMPLEX:
159           mpfr_clear (e->value.complex.r);
160           mpfr_clear (e->value.complex.i);
161           break;
162
163         default:
164           break;
165         }
166
167       break;
168
169     case EXPR_OP:
170       if (e->value.op.op1 != NULL)
171         gfc_free_expr (e->value.op.op1);
172       if (e->value.op.op2 != NULL)
173         gfc_free_expr (e->value.op.op2);
174       break;
175
176     case EXPR_FUNCTION:
177       gfc_free_actual_arglist (e->value.function.actual);
178       break;
179
180     case EXPR_VARIABLE:
181       break;
182
183     case EXPR_ARRAY:
184     case EXPR_STRUCTURE:
185       gfc_free_constructor (e->value.constructor);
186       break;
187
188     case EXPR_SUBSTRING:
189       gfc_free (e->value.character.string);
190       break;
191
192     case EXPR_NULL:
193       break;
194
195     default:
196       gfc_internal_error ("free_expr0(): Bad expr type");
197     }
198
199   /* Free a shape array.  */
200   if (e->shape != NULL)
201     {
202       for (n = 0; n < e->rank; n++)
203         mpz_clear (e->shape[n]);
204
205       gfc_free (e->shape);
206     }
207
208   gfc_free_ref_list (e->ref);
209
210   memset (e, '\0', sizeof (gfc_expr));
211 }
212
213
214 /* Free an expression node and everything beneath it.  */
215
216 void
217 gfc_free_expr (gfc_expr * e)
218 {
219
220   if (e == NULL)
221     return;
222
223   free_expr0 (e);
224   gfc_free (e);
225 }
226
227
228 /* Graft the *src expression onto the *dest subexpression.  */
229
230 void
231 gfc_replace_expr (gfc_expr * dest, gfc_expr * src)
232 {
233
234   free_expr0 (dest);
235   *dest = *src;
236
237   gfc_free (src);
238 }
239
240
241 /* Try to extract an integer constant from the passed expression node.
242    Returns an error message or NULL if the result is set.  It is
243    tempting to generate an error and return SUCCESS or FAILURE, but
244    failure is OK for some callers.  */
245
246 const char *
247 gfc_extract_int (gfc_expr * expr, int *result)
248 {
249
250   if (expr->expr_type != EXPR_CONSTANT)
251     return "Constant expression required at %C";
252
253   if (expr->ts.type != BT_INTEGER)
254     return "Integer expression required at %C";
255
256   if ((mpz_cmp_si (expr->value.integer, INT_MAX) > 0)
257       || (mpz_cmp_si (expr->value.integer, INT_MIN) < 0))
258     {
259       return "Integer value too large in expression at %C";
260     }
261
262   *result = (int) mpz_get_si (expr->value.integer);
263
264   return NULL;
265 }
266
267
268 /* Recursively copy a list of reference structures.  */
269
270 static gfc_ref *
271 copy_ref (gfc_ref * src)
272 {
273   gfc_array_ref *ar;
274   gfc_ref *dest;
275
276   if (src == NULL)
277     return NULL;
278
279   dest = gfc_get_ref ();
280   dest->type = src->type;
281
282   switch (src->type)
283     {
284     case REF_ARRAY:
285       ar = gfc_copy_array_ref (&src->u.ar);
286       dest->u.ar = *ar;
287       gfc_free (ar);
288       break;
289
290     case REF_COMPONENT:
291       dest->u.c = src->u.c;
292       break;
293
294     case REF_SUBSTRING:
295       dest->u.ss = src->u.ss;
296       dest->u.ss.start = gfc_copy_expr (src->u.ss.start);
297       dest->u.ss.end = gfc_copy_expr (src->u.ss.end);
298       break;
299     }
300
301   dest->next = copy_ref (src->next);
302
303   return dest;
304 }
305
306
307 /* Copy a shape array.  */
308
309 mpz_t *
310 gfc_copy_shape (mpz_t * shape, int rank)
311 {
312   mpz_t *new_shape;
313   int n;
314
315   if (shape == NULL)
316     return NULL;
317
318   new_shape = gfc_get_shape (rank);
319
320   for (n = 0; n < rank; n++)
321     mpz_init_set (new_shape[n], shape[n]);
322
323   return new_shape;
324 }
325
326
327 /* Copy a shape array excluding dimension N, where N is an integer
328    constant expression.  Dimensions are numbered in fortran style --
329    starting with ONE.
330
331    So, if the original shape array contains R elements
332       { s1 ... sN-1  sN  sN+1 ... sR-1 sR}
333    the result contains R-1 elements:
334       { s1 ... sN-1  sN+1    ...  sR-1}
335
336    If anything goes wrong -- N is not a constant, its value is out
337    of range -- or anything else, just returns NULL.
338 */
339
340 mpz_t *
341 gfc_copy_shape_excluding (mpz_t * shape, int rank, gfc_expr * dim)
342 {
343   mpz_t *new_shape, *s;
344   int i, n;
345
346   if (shape == NULL 
347       || rank <= 1
348       || dim == NULL
349       || dim->expr_type != EXPR_CONSTANT 
350       || dim->ts.type != BT_INTEGER)
351     return NULL;
352
353   n = mpz_get_si (dim->value.integer);
354   n--; /* Convert to zero based index */
355   if (n < 0 || n >= rank)
356     return NULL;
357
358   s = new_shape = gfc_get_shape (rank-1);
359
360   for (i = 0; i < rank; i++)
361     {
362       if (i == n)
363         continue;
364       mpz_init_set (*s, shape[i]);
365       s++;
366     }
367
368   return new_shape;
369 }
370
371 /* Given an expression pointer, return a copy of the expression.  This
372    subroutine is recursive.  */
373
374 gfc_expr *
375 gfc_copy_expr (gfc_expr * p)
376 {
377   gfc_expr *q;
378   char *s;
379
380   if (p == NULL)
381     return NULL;
382
383   q = gfc_get_expr ();
384   *q = *p;
385
386   switch (q->expr_type)
387     {
388     case EXPR_SUBSTRING:
389       s = gfc_getmem (p->value.character.length + 1);
390       q->value.character.string = s;
391
392       memcpy (s, p->value.character.string, p->value.character.length + 1);
393       break;
394
395     case EXPR_CONSTANT:
396       switch (q->ts.type)
397         {
398         case BT_INTEGER:
399           mpz_init_set (q->value.integer, p->value.integer);
400           break;
401
402         case BT_REAL:
403           gfc_set_model_kind (q->ts.kind);
404           mpfr_init (q->value.real);
405           mpfr_set (q->value.real, p->value.real, GFC_RND_MODE);
406           break;
407
408         case BT_COMPLEX:
409           gfc_set_model_kind (q->ts.kind);
410           mpfr_init (q->value.complex.r);
411           mpfr_init (q->value.complex.i);
412           mpfr_set (q->value.complex.r, p->value.complex.r, GFC_RND_MODE);
413           mpfr_set (q->value.complex.i, p->value.complex.i, GFC_RND_MODE);
414           break;
415
416         case BT_CHARACTER:
417           s = gfc_getmem (p->value.character.length + 1);
418           q->value.character.string = s;
419
420           memcpy (s, p->value.character.string,
421                   p->value.character.length + 1);
422           break;
423
424         case BT_LOGICAL:
425         case BT_DERIVED:
426           break;                /* Already done */
427
428         case BT_PROCEDURE:
429         case BT_UNKNOWN:
430           gfc_internal_error ("gfc_copy_expr(): Bad expr node");
431           /* Not reached */
432         }
433
434       break;
435
436     case EXPR_OP:
437       switch (q->value.op.operator)
438         {
439         case INTRINSIC_NOT:
440         case INTRINSIC_UPLUS:
441         case INTRINSIC_UMINUS:
442           q->value.op.op1 = gfc_copy_expr (p->value.op.op1);
443           break;
444
445         default:                /* Binary operators */
446           q->value.op.op1 = gfc_copy_expr (p->value.op.op1);
447           q->value.op.op2 = gfc_copy_expr (p->value.op.op2);
448           break;
449         }
450
451       break;
452
453     case EXPR_FUNCTION:
454       q->value.function.actual =
455         gfc_copy_actual_arglist (p->value.function.actual);
456       break;
457
458     case EXPR_STRUCTURE:
459     case EXPR_ARRAY:
460       q->value.constructor = gfc_copy_constructor (p->value.constructor);
461       break;
462
463     case EXPR_VARIABLE:
464     case EXPR_NULL:
465       break;
466     }
467
468   q->shape = gfc_copy_shape (p->shape, p->rank);
469
470   q->ref = copy_ref (p->ref);
471
472   return q;
473 }
474
475
476 /* Return the maximum kind of two expressions.  In general, higher
477    kind numbers mean more precision for numeric types.  */
478
479 int
480 gfc_kind_max (gfc_expr * e1, gfc_expr * e2)
481 {
482
483   return (e1->ts.kind > e2->ts.kind) ? e1->ts.kind : e2->ts.kind;
484 }
485
486
487 /* Returns nonzero if the type is numeric, zero otherwise.  */
488
489 static int
490 numeric_type (bt type)
491 {
492
493   return type == BT_COMPLEX || type == BT_REAL || type == BT_INTEGER;
494 }
495
496
497 /* Returns nonzero if the typespec is a numeric type, zero otherwise.  */
498
499 int
500 gfc_numeric_ts (gfc_typespec * ts)
501 {
502
503   return numeric_type (ts->type);
504 }
505
506
507 /* Returns an expression node that is an integer constant.  */
508
509 gfc_expr *
510 gfc_int_expr (int i)
511 {
512   gfc_expr *p;
513
514   p = gfc_get_expr ();
515
516   p->expr_type = EXPR_CONSTANT;
517   p->ts.type = BT_INTEGER;
518   p->ts.kind = gfc_default_integer_kind;
519
520   p->where = gfc_current_locus;
521   mpz_init_set_si (p->value.integer, i);
522
523   return p;
524 }
525
526
527 /* Returns an expression node that is a logical constant.  */
528
529 gfc_expr *
530 gfc_logical_expr (int i, locus * where)
531 {
532   gfc_expr *p;
533
534   p = gfc_get_expr ();
535
536   p->expr_type = EXPR_CONSTANT;
537   p->ts.type = BT_LOGICAL;
538   p->ts.kind = gfc_default_logical_kind;
539
540   if (where == NULL)
541     where = &gfc_current_locus;
542   p->where = *where;
543   p->value.logical = i;
544
545   return p;
546 }
547
548
549 /* Return an expression node with an optional argument list attached.
550    A variable number of gfc_expr pointers are strung together in an
551    argument list with a NULL pointer terminating the list.  */
552
553 gfc_expr *
554 gfc_build_conversion (gfc_expr * e)
555 {
556   gfc_expr *p;
557
558   p = gfc_get_expr ();
559   p->expr_type = EXPR_FUNCTION;
560   p->symtree = NULL;
561   p->value.function.actual = NULL;
562
563   p->value.function.actual = gfc_get_actual_arglist ();
564   p->value.function.actual->expr = e;
565
566   return p;
567 }
568
569
570 /* Given an expression node with some sort of numeric binary
571    expression, insert type conversions required to make the operands
572    have the same type.
573
574    The exception is that the operands of an exponential don't have to
575    have the same type.  If possible, the base is promoted to the type
576    of the exponent.  For example, 1**2.3 becomes 1.0**2.3, but
577    1.0**2 stays as it is.  */
578
579 void
580 gfc_type_convert_binary (gfc_expr * e)
581 {
582   gfc_expr *op1, *op2;
583
584   op1 = e->value.op.op1;
585   op2 = e->value.op.op2;
586
587   if (op1->ts.type == BT_UNKNOWN || op2->ts.type == BT_UNKNOWN)
588     {
589       gfc_clear_ts (&e->ts);
590       return;
591     }
592
593   /* Kind conversions of same type.  */
594   if (op1->ts.type == op2->ts.type)
595     {
596
597       if (op1->ts.kind == op2->ts.kind)
598         {
599           /* No type conversions.  */
600           e->ts = op1->ts;
601           goto done;
602         }
603
604       if (op1->ts.kind > op2->ts.kind)
605         gfc_convert_type (op2, &op1->ts, 2);
606       else
607         gfc_convert_type (op1, &op2->ts, 2);
608
609       e->ts = op1->ts;
610       goto done;
611     }
612
613   /* Integer combined with real or complex.  */
614   if (op2->ts.type == BT_INTEGER)
615     {
616       e->ts = op1->ts;
617
618       /* Special case for ** operator.  */
619       if (e->value.op.operator == INTRINSIC_POWER)
620         goto done;
621
622       gfc_convert_type (e->value.op.op2, &e->ts, 2);
623       goto done;
624     }
625
626   if (op1->ts.type == BT_INTEGER)
627     {
628       e->ts = op2->ts;
629       gfc_convert_type (e->value.op.op1, &e->ts, 2);
630       goto done;
631     }
632
633   /* Real combined with complex.  */
634   e->ts.type = BT_COMPLEX;
635   if (op1->ts.kind > op2->ts.kind)
636     e->ts.kind = op1->ts.kind;
637   else
638     e->ts.kind = op2->ts.kind;
639   if (op1->ts.type != BT_COMPLEX || op1->ts.kind != e->ts.kind)
640     gfc_convert_type (e->value.op.op1, &e->ts, 2);
641   if (op2->ts.type != BT_COMPLEX || op2->ts.kind != e->ts.kind)
642     gfc_convert_type (e->value.op.op2, &e->ts, 2);
643
644 done:
645   return;
646 }
647
648
649 /* Function to determine if an expression is constant or not.  This
650    function expects that the expression has already been simplified.  */
651
652 int
653 gfc_is_constant_expr (gfc_expr * e)
654 {
655   gfc_constructor *c;
656   gfc_actual_arglist *arg;
657   int rv;
658
659   if (e == NULL)
660     return 1;
661
662   switch (e->expr_type)
663     {
664     case EXPR_OP:
665       rv = (gfc_is_constant_expr (e->value.op.op1)
666             && (e->value.op.op2 == NULL
667                 || gfc_is_constant_expr (e->value.op.op2)));
668
669       break;
670
671     case EXPR_VARIABLE:
672       rv = 0;
673       break;
674
675     case EXPR_FUNCTION:
676       /* Call to intrinsic with at least one argument.  */
677       rv = 0;
678       if (e->value.function.isym && e->value.function.actual)
679         {
680           for (arg = e->value.function.actual; arg; arg = arg->next)
681             {
682               if (!gfc_is_constant_expr (arg->expr))
683                 break;
684             }
685           if (arg == NULL)
686             rv = 1;
687         }
688       break;
689
690     case EXPR_CONSTANT:
691     case EXPR_NULL:
692       rv = 1;
693       break;
694
695     case EXPR_SUBSTRING:
696       rv = (gfc_is_constant_expr (e->ref->u.ss.start)
697             && gfc_is_constant_expr (e->ref->u.ss.end));
698       break;
699
700     case EXPR_STRUCTURE:
701       rv = 0;
702       for (c = e->value.constructor; c; c = c->next)
703         if (!gfc_is_constant_expr (c->expr))
704           break;
705
706       if (c == NULL)
707         rv = 1;
708       break;
709
710     case EXPR_ARRAY:
711       rv = gfc_constant_ac (e);
712       break;
713
714     default:
715       gfc_internal_error ("gfc_is_constant_expr(): Unknown expression type");
716     }
717
718   return rv;
719 }
720
721
722 /* Try to collapse intrinsic expressions.  */
723
724 static try
725 simplify_intrinsic_op (gfc_expr * p, int type)
726 {
727   gfc_expr *op1, *op2, *result;
728
729   if (p->value.op.operator == INTRINSIC_USER)
730     return SUCCESS;
731
732   op1 = p->value.op.op1;
733   op2 = p->value.op.op2;
734
735   if (gfc_simplify_expr (op1, type) == FAILURE)
736     return FAILURE;
737   if (gfc_simplify_expr (op2, type) == FAILURE)
738     return FAILURE;
739
740   if (!gfc_is_constant_expr (op1)
741       || (op2 != NULL && !gfc_is_constant_expr (op2)))
742     return SUCCESS;
743
744   /* Rip p apart */
745   p->value.op.op1 = NULL;
746   p->value.op.op2 = NULL;
747
748   switch (p->value.op.operator)
749     {
750     case INTRINSIC_UPLUS:
751       result = gfc_uplus (op1);
752       break;
753
754     case INTRINSIC_UMINUS:
755       result = gfc_uminus (op1);
756       break;
757
758     case INTRINSIC_PLUS:
759       result = gfc_add (op1, op2);
760       break;
761
762     case INTRINSIC_MINUS:
763       result = gfc_subtract (op1, op2);
764       break;
765
766     case INTRINSIC_TIMES:
767       result = gfc_multiply (op1, op2);
768       break;
769
770     case INTRINSIC_DIVIDE:
771       result = gfc_divide (op1, op2);
772       break;
773
774     case INTRINSIC_POWER:
775       result = gfc_power (op1, op2);
776       break;
777
778     case INTRINSIC_CONCAT:
779       result = gfc_concat (op1, op2);
780       break;
781
782     case INTRINSIC_EQ:
783       result = gfc_eq (op1, op2);
784       break;
785
786     case INTRINSIC_NE:
787       result = gfc_ne (op1, op2);
788       break;
789
790     case INTRINSIC_GT:
791       result = gfc_gt (op1, op2);
792       break;
793
794     case INTRINSIC_GE:
795       result = gfc_ge (op1, op2);
796       break;
797
798     case INTRINSIC_LT:
799       result = gfc_lt (op1, op2);
800       break;
801
802     case INTRINSIC_LE:
803       result = gfc_le (op1, op2);
804       break;
805
806     case INTRINSIC_NOT:
807       result = gfc_not (op1);
808       break;
809
810     case INTRINSIC_AND:
811       result = gfc_and (op1, op2);
812       break;
813
814     case INTRINSIC_OR:
815       result = gfc_or (op1, op2);
816       break;
817
818     case INTRINSIC_EQV:
819       result = gfc_eqv (op1, op2);
820       break;
821
822     case INTRINSIC_NEQV:
823       result = gfc_neqv (op1, op2);
824       break;
825
826     default:
827       gfc_internal_error ("simplify_intrinsic_op(): Bad operator");
828     }
829
830   if (result == NULL)
831     {
832       gfc_free_expr (op1);
833       gfc_free_expr (op2);
834       return FAILURE;
835     }
836
837   gfc_replace_expr (p, result);
838
839   return SUCCESS;
840 }
841
842
843 /* Subroutine to simplify constructor expressions.  Mutually recursive
844    with gfc_simplify_expr().  */
845
846 static try
847 simplify_constructor (gfc_constructor * c, int type)
848 {
849
850   for (; c; c = c->next)
851     {
852       if (c->iterator
853           && (gfc_simplify_expr (c->iterator->start, type) == FAILURE
854               || gfc_simplify_expr (c->iterator->end, type) == FAILURE
855               || gfc_simplify_expr (c->iterator->step, type) == FAILURE))
856         return FAILURE;
857
858       if (c->expr && gfc_simplify_expr (c->expr, type) == FAILURE)
859         return FAILURE;
860     }
861
862   return SUCCESS;
863 }
864
865
866 /* Pull a single array element out of an array constructor.  */
867
868 static gfc_constructor *
869 find_array_element (gfc_constructor * cons, gfc_array_ref * ar)
870 {
871   unsigned long nelemen;
872   int i;
873   mpz_t delta;
874   mpz_t offset;
875
876   mpz_init_set_ui (offset, 0);
877   mpz_init (delta);
878   for (i = 0; i < ar->dimen; i++)
879     {
880       if (ar->start[i]->expr_type != EXPR_CONSTANT)
881         {
882           cons = NULL;
883           break;
884         }
885       mpz_sub (delta, ar->start[i]->value.integer,
886                ar->as->lower[i]->value.integer);
887       mpz_add (offset, offset, delta);
888     }
889
890   if (cons)
891     {
892       if (mpz_fits_ulong_p (offset))
893         {
894           for (nelemen = mpz_get_ui (offset); nelemen > 0; nelemen--)
895             {
896               if (cons->iterator)
897                 {
898                   cons = NULL;
899                   break;
900                 }
901               cons = cons->next;
902             }
903         }
904       else
905         cons = NULL;
906     }
907
908   mpz_clear (delta);
909   mpz_clear (offset);
910
911   return cons;
912 }
913
914
915 /* Find a component of a structure constructor.  */
916
917 static gfc_constructor *
918 find_component_ref (gfc_constructor * cons, gfc_ref * ref)
919 {
920   gfc_component *comp;
921   gfc_component *pick;
922
923   comp = ref->u.c.sym->components;
924   pick = ref->u.c.component;
925   while (comp != pick)
926     {
927       comp = comp->next;
928       cons = cons->next;
929     }
930
931   return cons;
932 }
933
934
935 /* Replace an expression with the contents of a constructor, removing
936    the subobject reference in the process.  */
937
938 static void
939 remove_subobject_ref (gfc_expr * p, gfc_constructor * cons)
940 {
941   gfc_expr *e;
942
943   e = cons->expr;
944   cons->expr = NULL;
945   e->ref = p->ref->next;
946   p->ref->next =  NULL;
947   gfc_replace_expr (p, e);
948 }
949
950
951 /* Simplify a subobject reference of a constructor.  This occurs when
952    parameter variable values are substituted.  */
953
954 static try
955 simplify_const_ref (gfc_expr * p)
956 {
957   gfc_constructor *cons;
958
959   while (p->ref)
960     {
961       switch (p->ref->type)
962         {
963         case REF_ARRAY:
964           switch (p->ref->u.ar.type)
965             {
966             case AR_ELEMENT:
967               cons = find_array_element (p->value.constructor, &p->ref->u.ar);
968               if (!cons)
969                 return SUCCESS;
970               remove_subobject_ref (p, cons);
971               break;
972
973             case AR_FULL:
974               if (p->ref->next != NULL)
975                 {
976                   /* TODO: Simplify array subobject references.  */
977                   return SUCCESS;
978                 }
979                 gfc_free_ref_list (p->ref);
980                 p->ref = NULL;
981               break;
982
983             default:
984               /* TODO: Simplify array subsections.  */
985               return SUCCESS;
986             }
987
988           break;
989
990         case REF_COMPONENT:
991           cons = find_component_ref (p->value.constructor, p->ref);
992           remove_subobject_ref (p, cons);
993           break;
994
995         case REF_SUBSTRING:
996           /* TODO: Constant substrings.  */
997           return SUCCESS;
998         }
999     }
1000
1001   return SUCCESS;
1002 }
1003
1004
1005 /* Simplify a chain of references.  */
1006
1007 static try
1008 simplify_ref_chain (gfc_ref * ref, int type)
1009 {
1010   int n;
1011
1012   for (; ref; ref = ref->next)
1013     {
1014       switch (ref->type)
1015         {
1016         case REF_ARRAY:
1017           for (n = 0; n < ref->u.ar.dimen; n++)
1018             {
1019               if (gfc_simplify_expr (ref->u.ar.start[n], type)
1020                     == FAILURE)
1021                 return FAILURE;
1022               if (gfc_simplify_expr (ref->u.ar.end[n], type)
1023                      == FAILURE)
1024                 return FAILURE;
1025               if (gfc_simplify_expr (ref->u.ar.stride[n], type)
1026                      == FAILURE)
1027                 return FAILURE;
1028             }
1029           break;
1030
1031         case REF_SUBSTRING:
1032           if (gfc_simplify_expr (ref->u.ss.start, type) == FAILURE)
1033             return FAILURE;
1034           if (gfc_simplify_expr (ref->u.ss.end, type) == FAILURE)
1035             return FAILURE;
1036           break;
1037
1038         default:
1039           break;
1040         }
1041     }
1042   return SUCCESS;
1043 }
1044
1045
1046 /* Try to substitute the value of a parameter variable.  */
1047 static try
1048 simplify_parameter_variable (gfc_expr * p, int type)
1049 {
1050   gfc_expr *e;
1051   try t;
1052
1053   e = gfc_copy_expr (p->symtree->n.sym->value);
1054   if (p->ref)
1055     e->ref = copy_ref (p->ref);
1056   t = gfc_simplify_expr (e, type);
1057
1058   /* Only use the simplification if it eliminated all subobject
1059      references.  */
1060   if (t == SUCCESS && ! e->ref)
1061     gfc_replace_expr (p, e);
1062   else
1063     gfc_free_expr (e);
1064
1065   return t;
1066 }
1067
1068 /* Given an expression, simplify it by collapsing constant
1069    expressions.  Most simplification takes place when the expression
1070    tree is being constructed.  If an intrinsic function is simplified
1071    at some point, we get called again to collapse the result against
1072    other constants.
1073
1074    We work by recursively simplifying expression nodes, simplifying
1075    intrinsic functions where possible, which can lead to further
1076    constant collapsing.  If an operator has constant operand(s), we
1077    rip the expression apart, and rebuild it, hoping that it becomes
1078    something simpler.
1079
1080    The expression type is defined for:
1081      0   Basic expression parsing
1082      1   Simplifying array constructors -- will substitute
1083          iterator values.
1084    Returns FAILURE on error, SUCCESS otherwise.
1085    NOTE: Will return SUCCESS even if the expression can not be simplified.  */
1086
1087 try
1088 gfc_simplify_expr (gfc_expr * p, int type)
1089 {
1090   gfc_actual_arglist *ap;
1091
1092   if (p == NULL)
1093     return SUCCESS;
1094
1095   switch (p->expr_type)
1096     {
1097     case EXPR_CONSTANT:
1098     case EXPR_NULL:
1099       break;
1100
1101     case EXPR_FUNCTION:
1102       for (ap = p->value.function.actual; ap; ap = ap->next)
1103         if (gfc_simplify_expr (ap->expr, type) == FAILURE)
1104           return FAILURE;
1105
1106       if (p->value.function.isym != NULL
1107           && gfc_intrinsic_func_interface (p, 1) == MATCH_ERROR)
1108         return FAILURE;
1109
1110       break;
1111
1112     case EXPR_SUBSTRING:
1113       if (simplify_ref_chain (p->ref, type) == FAILURE)
1114         return FAILURE;
1115
1116       /* TODO: evaluate constant substrings.  */
1117       break;
1118
1119     case EXPR_OP:
1120       if (simplify_intrinsic_op (p, type) == FAILURE)
1121         return FAILURE;
1122       break;
1123
1124     case EXPR_VARIABLE:
1125       /* Only substitute array parameter variables if we are in an
1126          initialization expression, or we want a subsection.  */
1127       if (p->symtree->n.sym->attr.flavor == FL_PARAMETER
1128           && (gfc_init_expr || p->ref
1129               || p->symtree->n.sym->value->expr_type != EXPR_ARRAY))
1130         {
1131           if (simplify_parameter_variable (p, type) == FAILURE)
1132             return FAILURE;
1133           break;
1134         }
1135
1136       if (type == 1)
1137         {
1138           gfc_simplify_iterator_var (p);
1139         }
1140
1141       /* Simplify subcomponent references.  */
1142       if (simplify_ref_chain (p->ref, type) == FAILURE)
1143         return FAILURE;
1144
1145       break;
1146
1147     case EXPR_STRUCTURE:
1148     case EXPR_ARRAY:
1149       if (simplify_ref_chain (p->ref, type) == FAILURE)
1150         return FAILURE;
1151
1152       if (simplify_constructor (p->value.constructor, type) == FAILURE)
1153         return FAILURE;
1154
1155       if (p->expr_type == EXPR_ARRAY)
1156           gfc_expand_constructor (p);
1157
1158       if (simplify_const_ref (p) == FAILURE)
1159         return FAILURE;
1160
1161       break;
1162     }
1163
1164   return SUCCESS;
1165 }
1166
1167
1168 /* Returns the type of an expression with the exception that iterator
1169    variables are automatically integers no matter what else they may
1170    be declared as.  */
1171
1172 static bt
1173 et0 (gfc_expr * e)
1174 {
1175
1176   if (e->expr_type == EXPR_VARIABLE && gfc_check_iter_variable (e) == SUCCESS)
1177     return BT_INTEGER;
1178
1179   return e->ts.type;
1180 }
1181
1182
1183 /* Check an intrinsic arithmetic operation to see if it is consistent
1184    with some type of expression.  */
1185
1186 static try check_init_expr (gfc_expr *);
1187
1188 static try
1189 check_intrinsic_op (gfc_expr * e, try (*check_function) (gfc_expr *))
1190 {
1191   gfc_expr *op1 = e->value.op.op1;
1192   gfc_expr *op2 = e->value.op.op2;
1193
1194   if ((*check_function) (op1) == FAILURE)
1195     return FAILURE;
1196
1197   switch (e->value.op.operator)
1198     {
1199     case INTRINSIC_UPLUS:
1200     case INTRINSIC_UMINUS:
1201       if (!numeric_type (et0 (op1)))
1202         goto not_numeric;
1203       break;
1204
1205     case INTRINSIC_EQ:
1206     case INTRINSIC_NE:
1207     case INTRINSIC_GT:
1208     case INTRINSIC_GE:
1209     case INTRINSIC_LT:
1210     case INTRINSIC_LE:
1211       if ((*check_function) (op2) == FAILURE)
1212         return FAILURE;
1213       
1214       if (!(et0 (op1) == BT_CHARACTER && et0 (op2) == BT_CHARACTER)
1215           && !(numeric_type (et0 (op1)) && numeric_type (et0 (op2))))
1216         {
1217           gfc_error ("Numeric or CHARACTER operands are required in "
1218                      "expression at %L", &e->where);
1219          return FAILURE;
1220         }
1221       break;
1222
1223     case INTRINSIC_PLUS:
1224     case INTRINSIC_MINUS:
1225     case INTRINSIC_TIMES:
1226     case INTRINSIC_DIVIDE:
1227     case INTRINSIC_POWER:
1228       if ((*check_function) (op2) == FAILURE)
1229         return FAILURE;
1230
1231       if (!numeric_type (et0 (op1)) || !numeric_type (et0 (op2)))
1232         goto not_numeric;
1233
1234       if (e->value.op.operator == INTRINSIC_POWER
1235           && check_function == check_init_expr && et0 (op2) != BT_INTEGER)
1236         {
1237           gfc_error ("Exponent at %L must be INTEGER for an initialization "
1238                      "expression", &op2->where);
1239           return FAILURE;
1240         }
1241
1242       break;
1243
1244     case INTRINSIC_CONCAT:
1245       if ((*check_function) (op2) == FAILURE)
1246         return FAILURE;
1247
1248       if (et0 (op1) != BT_CHARACTER || et0 (op2) != BT_CHARACTER)
1249         {
1250           gfc_error ("Concatenation operator in expression at %L "
1251                      "must have two CHARACTER operands", &op1->where);
1252           return FAILURE;
1253         }
1254
1255       if (op1->ts.kind != op2->ts.kind)
1256         {
1257           gfc_error ("Concat operator at %L must concatenate strings of the "
1258                      "same kind", &e->where);
1259           return FAILURE;
1260         }
1261
1262       break;
1263
1264     case INTRINSIC_NOT:
1265       if (et0 (op1) != BT_LOGICAL)
1266         {
1267           gfc_error (".NOT. operator in expression at %L must have a LOGICAL "
1268                      "operand", &op1->where);
1269           return FAILURE;
1270         }
1271
1272       break;
1273
1274     case INTRINSIC_AND:
1275     case INTRINSIC_OR:
1276     case INTRINSIC_EQV:
1277     case INTRINSIC_NEQV:
1278       if ((*check_function) (op2) == FAILURE)
1279         return FAILURE;
1280
1281       if (et0 (op1) != BT_LOGICAL || et0 (op2) != BT_LOGICAL)
1282         {
1283           gfc_error ("LOGICAL operands are required in expression at %L",
1284                      &e->where);
1285           return FAILURE;
1286         }
1287
1288       break;
1289
1290     default:
1291       gfc_error ("Only intrinsic operators can be used in expression at %L",
1292                  &e->where);
1293       return FAILURE;
1294     }
1295
1296   return SUCCESS;
1297
1298 not_numeric:
1299   gfc_error ("Numeric operands are required in expression at %L", &e->where);
1300
1301   return FAILURE;
1302 }
1303
1304
1305
1306 /* Certain inquiry functions are specifically allowed to have variable
1307    arguments, which is an exception to the normal requirement that an
1308    initialization function have initialization arguments.  We head off
1309    this problem here.  */
1310
1311 static try
1312 check_inquiry (gfc_expr * e)
1313 {
1314   const char *name;
1315
1316   /* FIXME: This should be moved into the intrinsic definitions,
1317      to eliminate this ugly hack.  */
1318   static const char * const inquiry_function[] = {
1319     "digits", "epsilon", "huge", "kind", "maxexponent", "minexponent",
1320     "precision", "radix", "range", "tiny", "bit_size", "size", "shape",
1321     "lbound", "ubound", NULL
1322   };
1323
1324   int i;
1325
1326   name = e->symtree->n.sym->name;
1327
1328   for (i = 0; inquiry_function[i]; i++)
1329     if (strcmp (inquiry_function[i], name) == 0)
1330       break;
1331
1332   if (inquiry_function[i] == NULL)
1333     return FAILURE;
1334
1335   e = e->value.function.actual->expr;
1336
1337   if (e == NULL || e->expr_type != EXPR_VARIABLE)
1338     return FAILURE;
1339
1340   /* At this point we have a numeric inquiry function with a variable
1341      argument.  The type of the variable might be undefined, but we
1342      need it now, because the arguments of these functions are allowed
1343      to be undefined.  */
1344
1345   if (e->ts.type == BT_UNKNOWN)
1346     {
1347       if (e->symtree->n.sym->ts.type == BT_UNKNOWN
1348           && gfc_set_default_type (e->symtree->n.sym, 0, gfc_current_ns)
1349             == FAILURE)
1350         return FAILURE;
1351
1352       e->ts = e->symtree->n.sym->ts;
1353     }
1354
1355   return SUCCESS;
1356 }
1357
1358
1359 /* Verify that an expression is an initialization expression.  A side
1360    effect is that the expression tree is reduced to a single constant
1361    node if all goes well.  This would normally happen when the
1362    expression is constructed but function references are assumed to be
1363    intrinsics in the context of initialization expressions.  If
1364    FAILURE is returned an error message has been generated.  */
1365
1366 static try
1367 check_init_expr (gfc_expr * e)
1368 {
1369   gfc_actual_arglist *ap;
1370   match m;
1371   try t;
1372
1373   if (e == NULL)
1374     return SUCCESS;
1375
1376   switch (e->expr_type)
1377     {
1378     case EXPR_OP:
1379       t = check_intrinsic_op (e, check_init_expr);
1380       if (t == SUCCESS)
1381         t = gfc_simplify_expr (e, 0);
1382
1383       break;
1384
1385     case EXPR_FUNCTION:
1386       t = SUCCESS;
1387
1388       if (check_inquiry (e) != SUCCESS)
1389         {
1390           t = SUCCESS;
1391           for (ap = e->value.function.actual; ap; ap = ap->next)
1392             if (check_init_expr (ap->expr) == FAILURE)
1393               {
1394                 t = FAILURE;
1395                 break;
1396               }
1397         }
1398
1399       if (t == SUCCESS)
1400         {
1401           m = gfc_intrinsic_func_interface (e, 0);
1402
1403           if (m == MATCH_NO)
1404             gfc_error ("Function '%s' in initialization expression at %L "
1405                        "must be an intrinsic function",
1406                        e->symtree->n.sym->name, &e->where);
1407
1408           if (m != MATCH_YES)
1409             t = FAILURE;
1410         }
1411
1412       break;
1413
1414     case EXPR_VARIABLE:
1415       t = SUCCESS;
1416
1417       if (gfc_check_iter_variable (e) == SUCCESS)
1418         break;
1419
1420       if (e->symtree->n.sym->attr.flavor == FL_PARAMETER)
1421         {
1422           t = simplify_parameter_variable (e, 0);
1423           break;
1424         }
1425
1426       gfc_error ("Variable '%s' at %L cannot appear in an initialization "
1427                  "expression", e->symtree->n.sym->name, &e->where);
1428       t = FAILURE;
1429       break;
1430
1431     case EXPR_CONSTANT:
1432     case EXPR_NULL:
1433       t = SUCCESS;
1434       break;
1435
1436     case EXPR_SUBSTRING:
1437       t = check_init_expr (e->ref->u.ss.start);
1438       if (t == FAILURE)
1439         break;
1440
1441       t = check_init_expr (e->ref->u.ss.end);
1442       if (t == SUCCESS)
1443         t = gfc_simplify_expr (e, 0);
1444
1445       break;
1446
1447     case EXPR_STRUCTURE:
1448       t = gfc_check_constructor (e, check_init_expr);
1449       break;
1450
1451     case EXPR_ARRAY:
1452       t = gfc_check_constructor (e, check_init_expr);
1453       if (t == FAILURE)
1454         break;
1455
1456       t = gfc_expand_constructor (e);
1457       if (t == FAILURE)
1458         break;
1459
1460       t = gfc_check_constructor_type (e);
1461       break;
1462
1463     default:
1464       gfc_internal_error ("check_init_expr(): Unknown expression type");
1465     }
1466
1467   return t;
1468 }
1469
1470
1471 /* Match an initialization expression.  We work by first matching an
1472    expression, then reducing it to a constant.  */
1473
1474 match
1475 gfc_match_init_expr (gfc_expr ** result)
1476 {
1477   gfc_expr *expr;
1478   match m;
1479   try t;
1480
1481   m = gfc_match_expr (&expr);
1482   if (m != MATCH_YES)
1483     return m;
1484
1485   gfc_init_expr = 1;
1486   t = gfc_resolve_expr (expr);
1487   if (t == SUCCESS)
1488     t = check_init_expr (expr);
1489   gfc_init_expr = 0;
1490
1491   if (t == FAILURE)
1492     {
1493       gfc_free_expr (expr);
1494       return MATCH_ERROR;
1495     }
1496
1497   if (expr->expr_type == EXPR_ARRAY
1498       && (gfc_check_constructor_type (expr) == FAILURE
1499           || gfc_expand_constructor (expr) == FAILURE))
1500     {
1501       gfc_free_expr (expr);
1502       return MATCH_ERROR;
1503     }
1504
1505   if (!gfc_is_constant_expr (expr))
1506     gfc_internal_error ("Initialization expression didn't reduce %C");
1507
1508   *result = expr;
1509
1510   return MATCH_YES;
1511 }
1512
1513
1514
1515 static try check_restricted (gfc_expr *);
1516
1517 /* Given an actual argument list, test to see that each argument is a
1518    restricted expression and optionally if the expression type is
1519    integer or character.  */
1520
1521 static try
1522 restricted_args (gfc_actual_arglist * a)
1523 {
1524   for (; a; a = a->next)
1525     {
1526       if (check_restricted (a->expr) == FAILURE)
1527         return FAILURE;
1528     }
1529
1530   return SUCCESS;
1531 }
1532
1533
1534 /************* Restricted/specification expressions *************/
1535
1536
1537 /* Make sure a non-intrinsic function is a specification function.  */
1538
1539 static try
1540 external_spec_function (gfc_expr * e)
1541 {
1542   gfc_symbol *f;
1543
1544   f = e->value.function.esym;
1545
1546   if (f->attr.proc == PROC_ST_FUNCTION)
1547     {
1548       gfc_error ("Specification function '%s' at %L cannot be a statement "
1549                  "function", f->name, &e->where);
1550       return FAILURE;
1551     }
1552
1553   if (f->attr.proc == PROC_INTERNAL)
1554     {
1555       gfc_error ("Specification function '%s' at %L cannot be an internal "
1556                  "function", f->name, &e->where);
1557       return FAILURE;
1558     }
1559
1560   if (!f->attr.pure)
1561     {
1562       gfc_error ("Specification function '%s' at %L must be PURE", f->name,
1563                  &e->where);
1564       return FAILURE;
1565     }
1566
1567   if (f->attr.recursive)
1568     {
1569       gfc_error ("Specification function '%s' at %L cannot be RECURSIVE",
1570                  f->name, &e->where);
1571       return FAILURE;
1572     }
1573
1574   return restricted_args (e->value.function.actual);
1575 }
1576
1577
1578 /* Check to see that a function reference to an intrinsic is a
1579    restricted expression.  */
1580
1581 static try
1582 restricted_intrinsic (gfc_expr * e)
1583 {
1584   /* TODO: Check constraints on inquiry functions.  7.1.6.2 (7).  */
1585   if (check_inquiry (e) == SUCCESS)
1586     return SUCCESS;
1587
1588   return restricted_args (e->value.function.actual);
1589 }
1590
1591
1592 /* Verify that an expression is a restricted expression.  Like its
1593    cousin check_init_expr(), an error message is generated if we
1594    return FAILURE.  */
1595
1596 static try
1597 check_restricted (gfc_expr * e)
1598 {
1599   gfc_symbol *sym;
1600   try t;
1601
1602   if (e == NULL)
1603     return SUCCESS;
1604
1605   switch (e->expr_type)
1606     {
1607     case EXPR_OP:
1608       t = check_intrinsic_op (e, check_restricted);
1609       if (t == SUCCESS)
1610         t = gfc_simplify_expr (e, 0);
1611
1612       break;
1613
1614     case EXPR_FUNCTION:
1615       t = e->value.function.esym ?
1616         external_spec_function (e) : restricted_intrinsic (e);
1617
1618       break;
1619
1620     case EXPR_VARIABLE:
1621       sym = e->symtree->n.sym;
1622       t = FAILURE;
1623
1624       if (sym->attr.optional)
1625         {
1626           gfc_error ("Dummy argument '%s' at %L cannot be OPTIONAL",
1627                      sym->name, &e->where);
1628           break;
1629         }
1630
1631       if (sym->attr.intent == INTENT_OUT)
1632         {
1633           gfc_error ("Dummy argument '%s' at %L cannot be INTENT(OUT)",
1634                      sym->name, &e->where);
1635           break;
1636         }
1637
1638       if (sym->attr.in_common
1639           || sym->attr.use_assoc
1640           || sym->attr.dummy
1641           || sym->ns != gfc_current_ns
1642           || (sym->ns->proc_name != NULL
1643               && sym->ns->proc_name->attr.flavor == FL_MODULE))
1644         {
1645           t = SUCCESS;
1646           break;
1647         }
1648
1649       gfc_error ("Variable '%s' cannot appear in the expression at %L",
1650                  sym->name, &e->where);
1651
1652       break;
1653
1654     case EXPR_NULL:
1655     case EXPR_CONSTANT:
1656       t = SUCCESS;
1657       break;
1658
1659     case EXPR_SUBSTRING:
1660       t = gfc_specification_expr (e->ref->u.ss.start);
1661       if (t == FAILURE)
1662         break;
1663
1664       t = gfc_specification_expr (e->ref->u.ss.end);
1665       if (t == SUCCESS)
1666         t = gfc_simplify_expr (e, 0);
1667
1668       break;
1669
1670     case EXPR_STRUCTURE:
1671       t = gfc_check_constructor (e, check_restricted);
1672       break;
1673
1674     case EXPR_ARRAY:
1675       t = gfc_check_constructor (e, check_restricted);
1676       break;
1677
1678     default:
1679       gfc_internal_error ("check_restricted(): Unknown expression type");
1680     }
1681
1682   return t;
1683 }
1684
1685
1686 /* Check to see that an expression is a specification expression.  If
1687    we return FAILURE, an error has been generated.  */
1688
1689 try
1690 gfc_specification_expr (gfc_expr * e)
1691 {
1692
1693   if (e->ts.type != BT_INTEGER)
1694     {
1695       gfc_error ("Expression at %L must be of INTEGER type", &e->where);
1696       return FAILURE;
1697     }
1698
1699   if (e->rank != 0)
1700     {
1701       gfc_error ("Expression at %L must be scalar", &e->where);
1702       return FAILURE;
1703     }
1704
1705   if (gfc_simplify_expr (e, 0) == FAILURE)
1706     return FAILURE;
1707
1708   return check_restricted (e);
1709 }
1710
1711
1712 /************** Expression conformance checks.  *************/
1713
1714 /* Given two expressions, make sure that the arrays are conformable.  */
1715
1716 try
1717 gfc_check_conformance (const char *optype, gfc_expr * op1, gfc_expr * op2)
1718 {
1719   int op1_flag, op2_flag, d;
1720   mpz_t op1_size, op2_size;
1721   try t;
1722
1723   if (op1->rank == 0 || op2->rank == 0)
1724     return SUCCESS;
1725
1726   if (op1->rank != op2->rank)
1727     {
1728       gfc_error ("Incompatible ranks in %s at %L", optype, &op1->where);
1729       return FAILURE;
1730     }
1731
1732   t = SUCCESS;
1733
1734   for (d = 0; d < op1->rank; d++)
1735     {
1736       op1_flag = gfc_array_dimen_size (op1, d, &op1_size) == SUCCESS;
1737       op2_flag = gfc_array_dimen_size (op2, d, &op2_size) == SUCCESS;
1738
1739       if (op1_flag && op2_flag && mpz_cmp (op1_size, op2_size) != 0)
1740         {
1741           gfc_error ("%s at %L has different shape on dimension %d (%d/%d)",
1742                      optype, &op1->where, d + 1, (int) mpz_get_si (op1_size),
1743                      (int) mpz_get_si (op2_size));
1744
1745           t = FAILURE;
1746         }
1747
1748       if (op1_flag)
1749         mpz_clear (op1_size);
1750       if (op2_flag)
1751         mpz_clear (op2_size);
1752
1753       if (t == FAILURE)
1754         return FAILURE;
1755     }
1756
1757   return SUCCESS;
1758 }
1759
1760
1761 /* Given an assignable expression and an arbitrary expression, make
1762    sure that the assignment can take place.  */
1763
1764 try
1765 gfc_check_assign (gfc_expr * lvalue, gfc_expr * rvalue, int conform)
1766 {
1767   gfc_symbol *sym;
1768
1769   sym = lvalue->symtree->n.sym;
1770
1771   if (sym->attr.intent == INTENT_IN)
1772     {
1773       gfc_error ("Can't assign to INTENT(IN) variable '%s' at %L",
1774                  sym->name, &lvalue->where);
1775       return FAILURE;
1776     }
1777
1778   if (rvalue->rank != 0 && lvalue->rank != rvalue->rank)
1779     {
1780       gfc_error ("Incompatible ranks %d and %d in assignment at %L",
1781                  lvalue->rank, rvalue->rank, &lvalue->where);
1782       return FAILURE;
1783     }
1784
1785   if (lvalue->ts.type == BT_UNKNOWN)
1786     {
1787       gfc_error ("Variable type is UNKNOWN in assignment at %L",
1788                  &lvalue->where);
1789       return FAILURE;
1790     }
1791
1792    if (rvalue->expr_type == EXPR_NULL)
1793      {
1794        gfc_error ("NULL appears on right-hand side in assignment at %L",
1795                   &rvalue->where);
1796        return FAILURE;
1797      }
1798
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);
1805
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;
1810
1811   if (gfc_compare_types (&lvalue->ts, &rvalue->ts))
1812     return SUCCESS;
1813
1814   if (!conform)
1815     {
1816       if (gfc_numeric_ts (&lvalue->ts) && gfc_numeric_ts (&rvalue->ts))
1817         return SUCCESS;
1818
1819       if (lvalue->ts.type == BT_LOGICAL && rvalue->ts.type == BT_LOGICAL)
1820         return SUCCESS;
1821
1822       gfc_error ("Incompatible types in assignment at %L, %s to %s",
1823                  &rvalue->where, gfc_typename (&rvalue->ts),
1824                  gfc_typename (&lvalue->ts));
1825
1826       return FAILURE;
1827     }
1828
1829   return gfc_convert_type (rvalue, &lvalue->ts, 1);
1830 }
1831
1832
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.  */
1836
1837 try
1838 gfc_check_pointer_assign (gfc_expr * lvalue, gfc_expr * rvalue)
1839 {
1840   symbol_attribute attr;
1841   int is_pure;
1842
1843   if (lvalue->symtree->n.sym->ts.type == BT_UNKNOWN)
1844     {
1845       gfc_error ("Pointer assignment target is not a POINTER at %L",
1846                  &lvalue->where);
1847       return FAILURE;
1848     }
1849
1850   attr = gfc_variable_attr (lvalue, NULL);
1851   if (!attr.pointer)
1852     {
1853       gfc_error ("Pointer assignment to non-POINTER at %L", &lvalue->where);
1854       return FAILURE;
1855     }
1856
1857   is_pure = gfc_pure (NULL);
1858
1859   if (is_pure && gfc_impure_variable (lvalue->symtree->n.sym))
1860     {
1861       gfc_error ("Bad pointer object in PURE procedure at %L",
1862                  &lvalue->where);
1863       return FAILURE;
1864     }
1865
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;
1871
1872   if (!gfc_compare_types (&lvalue->ts, &rvalue->ts))
1873     {
1874       gfc_error ("Different types in pointer assignment at %L",
1875                  &lvalue->where);
1876       return FAILURE;
1877     }
1878
1879   if (lvalue->ts.kind != rvalue->ts.kind)
1880     {
1881       gfc_error ("Different kind type parameters in pointer "
1882                  "assignment at %L", &lvalue->where);
1883       return FAILURE;
1884     }
1885
1886   attr = gfc_expr_attr (rvalue);
1887   if (!attr.target && !attr.pointer)
1888     {
1889       gfc_error ("Pointer assignment target is neither TARGET "
1890                  "nor POINTER at %L", &rvalue->where);
1891       return FAILURE;
1892     }
1893
1894   if (is_pure && gfc_impure_variable (rvalue->symtree->n.sym))
1895     {
1896       gfc_error ("Bad target in pointer assignment in PURE "
1897                  "procedure at %L", &rvalue->where);
1898     }
1899
1900   if (lvalue->rank != rvalue->rank)
1901     {
1902       gfc_error ("Unequal ranks %d and %d in pointer assignment at %L", 
1903                  lvalue->rank, rvalue->rank, &rvalue->where);
1904       return FAILURE;
1905     }
1906
1907   return SUCCESS;
1908 }
1909
1910
1911 /* Relative of gfc_check_assign() except that the lvalue is a single
1912    symbol.  Used for initialization assignments.  */
1913
1914 try
1915 gfc_check_assign_symbol (gfc_symbol * sym, gfc_expr * rvalue)
1916 {
1917   gfc_expr lvalue;
1918   try r;
1919
1920   memset (&lvalue, '\0', sizeof (gfc_expr));
1921
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;
1929
1930   if (sym->attr.pointer)
1931     r = gfc_check_pointer_assign (&lvalue, rvalue);
1932   else
1933     r = gfc_check_assign (&lvalue, rvalue, 1);
1934
1935   gfc_free (lvalue.symtree);
1936
1937   return r;
1938 }
1939
1940
1941 /* Get an expression for a default initializer.  */
1942
1943 gfc_expr *
1944 gfc_default_initializer (gfc_typespec *ts)
1945 {
1946   gfc_constructor *tail;
1947   gfc_expr *init;
1948   gfc_component *c;
1949
1950   init = NULL;
1951
1952   /* See if we have a default initializer.  */
1953   for (c = ts->derived->components; c; c = c->next)
1954     {
1955       if (c->initializer && init == NULL)
1956         init = gfc_get_expr ();
1957     }
1958
1959   if (init == NULL)
1960     return NULL;
1961
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)
1968     {
1969       if (tail == NULL)
1970         init->value.constructor = tail = gfc_get_constructor ();
1971       else
1972         {
1973           tail->next = gfc_get_constructor ();
1974           tail = tail->next;
1975         }
1976
1977       if (c->initializer)
1978         tail->expr = gfc_copy_expr (c->initializer);
1979     }
1980   return init;
1981 }
1982
1983
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.  */
1987
1988 gfc_expr *
1989 gfc_get_variable_expr (gfc_symtree * var)
1990 {
1991   gfc_expr *e;
1992
1993   e = gfc_get_expr ();
1994   e->expr_type = EXPR_VARIABLE;
1995   e->symtree = var;
1996   e->ts = var->n.sym->ts;
1997
1998   if (var->n.sym->as != NULL)
1999     {
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;
2004     }
2005
2006   return e;
2007 }
2008