OSDN Git Service

* gcc.dg/vect/O3-vect-pr34223.c: Check vect_int_mult.
[pf3gnuchains/gcc-fork.git] / gcc / fortran / resolve.c
1 /* Perform type resolution on the various structures.
2    Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008
3    Free Software Foundation, 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 3, 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 COPYING3.  If not see
20 <http://www.gnu.org/licenses/>.  */
21
22 #include "config.h"
23 #include "system.h"
24 #include "flags.h"
25 #include "gfortran.h"
26 #include "obstack.h"
27 #include "bitmap.h"
28 #include "arith.h"  /* For gfc_compare_expr().  */
29 #include "dependency.h"
30 #include "data.h"
31 #include "target-memory.h" /* for gfc_simplify_transfer */
32
33 /* Types used in equivalence statements.  */
34
35 typedef enum seq_type
36 {
37   SEQ_NONDEFAULT, SEQ_NUMERIC, SEQ_CHARACTER, SEQ_MIXED
38 }
39 seq_type;
40
41 /* Stack to keep track of the nesting of blocks as we move through the
42    code.  See resolve_branch() and resolve_code().  */
43
44 typedef struct code_stack
45 {
46   struct gfc_code *head, *current, *tail;
47   struct code_stack *prev;
48
49   /* This bitmap keeps track of the targets valid for a branch from
50      inside this block.  */
51   bitmap reachable_labels;
52 }
53 code_stack;
54
55 static code_stack *cs_base = NULL;
56
57
58 /* Nonzero if we're inside a FORALL block.  */
59
60 static int forall_flag;
61
62 /* Nonzero if we're inside a OpenMP WORKSHARE or PARALLEL WORKSHARE block.  */
63
64 static int omp_workshare_flag;
65
66 /* Nonzero if we are processing a formal arglist. The corresponding function
67    resets the flag each time that it is read.  */
68 static int formal_arg_flag = 0;
69
70 /* True if we are resolving a specification expression.  */
71 static int specification_expr = 0;
72
73 /* The id of the last entry seen.  */
74 static int current_entry_id;
75
76 /* We use bitmaps to determine if a branch target is valid.  */
77 static bitmap_obstack labels_obstack;
78
79 int
80 gfc_is_formal_arg (void)
81 {
82   return formal_arg_flag;
83 }
84
85
86 /* Ensure a typespec used is valid; for instance, TYPE(t) is invalid if t is
87    an ABSTRACT derived-type.  If where is not NULL, an error message with that
88    locus is printed, optionally using name.  */
89
90 static gfc_try
91 resolve_typespec_used (gfc_typespec* ts, locus* where, const char* name)
92 {
93   if (ts->type == BT_DERIVED && ts->derived->attr.abstract)
94     {
95       if (where)
96         {
97           if (name)
98             gfc_error ("'%s' at %L is of the ABSTRACT type '%s'",
99                        name, where, ts->derived->name);
100           else
101             gfc_error ("ABSTRACT type '%s' used at %L",
102                        ts->derived->name, where);
103         }
104
105       return FAILURE;
106     }
107
108   return SUCCESS;
109 }
110
111
112 /* Resolve types of formal argument lists.  These have to be done early so that
113    the formal argument lists of module procedures can be copied to the
114    containing module before the individual procedures are resolved
115    individually.  We also resolve argument lists of procedures in interface
116    blocks because they are self-contained scoping units.
117
118    Since a dummy argument cannot be a non-dummy procedure, the only
119    resort left for untyped names are the IMPLICIT types.  */
120
121 static void
122 resolve_formal_arglist (gfc_symbol *proc)
123 {
124   gfc_formal_arglist *f;
125   gfc_symbol *sym;
126   int i;
127
128   if (proc->result != NULL)
129     sym = proc->result;
130   else
131     sym = proc;
132
133   if (gfc_elemental (proc)
134       || sym->attr.pointer || sym->attr.allocatable
135       || (sym->as && sym->as->rank > 0))
136     {
137       proc->attr.always_explicit = 1;
138       sym->attr.always_explicit = 1;
139     }
140
141   formal_arg_flag = 1;
142
143   for (f = proc->formal; f; f = f->next)
144     {
145       sym = f->sym;
146
147       if (sym == NULL)
148         {
149           /* Alternate return placeholder.  */
150           if (gfc_elemental (proc))
151             gfc_error ("Alternate return specifier in elemental subroutine "
152                        "'%s' at %L is not allowed", proc->name,
153                        &proc->declared_at);
154           if (proc->attr.function)
155             gfc_error ("Alternate return specifier in function "
156                        "'%s' at %L is not allowed", proc->name,
157                        &proc->declared_at);
158           continue;
159         }
160
161       if (sym->attr.if_source != IFSRC_UNKNOWN)
162         resolve_formal_arglist (sym);
163
164       if (sym->attr.subroutine || sym->attr.external || sym->attr.intrinsic)
165         {
166           if (gfc_pure (proc) && !gfc_pure (sym))
167             {
168               gfc_error ("Dummy procedure '%s' of PURE procedure at %L must "
169                          "also be PURE", sym->name, &sym->declared_at);
170               continue;
171             }
172
173           if (gfc_elemental (proc))
174             {
175               gfc_error ("Dummy procedure at %L not allowed in ELEMENTAL "
176                          "procedure", &sym->declared_at);
177               continue;
178             }
179
180           if (sym->attr.function
181                 && sym->ts.type == BT_UNKNOWN
182                 && sym->attr.intrinsic)
183             {
184               gfc_intrinsic_sym *isym;
185               isym = gfc_find_function (sym->name);
186               if (isym == NULL || !isym->specific)
187                 {
188                   gfc_error ("Unable to find a specific INTRINSIC procedure "
189                              "for the reference '%s' at %L", sym->name,
190                              &sym->declared_at);
191                 }
192               sym->ts = isym->ts;
193             }
194
195           continue;
196         }
197
198       if (sym->ts.type == BT_UNKNOWN)
199         {
200           if (!sym->attr.function || sym->result == sym)
201             gfc_set_default_type (sym, 1, sym->ns);
202         }
203
204       gfc_resolve_array_spec (sym->as, 0);
205
206       /* We can't tell if an array with dimension (:) is assumed or deferred
207          shape until we know if it has the pointer or allocatable attributes.
208       */
209       if (sym->as && sym->as->rank > 0 && sym->as->type == AS_DEFERRED
210           && !(sym->attr.pointer || sym->attr.allocatable))
211         {
212           sym->as->type = AS_ASSUMED_SHAPE;
213           for (i = 0; i < sym->as->rank; i++)
214             sym->as->lower[i] = gfc_int_expr (1);
215         }
216
217       if ((sym->as && sym->as->rank > 0 && sym->as->type == AS_ASSUMED_SHAPE)
218           || sym->attr.pointer || sym->attr.allocatable || sym->attr.target
219           || sym->attr.optional)
220         {
221           proc->attr.always_explicit = 1;
222           if (proc->result)
223             proc->result->attr.always_explicit = 1;
224         }
225
226       /* If the flavor is unknown at this point, it has to be a variable.
227          A procedure specification would have already set the type.  */
228
229       if (sym->attr.flavor == FL_UNKNOWN)
230         gfc_add_flavor (&sym->attr, FL_VARIABLE, sym->name, &sym->declared_at);
231
232       if (gfc_pure (proc) && !sym->attr.pointer
233           && sym->attr.flavor != FL_PROCEDURE)
234         {
235           if (proc->attr.function && sym->attr.intent != INTENT_IN)
236             gfc_error ("Argument '%s' of pure function '%s' at %L must be "
237                        "INTENT(IN)", sym->name, proc->name,
238                        &sym->declared_at);
239
240           if (proc->attr.subroutine && sym->attr.intent == INTENT_UNKNOWN)
241             gfc_error ("Argument '%s' of pure subroutine '%s' at %L must "
242                        "have its INTENT specified", sym->name, proc->name,
243                        &sym->declared_at);
244         }
245
246       if (gfc_elemental (proc))
247         {
248           if (sym->as != NULL)
249             {
250               gfc_error ("Argument '%s' of elemental procedure at %L must "
251                          "be scalar", sym->name, &sym->declared_at);
252               continue;
253             }
254
255           if (sym->attr.pointer)
256             {
257               gfc_error ("Argument '%s' of elemental procedure at %L cannot "
258                          "have the POINTER attribute", sym->name,
259                          &sym->declared_at);
260               continue;
261             }
262
263           if (sym->attr.flavor == FL_PROCEDURE)
264             {
265               gfc_error ("Dummy procedure '%s' not allowed in elemental "
266                          "procedure '%s' at %L", sym->name, proc->name,
267                          &sym->declared_at);
268               continue;
269             }
270         }
271
272       /* Each dummy shall be specified to be scalar.  */
273       if (proc->attr.proc == PROC_ST_FUNCTION)
274         {
275           if (sym->as != NULL)
276             {
277               gfc_error ("Argument '%s' of statement function at %L must "
278                          "be scalar", sym->name, &sym->declared_at);
279               continue;
280             }
281
282           if (sym->ts.type == BT_CHARACTER)
283             {
284               gfc_charlen *cl = sym->ts.cl;
285               if (!cl || !cl->length || cl->length->expr_type != EXPR_CONSTANT)
286                 {
287                   gfc_error ("Character-valued argument '%s' of statement "
288                              "function at %L must have constant length",
289                              sym->name, &sym->declared_at);
290                   continue;
291                 }
292             }
293         }
294     }
295   formal_arg_flag = 0;
296 }
297
298
299 /* Work function called when searching for symbols that have argument lists
300    associated with them.  */
301
302 static void
303 find_arglists (gfc_symbol *sym)
304 {
305   if (sym->attr.if_source == IFSRC_UNKNOWN || sym->ns != gfc_current_ns)
306     return;
307
308   resolve_formal_arglist (sym);
309 }
310
311
312 /* Given a namespace, resolve all formal argument lists within the namespace.
313  */
314
315 static void
316 resolve_formal_arglists (gfc_namespace *ns)
317 {
318   if (ns == NULL)
319     return;
320
321   gfc_traverse_ns (ns, find_arglists);
322 }
323
324
325 static void
326 resolve_contained_fntype (gfc_symbol *sym, gfc_namespace *ns)
327 {
328   gfc_try t;
329
330   /* If this namespace is not a function or an entry master function,
331      ignore it.  */
332   if (! sym || !(sym->attr.function || sym->attr.flavor == FL_VARIABLE)
333       || sym->attr.entry_master)
334     return;
335
336   /* Try to find out of what the return type is.  */
337   if (sym->result->ts.type == BT_UNKNOWN)
338     {
339       t = gfc_set_default_type (sym->result, 0, ns);
340
341       if (t == FAILURE && !sym->result->attr.untyped)
342         {
343           if (sym->result == sym)
344             gfc_error ("Contained function '%s' at %L has no IMPLICIT type",
345                        sym->name, &sym->declared_at);
346           else
347             gfc_error ("Result '%s' of contained function '%s' at %L has "
348                        "no IMPLICIT type", sym->result->name, sym->name,
349                        &sym->result->declared_at);
350           sym->result->attr.untyped = 1;
351         }
352     }
353
354   /* Fortran 95 Draft Standard, page 51, Section 5.1.1.5, on the Character 
355      type, lists the only ways a character length value of * can be used:
356      dummy arguments of procedures, named constants, and function results
357      in external functions.  Internal function results are not on that list;
358      ergo, not permitted.  */
359
360   if (sym->result->ts.type == BT_CHARACTER)
361     {
362       gfc_charlen *cl = sym->result->ts.cl;
363       if (!cl || !cl->length)
364         gfc_error ("Character-valued internal function '%s' at %L must "
365                    "not be assumed length", sym->name, &sym->declared_at);
366     }
367 }
368
369
370 /* Add NEW_ARGS to the formal argument list of PROC, taking care not to
371    introduce duplicates.  */
372
373 static void
374 merge_argument_lists (gfc_symbol *proc, gfc_formal_arglist *new_args)
375 {
376   gfc_formal_arglist *f, *new_arglist;
377   gfc_symbol *new_sym;
378
379   for (; new_args != NULL; new_args = new_args->next)
380     {
381       new_sym = new_args->sym;
382       /* See if this arg is already in the formal argument list.  */
383       for (f = proc->formal; f; f = f->next)
384         {
385           if (new_sym == f->sym)
386             break;
387         }
388
389       if (f)
390         continue;
391
392       /* Add a new argument.  Argument order is not important.  */
393       new_arglist = gfc_get_formal_arglist ();
394       new_arglist->sym = new_sym;
395       new_arglist->next = proc->formal;
396       proc->formal  = new_arglist;
397     }
398 }
399
400
401 /* Flag the arguments that are not present in all entries.  */
402
403 static void
404 check_argument_lists (gfc_symbol *proc, gfc_formal_arglist *new_args)
405 {
406   gfc_formal_arglist *f, *head;
407   head = new_args;
408
409   for (f = proc->formal; f; f = f->next)
410     {
411       if (f->sym == NULL)
412         continue;
413
414       for (new_args = head; new_args; new_args = new_args->next)
415         {
416           if (new_args->sym == f->sym)
417             break;
418         }
419
420       if (new_args)
421         continue;
422
423       f->sym->attr.not_always_present = 1;
424     }
425 }
426
427
428 /* Resolve alternate entry points.  If a symbol has multiple entry points we
429    create a new master symbol for the main routine, and turn the existing
430    symbol into an entry point.  */
431
432 static void
433 resolve_entries (gfc_namespace *ns)
434 {
435   gfc_namespace *old_ns;
436   gfc_code *c;
437   gfc_symbol *proc;
438   gfc_entry_list *el;
439   char name[GFC_MAX_SYMBOL_LEN + 1];
440   static int master_count = 0;
441
442   if (ns->proc_name == NULL)
443     return;
444
445   /* No need to do anything if this procedure doesn't have alternate entry
446      points.  */
447   if (!ns->entries)
448     return;
449
450   /* We may already have resolved alternate entry points.  */
451   if (ns->proc_name->attr.entry_master)
452     return;
453
454   /* If this isn't a procedure something has gone horribly wrong.  */
455   gcc_assert (ns->proc_name->attr.flavor == FL_PROCEDURE);
456
457   /* Remember the current namespace.  */
458   old_ns = gfc_current_ns;
459
460   gfc_current_ns = ns;
461
462   /* Add the main entry point to the list of entry points.  */
463   el = gfc_get_entry_list ();
464   el->sym = ns->proc_name;
465   el->id = 0;
466   el->next = ns->entries;
467   ns->entries = el;
468   ns->proc_name->attr.entry = 1;
469
470   /* If it is a module function, it needs to be in the right namespace
471      so that gfc_get_fake_result_decl can gather up the results. The
472      need for this arose in get_proc_name, where these beasts were
473      left in their own namespace, to keep prior references linked to
474      the entry declaration.*/
475   if (ns->proc_name->attr.function
476       && ns->parent && ns->parent->proc_name->attr.flavor == FL_MODULE)
477     el->sym->ns = ns;
478
479   /* Do the same for entries where the master is not a module
480      procedure.  These are retained in the module namespace because
481      of the module procedure declaration.  */
482   for (el = el->next; el; el = el->next)
483     if (el->sym->ns->proc_name->attr.flavor == FL_MODULE
484           && el->sym->attr.mod_proc)
485       el->sym->ns = ns;
486   el = ns->entries;
487
488   /* Add an entry statement for it.  */
489   c = gfc_get_code ();
490   c->op = EXEC_ENTRY;
491   c->ext.entry = el;
492   c->next = ns->code;
493   ns->code = c;
494
495   /* Create a new symbol for the master function.  */
496   /* Give the internal function a unique name (within this file).
497      Also include the function name so the user has some hope of figuring
498      out what is going on.  */
499   snprintf (name, GFC_MAX_SYMBOL_LEN, "master.%d.%s",
500             master_count++, ns->proc_name->name);
501   gfc_get_ha_symbol (name, &proc);
502   gcc_assert (proc != NULL);
503
504   gfc_add_procedure (&proc->attr, PROC_INTERNAL, proc->name, NULL);
505   if (ns->proc_name->attr.subroutine)
506     gfc_add_subroutine (&proc->attr, proc->name, NULL);
507   else
508     {
509       gfc_symbol *sym;
510       gfc_typespec *ts, *fts;
511       gfc_array_spec *as, *fas;
512       gfc_add_function (&proc->attr, proc->name, NULL);
513       proc->result = proc;
514       fas = ns->entries->sym->as;
515       fas = fas ? fas : ns->entries->sym->result->as;
516       fts = &ns->entries->sym->result->ts;
517       if (fts->type == BT_UNKNOWN)
518         fts = gfc_get_default_type (ns->entries->sym->result, NULL);
519       for (el = ns->entries->next; el; el = el->next)
520         {
521           ts = &el->sym->result->ts;
522           as = el->sym->as;
523           as = as ? as : el->sym->result->as;
524           if (ts->type == BT_UNKNOWN)
525             ts = gfc_get_default_type (el->sym->result, NULL);
526
527           if (! gfc_compare_types (ts, fts)
528               || (el->sym->result->attr.dimension
529                   != ns->entries->sym->result->attr.dimension)
530               || (el->sym->result->attr.pointer
531                   != ns->entries->sym->result->attr.pointer))
532             break;
533           else if (as && fas && ns->entries->sym->result != el->sym->result
534                       && gfc_compare_array_spec (as, fas) == 0)
535             gfc_error ("Function %s at %L has entries with mismatched "
536                        "array specifications", ns->entries->sym->name,
537                        &ns->entries->sym->declared_at);
538           /* The characteristics need to match and thus both need to have
539              the same string length, i.e. both len=*, or both len=4.
540              Having both len=<variable> is also possible, but difficult to
541              check at compile time.  */
542           else if (ts->type == BT_CHARACTER && ts->cl && fts->cl
543                    && (((ts->cl->length && !fts->cl->length)
544                         ||(!ts->cl->length && fts->cl->length))
545                        || (ts->cl->length
546                            && ts->cl->length->expr_type
547                               != fts->cl->length->expr_type)
548                        || (ts->cl->length
549                            && ts->cl->length->expr_type == EXPR_CONSTANT
550                            && mpz_cmp (ts->cl->length->value.integer,
551                                        fts->cl->length->value.integer) != 0)))
552             gfc_notify_std (GFC_STD_GNU, "Extension: Function %s at %L with "
553                             "entries returning variables of different "
554                             "string lengths", ns->entries->sym->name,
555                             &ns->entries->sym->declared_at);
556         }
557
558       if (el == NULL)
559         {
560           sym = ns->entries->sym->result;
561           /* All result types the same.  */
562           proc->ts = *fts;
563           if (sym->attr.dimension)
564             gfc_set_array_spec (proc, gfc_copy_array_spec (sym->as), NULL);
565           if (sym->attr.pointer)
566             gfc_add_pointer (&proc->attr, NULL);
567         }
568       else
569         {
570           /* Otherwise the result will be passed through a union by
571              reference.  */
572           proc->attr.mixed_entry_master = 1;
573           for (el = ns->entries; el; el = el->next)
574             {
575               sym = el->sym->result;
576               if (sym->attr.dimension)
577                 {
578                   if (el == ns->entries)
579                     gfc_error ("FUNCTION result %s can't be an array in "
580                                "FUNCTION %s at %L", sym->name,
581                                ns->entries->sym->name, &sym->declared_at);
582                   else
583                     gfc_error ("ENTRY result %s can't be an array in "
584                                "FUNCTION %s at %L", sym->name,
585                                ns->entries->sym->name, &sym->declared_at);
586                 }
587               else if (sym->attr.pointer)
588                 {
589                   if (el == ns->entries)
590                     gfc_error ("FUNCTION result %s can't be a POINTER in "
591                                "FUNCTION %s at %L", sym->name,
592                                ns->entries->sym->name, &sym->declared_at);
593                   else
594                     gfc_error ("ENTRY result %s can't be a POINTER in "
595                                "FUNCTION %s at %L", sym->name,
596                                ns->entries->sym->name, &sym->declared_at);
597                 }
598               else
599                 {
600                   ts = &sym->ts;
601                   if (ts->type == BT_UNKNOWN)
602                     ts = gfc_get_default_type (sym, NULL);
603                   switch (ts->type)
604                     {
605                     case BT_INTEGER:
606                       if (ts->kind == gfc_default_integer_kind)
607                         sym = NULL;
608                       break;
609                     case BT_REAL:
610                       if (ts->kind == gfc_default_real_kind
611                           || ts->kind == gfc_default_double_kind)
612                         sym = NULL;
613                       break;
614                     case BT_COMPLEX:
615                       if (ts->kind == gfc_default_complex_kind)
616                         sym = NULL;
617                       break;
618                     case BT_LOGICAL:
619                       if (ts->kind == gfc_default_logical_kind)
620                         sym = NULL;
621                       break;
622                     case BT_UNKNOWN:
623                       /* We will issue error elsewhere.  */
624                       sym = NULL;
625                       break;
626                     default:
627                       break;
628                     }
629                   if (sym)
630                     {
631                       if (el == ns->entries)
632                         gfc_error ("FUNCTION result %s can't be of type %s "
633                                    "in FUNCTION %s at %L", sym->name,
634                                    gfc_typename (ts), ns->entries->sym->name,
635                                    &sym->declared_at);
636                       else
637                         gfc_error ("ENTRY result %s can't be of type %s "
638                                    "in FUNCTION %s at %L", sym->name,
639                                    gfc_typename (ts), ns->entries->sym->name,
640                                    &sym->declared_at);
641                     }
642                 }
643             }
644         }
645     }
646   proc->attr.access = ACCESS_PRIVATE;
647   proc->attr.entry_master = 1;
648
649   /* Merge all the entry point arguments.  */
650   for (el = ns->entries; el; el = el->next)
651     merge_argument_lists (proc, el->sym->formal);
652
653   /* Check the master formal arguments for any that are not
654      present in all entry points.  */
655   for (el = ns->entries; el; el = el->next)
656     check_argument_lists (proc, el->sym->formal);
657
658   /* Use the master function for the function body.  */
659   ns->proc_name = proc;
660
661   /* Finalize the new symbols.  */
662   gfc_commit_symbols ();
663
664   /* Restore the original namespace.  */
665   gfc_current_ns = old_ns;
666 }
667
668
669 static bool
670 has_default_initializer (gfc_symbol *der)
671 {
672   gfc_component *c;
673
674   gcc_assert (der->attr.flavor == FL_DERIVED);
675   for (c = der->components; c; c = c->next)
676     if ((c->ts.type != BT_DERIVED && c->initializer)
677         || (c->ts.type == BT_DERIVED
678             && (!c->attr.pointer && has_default_initializer (c->ts.derived))))
679       break;
680
681   return c != NULL;
682 }
683
684 /* Resolve common variables.  */
685 static void
686 resolve_common_vars (gfc_symbol *sym, bool named_common)
687 {
688   gfc_symbol *csym = sym;
689
690   for (; csym; csym = csym->common_next)
691     {
692       if (csym->value || csym->attr.data)
693         {
694           if (!csym->ns->is_block_data)
695             gfc_notify_std (GFC_STD_GNU, "Variable '%s' at %L is in COMMON "
696                             "but only in BLOCK DATA initialization is "
697                             "allowed", csym->name, &csym->declared_at);
698           else if (!named_common)
699             gfc_notify_std (GFC_STD_GNU, "Initialized variable '%s' at %L is "
700                             "in a blank COMMON but initialization is only "
701                             "allowed in named common blocks", csym->name,
702                             &csym->declared_at);
703         }
704
705       if (csym->ts.type != BT_DERIVED)
706         continue;
707
708       if (!(csym->ts.derived->attr.sequence
709             || csym->ts.derived->attr.is_bind_c))
710         gfc_error_now ("Derived type variable '%s' in COMMON at %L "
711                        "has neither the SEQUENCE nor the BIND(C) "
712                        "attribute", csym->name, &csym->declared_at);
713       if (csym->ts.derived->attr.alloc_comp)
714         gfc_error_now ("Derived type variable '%s' in COMMON at %L "
715                        "has an ultimate component that is "
716                        "allocatable", csym->name, &csym->declared_at);
717       if (has_default_initializer (csym->ts.derived))
718         gfc_error_now ("Derived type variable '%s' in COMMON at %L "
719                        "may not have default initializer", csym->name,
720                        &csym->declared_at);
721     }
722 }
723
724 /* Resolve common blocks.  */
725 static void
726 resolve_common_blocks (gfc_symtree *common_root)
727 {
728   gfc_symbol *sym;
729
730   if (common_root == NULL)
731     return;
732
733   if (common_root->left)
734     resolve_common_blocks (common_root->left);
735   if (common_root->right)
736     resolve_common_blocks (common_root->right);
737
738   resolve_common_vars (common_root->n.common->head, true);
739
740   gfc_find_symbol (common_root->name, gfc_current_ns, 0, &sym);
741   if (sym == NULL)
742     return;
743
744   if (sym->attr.flavor == FL_PARAMETER)
745     gfc_error ("COMMON block '%s' at %L is used as PARAMETER at %L",
746                sym->name, &common_root->n.common->where, &sym->declared_at);
747
748   if (sym->attr.intrinsic)
749     gfc_error ("COMMON block '%s' at %L is also an intrinsic procedure",
750                sym->name, &common_root->n.common->where);
751   else if (sym->attr.result
752            ||(sym->attr.function && gfc_current_ns->proc_name == sym))
753     gfc_notify_std (GFC_STD_F2003, "Fortran 2003: COMMON block '%s' at %L "
754                     "that is also a function result", sym->name,
755                     &common_root->n.common->where);
756   else if (sym->attr.flavor == FL_PROCEDURE && sym->attr.proc != PROC_INTERNAL
757            && sym->attr.proc != PROC_ST_FUNCTION)
758     gfc_notify_std (GFC_STD_F2003, "Fortran 2003: COMMON block '%s' at %L "
759                     "that is also a global procedure", sym->name,
760                     &common_root->n.common->where);
761 }
762
763
764 /* Resolve contained function types.  Because contained functions can call one
765    another, they have to be worked out before any of the contained procedures
766    can be resolved.
767
768    The good news is that if a function doesn't already have a type, the only
769    way it can get one is through an IMPLICIT type or a RESULT variable, because
770    by definition contained functions are contained namespace they're contained
771    in, not in a sibling or parent namespace.  */
772
773 static void
774 resolve_contained_functions (gfc_namespace *ns)
775 {
776   gfc_namespace *child;
777   gfc_entry_list *el;
778
779   resolve_formal_arglists (ns);
780
781   for (child = ns->contained; child; child = child->sibling)
782     {
783       /* Resolve alternate entry points first.  */
784       resolve_entries (child);
785
786       /* Then check function return types.  */
787       resolve_contained_fntype (child->proc_name, child);
788       for (el = child->entries; el; el = el->next)
789         resolve_contained_fntype (el->sym, child);
790     }
791 }
792
793
794 /* Resolve all of the elements of a structure constructor and make sure that
795    the types are correct.  */
796
797 static gfc_try
798 resolve_structure_cons (gfc_expr *expr)
799 {
800   gfc_constructor *cons;
801   gfc_component *comp;
802   gfc_try t;
803   symbol_attribute a;
804
805   t = SUCCESS;
806   cons = expr->value.constructor;
807   /* A constructor may have references if it is the result of substituting a
808      parameter variable.  In this case we just pull out the component we
809      want.  */
810   if (expr->ref)
811     comp = expr->ref->u.c.sym->components;
812   else
813     comp = expr->ts.derived->components;
814
815   /* See if the user is trying to invoke a structure constructor for one of
816      the iso_c_binding derived types.  */
817   if (expr->ts.derived && expr->ts.derived->ts.is_iso_c && cons
818       && cons->expr != NULL)
819     {
820       gfc_error ("Components of structure constructor '%s' at %L are PRIVATE",
821                  expr->ts.derived->name, &(expr->where));
822       return FAILURE;
823     }
824
825   for (; comp; comp = comp->next, cons = cons->next)
826     {
827       int rank;
828
829       if (!cons->expr)
830         continue;
831
832       if (gfc_resolve_expr (cons->expr) == FAILURE)
833         {
834           t = FAILURE;
835           continue;
836         }
837
838       rank = comp->as ? comp->as->rank : 0;
839       if (cons->expr->expr_type != EXPR_NULL && rank != cons->expr->rank
840           && (comp->attr.allocatable || cons->expr->rank))
841         {
842           gfc_error ("The rank of the element in the derived type "
843                      "constructor at %L does not match that of the "
844                      "component (%d/%d)", &cons->expr->where,
845                      cons->expr->rank, rank);
846           t = FAILURE;
847         }
848
849       /* If we don't have the right type, try to convert it.  */
850
851       if (!gfc_compare_types (&cons->expr->ts, &comp->ts))
852         {
853           t = FAILURE;
854           if (comp->attr.pointer && cons->expr->ts.type != BT_UNKNOWN)
855             gfc_error ("The element in the derived type constructor at %L, "
856                        "for pointer component '%s', is %s but should be %s",
857                        &cons->expr->where, comp->name,
858                        gfc_basic_typename (cons->expr->ts.type),
859                        gfc_basic_typename (comp->ts.type));
860           else
861             t = gfc_convert_type (cons->expr, &comp->ts, 1);
862         }
863
864       if (cons->expr->expr_type == EXPR_NULL
865             && !(comp->attr.pointer || comp->attr.allocatable))
866         {
867           t = FAILURE;
868           gfc_error ("The NULL in the derived type constructor at %L is "
869                      "being applied to component '%s', which is neither "
870                      "a POINTER nor ALLOCATABLE", &cons->expr->where,
871                      comp->name);
872         }
873
874       if (!comp->attr.pointer || cons->expr->expr_type == EXPR_NULL)
875         continue;
876
877       a = gfc_expr_attr (cons->expr);
878
879       if (!a.pointer && !a.target)
880         {
881           t = FAILURE;
882           gfc_error ("The element in the derived type constructor at %L, "
883                      "for pointer component '%s' should be a POINTER or "
884                      "a TARGET", &cons->expr->where, comp->name);
885         }
886     }
887
888   return t;
889 }
890
891
892 /****************** Expression name resolution ******************/
893
894 /* Returns 0 if a symbol was not declared with a type or
895    attribute declaration statement, nonzero otherwise.  */
896
897 static int
898 was_declared (gfc_symbol *sym)
899 {
900   symbol_attribute a;
901
902   a = sym->attr;
903
904   if (!a.implicit_type && sym->ts.type != BT_UNKNOWN)
905     return 1;
906
907   if (a.allocatable || a.dimension || a.dummy || a.external || a.intrinsic
908       || a.optional || a.pointer || a.save || a.target || a.volatile_
909       || a.value || a.access != ACCESS_UNKNOWN || a.intent != INTENT_UNKNOWN)
910     return 1;
911
912   return 0;
913 }
914
915
916 /* Determine if a symbol is generic or not.  */
917
918 static int
919 generic_sym (gfc_symbol *sym)
920 {
921   gfc_symbol *s;
922
923   if (sym->attr.generic ||
924       (sym->attr.intrinsic && gfc_generic_intrinsic (sym->name)))
925     return 1;
926
927   if (was_declared (sym) || sym->ns->parent == NULL)
928     return 0;
929
930   gfc_find_symbol (sym->name, sym->ns->parent, 1, &s);
931   
932   if (s != NULL)
933     {
934       if (s == sym)
935         return 0;
936       else
937         return generic_sym (s);
938     }
939
940   return 0;
941 }
942
943
944 /* Determine if a symbol is specific or not.  */
945
946 static int
947 specific_sym (gfc_symbol *sym)
948 {
949   gfc_symbol *s;
950
951   if (sym->attr.if_source == IFSRC_IFBODY
952       || sym->attr.proc == PROC_MODULE
953       || sym->attr.proc == PROC_INTERNAL
954       || sym->attr.proc == PROC_ST_FUNCTION
955       || (sym->attr.intrinsic && gfc_specific_intrinsic (sym->name))
956       || sym->attr.external)
957     return 1;
958
959   if (was_declared (sym) || sym->ns->parent == NULL)
960     return 0;
961
962   gfc_find_symbol (sym->name, sym->ns->parent, 1, &s);
963
964   return (s == NULL) ? 0 : specific_sym (s);
965 }
966
967
968 /* Figure out if the procedure is specific, generic or unknown.  */
969
970 typedef enum
971 { PTYPE_GENERIC = 1, PTYPE_SPECIFIC, PTYPE_UNKNOWN }
972 proc_type;
973
974 static proc_type
975 procedure_kind (gfc_symbol *sym)
976 {
977   if (generic_sym (sym))
978     return PTYPE_GENERIC;
979
980   if (specific_sym (sym))
981     return PTYPE_SPECIFIC;
982
983   return PTYPE_UNKNOWN;
984 }
985
986 /* Check references to assumed size arrays.  The flag need_full_assumed_size
987    is nonzero when matching actual arguments.  */
988
989 static int need_full_assumed_size = 0;
990
991 static bool
992 check_assumed_size_reference (gfc_symbol *sym, gfc_expr *e)
993 {
994   if (need_full_assumed_size || !(sym->as && sym->as->type == AS_ASSUMED_SIZE))
995       return false;
996
997   /* FIXME: The comparison "e->ref->u.ar.type == AR_FULL" is wrong.
998      What should it be?  */
999   if ((e->ref->u.ar.end[e->ref->u.ar.as->rank - 1] == NULL)
1000           && (e->ref->u.ar.as->type == AS_ASSUMED_SIZE)
1001                && (e->ref->u.ar.type == AR_FULL))
1002     {
1003       gfc_error ("The upper bound in the last dimension must "
1004                  "appear in the reference to the assumed size "
1005                  "array '%s' at %L", sym->name, &e->where);
1006       return true;
1007     }
1008   return false;
1009 }
1010
1011
1012 /* Look for bad assumed size array references in argument expressions
1013   of elemental and array valued intrinsic procedures.  Since this is
1014   called from procedure resolution functions, it only recurses at
1015   operators.  */
1016
1017 static bool
1018 resolve_assumed_size_actual (gfc_expr *e)
1019 {
1020   if (e == NULL)
1021    return false;
1022
1023   switch (e->expr_type)
1024     {
1025     case EXPR_VARIABLE:
1026       if (e->symtree && check_assumed_size_reference (e->symtree->n.sym, e))
1027         return true;
1028       break;
1029
1030     case EXPR_OP:
1031       if (resolve_assumed_size_actual (e->value.op.op1)
1032           || resolve_assumed_size_actual (e->value.op.op2))
1033         return true;
1034       break;
1035
1036     default:
1037       break;
1038     }
1039   return false;
1040 }
1041
1042
1043 /* Check a generic procedure, passed as an actual argument, to see if
1044    there is a matching specific name.  If none, it is an error, and if
1045    more than one, the reference is ambiguous.  */
1046 static int
1047 count_specific_procs (gfc_expr *e)
1048 {
1049   int n;
1050   gfc_interface *p;
1051   gfc_symbol *sym;
1052         
1053   n = 0;
1054   sym = e->symtree->n.sym;
1055
1056   for (p = sym->generic; p; p = p->next)
1057     if (strcmp (sym->name, p->sym->name) == 0)
1058       {
1059         e->symtree = gfc_find_symtree (p->sym->ns->sym_root,
1060                                        sym->name);
1061         n++;
1062       }
1063
1064   if (n > 1)
1065     gfc_error ("'%s' at %L is ambiguous", e->symtree->n.sym->name,
1066                &e->where);
1067
1068   if (n == 0)
1069     gfc_error ("GENERIC procedure '%s' is not allowed as an actual "
1070                "argument at %L", sym->name, &e->where);
1071
1072   return n;
1073 }
1074
1075 /* Resolve an actual argument list.  Most of the time, this is just
1076    resolving the expressions in the list.
1077    The exception is that we sometimes have to decide whether arguments
1078    that look like procedure arguments are really simple variable
1079    references.  */
1080
1081 static gfc_try
1082 resolve_actual_arglist (gfc_actual_arglist *arg, procedure_type ptype,
1083                         bool no_formal_args)
1084 {
1085   gfc_symbol *sym;
1086   gfc_symtree *parent_st;
1087   gfc_expr *e;
1088   int save_need_full_assumed_size;
1089         
1090   for (; arg; arg = arg->next)
1091     {
1092       e = arg->expr;
1093       if (e == NULL)
1094         {
1095           /* Check the label is a valid branching target.  */
1096           if (arg->label)
1097             {
1098               if (arg->label->defined == ST_LABEL_UNKNOWN)
1099                 {
1100                   gfc_error ("Label %d referenced at %L is never defined",
1101                              arg->label->value, &arg->label->where);
1102                   return FAILURE;
1103                 }
1104             }
1105           continue;
1106         }
1107
1108       if (e->expr_type == FL_VARIABLE
1109             && e->symtree->n.sym->attr.generic
1110             && no_formal_args
1111             && count_specific_procs (e) != 1)
1112         return FAILURE;
1113
1114       if (e->ts.type != BT_PROCEDURE)
1115         {
1116           save_need_full_assumed_size = need_full_assumed_size;
1117           if (e->expr_type != EXPR_VARIABLE)
1118             need_full_assumed_size = 0;
1119           if (gfc_resolve_expr (e) != SUCCESS)
1120             return FAILURE;
1121           need_full_assumed_size = save_need_full_assumed_size;
1122           goto argument_list;
1123         }
1124
1125       /* See if the expression node should really be a variable reference.  */
1126
1127       sym = e->symtree->n.sym;
1128
1129       if (sym->attr.flavor == FL_PROCEDURE
1130           || sym->attr.intrinsic
1131           || sym->attr.external)
1132         {
1133           int actual_ok;
1134
1135           /* If a procedure is not already determined to be something else
1136              check if it is intrinsic.  */
1137           if (!sym->attr.intrinsic
1138               && !(sym->attr.external || sym->attr.use_assoc
1139                    || sym->attr.if_source == IFSRC_IFBODY)
1140               && gfc_is_intrinsic (sym, sym->attr.subroutine, e->where))
1141             sym->attr.intrinsic = 1;
1142
1143           if (sym->attr.proc == PROC_ST_FUNCTION)
1144             {
1145               gfc_error ("Statement function '%s' at %L is not allowed as an "
1146                          "actual argument", sym->name, &e->where);
1147             }
1148
1149           actual_ok = gfc_intrinsic_actual_ok (sym->name,
1150                                                sym->attr.subroutine);
1151           if (sym->attr.intrinsic && actual_ok == 0)
1152             {
1153               gfc_error ("Intrinsic '%s' at %L is not allowed as an "
1154                          "actual argument", sym->name, &e->where);
1155             }
1156
1157           if (sym->attr.contained && !sym->attr.use_assoc
1158               && sym->ns->proc_name->attr.flavor != FL_MODULE)
1159             {
1160               gfc_error ("Internal procedure '%s' is not allowed as an "
1161                          "actual argument at %L", sym->name, &e->where);
1162             }
1163
1164           if (sym->attr.elemental && !sym->attr.intrinsic)
1165             {
1166               gfc_error ("ELEMENTAL non-INTRINSIC procedure '%s' is not "
1167                          "allowed as an actual argument at %L", sym->name,
1168                          &e->where);
1169             }
1170
1171           /* Check if a generic interface has a specific procedure
1172             with the same name before emitting an error.  */
1173           if (sym->attr.generic && count_specific_procs (e) != 1)
1174             return FAILURE;
1175           
1176           /* Just in case a specific was found for the expression.  */
1177           sym = e->symtree->n.sym;
1178
1179           if (sym->attr.entry && sym->ns->entries
1180                 && sym->ns == gfc_current_ns
1181                 && !sym->ns->entries->sym->attr.recursive)
1182             {
1183               gfc_error ("Reference to ENTRY '%s' at %L is recursive, but procedure "
1184                          "'%s' is not declared as RECURSIVE",
1185                          sym->name, &e->where, sym->ns->entries->sym->name);
1186             }
1187
1188           /* If the symbol is the function that names the current (or
1189              parent) scope, then we really have a variable reference.  */
1190
1191           if (sym->attr.function && sym->result == sym
1192               && (sym->ns->proc_name == sym
1193                   || (sym->ns->parent != NULL
1194                       && sym->ns->parent->proc_name == sym)))
1195             goto got_variable;
1196
1197           /* If all else fails, see if we have a specific intrinsic.  */
1198           if (sym->ts.type == BT_UNKNOWN && sym->attr.intrinsic)
1199             {
1200               gfc_intrinsic_sym *isym;
1201
1202               isym = gfc_find_function (sym->name);
1203               if (isym == NULL || !isym->specific)
1204                 {
1205                   gfc_error ("Unable to find a specific INTRINSIC procedure "
1206                              "for the reference '%s' at %L", sym->name,
1207                              &e->where);
1208                   return FAILURE;
1209                 }
1210               sym->ts = isym->ts;
1211               sym->attr.intrinsic = 1;
1212               sym->attr.function = 1;
1213             }
1214           goto argument_list;
1215         }
1216
1217       /* See if the name is a module procedure in a parent unit.  */
1218
1219       if (was_declared (sym) || sym->ns->parent == NULL)
1220         goto got_variable;
1221
1222       if (gfc_find_sym_tree (sym->name, sym->ns->parent, 1, &parent_st))
1223         {
1224           gfc_error ("Symbol '%s' at %L is ambiguous", sym->name, &e->where);
1225           return FAILURE;
1226         }
1227
1228       if (parent_st == NULL)
1229         goto got_variable;
1230
1231       sym = parent_st->n.sym;
1232       e->symtree = parent_st;           /* Point to the right thing.  */
1233
1234       if (sym->attr.flavor == FL_PROCEDURE
1235           || sym->attr.intrinsic
1236           || sym->attr.external)
1237         {
1238           goto argument_list;
1239         }
1240
1241     got_variable:
1242       e->expr_type = EXPR_VARIABLE;
1243       e->ts = sym->ts;
1244       if (sym->as != NULL)
1245         {
1246           e->rank = sym->as->rank;
1247           e->ref = gfc_get_ref ();
1248           e->ref->type = REF_ARRAY;
1249           e->ref->u.ar.type = AR_FULL;
1250           e->ref->u.ar.as = sym->as;
1251         }
1252
1253       /* Expressions are assigned a default ts.type of BT_PROCEDURE in
1254          primary.c (match_actual_arg). If above code determines that it
1255          is a  variable instead, it needs to be resolved as it was not
1256          done at the beginning of this function.  */
1257       save_need_full_assumed_size = need_full_assumed_size;
1258       if (e->expr_type != EXPR_VARIABLE)
1259         need_full_assumed_size = 0;
1260       if (gfc_resolve_expr (e) != SUCCESS)
1261         return FAILURE;
1262       need_full_assumed_size = save_need_full_assumed_size;
1263
1264     argument_list:
1265       /* Check argument list functions %VAL, %LOC and %REF.  There is
1266          nothing to do for %REF.  */
1267       if (arg->name && arg->name[0] == '%')
1268         {
1269           if (strncmp ("%VAL", arg->name, 4) == 0)
1270             {
1271               if (e->ts.type == BT_CHARACTER || e->ts.type == BT_DERIVED)
1272                 {
1273                   gfc_error ("By-value argument at %L is not of numeric "
1274                              "type", &e->where);
1275                   return FAILURE;
1276                 }
1277
1278               if (e->rank)
1279                 {
1280                   gfc_error ("By-value argument at %L cannot be an array or "
1281                              "an array section", &e->where);
1282                 return FAILURE;
1283                 }
1284
1285               /* Intrinsics are still PROC_UNKNOWN here.  However,
1286                  since same file external procedures are not resolvable
1287                  in gfortran, it is a good deal easier to leave them to
1288                  intrinsic.c.  */
1289               if (ptype != PROC_UNKNOWN
1290                   && ptype != PROC_DUMMY
1291                   && ptype != PROC_EXTERNAL
1292                   && ptype != PROC_MODULE)
1293                 {
1294                   gfc_error ("By-value argument at %L is not allowed "
1295                              "in this context", &e->where);
1296                   return FAILURE;
1297                 }
1298             }
1299
1300           /* Statement functions have already been excluded above.  */
1301           else if (strncmp ("%LOC", arg->name, 4) == 0
1302                    && e->ts.type == BT_PROCEDURE)
1303             {
1304               if (e->symtree->n.sym->attr.proc == PROC_INTERNAL)
1305                 {
1306                   gfc_error ("Passing internal procedure at %L by location "
1307                              "not allowed", &e->where);
1308                   return FAILURE;
1309                 }
1310             }
1311         }
1312     }
1313
1314   return SUCCESS;
1315 }
1316
1317
1318 /* Do the checks of the actual argument list that are specific to elemental
1319    procedures.  If called with c == NULL, we have a function, otherwise if
1320    expr == NULL, we have a subroutine.  */
1321
1322 static gfc_try
1323 resolve_elemental_actual (gfc_expr *expr, gfc_code *c)
1324 {
1325   gfc_actual_arglist *arg0;
1326   gfc_actual_arglist *arg;
1327   gfc_symbol *esym = NULL;
1328   gfc_intrinsic_sym *isym = NULL;
1329   gfc_expr *e = NULL;
1330   gfc_intrinsic_arg *iformal = NULL;
1331   gfc_formal_arglist *eformal = NULL;
1332   bool formal_optional = false;
1333   bool set_by_optional = false;
1334   int i;
1335   int rank = 0;
1336
1337   /* Is this an elemental procedure?  */
1338   if (expr && expr->value.function.actual != NULL)
1339     {
1340       if (expr->value.function.esym != NULL
1341           && expr->value.function.esym->attr.elemental)
1342         {
1343           arg0 = expr->value.function.actual;
1344           esym = expr->value.function.esym;
1345         }
1346       else if (expr->value.function.isym != NULL
1347                && expr->value.function.isym->elemental)
1348         {
1349           arg0 = expr->value.function.actual;
1350           isym = expr->value.function.isym;
1351         }
1352       else
1353         return SUCCESS;
1354     }
1355   else if (c && c->ext.actual != NULL && c->symtree->n.sym->attr.elemental)
1356     {
1357       arg0 = c->ext.actual;
1358       esym = c->symtree->n.sym;
1359     }
1360   else
1361     return SUCCESS;
1362
1363   /* The rank of an elemental is the rank of its array argument(s).  */
1364   for (arg = arg0; arg; arg = arg->next)
1365     {
1366       if (arg->expr != NULL && arg->expr->rank > 0)
1367         {
1368           rank = arg->expr->rank;
1369           if (arg->expr->expr_type == EXPR_VARIABLE
1370               && arg->expr->symtree->n.sym->attr.optional)
1371             set_by_optional = true;
1372
1373           /* Function specific; set the result rank and shape.  */
1374           if (expr)
1375             {
1376               expr->rank = rank;
1377               if (!expr->shape && arg->expr->shape)
1378                 {
1379                   expr->shape = gfc_get_shape (rank);
1380                   for (i = 0; i < rank; i++)
1381                     mpz_init_set (expr->shape[i], arg->expr->shape[i]);
1382                 }
1383             }
1384           break;
1385         }
1386     }
1387
1388   /* If it is an array, it shall not be supplied as an actual argument
1389      to an elemental procedure unless an array of the same rank is supplied
1390      as an actual argument corresponding to a nonoptional dummy argument of
1391      that elemental procedure(12.4.1.5).  */
1392   formal_optional = false;
1393   if (isym)
1394     iformal = isym->formal;
1395   else
1396     eformal = esym->formal;
1397
1398   for (arg = arg0; arg; arg = arg->next)
1399     {
1400       if (eformal)
1401         {
1402           if (eformal->sym && eformal->sym->attr.optional)
1403             formal_optional = true;
1404           eformal = eformal->next;
1405         }
1406       else if (isym && iformal)
1407         {
1408           if (iformal->optional)
1409             formal_optional = true;
1410           iformal = iformal->next;
1411         }
1412       else if (isym)
1413         formal_optional = true;
1414
1415       if (pedantic && arg->expr != NULL
1416           && arg->expr->expr_type == EXPR_VARIABLE
1417           && arg->expr->symtree->n.sym->attr.optional
1418           && formal_optional
1419           && arg->expr->rank
1420           && (set_by_optional || arg->expr->rank != rank)
1421           && !(isym && isym->id == GFC_ISYM_CONVERSION))
1422         {
1423           gfc_warning ("'%s' at %L is an array and OPTIONAL; IF IT IS "
1424                        "MISSING, it cannot be the actual argument of an "
1425                        "ELEMENTAL procedure unless there is a non-optional "
1426                        "argument with the same rank (12.4.1.5)",
1427                        arg->expr->symtree->n.sym->name, &arg->expr->where);
1428           return FAILURE;
1429         }
1430     }
1431
1432   for (arg = arg0; arg; arg = arg->next)
1433     {
1434       if (arg->expr == NULL || arg->expr->rank == 0)
1435         continue;
1436
1437       /* Being elemental, the last upper bound of an assumed size array
1438          argument must be present.  */
1439       if (resolve_assumed_size_actual (arg->expr))
1440         return FAILURE;
1441
1442       /* Elemental procedure's array actual arguments must conform.  */
1443       if (e != NULL)
1444         {
1445           if (gfc_check_conformance ("elemental procedure", arg->expr, e)
1446               == FAILURE)
1447             return FAILURE;
1448         }
1449       else
1450         e = arg->expr;
1451     }
1452
1453   /* INTENT(OUT) is only allowed for subroutines; if any actual argument
1454      is an array, the intent inout/out variable needs to be also an array.  */
1455   if (rank > 0 && esym && expr == NULL)
1456     for (eformal = esym->formal, arg = arg0; arg && eformal;
1457          arg = arg->next, eformal = eformal->next)
1458       if ((eformal->sym->attr.intent == INTENT_OUT
1459            || eformal->sym->attr.intent == INTENT_INOUT)
1460           && arg->expr && arg->expr->rank == 0)
1461         {
1462           gfc_error ("Actual argument at %L for INTENT(%s) dummy '%s' of "
1463                      "ELEMENTAL subroutine '%s' is a scalar, but another "
1464                      "actual argument is an array", &arg->expr->where,
1465                      (eformal->sym->attr.intent == INTENT_OUT) ? "OUT"
1466                      : "INOUT", eformal->sym->name, esym->name);
1467           return FAILURE;
1468         }
1469   return SUCCESS;
1470 }
1471
1472
1473 /* Go through each actual argument in ACTUAL and see if it can be
1474    implemented as an inlined, non-copying intrinsic.  FNSYM is the
1475    function being called, or NULL if not known.  */
1476
1477 static void
1478 find_noncopying_intrinsics (gfc_symbol *fnsym, gfc_actual_arglist *actual)
1479 {
1480   gfc_actual_arglist *ap;
1481   gfc_expr *expr;
1482
1483   for (ap = actual; ap; ap = ap->next)
1484     if (ap->expr
1485         && (expr = gfc_get_noncopying_intrinsic_argument (ap->expr))
1486         && !gfc_check_fncall_dependency (expr, INTENT_IN, fnsym, actual))
1487       ap->expr->inline_noncopying_intrinsic = 1;
1488 }
1489
1490
1491 /* This function does the checking of references to global procedures
1492    as defined in sections 18.1 and 14.1, respectively, of the Fortran
1493    77 and 95 standards.  It checks for a gsymbol for the name, making
1494    one if it does not already exist.  If it already exists, then the
1495    reference being resolved must correspond to the type of gsymbol.
1496    Otherwise, the new symbol is equipped with the attributes of the
1497    reference.  The corresponding code that is called in creating
1498    global entities is parse.c.  */
1499
1500 static void
1501 resolve_global_procedure (gfc_symbol *sym, locus *where, int sub)
1502 {
1503   gfc_gsymbol * gsym;
1504   unsigned int type;
1505
1506   type = sub ? GSYM_SUBROUTINE : GSYM_FUNCTION;
1507
1508   gsym = gfc_get_gsymbol (sym->name);
1509
1510   if ((gsym->type != GSYM_UNKNOWN && gsym->type != type))
1511     gfc_global_used (gsym, where);
1512
1513   if (gsym->type == GSYM_UNKNOWN)
1514     {
1515       gsym->type = type;
1516       gsym->where = *where;
1517     }
1518
1519   gsym->used = 1;
1520 }
1521
1522
1523 /************* Function resolution *************/
1524
1525 /* Resolve a function call known to be generic.
1526    Section 14.1.2.4.1.  */
1527
1528 static match
1529 resolve_generic_f0 (gfc_expr *expr, gfc_symbol *sym)
1530 {
1531   gfc_symbol *s;
1532
1533   if (sym->attr.generic)
1534     {
1535       s = gfc_search_interface (sym->generic, 0, &expr->value.function.actual);
1536       if (s != NULL)
1537         {
1538           expr->value.function.name = s->name;
1539           expr->value.function.esym = s;
1540
1541           if (s->ts.type != BT_UNKNOWN)
1542             expr->ts = s->ts;
1543           else if (s->result != NULL && s->result->ts.type != BT_UNKNOWN)
1544             expr->ts = s->result->ts;
1545
1546           if (s->as != NULL)
1547             expr->rank = s->as->rank;
1548           else if (s->result != NULL && s->result->as != NULL)
1549             expr->rank = s->result->as->rank;
1550
1551           gfc_set_sym_referenced (expr->value.function.esym);
1552
1553           return MATCH_YES;
1554         }
1555
1556       /* TODO: Need to search for elemental references in generic
1557          interface.  */
1558     }
1559
1560   if (sym->attr.intrinsic)
1561     return gfc_intrinsic_func_interface (expr, 0);
1562
1563   return MATCH_NO;
1564 }
1565
1566
1567 static gfc_try
1568 resolve_generic_f (gfc_expr *expr)
1569 {
1570   gfc_symbol *sym;
1571   match m;
1572
1573   sym = expr->symtree->n.sym;
1574
1575   for (;;)
1576     {
1577       m = resolve_generic_f0 (expr, sym);
1578       if (m == MATCH_YES)
1579         return SUCCESS;
1580       else if (m == MATCH_ERROR)
1581         return FAILURE;
1582
1583 generic:
1584       if (sym->ns->parent == NULL)
1585         break;
1586       gfc_find_symbol (sym->name, sym->ns->parent, 1, &sym);
1587
1588       if (sym == NULL)
1589         break;
1590       if (!generic_sym (sym))
1591         goto generic;
1592     }
1593
1594   /* Last ditch attempt.  See if the reference is to an intrinsic
1595      that possesses a matching interface.  14.1.2.4  */
1596   if (sym && !gfc_is_intrinsic (sym, 0, expr->where))
1597     {
1598       gfc_error ("There is no specific function for the generic '%s' at %L",
1599                  expr->symtree->n.sym->name, &expr->where);
1600       return FAILURE;
1601     }
1602
1603   m = gfc_intrinsic_func_interface (expr, 0);
1604   if (m == MATCH_YES)
1605     return SUCCESS;
1606   if (m == MATCH_NO)
1607     gfc_error ("Generic function '%s' at %L is not consistent with a "
1608                "specific intrinsic interface", expr->symtree->n.sym->name,
1609                &expr->where);
1610
1611   return FAILURE;
1612 }
1613
1614
1615 /* Resolve a function call known to be specific.  */
1616
1617 static match
1618 resolve_specific_f0 (gfc_symbol *sym, gfc_expr *expr)
1619 {
1620   match m;
1621
1622   /* See if we have an intrinsic interface.  */
1623
1624   if (sym->ts.interface != NULL && sym->ts.interface->attr.intrinsic)
1625     {
1626       gfc_intrinsic_sym *isym;
1627       isym = gfc_find_function (sym->ts.interface->name);
1628
1629       /* Existence of isym should be checked already.  */
1630       gcc_assert (isym);
1631
1632       sym->ts.type = isym->ts.type;
1633       sym->ts.kind = isym->ts.kind;
1634       sym->attr.function = 1;
1635       sym->attr.proc = PROC_EXTERNAL;
1636       goto found;
1637     }
1638
1639   if (sym->attr.external || sym->attr.if_source == IFSRC_IFBODY)
1640     {
1641       if (sym->attr.dummy)
1642         {
1643           sym->attr.proc = PROC_DUMMY;
1644           goto found;
1645         }
1646
1647       sym->attr.proc = PROC_EXTERNAL;
1648       goto found;
1649     }
1650
1651   if (sym->attr.proc == PROC_MODULE
1652       || sym->attr.proc == PROC_ST_FUNCTION
1653       || sym->attr.proc == PROC_INTERNAL)
1654     goto found;
1655
1656   if (sym->attr.intrinsic)
1657     {
1658       m = gfc_intrinsic_func_interface (expr, 1);
1659       if (m == MATCH_YES)
1660         return MATCH_YES;
1661       if (m == MATCH_NO)
1662         gfc_error ("Function '%s' at %L is INTRINSIC but is not compatible "
1663                    "with an intrinsic", sym->name, &expr->where);
1664
1665       return MATCH_ERROR;
1666     }
1667
1668   return MATCH_NO;
1669
1670 found:
1671   gfc_procedure_use (sym, &expr->value.function.actual, &expr->where);
1672
1673   expr->ts = sym->ts;
1674   expr->value.function.name = sym->name;
1675   expr->value.function.esym = sym;
1676   if (sym->as != NULL)
1677     expr->rank = sym->as->rank;
1678
1679   return MATCH_YES;
1680 }
1681
1682
1683 static gfc_try
1684 resolve_specific_f (gfc_expr *expr)
1685 {
1686   gfc_symbol *sym;
1687   match m;
1688
1689   sym = expr->symtree->n.sym;
1690
1691   for (;;)
1692     {
1693       m = resolve_specific_f0 (sym, expr);
1694       if (m == MATCH_YES)
1695         return SUCCESS;
1696       if (m == MATCH_ERROR)
1697         return FAILURE;
1698
1699       if (sym->ns->parent == NULL)
1700         break;
1701
1702       gfc_find_symbol (sym->name, sym->ns->parent, 1, &sym);
1703
1704       if (sym == NULL)
1705         break;
1706     }
1707
1708   gfc_error ("Unable to resolve the specific function '%s' at %L",
1709              expr->symtree->n.sym->name, &expr->where);
1710
1711   return SUCCESS;
1712 }
1713
1714
1715 /* Resolve a procedure call not known to be generic nor specific.  */
1716
1717 static gfc_try
1718 resolve_unknown_f (gfc_expr *expr)
1719 {
1720   gfc_symbol *sym;
1721   gfc_typespec *ts;
1722
1723   sym = expr->symtree->n.sym;
1724
1725   if (sym->attr.dummy)
1726     {
1727       sym->attr.proc = PROC_DUMMY;
1728       expr->value.function.name = sym->name;
1729       goto set_type;
1730     }
1731
1732   /* See if we have an intrinsic function reference.  */
1733
1734   if (gfc_is_intrinsic (sym, 0, expr->where))
1735     {
1736       if (gfc_intrinsic_func_interface (expr, 1) == MATCH_YES)
1737         return SUCCESS;
1738       return FAILURE;
1739     }
1740
1741   /* The reference is to an external name.  */
1742
1743   sym->attr.proc = PROC_EXTERNAL;
1744   expr->value.function.name = sym->name;
1745   expr->value.function.esym = expr->symtree->n.sym;
1746
1747   if (sym->as != NULL)
1748     expr->rank = sym->as->rank;
1749
1750   /* Type of the expression is either the type of the symbol or the
1751      default type of the symbol.  */
1752
1753 set_type:
1754   gfc_procedure_use (sym, &expr->value.function.actual, &expr->where);
1755
1756   if (sym->ts.type != BT_UNKNOWN)
1757     expr->ts = sym->ts;
1758   else
1759     {
1760       ts = gfc_get_default_type (sym, sym->ns);
1761
1762       if (ts->type == BT_UNKNOWN)
1763         {
1764           gfc_error ("Function '%s' at %L has no IMPLICIT type",
1765                      sym->name, &expr->where);
1766           return FAILURE;
1767         }
1768       else
1769         expr->ts = *ts;
1770     }
1771
1772   return SUCCESS;
1773 }
1774
1775
1776 /* Return true, if the symbol is an external procedure.  */
1777 static bool
1778 is_external_proc (gfc_symbol *sym)
1779 {
1780   if (!sym->attr.dummy && !sym->attr.contained
1781         && !(sym->attr.intrinsic
1782               || gfc_is_intrinsic (sym, sym->attr.subroutine, sym->declared_at))
1783         && sym->attr.proc != PROC_ST_FUNCTION
1784         && !sym->attr.use_assoc
1785         && sym->name)
1786     return true;
1787
1788   return false;
1789 }
1790
1791
1792 /* Figure out if a function reference is pure or not.  Also set the name
1793    of the function for a potential error message.  Return nonzero if the
1794    function is PURE, zero if not.  */
1795 static int
1796 pure_stmt_function (gfc_expr *, gfc_symbol *);
1797
1798 static int
1799 pure_function (gfc_expr *e, const char **name)
1800 {
1801   int pure;
1802
1803   *name = NULL;
1804
1805   if (e->symtree != NULL
1806         && e->symtree->n.sym != NULL
1807         && e->symtree->n.sym->attr.proc == PROC_ST_FUNCTION)
1808     return pure_stmt_function (e, e->symtree->n.sym);
1809
1810   if (e->value.function.esym)
1811     {
1812       pure = gfc_pure (e->value.function.esym);
1813       *name = e->value.function.esym->name;
1814     }
1815   else if (e->value.function.isym)
1816     {
1817       pure = e->value.function.isym->pure
1818              || e->value.function.isym->elemental;
1819       *name = e->value.function.isym->name;
1820     }
1821   else
1822     {
1823       /* Implicit functions are not pure.  */
1824       pure = 0;
1825       *name = e->value.function.name;
1826     }
1827
1828   return pure;
1829 }
1830
1831
1832 static bool
1833 impure_stmt_fcn (gfc_expr *e, gfc_symbol *sym,
1834                  int *f ATTRIBUTE_UNUSED)
1835 {
1836   const char *name;
1837
1838   /* Don't bother recursing into other statement functions
1839      since they will be checked individually for purity.  */
1840   if (e->expr_type != EXPR_FUNCTION
1841         || !e->symtree
1842         || e->symtree->n.sym == sym
1843         || e->symtree->n.sym->attr.proc == PROC_ST_FUNCTION)
1844     return false;
1845
1846   return pure_function (e, &name) ? false : true;
1847 }
1848
1849
1850 static int
1851 pure_stmt_function (gfc_expr *e, gfc_symbol *sym)
1852 {
1853   return gfc_traverse_expr (e, sym, impure_stmt_fcn, 0) ? 0 : 1;
1854 }
1855
1856
1857 static gfc_try
1858 is_scalar_expr_ptr (gfc_expr *expr)
1859 {
1860   gfc_try retval = SUCCESS;
1861   gfc_ref *ref;
1862   int start;
1863   int end;
1864
1865   /* See if we have a gfc_ref, which means we have a substring, array
1866      reference, or a component.  */
1867   if (expr->ref != NULL)
1868     {
1869       ref = expr->ref;
1870       while (ref->next != NULL)
1871         ref = ref->next;
1872
1873       switch (ref->type)
1874         {
1875         case REF_SUBSTRING:
1876           if (ref->u.ss.length != NULL 
1877               && ref->u.ss.length->length != NULL
1878               && ref->u.ss.start
1879               && ref->u.ss.start->expr_type == EXPR_CONSTANT 
1880               && ref->u.ss.end
1881               && ref->u.ss.end->expr_type == EXPR_CONSTANT)
1882             {
1883               start = (int) mpz_get_si (ref->u.ss.start->value.integer);
1884               end = (int) mpz_get_si (ref->u.ss.end->value.integer);
1885               if (end - start + 1 != 1)
1886                 retval = FAILURE;
1887             }
1888           else
1889             retval = FAILURE;
1890           break;
1891         case REF_ARRAY:
1892           if (ref->u.ar.type == AR_ELEMENT)
1893             retval = SUCCESS;
1894           else if (ref->u.ar.type == AR_FULL)
1895             {
1896               /* The user can give a full array if the array is of size 1.  */
1897               if (ref->u.ar.as != NULL
1898                   && ref->u.ar.as->rank == 1
1899                   && ref->u.ar.as->type == AS_EXPLICIT
1900                   && ref->u.ar.as->lower[0] != NULL
1901                   && ref->u.ar.as->lower[0]->expr_type == EXPR_CONSTANT
1902                   && ref->u.ar.as->upper[0] != NULL
1903                   && ref->u.ar.as->upper[0]->expr_type == EXPR_CONSTANT)
1904                 {
1905                   /* If we have a character string, we need to check if
1906                      its length is one.  */
1907                   if (expr->ts.type == BT_CHARACTER)
1908                     {
1909                       if (expr->ts.cl == NULL
1910                           || expr->ts.cl->length == NULL
1911                           || mpz_cmp_si (expr->ts.cl->length->value.integer, 1)
1912                           != 0)
1913                         retval = FAILURE;
1914                     }
1915                   else
1916                     {
1917                   /* We have constant lower and upper bounds.  If the
1918                      difference between is 1, it can be considered a
1919                      scalar.  */
1920                   start = (int) mpz_get_si
1921                                 (ref->u.ar.as->lower[0]->value.integer);
1922                   end = (int) mpz_get_si
1923                               (ref->u.ar.as->upper[0]->value.integer);
1924                   if (end - start + 1 != 1)
1925                     retval = FAILURE;
1926                 }
1927                 }
1928               else
1929                 retval = FAILURE;
1930             }
1931           else
1932             retval = FAILURE;
1933           break;
1934         default:
1935           retval = SUCCESS;
1936           break;
1937         }
1938     }
1939   else if (expr->ts.type == BT_CHARACTER && expr->rank == 0)
1940     {
1941       /* Character string.  Make sure it's of length 1.  */
1942       if (expr->ts.cl == NULL
1943           || expr->ts.cl->length == NULL
1944           || mpz_cmp_si (expr->ts.cl->length->value.integer, 1) != 0)
1945         retval = FAILURE;
1946     }
1947   else if (expr->rank != 0)
1948     retval = FAILURE;
1949
1950   return retval;
1951 }
1952
1953
1954 /* Match one of the iso_c_binding functions (c_associated or c_loc)
1955    and, in the case of c_associated, set the binding label based on
1956    the arguments.  */
1957
1958 static gfc_try
1959 gfc_iso_c_func_interface (gfc_symbol *sym, gfc_actual_arglist *args,
1960                           gfc_symbol **new_sym)
1961 {
1962   char name[GFC_MAX_SYMBOL_LEN + 1];
1963   char binding_label[GFC_MAX_BINDING_LABEL_LEN + 1];
1964   int optional_arg = 0;
1965   gfc_try retval = SUCCESS;
1966   gfc_symbol *args_sym;
1967   gfc_typespec *arg_ts;
1968   gfc_ref *parent_ref;
1969   gfc_ref *curr_ref;
1970
1971   if (args->expr->expr_type == EXPR_CONSTANT
1972       || args->expr->expr_type == EXPR_OP
1973       || args->expr->expr_type == EXPR_NULL)
1974     {
1975       gfc_error ("Argument to '%s' at %L is not a variable",
1976                  sym->name, &(args->expr->where));
1977       return FAILURE;
1978     }
1979
1980   args_sym = args->expr->symtree->n.sym;
1981
1982   /* The typespec for the actual arg should be that stored in the expr
1983      and not necessarily that of the expr symbol (args_sym), because
1984      the actual expression could be a part-ref of the expr symbol.  */
1985   arg_ts = &(args->expr->ts);
1986
1987   /* Get the parent reference (if any) for the expression.  This happens for
1988      cases such as a%b%c.  */
1989   parent_ref = args->expr->ref;
1990   curr_ref = NULL;
1991   if (parent_ref != NULL)
1992     {
1993       curr_ref = parent_ref->next;
1994       while (curr_ref != NULL && curr_ref->next != NULL)
1995         {
1996           parent_ref = curr_ref;
1997           curr_ref = curr_ref->next;
1998         }
1999     }
2000
2001   /* If curr_ref is non-NULL, we had a part-ref expression.  If the curr_ref
2002      is for a REF_COMPONENT, then we need to use it as the parent_ref for
2003      the name, etc.  Otherwise, the current parent_ref should be correct.  */
2004   if (curr_ref != NULL && curr_ref->type == REF_COMPONENT)
2005     parent_ref = curr_ref;
2006
2007   if (parent_ref == args->expr->ref)
2008     parent_ref = NULL;
2009   else if (parent_ref != NULL && parent_ref->type != REF_COMPONENT)
2010     gfc_internal_error ("Unexpected expression reference type in "
2011                         "gfc_iso_c_func_interface");
2012
2013   if (sym->intmod_sym_id == ISOCBINDING_ASSOCIATED)
2014     {
2015       /* If the user gave two args then they are providing something for
2016          the optional arg (the second cptr).  Therefore, set the name and
2017          binding label to the c_associated for two cptrs.  Otherwise,
2018          set c_associated to expect one cptr.  */
2019       if (args->next)
2020         {
2021           /* two args.  */
2022           sprintf (name, "%s_2", sym->name);
2023           sprintf (binding_label, "%s_2", sym->binding_label);
2024           optional_arg = 1;
2025         }
2026       else
2027         {
2028           /* one arg.  */
2029           sprintf (name, "%s_1", sym->name);
2030           sprintf (binding_label, "%s_1", sym->binding_label);
2031           optional_arg = 0;
2032         }
2033
2034       /* Get a new symbol for the version of c_associated that
2035          will get called.  */
2036       *new_sym = get_iso_c_sym (sym, name, binding_label, optional_arg);
2037     }
2038   else if (sym->intmod_sym_id == ISOCBINDING_LOC
2039            || sym->intmod_sym_id == ISOCBINDING_FUNLOC)
2040     {
2041       sprintf (name, "%s", sym->name);
2042       sprintf (binding_label, "%s", sym->binding_label);
2043
2044       /* Error check the call.  */
2045       if (args->next != NULL)
2046         {
2047           gfc_error_now ("More actual than formal arguments in '%s' "
2048                          "call at %L", name, &(args->expr->where));
2049           retval = FAILURE;
2050         }
2051       else if (sym->intmod_sym_id == ISOCBINDING_LOC)
2052         {
2053           /* Make sure we have either the target or pointer attribute.  */
2054           if (!(args_sym->attr.target)
2055               && !(args_sym->attr.pointer)
2056               && (parent_ref == NULL ||
2057                   !parent_ref->u.c.component->attr.pointer))
2058             {
2059               gfc_error_now ("Parameter '%s' to '%s' at %L must be either "
2060                              "a TARGET or an associated pointer",
2061                              args_sym->name,
2062                              sym->name, &(args->expr->where));
2063               retval = FAILURE;
2064             }
2065
2066           /* See if we have interoperable type and type param.  */
2067           if (verify_c_interop (arg_ts,
2068                                 (parent_ref ? parent_ref->u.c.component->name 
2069                                  : args_sym->name), 
2070                                 &(args->expr->where)) == SUCCESS
2071               || gfc_check_any_c_kind (arg_ts) == SUCCESS)
2072             {
2073               if (args_sym->attr.target == 1)
2074                 {
2075                   /* Case 1a, section 15.1.2.5, J3/04-007: variable that
2076                      has the target attribute and is interoperable.  */
2077                   /* Case 1b, section 15.1.2.5, J3/04-007: allocated
2078                      allocatable variable that has the TARGET attribute and
2079                      is not an array of zero size.  */
2080                   if (args_sym->attr.allocatable == 1)
2081                     {
2082                       if (args_sym->attr.dimension != 0 
2083                           && (args_sym->as && args_sym->as->rank == 0))
2084                         {
2085                           gfc_error_now ("Allocatable variable '%s' used as a "
2086                                          "parameter to '%s' at %L must not be "
2087                                          "an array of zero size",
2088                                          args_sym->name, sym->name,
2089                                          &(args->expr->where));
2090                           retval = FAILURE;
2091                         }
2092                     }
2093                   else
2094                     {
2095                       /* A non-allocatable target variable with C
2096                          interoperable type and type parameters must be
2097                          interoperable.  */
2098                       if (args_sym && args_sym->attr.dimension)
2099                         {
2100                           if (args_sym->as->type == AS_ASSUMED_SHAPE)
2101                             {
2102                               gfc_error ("Assumed-shape array '%s' at %L "
2103                                          "cannot be an argument to the "
2104                                          "procedure '%s' because "
2105                                          "it is not C interoperable",
2106                                          args_sym->name,
2107                                          &(args->expr->where), sym->name);
2108                               retval = FAILURE;
2109                             }
2110                           else if (args_sym->as->type == AS_DEFERRED)
2111                             {
2112                               gfc_error ("Deferred-shape array '%s' at %L "
2113                                          "cannot be an argument to the "
2114                                          "procedure '%s' because "
2115                                          "it is not C interoperable",
2116                                          args_sym->name,
2117                                          &(args->expr->where), sym->name);
2118                               retval = FAILURE;
2119                             }
2120                         }
2121                               
2122                       /* Make sure it's not a character string.  Arrays of
2123                          any type should be ok if the variable is of a C
2124                          interoperable type.  */
2125                       if (arg_ts->type == BT_CHARACTER)
2126                         if (arg_ts->cl != NULL
2127                             && (arg_ts->cl->length == NULL
2128                                 || arg_ts->cl->length->expr_type
2129                                    != EXPR_CONSTANT
2130                                 || mpz_cmp_si
2131                                     (arg_ts->cl->length->value.integer, 1)
2132                                    != 0)
2133                             && is_scalar_expr_ptr (args->expr) != SUCCESS)
2134                           {
2135                             gfc_error_now ("CHARACTER argument '%s' to '%s' "
2136                                            "at %L must have a length of 1",
2137                                            args_sym->name, sym->name,
2138                                            &(args->expr->where));
2139                             retval = FAILURE;
2140                           }
2141                     }
2142                 }
2143               else if ((args_sym->attr.pointer == 1 ||
2144                         (parent_ref != NULL 
2145                          && parent_ref->u.c.component->attr.pointer))
2146                        && is_scalar_expr_ptr (args->expr) != SUCCESS)
2147                 {
2148                   /* Case 1c, section 15.1.2.5, J3/04-007: an associated
2149                      scalar pointer.  */
2150                   gfc_error_now ("Argument '%s' to '%s' at %L must be an "
2151                                  "associated scalar POINTER", args_sym->name,
2152                                  sym->name, &(args->expr->where));
2153                   retval = FAILURE;
2154                 }
2155             }
2156           else
2157             {
2158               /* The parameter is not required to be C interoperable.  If it
2159                  is not C interoperable, it must be a nonpolymorphic scalar
2160                  with no length type parameters.  It still must have either
2161                  the pointer or target attribute, and it can be
2162                  allocatable (but must be allocated when c_loc is called).  */
2163               if (args->expr->rank != 0 
2164                   && is_scalar_expr_ptr (args->expr) != SUCCESS)
2165                 {
2166                   gfc_error_now ("Parameter '%s' to '%s' at %L must be a "
2167                                  "scalar", args_sym->name, sym->name,
2168                                  &(args->expr->where));
2169                   retval = FAILURE;
2170                 }
2171               else if (arg_ts->type == BT_CHARACTER 
2172                        && is_scalar_expr_ptr (args->expr) != SUCCESS)
2173                 {
2174                   gfc_error_now ("CHARACTER argument '%s' to '%s' at "
2175                                  "%L must have a length of 1",
2176                                  args_sym->name, sym->name,
2177                                  &(args->expr->where));
2178                   retval = FAILURE;
2179                 }
2180             }
2181         }
2182       else if (sym->intmod_sym_id == ISOCBINDING_FUNLOC)
2183         {
2184           if (args_sym->attr.flavor != FL_PROCEDURE)
2185             {
2186               /* TODO: Update this error message to allow for procedure
2187                  pointers once they are implemented.  */
2188               gfc_error_now ("Parameter '%s' to '%s' at %L must be a "
2189                              "procedure",
2190                              args_sym->name, sym->name,
2191                              &(args->expr->where));
2192               retval = FAILURE;
2193             }
2194           else if (args_sym->attr.is_bind_c != 1)
2195             {
2196               gfc_error_now ("Parameter '%s' to '%s' at %L must be "
2197                              "BIND(C)",
2198                              args_sym->name, sym->name,
2199                              &(args->expr->where));
2200               retval = FAILURE;
2201             }
2202         }
2203       
2204       /* for c_loc/c_funloc, the new symbol is the same as the old one */
2205       *new_sym = sym;
2206     }
2207   else
2208     {
2209       gfc_internal_error ("gfc_iso_c_func_interface(): Unhandled "
2210                           "iso_c_binding function: '%s'!\n", sym->name);
2211     }
2212
2213   return retval;
2214 }
2215
2216
2217 /* Resolve a function call, which means resolving the arguments, then figuring
2218    out which entity the name refers to.  */
2219 /* TODO: Check procedure arguments so that an INTENT(IN) isn't passed
2220    to INTENT(OUT) or INTENT(INOUT).  */
2221
2222 static gfc_try
2223 resolve_function (gfc_expr *expr)
2224 {
2225   gfc_actual_arglist *arg;
2226   gfc_symbol *sym;
2227   const char *name;
2228   gfc_try t;
2229   int temp;
2230   procedure_type p = PROC_INTRINSIC;
2231   bool no_formal_args;
2232
2233   sym = NULL;
2234   if (expr->symtree)
2235     sym = expr->symtree->n.sym;
2236
2237   if (sym && sym->attr.intrinsic
2238       && !gfc_find_function (sym->name)
2239       && gfc_find_subroutine (sym->name)
2240       && sym->attr.function)
2241     {
2242       gfc_error ("Intrinsic subroutine '%s' used as "
2243                   "a function at %L", sym->name, &expr->where);
2244       return FAILURE;
2245     }
2246
2247   if (sym && sym->attr.flavor == FL_VARIABLE)
2248     {
2249       gfc_error ("'%s' at %L is not a function", sym->name, &expr->where);
2250       return FAILURE;
2251     }
2252
2253   if (sym && sym->attr.abstract)
2254     {
2255       gfc_error ("ABSTRACT INTERFACE '%s' must not be referenced at %L",
2256                  sym->name, &expr->where);
2257       return FAILURE;
2258     }
2259
2260   /* If the procedure is external, check for usage.  */
2261   if (sym && is_external_proc (sym))
2262     resolve_global_procedure (sym, &expr->where, 0);
2263
2264   /* Switch off assumed size checking and do this again for certain kinds
2265      of procedure, once the procedure itself is resolved.  */
2266   need_full_assumed_size++;
2267
2268   if (expr->symtree && expr->symtree->n.sym)
2269     p = expr->symtree->n.sym->attr.proc;
2270
2271   no_formal_args = sym && is_external_proc (sym) && sym->formal == NULL;
2272   if (resolve_actual_arglist (expr->value.function.actual,
2273                               p, no_formal_args) == FAILURE)
2274       return FAILURE;
2275
2276   /* Need to setup the call to the correct c_associated, depending on
2277      the number of cptrs to user gives to compare.  */
2278   if (sym && sym->attr.is_iso_c == 1)
2279     {
2280       if (gfc_iso_c_func_interface (sym, expr->value.function.actual, &sym)
2281           == FAILURE)
2282         return FAILURE;
2283       
2284       /* Get the symtree for the new symbol (resolved func).
2285          the old one will be freed later, when it's no longer used.  */
2286       gfc_find_sym_tree (sym->name, sym->ns, 1, &(expr->symtree));
2287     }
2288   
2289   /* Resume assumed_size checking.  */
2290   need_full_assumed_size--;
2291
2292   if (sym && sym->ts.type == BT_CHARACTER
2293       && sym->ts.cl
2294       && sym->ts.cl->length == NULL
2295       && !sym->attr.dummy
2296       && expr->value.function.esym == NULL
2297       && !sym->attr.contained)
2298     {
2299       /* Internal procedures are taken care of in resolve_contained_fntype.  */
2300       gfc_error ("Function '%s' is declared CHARACTER(*) and cannot "
2301                  "be used at %L since it is not a dummy argument",
2302                  sym->name, &expr->where);
2303       return FAILURE;
2304     }
2305
2306   /* See if function is already resolved.  */
2307
2308   if (expr->value.function.name != NULL)
2309     {
2310       if (expr->ts.type == BT_UNKNOWN)
2311         expr->ts = sym->ts;
2312       t = SUCCESS;
2313     }
2314   else
2315     {
2316       /* Apply the rules of section 14.1.2.  */
2317
2318       switch (procedure_kind (sym))
2319         {
2320         case PTYPE_GENERIC:
2321           t = resolve_generic_f (expr);
2322           break;
2323
2324         case PTYPE_SPECIFIC:
2325           t = resolve_specific_f (expr);
2326           break;
2327
2328         case PTYPE_UNKNOWN:
2329           t = resolve_unknown_f (expr);
2330           break;
2331
2332         default:
2333           gfc_internal_error ("resolve_function(): bad function type");
2334         }
2335     }
2336
2337   /* If the expression is still a function (it might have simplified),
2338      then we check to see if we are calling an elemental function.  */
2339
2340   if (expr->expr_type != EXPR_FUNCTION)
2341     return t;
2342
2343   temp = need_full_assumed_size;
2344   need_full_assumed_size = 0;
2345
2346   if (resolve_elemental_actual (expr, NULL) == FAILURE)
2347     return FAILURE;
2348
2349   if (omp_workshare_flag
2350       && expr->value.function.esym
2351       && ! gfc_elemental (expr->value.function.esym))
2352     {
2353       gfc_error ("User defined non-ELEMENTAL function '%s' at %L not allowed "
2354                  "in WORKSHARE construct", expr->value.function.esym->name,
2355                  &expr->where);
2356       t = FAILURE;
2357     }
2358
2359 #define GENERIC_ID expr->value.function.isym->id
2360   else if (expr->value.function.actual != NULL
2361            && expr->value.function.isym != NULL
2362            && GENERIC_ID != GFC_ISYM_LBOUND
2363            && GENERIC_ID != GFC_ISYM_LEN
2364            && GENERIC_ID != GFC_ISYM_LOC
2365            && GENERIC_ID != GFC_ISYM_PRESENT)
2366     {
2367       /* Array intrinsics must also have the last upper bound of an
2368          assumed size array argument.  UBOUND and SIZE have to be
2369          excluded from the check if the second argument is anything
2370          than a constant.  */
2371
2372       for (arg = expr->value.function.actual; arg; arg = arg->next)
2373         {
2374           if ((GENERIC_ID == GFC_ISYM_UBOUND || GENERIC_ID == GFC_ISYM_SIZE)
2375               && arg->next != NULL && arg->next->expr)
2376             {
2377               if (arg->next->expr->expr_type != EXPR_CONSTANT)
2378                 break;
2379
2380               if (arg->next->name && strncmp(arg->next->name, "kind", 4) == 0)
2381                 break;
2382
2383               if ((int)mpz_get_si (arg->next->expr->value.integer)
2384                         < arg->expr->rank)
2385                 break;
2386             }
2387
2388           if (arg->expr != NULL
2389               && arg->expr->rank > 0
2390               && resolve_assumed_size_actual (arg->expr))
2391             return FAILURE;
2392         }
2393     }
2394 #undef GENERIC_ID
2395
2396   need_full_assumed_size = temp;
2397   name = NULL;
2398
2399   if (!pure_function (expr, &name) && name)
2400     {
2401       if (forall_flag)
2402         {
2403           gfc_error ("reference to non-PURE function '%s' at %L inside a "
2404                      "FORALL %s", name, &expr->where,
2405                      forall_flag == 2 ? "mask" : "block");
2406           t = FAILURE;
2407         }
2408       else if (gfc_pure (NULL))
2409         {
2410           gfc_error ("Function reference to '%s' at %L is to a non-PURE "
2411                      "procedure within a PURE procedure", name, &expr->where);
2412           t = FAILURE;
2413         }
2414     }
2415
2416   /* Functions without the RECURSIVE attribution are not allowed to
2417    * call themselves.  */
2418   if (expr->value.function.esym && !expr->value.function.esym->attr.recursive)
2419     {
2420       gfc_symbol *esym, *proc;
2421       esym = expr->value.function.esym;
2422       proc = gfc_current_ns->proc_name;
2423       if (esym == proc)
2424       {
2425         gfc_error ("Function '%s' at %L cannot call itself, as it is not "
2426                    "RECURSIVE", name, &expr->where);
2427         t = FAILURE;
2428       }
2429
2430       if (esym->attr.entry && esym->ns->entries && proc->ns->entries
2431           && esym->ns->entries->sym == proc->ns->entries->sym)
2432       {
2433         gfc_error ("Call to ENTRY '%s' at %L is recursive, but function "
2434                    "'%s' is not declared as RECURSIVE",
2435                    esym->name, &expr->where, esym->ns->entries->sym->name);
2436         t = FAILURE;
2437       }
2438     }
2439
2440   /* Character lengths of use associated functions may contains references to
2441      symbols not referenced from the current program unit otherwise.  Make sure
2442      those symbols are marked as referenced.  */
2443
2444   if (expr->ts.type == BT_CHARACTER && expr->value.function.esym
2445       && expr->value.function.esym->attr.use_assoc)
2446     {
2447       gfc_expr_set_symbols_referenced (expr->ts.cl->length);
2448     }
2449
2450   if (t == SUCCESS
2451         && !((expr->value.function.esym
2452                 && expr->value.function.esym->attr.elemental)
2453                         ||
2454              (expr->value.function.isym
2455                 && expr->value.function.isym->elemental)))
2456     find_noncopying_intrinsics (expr->value.function.esym,
2457                                 expr->value.function.actual);
2458
2459   /* Make sure that the expression has a typespec that works.  */
2460   if (expr->ts.type == BT_UNKNOWN)
2461     {
2462       if (expr->symtree->n.sym->result
2463             && expr->symtree->n.sym->result->ts.type != BT_UNKNOWN)
2464         expr->ts = expr->symtree->n.sym->result->ts;
2465     }
2466
2467   return t;
2468 }
2469
2470
2471 /************* Subroutine resolution *************/
2472
2473 static void
2474 pure_subroutine (gfc_code *c, gfc_symbol *sym)
2475 {
2476   if (gfc_pure (sym))
2477     return;
2478
2479   if (forall_flag)
2480     gfc_error ("Subroutine call to '%s' in FORALL block at %L is not PURE",
2481                sym->name, &c->loc);
2482   else if (gfc_pure (NULL))
2483     gfc_error ("Subroutine call to '%s' at %L is not PURE", sym->name,
2484                &c->loc);
2485 }
2486
2487
2488 static match
2489 resolve_generic_s0 (gfc_code *c, gfc_symbol *sym)
2490 {
2491   gfc_symbol *s;
2492
2493   if (sym->attr.generic)
2494     {
2495       s = gfc_search_interface (sym->generic, 1, &c->ext.actual);
2496       if (s != NULL)
2497         {
2498           c->resolved_sym = s;
2499           pure_subroutine (c, s);
2500           return MATCH_YES;
2501         }
2502
2503       /* TODO: Need to search for elemental references in generic interface.  */
2504     }
2505
2506   if (sym->attr.intrinsic)
2507     return gfc_intrinsic_sub_interface (c, 0);
2508
2509   return MATCH_NO;
2510 }
2511
2512
2513 static gfc_try
2514 resolve_generic_s (gfc_code *c)
2515 {
2516   gfc_symbol *sym;
2517   match m;
2518
2519   sym = c->symtree->n.sym;
2520
2521   for (;;)
2522     {
2523       m = resolve_generic_s0 (c, sym);
2524       if (m == MATCH_YES)
2525         return SUCCESS;
2526       else if (m == MATCH_ERROR)
2527         return FAILURE;
2528
2529 generic:
2530       if (sym->ns->parent == NULL)
2531         break;
2532       gfc_find_symbol (sym->name, sym->ns->parent, 1, &sym);
2533
2534       if (sym == NULL)
2535         break;
2536       if (!generic_sym (sym))
2537         goto generic;
2538     }
2539
2540   /* Last ditch attempt.  See if the reference is to an intrinsic
2541      that possesses a matching interface.  14.1.2.4  */
2542   sym = c->symtree->n.sym;
2543
2544   if (!gfc_is_intrinsic (sym, 1, c->loc))
2545     {
2546       gfc_error ("There is no specific subroutine for the generic '%s' at %L",
2547                  sym->name, &c->loc);
2548       return FAILURE;
2549     }
2550
2551   m = gfc_intrinsic_sub_interface (c, 0);
2552   if (m == MATCH_YES)
2553     return SUCCESS;
2554   if (m == MATCH_NO)
2555     gfc_error ("Generic subroutine '%s' at %L is not consistent with an "
2556                "intrinsic subroutine interface", sym->name, &c->loc);
2557
2558   return FAILURE;
2559 }
2560
2561
2562 /* Set the name and binding label of the subroutine symbol in the call
2563    expression represented by 'c' to include the type and kind of the
2564    second parameter.  This function is for resolving the appropriate
2565    version of c_f_pointer() and c_f_procpointer().  For example, a
2566    call to c_f_pointer() for a default integer pointer could have a
2567    name of c_f_pointer_i4.  If no second arg exists, which is an error
2568    for these two functions, it defaults to the generic symbol's name
2569    and binding label.  */
2570
2571 static void
2572 set_name_and_label (gfc_code *c, gfc_symbol *sym,
2573                     char *name, char *binding_label)
2574 {
2575   gfc_expr *arg = NULL;
2576   char type;
2577   int kind;
2578
2579   /* The second arg of c_f_pointer and c_f_procpointer determines
2580      the type and kind for the procedure name.  */
2581   arg = c->ext.actual->next->expr;
2582
2583   if (arg != NULL)
2584     {
2585       /* Set up the name to have the given symbol's name,
2586          plus the type and kind.  */
2587       /* a derived type is marked with the type letter 'u' */
2588       if (arg->ts.type == BT_DERIVED)
2589         {
2590           type = 'd';
2591           kind = 0; /* set the kind as 0 for now */
2592         }
2593       else
2594         {
2595           type = gfc_type_letter (arg->ts.type);
2596           kind = arg->ts.kind;
2597         }
2598
2599       if (arg->ts.type == BT_CHARACTER)
2600         /* Kind info for character strings not needed.  */
2601         kind = 0;
2602
2603       sprintf (name, "%s_%c%d", sym->name, type, kind);
2604       /* Set up the binding label as the given symbol's label plus
2605          the type and kind.  */
2606       sprintf (binding_label, "%s_%c%d", sym->binding_label, type, kind);
2607     }
2608   else
2609     {
2610       /* If the second arg is missing, set the name and label as
2611          was, cause it should at least be found, and the missing
2612          arg error will be caught by compare_parameters().  */
2613       sprintf (name, "%s", sym->name);
2614       sprintf (binding_label, "%s", sym->binding_label);
2615     }
2616    
2617   return;
2618 }
2619
2620
2621 /* Resolve a generic version of the iso_c_binding procedure given
2622    (sym) to the specific one based on the type and kind of the
2623    argument(s).  Currently, this function resolves c_f_pointer() and
2624    c_f_procpointer based on the type and kind of the second argument
2625    (FPTR).  Other iso_c_binding procedures aren't specially handled.
2626    Upon successfully exiting, c->resolved_sym will hold the resolved
2627    symbol.  Returns MATCH_ERROR if an error occurred; MATCH_YES
2628    otherwise.  */
2629
2630 match
2631 gfc_iso_c_sub_interface (gfc_code *c, gfc_symbol *sym)
2632 {
2633   gfc_symbol *new_sym;
2634   /* this is fine, since we know the names won't use the max */
2635   char name[GFC_MAX_SYMBOL_LEN + 1];
2636   char binding_label[GFC_MAX_BINDING_LABEL_LEN + 1];
2637   /* default to success; will override if find error */
2638   match m = MATCH_YES;
2639
2640   /* Make sure the actual arguments are in the necessary order (based on the 
2641      formal args) before resolving.  */
2642   gfc_procedure_use (sym, &c->ext.actual, &(c->loc));
2643
2644   if ((sym->intmod_sym_id == ISOCBINDING_F_POINTER) ||
2645       (sym->intmod_sym_id == ISOCBINDING_F_PROCPOINTER))
2646     {
2647       set_name_and_label (c, sym, name, binding_label);
2648       
2649       if (sym->intmod_sym_id == ISOCBINDING_F_POINTER)
2650         {
2651           if (c->ext.actual != NULL && c->ext.actual->next != NULL)
2652             {
2653               /* Make sure we got a third arg if the second arg has non-zero
2654                  rank.  We must also check that the type and rank are
2655                  correct since we short-circuit this check in
2656                  gfc_procedure_use() (called above to sort actual args).  */
2657               if (c->ext.actual->next->expr->rank != 0)
2658                 {
2659                   if(c->ext.actual->next->next == NULL 
2660                      || c->ext.actual->next->next->expr == NULL)
2661                     {
2662                       m = MATCH_ERROR;
2663                       gfc_error ("Missing SHAPE parameter for call to %s "
2664                                  "at %L", sym->name, &(c->loc));
2665                     }
2666                   else if (c->ext.actual->next->next->expr->ts.type
2667                            != BT_INTEGER
2668                            || c->ext.actual->next->next->expr->rank != 1)
2669                     {
2670                       m = MATCH_ERROR;
2671                       gfc_error ("SHAPE parameter for call to %s at %L must "
2672                                  "be a rank 1 INTEGER array", sym->name,
2673                                  &(c->loc));
2674                     }
2675                 }
2676             }
2677         }
2678       
2679       if (m != MATCH_ERROR)
2680         {
2681           /* the 1 means to add the optional arg to formal list */
2682           new_sym = get_iso_c_sym (sym, name, binding_label, 1);
2683          
2684           /* for error reporting, say it's declared where the original was */
2685           new_sym->declared_at = sym->declared_at;
2686         }
2687     }
2688   else
2689     {
2690       /* no differences for c_loc or c_funloc */
2691       new_sym = sym;
2692     }
2693
2694   /* set the resolved symbol */
2695   if (m != MATCH_ERROR)
2696     c->resolved_sym = new_sym;
2697   else
2698     c->resolved_sym = sym;
2699   
2700   return m;
2701 }
2702
2703
2704 /* Resolve a subroutine call known to be specific.  */
2705
2706 static match
2707 resolve_specific_s0 (gfc_code *c, gfc_symbol *sym)
2708 {
2709   match m;
2710
2711   /* See if we have an intrinsic interface.  */
2712   if (sym->ts.interface != NULL && !sym->ts.interface->attr.abstract
2713       && !sym->ts.interface->attr.subroutine)
2714     {
2715       gfc_intrinsic_sym *isym;
2716
2717       isym = gfc_find_function (sym->ts.interface->name);
2718
2719       /* Existence of isym should be checked already.  */
2720       gcc_assert (isym);
2721
2722       sym->ts.type = isym->ts.type;
2723       sym->ts.kind = isym->ts.kind;
2724       sym->attr.subroutine = 1;
2725       goto found;
2726     }
2727
2728   if(sym->attr.is_iso_c)
2729     {
2730       m = gfc_iso_c_sub_interface (c,sym);
2731       return m;
2732     }
2733   
2734   if (sym->attr.external || sym->attr.if_source == IFSRC_IFBODY)
2735     {
2736       if (sym->attr.dummy)
2737         {
2738           sym->attr.proc = PROC_DUMMY;
2739           goto found;
2740         }
2741
2742       sym->attr.proc = PROC_EXTERNAL;
2743       goto found;
2744     }
2745
2746   if (sym->attr.proc == PROC_MODULE || sym->attr.proc == PROC_INTERNAL)
2747     goto found;
2748
2749   if (sym->attr.intrinsic)
2750     {
2751       m = gfc_intrinsic_sub_interface (c, 1);
2752       if (m == MATCH_YES)
2753         return MATCH_YES;
2754       if (m == MATCH_NO)
2755         gfc_error ("Subroutine '%s' at %L is INTRINSIC but is not compatible "
2756                    "with an intrinsic", sym->name, &c->loc);
2757
2758       return MATCH_ERROR;
2759     }
2760
2761   return MATCH_NO;
2762
2763 found:
2764   gfc_procedure_use (sym, &c->ext.actual, &c->loc);
2765
2766   c->resolved_sym = sym;
2767   pure_subroutine (c, sym);
2768
2769   return MATCH_YES;
2770 }
2771
2772
2773 static gfc_try
2774 resolve_specific_s (gfc_code *c)
2775 {
2776   gfc_symbol *sym;
2777   match m;
2778
2779   sym = c->symtree->n.sym;
2780
2781   for (;;)
2782     {
2783       m = resolve_specific_s0 (c, sym);
2784       if (m == MATCH_YES)
2785         return SUCCESS;
2786       if (m == MATCH_ERROR)
2787         return FAILURE;
2788
2789       if (sym->ns->parent == NULL)
2790         break;
2791
2792       gfc_find_symbol (sym->name, sym->ns->parent, 1, &sym);
2793
2794       if (sym == NULL)
2795         break;
2796     }
2797
2798   sym = c->symtree->n.sym;
2799   gfc_error ("Unable to resolve the specific subroutine '%s' at %L",
2800              sym->name, &c->loc);
2801
2802   return FAILURE;
2803 }
2804
2805
2806 /* Resolve a subroutine call not known to be generic nor specific.  */
2807
2808 static gfc_try
2809 resolve_unknown_s (gfc_code *c)
2810 {
2811   gfc_symbol *sym;
2812
2813   sym = c->symtree->n.sym;
2814
2815   if (sym->attr.dummy)
2816     {
2817       sym->attr.proc = PROC_DUMMY;
2818       goto found;
2819     }
2820
2821   /* See if we have an intrinsic function reference.  */
2822
2823   if (gfc_is_intrinsic (sym, 1, c->loc))
2824     {
2825       if (gfc_intrinsic_sub_interface (c, 1) == MATCH_YES)
2826         return SUCCESS;
2827       return FAILURE;
2828     }
2829
2830   /* The reference is to an external name.  */
2831
2832 found:
2833   gfc_procedure_use (sym, &c->ext.actual, &c->loc);
2834
2835   c->resolved_sym = sym;
2836
2837   pure_subroutine (c, sym);
2838
2839   return SUCCESS;
2840 }
2841
2842
2843 /* Resolve a subroutine call.  Although it was tempting to use the same code
2844    for functions, subroutines and functions are stored differently and this
2845    makes things awkward.  */
2846
2847 static gfc_try
2848 resolve_call (gfc_code *c)
2849 {
2850   gfc_try t;
2851   procedure_type ptype = PROC_INTRINSIC;
2852   gfc_symbol *csym;
2853   bool no_formal_args;
2854
2855   csym = c->symtree ? c->symtree->n.sym : NULL;
2856
2857   if (csym && csym->ts.type != BT_UNKNOWN)
2858     {
2859       gfc_error ("'%s' at %L has a type, which is not consistent with "
2860                  "the CALL at %L", csym->name, &csym->declared_at, &c->loc);
2861       return FAILURE;
2862     }
2863
2864   /* If external, check for usage.  */
2865   if (csym && is_external_proc (csym))
2866     resolve_global_procedure (csym, &c->loc, 1);
2867
2868   /* Subroutines without the RECURSIVE attribution are not allowed to
2869    * call themselves.  */
2870   if (csym && !csym->attr.recursive)
2871     {
2872       gfc_symbol *proc;
2873       proc = gfc_current_ns->proc_name;
2874       if (csym == proc)
2875       {
2876         gfc_error ("SUBROUTINE '%s' at %L cannot call itself, as it is not "
2877                    "RECURSIVE", csym->name, &c->loc);
2878         t = FAILURE;
2879       }
2880
2881       if (csym->attr.entry && csym->ns->entries && proc->ns->entries
2882           && csym->ns->entries->sym == proc->ns->entries->sym)
2883       {
2884         gfc_error ("Call to ENTRY '%s' at %L is recursive, but subroutine "
2885                    "'%s' is not declared as RECURSIVE",
2886                    csym->name, &c->loc, csym->ns->entries->sym->name);
2887         t = FAILURE;
2888       }
2889     }
2890
2891   /* Switch off assumed size checking and do this again for certain kinds
2892      of procedure, once the procedure itself is resolved.  */
2893   need_full_assumed_size++;
2894
2895   if (csym)
2896     ptype = csym->attr.proc;
2897
2898   no_formal_args = csym && is_external_proc (csym) && csym->formal == NULL;
2899   if (resolve_actual_arglist (c->ext.actual, ptype,
2900                               no_formal_args) == FAILURE)
2901     return FAILURE;
2902
2903   /* Resume assumed_size checking.  */
2904   need_full_assumed_size--;
2905
2906   t = SUCCESS;
2907   if (c->resolved_sym == NULL)
2908     switch (procedure_kind (csym))
2909       {
2910       case PTYPE_GENERIC:
2911         t = resolve_generic_s (c);
2912         break;
2913
2914       case PTYPE_SPECIFIC:
2915         t = resolve_specific_s (c);
2916         break;
2917
2918       case PTYPE_UNKNOWN:
2919         t = resolve_unknown_s (c);
2920         break;
2921
2922       default:
2923         gfc_internal_error ("resolve_subroutine(): bad function type");
2924       }
2925
2926   /* Some checks of elemental subroutine actual arguments.  */
2927   if (resolve_elemental_actual (NULL, c) == FAILURE)
2928     return FAILURE;
2929
2930   if (t == SUCCESS && !(c->resolved_sym && c->resolved_sym->attr.elemental))
2931     find_noncopying_intrinsics (c->resolved_sym, c->ext.actual);
2932   return t;
2933 }
2934
2935
2936 /* Compare the shapes of two arrays that have non-NULL shapes.  If both
2937    op1->shape and op2->shape are non-NULL return SUCCESS if their shapes
2938    match.  If both op1->shape and op2->shape are non-NULL return FAILURE
2939    if their shapes do not match.  If either op1->shape or op2->shape is
2940    NULL, return SUCCESS.  */
2941
2942 static gfc_try
2943 compare_shapes (gfc_expr *op1, gfc_expr *op2)
2944 {
2945   gfc_try t;
2946   int i;
2947
2948   t = SUCCESS;
2949
2950   if (op1->shape != NULL && op2->shape != NULL)
2951     {
2952       for (i = 0; i < op1->rank; i++)
2953         {
2954           if (mpz_cmp (op1->shape[i], op2->shape[i]) != 0)
2955            {
2956              gfc_error ("Shapes for operands at %L and %L are not conformable",
2957                          &op1->where, &op2->where);
2958              t = FAILURE;
2959              break;
2960            }
2961         }
2962     }
2963
2964   return t;
2965 }
2966
2967
2968 /* Resolve an operator expression node.  This can involve replacing the
2969    operation with a user defined function call.  */
2970
2971 static gfc_try
2972 resolve_operator (gfc_expr *e)
2973 {
2974   gfc_expr *op1, *op2;
2975   char msg[200];
2976   bool dual_locus_error;
2977   gfc_try t;
2978
2979   /* Resolve all subnodes-- give them types.  */
2980
2981   switch (e->value.op.op)
2982     {
2983     default:
2984       if (gfc_resolve_expr (e->value.op.op2) == FAILURE)
2985         return FAILURE;
2986
2987     /* Fall through...  */
2988
2989     case INTRINSIC_NOT:
2990     case INTRINSIC_UPLUS:
2991     case INTRINSIC_UMINUS:
2992     case INTRINSIC_PARENTHESES:
2993       if (gfc_resolve_expr (e->value.op.op1) == FAILURE)
2994         return FAILURE;
2995       break;
2996     }
2997
2998   /* Typecheck the new node.  */
2999
3000   op1 = e->value.op.op1;
3001   op2 = e->value.op.op2;
3002   dual_locus_error = false;
3003
3004   if ((op1 && op1->expr_type == EXPR_NULL)
3005       || (op2 && op2->expr_type == EXPR_NULL))
3006     {
3007       sprintf (msg, _("Invalid context for NULL() pointer at %%L"));
3008       goto bad_op;
3009     }
3010
3011   switch (e->value.op.op)
3012     {
3013     case INTRINSIC_UPLUS:
3014     case INTRINSIC_UMINUS:
3015       if (op1->ts.type == BT_INTEGER
3016           || op1->ts.type == BT_REAL
3017           || op1->ts.type == BT_COMPLEX)
3018         {
3019           e->ts = op1->ts;
3020           break;
3021         }
3022
3023       sprintf (msg, _("Operand of unary numeric operator '%s' at %%L is %s"),
3024                gfc_op2string (e->value.op.op), gfc_typename (&e->ts));
3025       goto bad_op;
3026
3027     case INTRINSIC_PLUS:
3028     case INTRINSIC_MINUS:
3029     case INTRINSIC_TIMES:
3030     case INTRINSIC_DIVIDE:
3031     case INTRINSIC_POWER:
3032       if (gfc_numeric_ts (&op1->ts) && gfc_numeric_ts (&op2->ts))
3033         {
3034           gfc_type_convert_binary (e);
3035           break;
3036         }
3037
3038       sprintf (msg,
3039                _("Operands of binary numeric operator '%s' at %%L are %s/%s"),
3040                gfc_op2string (e->value.op.op), gfc_typename (&op1->ts),
3041                gfc_typename (&op2->ts));
3042       goto bad_op;
3043
3044     case INTRINSIC_CONCAT:
3045       if (op1->ts.type == BT_CHARACTER && op2->ts.type == BT_CHARACTER
3046           && op1->ts.kind == op2->ts.kind)
3047         {
3048           e->ts.type = BT_CHARACTER;
3049           e->ts.kind = op1->ts.kind;
3050           break;
3051         }
3052
3053       sprintf (msg,
3054                _("Operands of string concatenation operator at %%L are %s/%s"),
3055                gfc_typename (&op1->ts), gfc_typename (&op2->ts));
3056       goto bad_op;
3057
3058     case INTRINSIC_AND:
3059     case INTRINSIC_OR:
3060     case INTRINSIC_EQV:
3061     case INTRINSIC_NEQV:
3062       if (op1->ts.type == BT_LOGICAL && op2->ts.type == BT_LOGICAL)
3063         {
3064           e->ts.type = BT_LOGICAL;
3065           e->ts.kind = gfc_kind_max (op1, op2);
3066           if (op1->ts.kind < e->ts.kind)
3067             gfc_convert_type (op1, &e->ts, 2);
3068           else if (op2->ts.kind < e->ts.kind)
3069             gfc_convert_type (op2, &e->ts, 2);
3070           break;
3071         }
3072
3073       sprintf (msg, _("Operands of logical operator '%s' at %%L are %s/%s"),
3074                gfc_op2string (e->value.op.op), gfc_typename (&op1->ts),
3075                gfc_typename (&op2->ts));
3076
3077       goto bad_op;
3078
3079     case INTRINSIC_NOT:
3080       if (op1->ts.type == BT_LOGICAL)
3081         {
3082           e->ts.type = BT_LOGICAL;
3083           e->ts.kind = op1->ts.kind;
3084           break;
3085         }
3086
3087       sprintf (msg, _("Operand of .not. operator at %%L is %s"),
3088                gfc_typename (&op1->ts));
3089       goto bad_op;
3090
3091     case INTRINSIC_GT:
3092     case INTRINSIC_GT_OS:
3093     case INTRINSIC_GE:
3094     case INTRINSIC_GE_OS:
3095     case INTRINSIC_LT:
3096     case INTRINSIC_LT_OS:
3097     case INTRINSIC_LE:
3098     case INTRINSIC_LE_OS:
3099       if (op1->ts.type == BT_COMPLEX || op2->ts.type == BT_COMPLEX)
3100         {
3101           strcpy (msg, _("COMPLEX quantities cannot be compared at %L"));
3102           goto bad_op;
3103         }
3104
3105       /* Fall through...  */
3106
3107     case INTRINSIC_EQ:
3108     case INTRINSIC_EQ_OS:
3109     case INTRINSIC_NE:
3110     case INTRINSIC_NE_OS:
3111       if (op1->ts.type == BT_CHARACTER && op2->ts.type == BT_CHARACTER
3112           && op1->ts.kind == op2->ts.kind)
3113         {
3114           e->ts.type = BT_LOGICAL;
3115           e->ts.kind = gfc_default_logical_kind;
3116           break;
3117         }
3118
3119       if (gfc_numeric_ts (&op1->ts) && gfc_numeric_ts (&op2->ts))
3120         {
3121           gfc_type_convert_binary (e);
3122
3123           e->ts.type = BT_LOGICAL;
3124           e->ts.kind = gfc_default_logical_kind;
3125           break;
3126         }
3127
3128       if (op1->ts.type == BT_LOGICAL && op2->ts.type == BT_LOGICAL)
3129         sprintf (msg,
3130                  _("Logicals at %%L must be compared with %s instead of %s"),
3131                  (e->value.op.op == INTRINSIC_EQ 
3132                   || e->value.op.op == INTRINSIC_EQ_OS)
3133                  ? ".eqv." : ".neqv.", gfc_op2string (e->value.op.op));
3134       else
3135         sprintf (msg,
3136                  _("Operands of comparison operator '%s' at %%L are %s/%s"),
3137                  gfc_op2string (e->value.op.op), gfc_typename (&op1->ts),
3138                  gfc_typename (&op2->ts));
3139
3140       goto bad_op;
3141
3142     case INTRINSIC_USER:
3143       if (e->value.op.uop->op == NULL)
3144         sprintf (msg, _("Unknown operator '%s' at %%L"), e->value.op.uop->name);
3145       else if (op2 == NULL)
3146         sprintf (msg, _("Operand of user operator '%s' at %%L is %s"),
3147                  e->value.op.uop->name, gfc_typename (&op1->ts));
3148       else
3149         sprintf (msg, _("Operands of user operator '%s' at %%L are %s/%s"),
3150                  e->value.op.uop->name, gfc_typename (&op1->ts),
3151                  gfc_typename (&op2->ts));
3152
3153       goto bad_op;
3154
3155     case INTRINSIC_PARENTHESES:
3156       e->ts = op1->ts;
3157       if (e->ts.type == BT_CHARACTER)
3158         e->ts.cl = op1->ts.cl;
3159       break;
3160
3161     default:
3162       gfc_internal_error ("resolve_operator(): Bad intrinsic");
3163     }
3164
3165   /* Deal with arrayness of an operand through an operator.  */
3166
3167   t = SUCCESS;
3168
3169   switch (e->value.op.op)
3170     {
3171     case INTRINSIC_PLUS:
3172     case INTRINSIC_MINUS:
3173     case INTRINSIC_TIMES:
3174     case INTRINSIC_DIVIDE:
3175     case INTRINSIC_POWER:
3176     case INTRINSIC_CONCAT:
3177     case INTRINSIC_AND:
3178     case INTRINSIC_OR:
3179     case INTRINSIC_EQV:
3180     case INTRINSIC_NEQV:
3181     case INTRINSIC_EQ:
3182     case INTRINSIC_EQ_OS:
3183     case INTRINSIC_NE:
3184     case INTRINSIC_NE_OS:
3185     case INTRINSIC_GT:
3186     case INTRINSIC_GT_OS:
3187     case INTRINSIC_GE:
3188     case INTRINSIC_GE_OS:
3189     case INTRINSIC_LT:
3190     case INTRINSIC_LT_OS:
3191     case INTRINSIC_LE:
3192     case INTRINSIC_LE_OS:
3193
3194       if (op1->rank == 0 && op2->rank == 0)
3195         e->rank = 0;
3196
3197       if (op1->rank == 0 && op2->rank != 0)
3198         {
3199           e->rank = op2->rank;
3200
3201           if (e->shape == NULL)
3202             e->shape = gfc_copy_shape (op2->shape, op2->rank);
3203         }
3204
3205       if (op1->rank != 0 && op2->rank == 0)
3206         {
3207           e->rank = op1->rank;
3208
3209           if (e->shape == NULL)
3210             e->shape = gfc_copy_shape (op1->shape, op1->rank);
3211         }
3212
3213       if (op1->rank != 0 && op2->rank != 0)
3214         {
3215           if (op1->rank == op2->rank)
3216             {
3217               e->rank = op1->rank;
3218               if (e->shape == NULL)
3219                 {
3220                   t = compare_shapes(op1, op2);
3221                   if (t == FAILURE)
3222                     e->shape = NULL;
3223                   else
3224                 e->shape = gfc_copy_shape (op1->shape, op1->rank);
3225                 }
3226             }
3227           else
3228             {
3229               /* Allow higher level expressions to work.  */
3230               e->rank = 0;
3231
3232               /* Try user-defined operators, and otherwise throw an error.  */
3233               dual_locus_error = true;
3234               sprintf (msg,
3235                        _("Inconsistent ranks for operator at %%L and %%L"));
3236               goto bad_op;
3237             }
3238         }
3239
3240       break;
3241
3242     case INTRINSIC_PARENTHESES:
3243     case INTRINSIC_NOT:
3244     case INTRINSIC_UPLUS:
3245     case INTRINSIC_UMINUS:
3246       /* Simply copy arrayness attribute */
3247       e->rank = op1->rank;
3248
3249       if (e->shape == NULL)
3250         e->shape = gfc_copy_shape (op1->shape, op1->rank);
3251
3252       break;
3253
3254     default:
3255       break;
3256     }
3257
3258   /* Attempt to simplify the expression.  */
3259   if (t == SUCCESS)
3260     {
3261       t = gfc_simplify_expr (e, 0);
3262       /* Some calls do not succeed in simplification and return FAILURE
3263          even though there is no error; e.g. variable references to
3264          PARAMETER arrays.  */
3265       if (!gfc_is_constant_expr (e))
3266         t = SUCCESS;
3267     }
3268   return t;
3269
3270 bad_op:
3271
3272   if (gfc_extend_expr (e) == SUCCESS)
3273     return SUCCESS;
3274
3275   if (dual_locus_error)
3276     gfc_error (msg, &op1->where, &op2->where);
3277   else
3278     gfc_error (msg, &e->where);
3279
3280   return FAILURE;
3281 }
3282
3283
3284 /************** Array resolution subroutines **************/
3285
3286 typedef enum
3287 { CMP_LT, CMP_EQ, CMP_GT, CMP_UNKNOWN }
3288 comparison;
3289
3290 /* Compare two integer expressions.  */
3291
3292 static comparison
3293 compare_bound (gfc_expr *a, gfc_expr *b)
3294 {
3295   int i;
3296
3297   if (a == NULL || a->expr_type != EXPR_CONSTANT
3298       || b == NULL || b->expr_type != EXPR_CONSTANT)
3299     return CMP_UNKNOWN;
3300
3301   /* If either of the types isn't INTEGER, we must have
3302      raised an error earlier.  */
3303
3304   if (a->ts.type != BT_INTEGER || b->ts.type != BT_INTEGER)
3305     return CMP_UNKNOWN;
3306
3307   i = mpz_cmp (a->value.integer, b->value.integer);
3308
3309   if (i < 0)
3310     return CMP_LT;
3311   if (i > 0)
3312     return CMP_GT;
3313   return CMP_EQ;
3314 }
3315
3316
3317 /* Compare an integer expression with an integer.  */
3318
3319 static comparison
3320 compare_bound_int (gfc_expr *a, int b)
3321 {
3322   int i;
3323
3324   if (a == NULL || a->expr_type != EXPR_CONSTANT)
3325     return CMP_UNKNOWN;
3326
3327   if (a->ts.type != BT_INTEGER)
3328     gfc_internal_error ("compare_bound_int(): Bad expression");
3329
3330   i = mpz_cmp_si (a->value.integer, b);
3331
3332   if (i < 0)
3333     return CMP_LT;
3334   if (i > 0)
3335     return CMP_GT;
3336   return CMP_EQ;
3337 }
3338
3339
3340 /* Compare an integer expression with a mpz_t.  */
3341
3342 static comparison
3343 compare_bound_mpz_t (gfc_expr *a, mpz_t b)
3344 {
3345   int i;
3346
3347   if (a == NULL || a->expr_type != EXPR_CONSTANT)
3348     return CMP_UNKNOWN;
3349
3350   if (a->ts.type != BT_INTEGER)
3351     gfc_internal_error ("compare_bound_int(): Bad expression");
3352
3353   i = mpz_cmp (a->value.integer, b);
3354
3355   if (i < 0)
3356     return CMP_LT;
3357   if (i > 0)
3358     return CMP_GT;
3359   return CMP_EQ;
3360 }
3361
3362
3363 /* Compute the last value of a sequence given by a triplet.  
3364    Return 0 if it wasn't able to compute the last value, or if the
3365    sequence if empty, and 1 otherwise.  */
3366
3367 static int
3368 compute_last_value_for_triplet (gfc_expr *start, gfc_expr *end,
3369                                 gfc_expr *stride, mpz_t last)
3370 {
3371   mpz_t rem;
3372
3373   if (start == NULL || start->expr_type != EXPR_CONSTANT
3374       || end == NULL || end->expr_type != EXPR_CONSTANT
3375       || (stride != NULL && stride->expr_type != EXPR_CONSTANT))
3376     return 0;
3377
3378   if (start->ts.type != BT_INTEGER || end->ts.type != BT_INTEGER
3379       || (stride != NULL && stride->ts.type != BT_INTEGER))
3380     return 0;
3381
3382   if (stride == NULL || compare_bound_int(stride, 1) == CMP_EQ)
3383     {
3384       if (compare_bound (start, end) == CMP_GT)
3385         return 0;
3386       mpz_set (last, end->value.integer);
3387       return 1;
3388     }
3389
3390   if (compare_bound_int (stride, 0) == CMP_GT)
3391     {
3392       /* Stride is positive */
3393       if (mpz_cmp (start->value.integer, end->value.integer) > 0)
3394         return 0;
3395     }
3396   else
3397     {
3398       /* Stride is negative */
3399       if (mpz_cmp (start->value.integer, end->value.integer) < 0)
3400         return 0;
3401     }
3402
3403   mpz_init (rem);
3404   mpz_sub (rem, end->value.integer, start->value.integer);
3405   mpz_tdiv_r (rem, rem, stride->value.integer);
3406   mpz_sub (last, end->value.integer, rem);
3407   mpz_clear (rem);
3408
3409   return 1;
3410 }
3411
3412
3413 /* Compare a single dimension of an array reference to the array
3414    specification.  */
3415
3416 static gfc_try
3417 check_dimension (int i, gfc_array_ref *ar, gfc_array_spec *as)
3418 {
3419   mpz_t last_value;
3420
3421 /* Given start, end and stride values, calculate the minimum and
3422    maximum referenced indexes.  */
3423
3424   switch (ar->dimen_type[i])
3425     {
3426     case DIMEN_VECTOR:
3427       break;
3428
3429     case DIMEN_ELEMENT:
3430       if (compare_bound (ar->start[i], as->lower[i]) == CMP_LT)
3431         {
3432           gfc_warning ("Array reference at %L is out of bounds "
3433                        "(%ld < %ld) in dimension %d", &ar->c_where[i],
3434                        mpz_get_si (ar->start[i]->value.integer),
3435                        mpz_get_si (as->lower[i]->value.integer), i+1);
3436           return SUCCESS;
3437         }
3438       if (compare_bound (ar->start[i], as->upper[i]) == CMP_GT)
3439         {
3440           gfc_warning ("Array reference at %L is out of bounds "
3441                        "(%ld > %ld) in dimension %d", &ar->c_where[i],
3442                        mpz_get_si (ar->start[i]->value.integer),
3443                        mpz_get_si (as->upper[i]->value.integer), i+1);
3444           return SUCCESS;
3445         }
3446
3447       break;
3448
3449     case DIMEN_RANGE:
3450       {
3451 #define AR_START (ar->start[i] ? ar->start[i] : as->lower[i])
3452 #define AR_END (ar->end[i] ? ar->end[i] : as->upper[i])
3453
3454         comparison comp_start_end = compare_bound (AR_START, AR_END);
3455
3456         /* Check for zero stride, which is not allowed.  */
3457         if (compare_bound_int (ar->stride[i], 0) == CMP_EQ)
3458           {
3459             gfc_error ("Illegal stride of zero at %L", &ar->c_where[i]);
3460             return FAILURE;
3461           }
3462
3463         /* if start == len || (stride > 0 && start < len)
3464                            || (stride < 0 && start > len),
3465            then the array section contains at least one element.  In this
3466            case, there is an out-of-bounds access if
3467            (start < lower || start > upper).  */
3468         if (compare_bound (AR_START, AR_END) == CMP_EQ
3469             || ((compare_bound_int (ar->stride[i], 0) == CMP_GT
3470                  || ar->stride[i] == NULL) && comp_start_end == CMP_LT)
3471             || (compare_bound_int (ar->stride[i], 0) == CMP_LT
3472                 && comp_start_end == CMP_GT))
3473           {
3474             if (compare_bound (AR_START, as->lower[i]) == CMP_LT)
3475               {
3476                 gfc_warning ("Lower array reference at %L is out of bounds "
3477                        "(%ld < %ld) in dimension %d", &ar->c_where[i],
3478                        mpz_get_si (AR_START->value.integer),
3479                        mpz_get_si (as->lower[i]->value.integer), i+1);
3480                 return SUCCESS;
3481               }
3482             if (compare_bound (AR_START, as->upper[i]) == CMP_GT)
3483               {
3484                 gfc_warning ("Lower array reference at %L is out of bounds "
3485                        "(%ld > %ld) in dimension %d", &ar->c_where[i],
3486                        mpz_get_si (AR_START->value.integer),
3487                        mpz_get_si (as->upper[i]->value.integer), i+1);
3488                 return SUCCESS;
3489               }
3490           }
3491
3492         /* If we can compute the highest index of the array section,
3493            then it also has to be between lower and upper.  */
3494         mpz_init (last_value);
3495         if (compute_last_value_for_triplet (AR_START, AR_END, ar->stride[i],
3496                                             last_value))
3497           {
3498             if (compare_bound_mpz_t (as->lower[i], last_value) == CMP_GT)
3499               {
3500                 gfc_warning ("Upper array reference at %L is out of bounds "
3501                        "(%ld < %ld) in dimension %d", &ar->c_where[i],
3502                        mpz_get_si (last_value),
3503                        mpz_get_si (as->lower[i]->value.integer), i+1);
3504                 mpz_clear (last_value);
3505                 return SUCCESS;
3506               }
3507             if (compare_bound_mpz_t (as->upper[i], last_value) == CMP_LT)
3508               {
3509                 gfc_warning ("Upper array reference at %L is out of bounds "
3510                        "(%ld > %ld) in dimension %d", &ar->c_where[i],
3511                        mpz_get_si (last_value),
3512                        mpz_get_si (as->upper[i]->value.integer), i+1);
3513                 mpz_clear (last_value);
3514                 return SUCCESS;
3515               }
3516           }
3517         mpz_clear (last_value);
3518
3519 #undef AR_START
3520 #undef AR_END
3521       }
3522       break;
3523
3524     default:
3525       gfc_internal_error ("check_dimension(): Bad array reference");
3526     }
3527
3528   return SUCCESS;
3529 }
3530
3531
3532 /* Compare an array reference with an array specification.  */
3533
3534 static gfc_try
3535 compare_spec_to_ref (gfc_array_ref *ar)
3536 {
3537   gfc_array_spec *as;
3538   int i;
3539
3540   as = ar->as;
3541   i = as->rank - 1;
3542   /* TODO: Full array sections are only allowed as actual parameters.  */
3543   if (as->type == AS_ASSUMED_SIZE
3544       && (/*ar->type == AR_FULL
3545           ||*/ (ar->type == AR_SECTION
3546               && ar->dimen_type[i] == DIMEN_RANGE && ar->end[i] == NULL)))
3547     {
3548       gfc_error ("Rightmost upper bound of assumed size array section "
3549                  "not specified at %L", &ar->where);
3550       return FAILURE;
3551     }
3552
3553   if (ar->type == AR_FULL)
3554     return SUCCESS;
3555
3556   if (as->rank != ar->dimen)
3557     {
3558       gfc_error ("Rank mismatch in array reference at %L (%d/%d)",
3559                  &ar->where, ar->dimen, as->rank);
3560       return FAILURE;
3561     }
3562
3563   for (i = 0; i < as->rank; i++)
3564     if (check_dimension (i, ar, as) == FAILURE)
3565       return FAILURE;
3566
3567   return SUCCESS;
3568 }
3569
3570
3571 /* Resolve one part of an array index.  */
3572
3573 gfc_try
3574 gfc_resolve_index (gfc_expr *index, int check_scalar)
3575 {
3576   gfc_typespec ts;
3577
3578   if (index == NULL)
3579     return SUCCESS;
3580
3581   if (gfc_resolve_expr (index) == FAILURE)
3582     return FAILURE;
3583
3584   if (check_scalar && index->rank != 0)
3585     {
3586       gfc_error ("Array index at %L must be scalar", &index->where);
3587       return FAILURE;
3588     }
3589
3590   if (index->ts.type != BT_INTEGER && index->ts.type != BT_REAL)
3591     {
3592       gfc_error ("Array index at %L must be of INTEGER type, found %s",
3593                  &index->where, gfc_basic_typename (index->ts.type));
3594       return FAILURE;
3595     }
3596
3597   if (index->ts.type == BT_REAL)
3598     if (gfc_notify_std (GFC_STD_LEGACY, "Extension: REAL array index at %L",
3599                         &index->where) == FAILURE)
3600       return FAILURE;
3601
3602   if (index->ts.kind != gfc_index_integer_kind
3603       || index->ts.type != BT_INTEGER)
3604     {
3605       gfc_clear_ts (&ts);
3606       ts.type = BT_INTEGER;
3607       ts.kind = gfc_index_integer_kind;
3608
3609       gfc_convert_type_warn (index, &ts, 2, 0);
3610     }
3611
3612   return SUCCESS;
3613 }
3614
3615 /* Resolve a dim argument to an intrinsic function.  */
3616
3617 gfc_try
3618 gfc_resolve_dim_arg (gfc_expr *dim)
3619 {
3620   if (dim == NULL)
3621     return SUCCESS;
3622
3623   if (gfc_resolve_expr (dim) == FAILURE)
3624     return FAILURE;
3625
3626   if (dim->rank != 0)
3627     {
3628       gfc_error ("Argument dim at %L must be scalar", &dim->where);
3629       return FAILURE;
3630
3631     }
3632
3633   if (dim->ts.type != BT_INTEGER)
3634     {
3635       gfc_error ("Argument dim at %L must be of INTEGER type", &dim->where);
3636       return FAILURE;
3637     }
3638
3639   if (dim->ts.kind != gfc_index_integer_kind)
3640     {
3641       gfc_typespec ts;
3642
3643       ts.type = BT_INTEGER;
3644       ts.kind = gfc_index_integer_kind;
3645
3646       gfc_convert_type_warn (dim, &ts, 2, 0);
3647     }
3648
3649   return SUCCESS;
3650 }
3651
3652 /* Given an expression that contains array references, update those array
3653    references to point to the right array specifications.  While this is
3654    filled in during matching, this information is difficult to save and load
3655    in a module, so we take care of it here.
3656
3657    The idea here is that the original array reference comes from the
3658    base symbol.  We traverse the list of reference structures, setting
3659    the stored reference to references.  Component references can
3660    provide an additional array specification.  */
3661
3662 static void
3663 find_array_spec (gfc_expr *e)
3664 {
3665   gfc_array_spec *as;
3666   gfc_component *c;
3667   gfc_symbol *derived;
3668   gfc_ref *ref;
3669
3670   as = e->symtree->n.sym->as;
3671   derived = NULL;
3672
3673   for (ref = e->ref; ref; ref = ref->next)
3674     switch (ref->type)
3675       {
3676       case REF_ARRAY:
3677         if (as == NULL)
3678           gfc_internal_error ("find_array_spec(): Missing spec");
3679
3680         ref->u.ar.as = as;
3681         as = NULL;
3682         break;
3683
3684       case REF_COMPONENT:
3685         if (derived == NULL)
3686           derived = e->symtree->n.sym->ts.derived;
3687
3688         c = derived->components;
3689
3690         for (; c; c = c->next)
3691           if (c == ref->u.c.component)
3692             {
3693               /* Track the sequence of component references.  */
3694               if (c->ts.type == BT_DERIVED)
3695                 derived = c->ts.derived;
3696               break;
3697             }
3698
3699         if (c == NULL)
3700           gfc_internal_error ("find_array_spec(): Component not found");
3701
3702         if (c->attr.dimension)
3703           {
3704             if (as != NULL)
3705               gfc_internal_error ("find_array_spec(): unused as(1)");
3706             as = c->as;
3707           }
3708
3709         break;
3710
3711       case REF_SUBSTRING:
3712         break;
3713       }
3714
3715   if (as != NULL)
3716     gfc_internal_error ("find_array_spec(): unused as(2)");
3717 }
3718
3719
3720 /* Resolve an array reference.  */
3721
3722 static gfc_try
3723 resolve_array_ref (gfc_array_ref *ar)
3724 {
3725   int i, check_scalar;
3726   gfc_expr *e;
3727
3728   for (i = 0; i < ar->dimen; i++)
3729     {
3730       check_scalar = ar->dimen_type[i] == DIMEN_RANGE;
3731
3732       if (gfc_resolve_index (ar->start[i], check_scalar) == FAILURE)
3733         return FAILURE;
3734       if (gfc_resolve_index (ar->end[i], check_scalar) == FAILURE)
3735         return FAILURE;
3736       if (gfc_resolve_index (ar->stride[i], check_scalar) == FAILURE)
3737         return FAILURE;
3738
3739       e = ar->start[i];
3740
3741       if (ar->dimen_type[i] == DIMEN_UNKNOWN)
3742         switch (e->rank)
3743           {
3744           case 0:
3745             ar->dimen_type[i] = DIMEN_ELEMENT;
3746             break;
3747
3748           case 1:
3749             ar->dimen_type[i] = DIMEN_VECTOR;
3750             if (e->expr_type == EXPR_VARIABLE
3751                 && e->symtree->n.sym->ts.type == BT_DERIVED)
3752               ar->start[i] = gfc_get_parentheses (e);
3753             break;
3754
3755           default:
3756             gfc_error ("Array index at %L is an array of rank %d",
3757                        &ar->c_where[i], e->rank);
3758             return FAILURE;
3759           }
3760     }
3761
3762   /* If the reference type is unknown, figure out what kind it is.  */
3763
3764   if (ar->type == AR_UNKNOWN)
3765     {
3766       ar->type = AR_ELEMENT;
3767       for (i = 0; i < ar->dimen; i++)
3768         if (ar->dimen_type[i] == DIMEN_RANGE
3769             || ar->dimen_type[i] == DIMEN_VECTOR)
3770           {
3771             ar->type = AR_SECTION;
3772             break;
3773           }
3774     }
3775
3776   if (!ar->as->cray_pointee && compare_spec_to_ref (ar) == FAILURE)
3777     return FAILURE;
3778
3779   return SUCCESS;
3780 }
3781
3782
3783 static gfc_try
3784 resolve_substring (gfc_ref *ref)
3785 {
3786   if (ref->u.ss.start != NULL)
3787     {
3788       if (gfc_resolve_expr (ref->u.ss.start) == FAILURE)
3789         return FAILURE;
3790
3791       if (ref->u.ss.start->ts.type != BT_INTEGER)
3792         {
3793           gfc_error ("Substring start index at %L must be of type INTEGER",
3794                      &ref->u.ss.start->where);
3795           return FAILURE;
3796         }
3797
3798       if (ref->u.ss.start->rank != 0)
3799         {
3800           gfc_error ("Substring start index at %L must be scalar",
3801                      &ref->u.ss.start->where);
3802           return FAILURE;
3803         }
3804
3805       if (compare_bound_int (ref->u.ss.start, 1) == CMP_LT
3806           && (compare_bound (ref->u.ss.end, ref->u.ss.start) == CMP_EQ
3807               || compare_bound (ref->u.ss.end, ref->u.ss.start) == CMP_GT))
3808         {
3809           gfc_error ("Substring start index at %L is less than one",
3810                      &ref->u.ss.start->where);
3811           return FAILURE;
3812         }
3813     }
3814
3815   if (ref->u.ss.end != NULL)
3816     {
3817       if (gfc_resolve_expr (ref->u.ss.end) == FAILURE)
3818         return FAILURE;
3819
3820       if (ref->u.ss.end->ts.type != BT_INTEGER)
3821         {
3822           gfc_error ("Substring end index at %L must be of type INTEGER",
3823                      &ref->u.ss.end->where);
3824           return FAILURE;
3825         }
3826
3827       if (ref->u.ss.end->rank != 0)
3828         {
3829           gfc_error ("Substring end index at %L must be scalar",
3830                      &ref->u.ss.end->where);
3831           return FAILURE;
3832         }
3833
3834       if (ref->u.ss.length != NULL
3835           && compare_bound (ref->u.ss.end, ref->u.ss.length->length) == CMP_GT
3836           && (compare_bound (ref->u.ss.end, ref->u.ss.start) == CMP_EQ
3837               || compare_bound (ref->u.ss.end, ref->u.ss.start) == CMP_GT))
3838         {
3839           gfc_error ("Substring end index at %L exceeds the string length",
3840                      &ref->u.ss.start->where);
3841           return FAILURE;
3842         }
3843     }
3844
3845   return SUCCESS;
3846 }
3847
3848
3849 /* This function supplies missing substring charlens.  */
3850
3851 void
3852 gfc_resolve_substring_charlen (gfc_expr *e)
3853 {
3854   gfc_ref *char_ref;
3855   gfc_expr *start, *end;
3856
3857   for (char_ref = e->ref; char_ref; char_ref = char_ref->next)
3858     if (char_ref->type == REF_SUBSTRING)
3859       break;
3860
3861   if (!char_ref)
3862     return;
3863
3864   gcc_assert (char_ref->next == NULL);
3865
3866   if (e->ts.cl)
3867     {
3868       if (e->ts.cl->length)
3869         gfc_free_expr (e->ts.cl->length);
3870       else if (e->expr_type == EXPR_VARIABLE
3871                  && e->symtree->n.sym->attr.dummy)
3872         return;
3873     }
3874
3875   e->ts.type = BT_CHARACTER;
3876   e->ts.kind = gfc_default_character_kind;
3877
3878   if (!e->ts.cl)
3879     {
3880       e->ts.cl = gfc_get_charlen ();
3881       e->ts.cl->next = gfc_current_ns->cl_list;
3882       gfc_current_ns->cl_list = e->ts.cl;
3883     }
3884
3885   if (char_ref->u.ss.start)
3886     start = gfc_copy_expr (char_ref->u.ss.start);
3887   else
3888     start = gfc_int_expr (1);
3889
3890   if (char_ref->u.ss.end)
3891     end = gfc_copy_expr (char_ref->u.ss.end);
3892   else if (e->expr_type == EXPR_VARIABLE)
3893     end = gfc_copy_expr (e->symtree->n.sym->ts.cl->length);
3894   else
3895     end = NULL;
3896
3897   if (!start || !end)
3898     return;
3899
3900   /* Length = (end - start +1).  */
3901   e->ts.cl->length = gfc_subtract (end, start);
3902   e->ts.cl->length = gfc_add (e->ts.cl->length, gfc_int_expr (1));
3903
3904   e->ts.cl->length->ts.type = BT_INTEGER;
3905   e->ts.cl->length->ts.kind = gfc_charlen_int_kind;;
3906
3907   /* Make sure that the length is simplified.  */
3908   gfc_simplify_expr (e->ts.cl->length, 1);
3909   gfc_resolve_expr (e->ts.cl->length);
3910 }
3911
3912
3913 /* Resolve subtype references.  */
3914
3915 static gfc_try
3916 resolve_ref (gfc_expr *expr)
3917 {
3918   int current_part_dimension, n_components, seen_part_dimension;
3919   gfc_ref *ref;
3920
3921   for (ref = expr->ref; ref; ref = ref->next)
3922     if (ref->type == REF_ARRAY && ref->u.ar.as == NULL)
3923       {
3924         find_array_spec (expr);
3925         break;
3926       }
3927
3928   for (ref = expr->ref; ref; ref = ref->next)
3929     switch (ref->type)
3930       {
3931       case REF_ARRAY:
3932         if (resolve_array_ref (&ref->u.ar) == FAILURE)
3933           return FAILURE;
3934         break;
3935
3936       case REF_COMPONENT:
3937         break;
3938
3939       case REF_SUBSTRING:
3940         resolve_substring (ref);
3941         break;
3942       }
3943
3944   /* Check constraints on part references.  */
3945
3946   current_part_dimension = 0;
3947   seen_part_dimension = 0;
3948   n_components = 0;
3949
3950   for (ref = expr->ref; ref; ref = ref->next)
3951     {
3952       switch (ref->type)
3953         {
3954         case REF_ARRAY:
3955           switch (ref->u.ar.type)
3956             {
3957             case AR_FULL:
3958             case AR_SECTION:
3959               current_part_dimension = 1;
3960               break;
3961
3962             case AR_ELEMENT:
3963               current_part_dimension = 0;
3964               break;
3965
3966             case AR_UNKNOWN:
3967               gfc_internal_error ("resolve_ref(): Bad array reference");
3968             }
3969
3970           break;
3971
3972         case REF_COMPONENT:
3973           if (current_part_dimension || seen_part_dimension)
3974             {
3975               if (ref->u.c.component->attr.pointer)
3976                 {
3977                   gfc_error ("Component to the right of a part reference "
3978                              "with nonzero rank must not have the POINTER "
3979                              "attribute at %L", &expr->where);
3980                   return FAILURE;
3981                 }
3982               else if (ref->u.c.component->attr.allocatable)
3983                 {
3984                   gfc_error ("Component to the right of a part reference "
3985                              "with nonzero rank must not have the ALLOCATABLE "
3986                              "attribute at %L", &expr->where);
3987                   return FAILURE;
3988                 }
3989             }
3990
3991           n_components++;
3992           break;
3993
3994         case REF_SUBSTRING:
3995           break;
3996         }
3997
3998       if (((ref->type == REF_COMPONENT && n_components > 1)
3999            || ref->next == NULL)
4000           && current_part_dimension
4001           && seen_part_dimension)
4002         {
4003           gfc_error ("Two or more part references with nonzero rank must "
4004                      "not be specified at %L", &expr->where);
4005           return FAILURE;
4006         }
4007
4008       if (ref->type == REF_COMPONENT)
4009         {
4010           if (current_part_dimension)
4011             seen_part_dimension = 1;
4012
4013           /* reset to make sure */
4014           current_part_dimension = 0;
4015         }
4016     }
4017
4018   return SUCCESS;
4019 }
4020
4021
4022 /* Given an expression, determine its shape.  This is easier than it sounds.
4023    Leaves the shape array NULL if it is not possible to determine the shape.  */
4024
4025 static void
4026 expression_shape (gfc_expr *e)
4027 {
4028   mpz_t array[GFC_MAX_DIMENSIONS];
4029   int i;
4030
4031   if (e->rank == 0 || e->shape != NULL)
4032     return;
4033
4034   for (i = 0; i < e->rank; i++)
4035     if (gfc_array_dimen_size (e, i, &array[i]) == FAILURE)
4036       goto fail;
4037
4038   e->shape = gfc_get_shape (e->rank);
4039
4040   memcpy (e->shape, array, e->rank * sizeof (mpz_t));
4041
4042   return;
4043
4044 fail:
4045   for (i--; i >= 0; i--)
4046     mpz_clear (array[i]);
4047 }
4048
4049
4050 /* Given a variable expression node, compute the rank of the expression by
4051    examining the base symbol and any reference structures it may have.  */
4052
4053 static void
4054 expression_rank (gfc_expr *e)
4055 {
4056   gfc_ref *ref;
4057   int i, rank;
4058
4059   /* Just to make sure, because EXPR_COMPCALL's also have an e->ref and that
4060      could lead to serious confusion...  */
4061   gcc_assert (e->expr_type != EXPR_COMPCALL);
4062
4063   if (e->ref == NULL)
4064     {
4065       if (e->expr_type == EXPR_ARRAY)
4066         goto done;
4067       /* Constructors can have a rank different from one via RESHAPE().  */
4068
4069       if (e->symtree == NULL)
4070         {
4071           e->rank = 0;
4072           goto done;
4073         }
4074
4075       e->rank = (e->symtree->n.sym->as == NULL)
4076                 ? 0 : e->symtree->n.sym->as->rank;
4077       goto done;
4078     }
4079
4080   rank = 0;
4081
4082   for (ref = e->ref; ref; ref = ref->next)
4083     {
4084       if (ref->type != REF_ARRAY)
4085         continue;
4086
4087       if (ref->u.ar.type == AR_FULL)
4088         {
4089           rank = ref->u.ar.as->rank;
4090           break;
4091         }
4092
4093       if (ref->u.ar.type == AR_SECTION)
4094         {
4095           /* Figure out the rank of the section.  */
4096           if (rank != 0)
4097             gfc_internal_error ("expression_rank(): Two array specs");
4098
4099           for (i = 0; i < ref->u.ar.dimen; i++)
4100             if (ref->u.ar.dimen_type[i] == DIMEN_RANGE
4101                 || ref->u.ar.dimen_type[i] == DIMEN_VECTOR)
4102               rank++;
4103
4104           break;
4105         }
4106     }
4107
4108   e->rank = rank;
4109
4110 done:
4111   expression_shape (e);
4112 }
4113
4114
4115 /* Resolve a variable expression.  */
4116
4117 static gfc_try
4118 resolve_variable (gfc_expr *e)
4119 {
4120   gfc_symbol *sym;
4121   gfc_try t;
4122
4123   t = SUCCESS;
4124
4125   if (e->symtree == NULL)
4126     return FAILURE;
4127
4128   if (e->ref && resolve_ref (e) == FAILURE)
4129     return FAILURE;
4130
4131   sym = e->symtree->n.sym;
4132   if (sym->attr.flavor == FL_PROCEDURE && !sym->attr.function)
4133     {
4134       e->ts.type = BT_PROCEDURE;
4135       return SUCCESS;
4136     }
4137
4138   if (sym->ts.type != BT_UNKNOWN)
4139     gfc_variable_attr (e, &e->ts);
4140   else
4141     {
4142       /* Must be a simple variable reference.  */
4143       if (gfc_set_default_type (sym, 1, sym->ns) == FAILURE)
4144         return FAILURE;
4145       e->ts = sym->ts;
4146     }
4147
4148   if (check_assumed_size_reference (sym, e))
4149     return FAILURE;
4150
4151   /* Deal with forward references to entries during resolve_code, to
4152      satisfy, at least partially, 12.5.2.5.  */
4153   if (gfc_current_ns->entries
4154       && current_entry_id == sym->entry_id
4155       && cs_base
4156       && cs_base->current
4157       && cs_base->current->op != EXEC_ENTRY)
4158     {
4159       gfc_entry_list *entry;
4160       gfc_formal_arglist *formal;
4161       int n;
4162       bool seen;
4163
4164       /* If the symbol is a dummy...  */
4165       if (sym->attr.dummy && sym->ns == gfc_current_ns)
4166         {
4167           entry = gfc_current_ns->entries;
4168           seen = false;
4169
4170           /* ...test if the symbol is a parameter of previous entries.  */
4171           for (; entry && entry->id <= current_entry_id; entry = entry->next)
4172             for (formal = entry->sym->formal; formal; formal = formal->next)
4173               {
4174                 if (formal->sym && sym->name == formal->sym->name)
4175                   seen = true;
4176               }
4177
4178           /*  If it has not been seen as a dummy, this is an error.  */
4179           if (!seen)
4180             {
4181               if (specification_expr)
4182                 gfc_error ("Variable '%s', used in a specification expression"
4183                            ", is referenced at %L before the ENTRY statement "
4184                            "in which it is a parameter",
4185                            sym->name, &cs_base->current->loc);
4186               else
4187                 gfc_error ("Variable '%s' is used at %L before the ENTRY "
4188                            "statement in which it is a parameter",
4189                            sym->name, &cs_base->current->loc);
4190               t = FAILURE;
4191             }
4192         }
4193
4194       /* Now do the same check on the specification expressions.  */
4195       specification_expr = 1;
4196       if (sym->ts.type == BT_CHARACTER
4197           && gfc_resolve_expr (sym->ts.cl->length) == FAILURE)
4198         t = FAILURE;
4199
4200       if (sym->as)
4201         for (n = 0; n < sym->as->rank; n++)
4202           {
4203              specification_expr = 1;
4204              if (gfc_resolve_expr (sym->as->lower[n]) == FAILURE)
4205                t = FAILURE;
4206              specification_expr = 1;
4207              if (gfc_resolve_expr (sym->as->upper[n]) == FAILURE)
4208                t = FAILURE;
4209           }
4210       specification_expr = 0;
4211
4212       if (t == SUCCESS)
4213         /* Update the symbol's entry level.  */
4214         sym->entry_id = current_entry_id + 1;
4215     }
4216
4217   return t;
4218 }
4219
4220
4221 /* Checks to see that the correct symbol has been host associated.
4222    The only situation where this arises is that in which a twice
4223    contained function is parsed after the host association is made.
4224    Therefore, on detecting this, the line is rematched, having got
4225    rid of the existing references and actual_arg_list.  */
4226 static bool
4227 check_host_association (gfc_expr *e)
4228 {
4229   gfc_symbol *sym, *old_sym;
4230   locus temp_locus;
4231   gfc_expr *expr;
4232   int n;
4233   bool retval = e->expr_type == EXPR_FUNCTION;
4234
4235   if (e->symtree == NULL || e->symtree->n.sym == NULL)
4236     return retval;
4237
4238   old_sym = e->symtree->n.sym;
4239
4240   if (old_sym->attr.use_assoc)
4241     return retval;
4242
4243   if (gfc_current_ns->parent
4244         && old_sym->ns != gfc_current_ns)
4245     {
4246       gfc_find_symbol (old_sym->name, gfc_current_ns, 1, &sym);
4247       if (sym && old_sym != sym
4248               && sym->attr.flavor == FL_PROCEDURE
4249               && sym->attr.contained)
4250         {
4251           temp_locus = gfc_current_locus;
4252           gfc_current_locus = e->where;
4253
4254           gfc_buffer_error (1);
4255
4256           gfc_free_ref_list (e->ref);
4257           e->ref = NULL;
4258
4259           if (retval)
4260             {
4261               gfc_free_actual_arglist (e->value.function.actual);
4262               e->value.function.actual = NULL;
4263             }
4264
4265           if (e->shape != NULL)
4266             {
4267               for (n = 0; n < e->rank; n++)
4268                 mpz_clear (e->shape[n]);
4269
4270               gfc_free (e->shape);
4271             }
4272
4273           gfc_match_rvalue (&expr);
4274           gfc_clear_error ();
4275           gfc_buffer_error (0);
4276
4277           gcc_assert (expr && sym == expr->symtree->n.sym);
4278
4279           *e = *expr;
4280           gfc_free (expr);
4281           sym->refs++;
4282
4283           gfc_current_locus = temp_locus;
4284         }
4285     }
4286   /* This might have changed!  */
4287   return e->expr_type == EXPR_FUNCTION;
4288 }
4289
4290
4291 static void
4292 gfc_resolve_character_operator (gfc_expr *e)
4293 {
4294   gfc_expr *op1 = e->value.op.op1;
4295   gfc_expr *op2 = e->value.op.op2;
4296   gfc_expr *e1 = NULL;
4297   gfc_expr *e2 = NULL;
4298
4299   gcc_assert (e->value.op.op == INTRINSIC_CONCAT);
4300
4301   if (op1->ts.cl && op1->ts.cl->length)
4302     e1 = gfc_copy_expr (op1->ts.cl->length);
4303   else if (op1->expr_type == EXPR_CONSTANT)
4304     e1 = gfc_int_expr (op1->value.character.length);
4305
4306   if (op2->ts.cl && op2->ts.cl->length)
4307     e2 = gfc_copy_expr (op2->ts.cl->length);
4308   else if (op2->expr_type == EXPR_CONSTANT)
4309     e2 = gfc_int_expr (op2->value.character.length);
4310
4311   e->ts.cl = gfc_get_charlen ();
4312   e->ts.cl->next = gfc_current_ns->cl_list;
4313   gfc_current_ns->cl_list = e->ts.cl;
4314
4315   if (!e1 || !e2)
4316     return;
4317
4318   e->ts.cl->length = gfc_add (e1, e2);
4319   e->ts.cl->length->ts.type = BT_INTEGER;
4320   e->ts.cl->length->ts.kind = gfc_charlen_int_kind;;
4321   gfc_simplify_expr (e->ts.cl->length, 0);
4322   gfc_resolve_expr (e->ts.cl->length);
4323
4324   return;
4325 }
4326
4327
4328 /*  Ensure that an character expression has a charlen and, if possible, a
4329     length expression.  */
4330
4331 static void
4332 fixup_charlen (gfc_expr *e)
4333 {
4334   /* The cases fall through so that changes in expression type and the need
4335      for multiple fixes are picked up.  In all circumstances, a charlen should
4336      be available for the middle end to hang a backend_decl on.  */
4337   switch (e->expr_type)
4338     {
4339     case EXPR_OP:
4340       gfc_resolve_character_operator (e);
4341
4342     case EXPR_ARRAY:
4343       if (e->expr_type == EXPR_ARRAY)
4344         gfc_resolve_character_array_constructor (e);
4345
4346     case EXPR_SUBSTRING:
4347       if (!e->ts.cl && e->ref)
4348         gfc_resolve_substring_charlen (e);
4349
4350     default:
4351       if (!e->ts.cl)
4352         {
4353           e->ts.cl = gfc_get_charlen ();
4354           e->ts.cl->next = gfc_current_ns->cl_list;
4355           gfc_current_ns->cl_list = e->ts.cl;
4356         }
4357
4358       break;
4359     }
4360 }
4361
4362
4363 /* Update an actual argument to include the passed-object for type-bound
4364    procedures at the right position.  */
4365
4366 static gfc_actual_arglist*
4367 update_arglist_pass (gfc_actual_arglist* lst, gfc_expr* po, unsigned argpos)
4368 {
4369   if (argpos == 1)
4370     {
4371       gfc_actual_arglist* result;
4372
4373       result = gfc_get_actual_arglist ();
4374       result->expr = po;
4375       result->next = lst;
4376
4377       return result;
4378     }
4379
4380   gcc_assert (lst);
4381   gcc_assert (argpos > 1);
4382
4383   lst->next = update_arglist_pass (lst->next, po, argpos - 1);
4384   return lst;
4385 }
4386
4387
4388 /* Extract the passed-object from an EXPR_COMPCALL (a copy of it).  */
4389
4390 static gfc_expr*
4391 extract_compcall_passed_object (gfc_expr* e)
4392 {
4393   gfc_expr* po;
4394
4395   gcc_assert (e->expr_type == EXPR_COMPCALL);
4396
4397   po = gfc_get_expr ();
4398   po->expr_type = EXPR_VARIABLE;
4399   po->symtree = e->symtree;
4400   po->ref = gfc_copy_ref (e->ref);
4401
4402   if (gfc_resolve_expr (po) == FAILURE)
4403     return NULL;
4404
4405   return po;
4406 }
4407
4408
4409 /* Update the arglist of an EXPR_COMPCALL expression to include the
4410    passed-object.  */
4411
4412 static gfc_try
4413 update_compcall_arglist (gfc_expr* e)
4414 {
4415   gfc_expr* po;
4416   gfc_typebound_proc* tbp;
4417
4418   tbp = e->value.compcall.tbp;
4419
4420   po = extract_compcall_passed_object (e);
4421   if (!po)
4422     return FAILURE;
4423
4424   if (po->rank > 0)
4425     {
4426       gfc_error ("Passed-object at %L must be scalar", &e->where);
4427       return FAILURE;
4428     }
4429
4430   if (tbp->nopass)
4431     {
4432       gfc_free_expr (po);
4433       return SUCCESS;
4434     }
4435
4436   gcc_assert (tbp->pass_arg_num > 0);
4437   e->value.compcall.actual = update_arglist_pass (e->value.compcall.actual, po,
4438                                                   tbp->pass_arg_num);
4439
4440   return SUCCESS;
4441 }
4442
4443
4444 /* Resolve a call to a type-bound procedure, either function or subroutine,
4445    statically from the data in an EXPR_COMPCALL expression.  The adapted
4446    arglist and the target-procedure symtree are returned.  */
4447
4448 static gfc_try
4449 resolve_typebound_static (gfc_expr* e, gfc_symtree** target,
4450                           gfc_actual_arglist** actual)
4451 {
4452   gcc_assert (e->expr_type == EXPR_COMPCALL);
4453   gcc_assert (!e->value.compcall.tbp->is_generic);
4454
4455   /* Update the actual arglist for PASS.  */
4456   if (update_compcall_arglist (e) == FAILURE)
4457     return FAILURE;
4458
4459   *actual = e->value.compcall.actual;
4460   *target = e->value.compcall.tbp->u.specific;
4461
4462   gfc_free_ref_list (e->ref);
4463   e->ref = NULL;
4464   e->value.compcall.actual = NULL;
4465
4466   return SUCCESS;
4467 }
4468
4469
4470 /* Given an EXPR_COMPCALL calling a GENERIC typebound procedure, figure out
4471    which of the specific bindings (if any) matches the arglist and transform
4472    the expression into a call of that binding.  */
4473
4474 static gfc_try
4475 resolve_typebound_generic_call (gfc_expr* e)
4476 {
4477   gfc_typebound_proc* genproc;
4478   const char* genname;
4479
4480   gcc_assert (e->expr_type == EXPR_COMPCALL);
4481   genname = e->value.compcall.name;
4482   genproc = e->value.compcall.tbp;
4483
4484   if (!genproc->is_generic)
4485     return SUCCESS;
4486
4487   /* Try the bindings on this type and in the inheritance hierarchy.  */
4488   for (; genproc; genproc = genproc->overridden)
4489     {
4490       gfc_tbp_generic* g;
4491
4492       gcc_assert (genproc->is_generic);
4493       for (g = genproc->u.generic; g; g = g->next)
4494         {
4495           gfc_symbol* target;
4496           gfc_actual_arglist* args;
4497           bool matches;
4498
4499           gcc_assert (g->specific);
4500           target = g->specific->u.specific->n.sym;
4501
4502           /* Get the right arglist by handling PASS/NOPASS.  */
4503           args = gfc_copy_actual_arglist (e->value.compcall.actual);
4504           if (!g->specific->nopass)
4505             {
4506               gfc_expr* po;
4507               po = extract_compcall_passed_object (e);
4508               if (!po)
4509                 return FAILURE;
4510
4511               args = update_arglist_pass (args, po, g->specific->pass_arg_num);
4512             }
4513           resolve_actual_arglist (args, target->attr.proc,
4514                                   is_external_proc (target) && !target->formal);
4515
4516           /* Check if this arglist matches the formal.  */
4517           matches = gfc_arglist_matches_symbol (&args, target);
4518
4519           /* Clean up and break out of the loop if we've found it.  */
4520           gfc_free_actual_arglist (args);
4521           if (matches)
4522             {
4523               e->value.compcall.tbp = g->specific;
4524               goto success;
4525             }
4526         }
4527     }
4528
4529   /* Nothing matching found!  */
4530   gfc_error ("Found no matching specific binding for the call to the GENERIC"
4531              " '%s' at %L", genname, &e->where);
4532   return FAILURE;
4533
4534 success:
4535   return SUCCESS;
4536 }
4537
4538
4539 /* Resolve a call to a type-bound subroutine.  */
4540
4541 static gfc_try
4542 resolve_typebound_call (gfc_code* c)
4543 {
4544   gfc_actual_arglist* newactual;
4545   gfc_symtree* target;
4546
4547   /* Check that's really a SUBROUTINE.  */
4548   if (!c->expr->value.compcall.tbp->subroutine)
4549     {
4550       gfc_error ("'%s' at %L should be a SUBROUTINE",
4551                  c->expr->value.compcall.name, &c->loc);
4552       return FAILURE;
4553     }
4554
4555   if (resolve_typebound_generic_call (c->expr) == FAILURE)
4556     return FAILURE;
4557
4558   /* Transform into an ordinary EXEC_CALL for now.  */
4559
4560   if (resolve_typebound_static (c->expr, &target, &newactual) == FAILURE)
4561     return FAILURE;
4562
4563   c->ext.actual = newactual;
4564   c->symtree = target;
4565   c->op = EXEC_CALL;
4566
4567   gcc_assert (!c->expr->ref && !c->expr->value.compcall.actual);
4568   gfc_free_expr (c->expr);
4569   c->expr = NULL;
4570
4571   return resolve_call (c);
4572 }
4573
4574
4575 /* Resolve a component-call expression.  */
4576
4577 static gfc_try
4578 resolve_compcall (gfc_expr* e)
4579 {
4580   gfc_actual_arglist* newactual;
4581   gfc_symtree* target;
4582
4583   /* Check that's really a FUNCTION.  */
4584   if (!e->value.compcall.tbp->function)
4585     {
4586       gfc_error ("'%s' at %L should be a FUNCTION",
4587                  e->value.compcall.name, &e->where);
4588       return FAILURE;
4589     }
4590
4591   if (resolve_typebound_generic_call (e) == FAILURE)
4592     return FAILURE;
4593   gcc_assert (!e->value.compcall.tbp->is_generic);
4594
4595   /* Take the rank from the function's symbol.  */
4596   if (e->value.compcall.tbp->u.specific->n.sym->as)
4597     e->rank = e->value.compcall.tbp->u.specific->n.sym->as->rank;
4598
4599   /* For now, we simply transform it into an EXPR_FUNCTION call with the same
4600      arglist to the TBP's binding target.  */
4601
4602   if (resolve_typebound_static (e, &target, &newactual) == FAILURE)
4603     return FAILURE;
4604
4605   e->value.function.actual = newactual;
4606   e->value.function.name = e->value.compcall.name;
4607   e->value.function.isym = NULL;
4608   e->value.function.esym = NULL;
4609   e->symtree = target;
4610   e->ts = target->n.sym->ts;
4611   e->expr_type = EXPR_FUNCTION;
4612
4613   return gfc_resolve_expr (e);
4614 }
4615
4616
4617 /* Resolve an expression.  That is, make sure that types of operands agree
4618    with their operators, intrinsic operators are converted to function calls
4619    for overloaded types and unresolved function references are resolved.  */
4620
4621 gfc_try
4622 gfc_resolve_expr (gfc_expr *e)
4623 {
4624   gfc_try t;
4625
4626   if (e == NULL)
4627     return SUCCESS;
4628
4629   switch (e->expr_type)
4630     {
4631     case EXPR_OP:
4632       t = resolve_operator (e);
4633       break;
4634
4635     case EXPR_FUNCTION:
4636     case EXPR_VARIABLE:
4637
4638       if (check_host_association (e))
4639         t = resolve_function (e);
4640       else
4641         {
4642           t = resolve_variable (e);
4643           if (t == SUCCESS)
4644             expression_rank (e);
4645         }
4646
4647       if (e->ts.type == BT_CHARACTER && e->ts.cl == NULL && e->ref
4648           && e->ref->type != REF_SUBSTRING)
4649         gfc_resolve_substring_charlen (e);
4650
4651       break;
4652
4653     case EXPR_COMPCALL:
4654       t = resolve_compcall (e);
4655       break;
4656
4657     case EXPR_SUBSTRING:
4658       t = resolve_ref (e);
4659       break;
4660
4661     case EXPR_CONSTANT:
4662     case EXPR_NULL:
4663       t = SUCCESS;
4664       break;
4665
4666     case EXPR_ARRAY:
4667       t = FAILURE;
4668       if (resolve_ref (e) == FAILURE)
4669         break;
4670
4671       t = gfc_resolve_array_constructor (e);
4672       /* Also try to expand a constructor.  */
4673       if (t == SUCCESS)
4674         {
4675           expression_rank (e);
4676           gfc_expand_constructor (e);
4677         }
4678
4679       /* This provides the opportunity for the length of constructors with
4680          character valued function elements to propagate the string length
4681          to the expression.  */
4682       if (t == SUCCESS && e->ts.type == BT_CHARACTER)
4683         t = gfc_resolve_character_array_constructor (e);
4684
4685       break;
4686
4687     case EXPR_STRUCTURE:
4688       t = resolve_ref (e);
4689       if (t == FAILURE)
4690         break;
4691
4692       t = resolve_structure_cons (e);
4693       if (t == FAILURE)
4694         break;
4695
4696       t = gfc_simplify_expr (e, 0);
4697       break;
4698
4699     default:
4700       gfc_internal_error ("gfc_resolve_expr(): Bad expression type");
4701     }
4702
4703   if (e->ts.type == BT_CHARACTER && t == SUCCESS && !e->ts.cl)
4704     fixup_charlen (e);
4705
4706   return t;
4707 }
4708
4709
4710 /* Resolve an expression from an iterator.  They must be scalar and have
4711    INTEGER or (optionally) REAL type.  */
4712
4713 static gfc_try
4714 gfc_resolve_iterator_expr (gfc_expr *expr, bool real_ok,
4715                            const char *name_msgid)
4716 {
4717   if (gfc_resolve_expr (expr) == FAILURE)
4718     return FAILURE;
4719
4720   if (expr->rank != 0)
4721     {
4722       gfc_error ("%s at %L must be a scalar", _(name_msgid), &expr->where);
4723       return FAILURE;
4724     }
4725
4726   if (expr->ts.type != BT_INTEGER)
4727     {
4728       if (expr->ts.type == BT_REAL)
4729         {
4730           if (real_ok)
4731             return gfc_notify_std (GFC_STD_F95_DEL,
4732                                    "Deleted feature: %s at %L must be integer",
4733                                    _(name_msgid), &expr->where);
4734           else
4735             {
4736               gfc_error ("%s at %L must be INTEGER", _(name_msgid),
4737                          &expr->where);
4738               return FAILURE;
4739             }
4740         }
4741       else
4742         {
4743           gfc_error ("%s at %L must be INTEGER", _(name_msgid), &expr->where);
4744           return FAILURE;
4745         }
4746     }
4747   return SUCCESS;
4748 }
4749
4750
4751 /* Resolve the expressions in an iterator structure.  If REAL_OK is
4752    false allow only INTEGER type iterators, otherwise allow REAL types.  */
4753
4754 gfc_try
4755 gfc_resolve_iterator (gfc_iterator *iter, bool real_ok)
4756 {
4757   if (gfc_resolve_iterator_expr (iter->var, real_ok, "Loop variable")
4758       == FAILURE)
4759     return FAILURE;
4760
4761   if (gfc_pure (NULL) && gfc_impure_variable (iter->var->symtree->n.sym))
4762     {
4763       gfc_error ("Cannot assign to loop variable in PURE procedure at %L",
4764                  &iter->var->where);
4765       return FAILURE;
4766     }
4767
4768   if (gfc_resolve_iterator_expr (iter->start, real_ok,
4769                                  "Start expression in DO loop") == FAILURE)
4770     return FAILURE;
4771
4772   if (gfc_resolve_iterator_expr (iter->end, real_ok,
4773                                  "End expression in DO loop") == FAILURE)
4774     return FAILURE;
4775
4776   if (gfc_resolve_iterator_expr (iter->step, real_ok,
4777                                  "Step expression in DO loop") == FAILURE)
4778     return FAILURE;
4779
4780   if (iter->step->expr_type == EXPR_CONSTANT)
4781     {
4782       if ((iter->step->ts.type == BT_INTEGER
4783            && mpz_cmp_ui (iter->step->value.integer, 0) == 0)
4784           || (iter->step->ts.type == BT_REAL
4785               && mpfr_sgn (iter->step->value.real) == 0))
4786         {
4787           gfc_error ("Step expression in DO loop at %L cannot be zero",
4788                      &iter->step->where);
4789           return FAILURE;
4790         }
4791     }
4792
4793   /* Convert start, end, and step to the same type as var.  */
4794   if (iter->start->ts.kind != iter->var->ts.kind
4795       || iter->start->ts.type != iter->var->ts.type)
4796     gfc_convert_type (iter->start, &iter->var->ts, 2);
4797
4798   if (iter->end->ts.kind != iter->var->ts.kind
4799       || iter->end->ts.type != iter->var->ts.type)
4800     gfc_convert_type (iter->end, &iter->var->ts, 2);
4801
4802   if (iter->step->ts.kind != iter->var->ts.kind
4803       || iter->step->ts.type != iter->var->ts.type)
4804     gfc_convert_type (iter->step, &iter->var->ts, 2);
4805
4806   return SUCCESS;
4807 }
4808
4809
4810 /* Traversal function for find_forall_index.  f == 2 signals that
4811    that variable itself is not to be checked - only the references.  */
4812
4813 static bool
4814 forall_index (gfc_expr *expr, gfc_symbol *sym, int *f)
4815 {
4816   if (expr->expr_type != EXPR_VARIABLE)
4817     return false;
4818   
4819   /* A scalar assignment  */
4820   if (!expr->ref || *f == 1)
4821     {
4822       if (expr->symtree->n.sym == sym)
4823         return true;
4824       else
4825         return false;
4826     }
4827
4828   if (*f == 2)
4829     *f = 1;
4830   return false;
4831 }
4832
4833
4834 /* Check whether the FORALL index appears in the expression or not.
4835    Returns SUCCESS if SYM is found in EXPR.  */
4836
4837 gfc_try
4838 find_forall_index (gfc_expr *expr, gfc_symbol *sym, int f)
4839 {
4840   if (gfc_traverse_expr (expr, sym, forall_index, f))
4841     return SUCCESS;
4842   else
4843     return FAILURE;
4844 }
4845
4846
4847 /* Resolve a list of FORALL iterators.  The FORALL index-name is constrained
4848    to be a scalar INTEGER variable.  The subscripts and stride are scalar
4849    INTEGERs, and if stride is a constant it must be nonzero.
4850    Furthermore "A subscript or stride in a forall-triplet-spec shall
4851    not contain a reference to any index-name in the
4852    forall-triplet-spec-list in which it appears." (7.5.4.1)  */
4853
4854 static void
4855 resolve_forall_iterators (gfc_forall_iterator *it)
4856 {
4857   gfc_forall_iterator *iter, *iter2;
4858
4859   for (iter = it; iter; iter = iter->next)
4860     {
4861       if (gfc_resolve_expr (iter->var) == SUCCESS
4862           && (iter->var->ts.type != BT_INTEGER || iter->var->rank != 0))
4863         gfc_error ("FORALL index-name at %L must be a scalar INTEGER",
4864                    &iter->var->where);
4865
4866       if (gfc_resolve_expr (iter->start) == SUCCESS
4867           && (iter->start->ts.type != BT_INTEGER || iter->start->rank != 0))
4868         gfc_error ("FORALL start expression at %L must be a scalar INTEGER",
4869                    &iter->start->where);
4870       if (iter->var->ts.kind != iter->start->ts.kind)
4871         gfc_convert_type (iter->start, &iter->var->ts, 2);
4872
4873       if (gfc_resolve_expr (iter->end) == SUCCESS
4874           && (iter->end->ts.type != BT_INTEGER || iter->end->rank != 0))
4875         gfc_error ("FORALL end expression at %L must be a scalar INTEGER",
4876                    &iter->end->where);
4877       if (iter->var->ts.kind != iter->end->ts.kind)
4878         gfc_convert_type (iter->end, &iter->var->ts, 2);
4879
4880       if (gfc_resolve_expr (iter->stride) == SUCCESS)
4881         {
4882           if (iter->stride->ts.type != BT_INTEGER || iter->stride->rank != 0)
4883             gfc_error ("FORALL stride expression at %L must be a scalar %s",
4884                        &iter->stride->where, "INTEGER");
4885
4886           if (iter->stride->expr_type == EXPR_CONSTANT
4887               && mpz_cmp_ui(iter->stride->value.integer, 0) == 0)
4888             gfc_error ("FORALL stride expression at %L cannot be zero",
4889                        &iter->stride->where);
4890         }
4891       if (iter->var->ts.kind != iter->stride->ts.kind)
4892         gfc_convert_type (iter->stride, &iter->var->ts, 2);
4893     }
4894
4895   for (iter = it; iter; iter = iter->next)
4896     for (iter2 = iter; iter2; iter2 = iter2->next)
4897       {
4898         if (find_forall_index (iter2->start,
4899                                iter->var->symtree->n.sym, 0) == SUCCESS
4900             || find_forall_index (iter2->end,
4901                                   iter->var->symtree->n.sym, 0) == SUCCESS
4902             || find_forall_index (iter2->stride,
4903                                   iter->var->symtree->n.sym, 0) == SUCCESS)
4904           gfc_error ("FORALL index '%s' may not appear in triplet "
4905                      "specification at %L", iter->var->symtree->name,
4906                      &iter2->start->where);
4907       }
4908 }
4909
4910
4911 /* Given a pointer to a symbol that is a derived type, see if it's
4912    inaccessible, i.e. if it's defined in another module and the components are
4913    PRIVATE.  The search is recursive if necessary.  Returns zero if no
4914    inaccessible components are found, nonzero otherwise.  */
4915
4916 static int
4917 derived_inaccessible (gfc_symbol *sym)
4918 {
4919   gfc_component *c;
4920
4921   if (sym->attr.use_assoc && sym->attr.private_comp)
4922     return 1;
4923
4924   for (c = sym->components; c; c = c->next)
4925     {
4926         if (c->ts.type == BT_DERIVED && derived_inaccessible (c->ts.derived))
4927           return 1;
4928     }
4929
4930   return 0;
4931 }
4932
4933
4934 /* Resolve the argument of a deallocate expression.  The expression must be
4935    a pointer or a full array.  */
4936
4937 static gfc_try
4938 resolve_deallocate_expr (gfc_expr *e)
4939 {
4940   symbol_attribute attr;
4941   int allocatable, pointer, check_intent_in;
4942   gfc_ref *ref;
4943
4944   /* Check INTENT(IN), unless the object is a sub-component of a pointer.  */
4945   check_intent_in = 1;
4946
4947   if (gfc_resolve_expr (e) == FAILURE)
4948     return FAILURE;
4949
4950   if (e->expr_type != EXPR_VARIABLE)
4951     goto bad;
4952
4953   allocatable = e->symtree->n.sym->attr.allocatable;
4954   pointer = e->symtree->n.sym->attr.pointer;
4955   for (ref = e->ref; ref; ref = ref->next)
4956     {
4957       if (pointer)
4958         check_intent_in = 0;
4959
4960       switch (ref->type)
4961         {
4962         case REF_ARRAY:
4963           if (ref->u.ar.type != AR_FULL)
4964             allocatable = 0;
4965           break;
4966
4967         case REF_COMPONENT:
4968           allocatable = (ref->u.c.component->as != NULL
4969                          && ref->u.c.component->as->type == AS_DEFERRED);
4970           pointer = ref->u.c.component->attr.pointer;
4971           break;
4972
4973         case REF_SUBSTRING:
4974           allocatable = 0;
4975           break;
4976         }
4977     }
4978
4979   attr = gfc_expr_attr (e);
4980
4981   if (allocatable == 0 && attr.pointer == 0)
4982     {
4983     bad:
4984       gfc_error ("Expression in DEALLOCATE statement at %L must be "
4985                  "ALLOCATABLE or a POINTER", &e->where);
4986     }
4987
4988   if (check_intent_in
4989       && e->symtree->n.sym->attr.intent == INTENT_IN)
4990     {
4991       gfc_error ("Cannot deallocate INTENT(IN) variable '%s' at %L",
4992                  e->symtree->n.sym->name, &e->where);
4993       return FAILURE;
4994     }
4995
4996   return SUCCESS;
4997 }
4998
4999
5000 /* Returns true if the expression e contains a reference to the symbol sym.  */
5001 static bool
5002 sym_in_expr (gfc_expr *e, gfc_symbol *sym, int *f ATTRIBUTE_UNUSED)
5003 {
5004   if (e->expr_type == EXPR_VARIABLE && e->symtree->n.sym == sym)
5005     return true;
5006
5007   return false;
5008 }
5009
5010 bool
5011 gfc_find_sym_in_expr (gfc_symbol *sym, gfc_expr *e)
5012 {
5013   return gfc_traverse_expr (e, sym, sym_in_expr, 0);
5014 }
5015
5016
5017 /* Given the expression node e for an allocatable/pointer of derived type to be
5018    allocated, get the expression node to be initialized afterwards (needed for
5019    derived types with default initializers, and derived types with allocatable
5020    components that need nullification.)  */
5021
5022 static gfc_expr *
5023 expr_to_initialize (gfc_expr *e)
5024 {
5025   gfc_expr *result;
5026   gfc_ref *ref;
5027   int i;
5028
5029   result = gfc_copy_expr (e);
5030
5031   /* Change the last array reference from AR_ELEMENT to AR_FULL.  */
5032   for (ref = result->ref; ref; ref = ref->next)
5033     if (ref->type == REF_ARRAY && ref->next == NULL)
5034       {
5035         ref->u.ar.type = AR_FULL;
5036
5037         for (i = 0; i < ref->u.ar.dimen; i++)
5038           ref->u.ar.start[i] = ref->u.ar.end[i] = ref->u.ar.stride[i] = NULL;
5039
5040         result->rank = ref->u.ar.dimen;
5041         break;
5042       }
5043
5044   return result;
5045 }
5046
5047
5048 /* Resolve the expression in an ALLOCATE statement, doing the additional
5049    checks to see whether the expression is OK or not.  The expression must
5050    have a trailing array reference that gives the size of the array.  */
5051
5052 static gfc_try
5053 resolve_allocate_expr (gfc_expr *e, gfc_code *code)
5054 {
5055   int i, pointer, allocatable, dimension, check_intent_in;
5056   symbol_attribute attr;
5057   gfc_ref *ref, *ref2;
5058   gfc_array_ref *ar;
5059   gfc_code *init_st;
5060   gfc_expr *init_e;
5061   gfc_symbol *sym;
5062   gfc_alloc *a;
5063
5064   /* Check INTENT(IN), unless the object is a sub-component of a pointer.  */
5065   check_intent_in = 1;
5066
5067   if (gfc_resolve_expr (e) == FAILURE)
5068     return FAILURE;
5069
5070   if (code->expr && code->expr->expr_type == EXPR_VARIABLE)
5071     sym = code->expr->symtree->n.sym;
5072   else
5073     sym = NULL;
5074
5075   /* Make sure the expression is allocatable or a pointer.  If it is
5076      pointer, the next-to-last reference must be a pointer.  */
5077
5078   ref2 = NULL;
5079
5080   if (e->expr_type != EXPR_VARIABLE)
5081     {
5082       allocatable = 0;
5083       attr = gfc_expr_attr (e);
5084       pointer = attr.pointer;
5085       dimension = attr.dimension;
5086     }
5087   else
5088     {
5089       allocatable = e->symtree->n.sym->attr.allocatable;
5090       pointer = e->symtree->n.sym->attr.pointer;
5091       dimension = e->symtree->n.sym->attr.dimension;
5092
5093       if (sym == e->symtree->n.sym && sym->ts.type != BT_DERIVED)
5094         {
5095           gfc_error ("The STAT variable '%s' in an ALLOCATE statement must "
5096                      "not be allocated in the same statement at %L",
5097                       sym->name, &e->where);
5098           return FAILURE;
5099         }
5100
5101       for (ref = e->ref; ref; ref2 = ref, ref = ref->next)
5102         {
5103           if (pointer)
5104             check_intent_in = 0;
5105
5106           switch (ref->type)
5107             {
5108               case REF_ARRAY:
5109                 if (ref->next != NULL)
5110                   pointer = 0;
5111                 break;
5112
5113               case REF_COMPONENT:
5114                 allocatable = (ref->u.c.component->as != NULL
5115                                && ref->u.c.component->as->type == AS_DEFERRED);
5116
5117                 pointer = ref->u.c.component->attr.pointer;
5118                 dimension = ref->u.c.component->attr.dimension;
5119                 break;
5120
5121               case REF_SUBSTRING:
5122                 allocatable = 0;
5123                 pointer = 0;
5124                 break;
5125             }
5126         }
5127     }
5128
5129   if (allocatable == 0 && pointer == 0)
5130     {
5131       gfc_error ("Expression in ALLOCATE statement at %L must be "
5132                  "ALLOCATABLE or a POINTER", &e->where);
5133       return FAILURE;
5134     }
5135
5136   if (check_intent_in
5137       && e->symtree->n.sym->attr.intent == INTENT_IN)
5138     {
5139       gfc_error ("Cannot allocate INTENT(IN) variable '%s' at %L",
5140                  e->symtree->n.sym->name, &e->where);
5141       return FAILURE;
5142     }
5143
5144   /* Add default initializer for those derived types that need them.  */
5145   if (e->ts.type == BT_DERIVED && (init_e = gfc_default_initializer (&e->ts)))
5146     {
5147       init_st = gfc_get_code ();
5148       init_st->loc = code->loc;
5149       init_st->op = EXEC_INIT_ASSIGN;
5150       init_st->expr = expr_to_initialize (e);
5151       init_st->expr2 = init_e;
5152       init_st->next = code->next;
5153       code->next = init_st;
5154     }
5155
5156   if (pointer && dimension == 0)
5157     return SUCCESS;
5158
5159   /* Make sure the next-to-last reference node is an array specification.  */
5160
5161   if (ref2 == NULL || ref2->type != REF_ARRAY || ref2->u.ar.type == AR_FULL)
5162     {
5163       gfc_error ("Array specification required in ALLOCATE statement "
5164                  "at %L", &e->where);
5165       return FAILURE;
5166     }
5167
5168   /* Make sure that the array section reference makes sense in the
5169     context of an ALLOCATE specification.  */
5170
5171   ar = &ref2->u.ar;
5172
5173   for (i = 0; i < ar->dimen; i++)
5174     {
5175       if (ref2->u.ar.type == AR_ELEMENT)
5176         goto check_symbols;
5177
5178       switch (ar->dimen_type[i])
5179         {
5180         case DIMEN_ELEMENT:
5181           break;
5182
5183         case DIMEN_RANGE:
5184           if (ar->start[i] != NULL
5185               && ar->end[i] != NULL
5186               && ar->stride[i] == NULL)
5187             break;
5188
5189           /* Fall Through...  */
5190
5191         case DIMEN_UNKNOWN:
5192         case DIMEN_VECTOR:
5193           gfc_error ("Bad array specification in ALLOCATE statement at %L",
5194                      &e->where);
5195           return FAILURE;
5196         }
5197
5198 check_symbols:
5199
5200       for (a = code->ext.alloc_list; a; a = a->next)
5201         {
5202           sym = a->expr->symtree->n.sym;
5203
5204           /* TODO - check derived type components.  */
5205           if (sym->ts.type == BT_DERIVED)
5206             continue;
5207
5208           if ((ar->start[i] != NULL
5209                && gfc_find_sym_in_expr (sym, ar->start[i]))
5210               || (ar->end[i] != NULL
5211                   && gfc_find_sym_in_expr (sym, ar->end[i])))
5212             {
5213               gfc_error ("'%s' must not appear in the array specification at "
5214                          "%L in the same ALLOCATE statement where it is "
5215                          "itself allocated", sym->name, &ar->where);
5216               return FAILURE;
5217             }
5218         }
5219     }
5220
5221   return SUCCESS;
5222 }
5223
5224 static void
5225 resolve_allocate_deallocate (gfc_code *code, const char *fcn)
5226 {
5227   gfc_symbol *s = NULL;
5228   gfc_alloc *a;
5229
5230   if (code->expr)
5231     s = code->expr->symtree->n.sym;
5232
5233   if (s)
5234     {
5235       if (s->attr.intent == INTENT_IN)
5236         gfc_error ("STAT variable '%s' of %s statement at %C cannot "
5237                    "be INTENT(IN)", s->name, fcn);
5238
5239       if (gfc_pure (NULL) && gfc_impure_variable (s))
5240         gfc_error ("Illegal STAT variable in %s statement at %C "
5241                    "for a PURE procedure", fcn);
5242     }
5243
5244   if (s && code->expr->ts.type != BT_INTEGER)
5245         gfc_error ("STAT tag in %s statement at %L must be "
5246                        "of type INTEGER", fcn, &code->expr->where);
5247
5248   if (strcmp (fcn, "ALLOCATE") == 0)
5249     {
5250       for (a = code->ext.alloc_list; a; a = a->next)
5251         resolve_allocate_expr (a->expr, code);
5252     }
5253   else
5254     {
5255       for (a = code->ext.alloc_list; a; a = a->next)
5256         resolve_deallocate_expr (a->expr);
5257     }
5258 }
5259
5260 /************ SELECT CASE resolution subroutines ************/
5261
5262 /* Callback function for our mergesort variant.  Determines interval
5263    overlaps for CASEs. Return <0 if op1 < op2, 0 for overlap, >0 for
5264    op1 > op2.  Assumes we're not dealing with the default case.  
5265    We have op1 = (:L), (K:L) or (K:) and op2 = (:N), (M:N) or (M:).
5266    There are nine situations to check.  */
5267
5268 static int
5269 compare_cases (const gfc_case *op1, const gfc_case *op2)
5270 {
5271   int retval;
5272
5273   if (op1->low == NULL) /* op1 = (:L)  */
5274     {
5275       /* op2 = (:N), so overlap.  */
5276       retval = 0;
5277       /* op2 = (M:) or (M:N),  L < M  */
5278       if (op2->low != NULL
5279           && gfc_compare_expr (op1->high, op2->low, INTRINSIC_LT) < 0)
5280         retval = -1;
5281     }
5282   else if (op1->high == NULL) /* op1 = (K:)  */
5283     {
5284       /* op2 = (M:), so overlap.  */
5285       retval = 0;
5286       /* op2 = (:N) or (M:N), K > N  */
5287       if (op2->high != NULL
5288           && gfc_compare_expr (op1->low, op2->high, INTRINSIC_GT) > 0)
5289         retval = 1;
5290     }
5291   else /* op1 = (K:L)  */
5292     {
5293       if (op2->low == NULL)       /* op2 = (:N), K > N  */
5294         retval = (gfc_compare_expr (op1->low, op2->high, INTRINSIC_GT) > 0)
5295                  ? 1 : 0;
5296       else if (op2->high == NULL) /* op2 = (M:), L < M  */
5297         retval = (gfc_compare_expr (op1->high, op2->low, INTRINSIC_LT) < 0)
5298                  ? -1 : 0;
5299       else                      /* op2 = (M:N)  */
5300         {
5301           retval =  0;
5302           /* L < M  */
5303           if (gfc_compare_expr (op1->high, op2->low, INTRINSIC_LT) < 0)
5304             retval =  -1;
5305           /* K > N  */
5306           else if (gfc_compare_expr (op1->low, op2->high, INTRINSIC_GT) > 0)
5307             retval =  1;
5308         }
5309     }
5310
5311   return retval;
5312 }
5313
5314
5315 /* Merge-sort a double linked case list, detecting overlap in the
5316    process.  LIST is the head of the double linked case list before it
5317    is sorted.  Returns the head of the sorted list if we don't see any
5318    overlap, or NULL otherwise.  */
5319
5320 static gfc_case *
5321 check_case_overlap (gfc_case *list)
5322 {
5323   gfc_case *p, *q, *e, *tail;
5324   int insize, nmerges, psize, qsize, cmp, overlap_seen;
5325
5326   /* If the passed list was empty, return immediately.  */
5327   if (!list)
5328     return NULL;
5329
5330   overlap_seen = 0;
5331   insize = 1;
5332
5333   /* Loop unconditionally.  The only exit from this loop is a return
5334      statement, when we've finished sorting the case list.  */
5335   for (;;)
5336     {
5337       p = list;
5338       list = NULL;
5339       tail = NULL;
5340
5341       /* Count the number of merges we do in this pass.  */
5342       nmerges = 0;
5343
5344       /* Loop while there exists a merge to be done.  */
5345       while (p)
5346         {
5347           int i;
5348
5349           /* Count this merge.  */
5350           nmerges++;
5351
5352           /* Cut the list in two pieces by stepping INSIZE places
5353              forward in the list, starting from P.  */
5354           psize = 0;
5355           q = p;
5356           for (i = 0; i < insize; i++)
5357             {
5358               psize++;
5359               q = q->right;
5360               if (!q)
5361                 break;
5362             }
5363           qsize = insize;
5364
5365           /* Now we have two lists.  Merge them!  */
5366           while (psize > 0 || (qsize > 0 && q != NULL))
5367             {
5368               /* See from which the next case to merge comes from.  */
5369               if (psize == 0)
5370                 {
5371                   /* P is empty so the next case must come from Q.  */
5372                   e = q;
5373                   q = q->right;
5374                   qsize--;
5375                 }
5376               else if (qsize == 0 || q == NULL)
5377                 {
5378                   /* Q is empty.  */
5379                   e = p;
5380                   p = p->right;
5381                   psize--;
5382                 }
5383               else
5384                 {
5385                   cmp = compare_cases (p, q);
5386                   if (cmp < 0)
5387                     {
5388                       /* The whole case range for P is less than the
5389                          one for Q.  */
5390                       e = p;
5391                       p = p->right;
5392                       psize--;
5393                     }
5394                   else if (cmp > 0)
5395                     {
5396                       /* The whole case range for Q is greater than
5397                          the case range for P.  */
5398                       e = q;
5399                       q = q->right;
5400                       qsize--;
5401                     }
5402                   else
5403                     {
5404                       /* The cases overlap, or they are the same
5405                          element in the list.  Either way, we must
5406                          issue an error and get the next case from P.  */
5407                       /* FIXME: Sort P and Q by line number.  */
5408                       gfc_error ("CASE label at %L overlaps with CASE "
5409                                  "label at %L", &p->where, &q->where);
5410                       overlap_seen = 1;
5411                       e = p;
5412                       p = p->right;
5413                       psize--;
5414                     }
5415                 }
5416
5417                 /* Add the next element to the merged list.  */
5418               if (tail)
5419                 tail->right = e;
5420               else
5421                 list = e;
5422               e->left = tail;
5423               tail = e;
5424             }
5425
5426           /* P has now stepped INSIZE places along, and so has Q.  So
5427              they're the same.  */
5428           p = q;
5429         }
5430       tail->right = NULL;
5431
5432       /* If we have done only one merge or none at all, we've
5433          finished sorting the cases.  */
5434       if (nmerges <= 1)
5435         {
5436           if (!overlap_seen)
5437             return list;
5438           else
5439             return NULL;
5440         }
5441
5442       /* Otherwise repeat, merging lists twice the size.  */
5443       insize *= 2;
5444     }
5445 }
5446
5447
5448 /* Check to see if an expression is suitable for use in a CASE statement.
5449    Makes sure that all case expressions are scalar constants of the same
5450    type.  Return FAILURE if anything is wrong.  */
5451
5452 static gfc_try
5453 validate_case_label_expr (gfc_expr *e, gfc_expr *case_expr)
5454 {
5455   if (e == NULL) return SUCCESS;
5456
5457   if (e->ts.type != case_expr->ts.type)
5458     {
5459       gfc_error ("Expression in CASE statement at %L must be of type %s",
5460                  &e->where, gfc_basic_typename (case_expr->ts.type));
5461       return FAILURE;
5462     }
5463
5464   /* C805 (R808) For a given case-construct, each case-value shall be of
5465      the same type as case-expr.  For character type, length differences
5466      are allowed, but the kind type parameters shall be the same.  */
5467
5468   if (case_expr->ts.type == BT_CHARACTER && e->ts.kind != case_expr->ts.kind)
5469     {
5470       gfc_error ("Expression in CASE statement at %L must be of kind %d",
5471                  &e->where, case_expr->ts.kind);
5472       return FAILURE;
5473     }
5474
5475   /* Convert the case value kind to that of case expression kind, if needed.
5476      FIXME:  Should a warning be issued?  */
5477   if (e->ts.kind != case_expr->ts.kind)
5478     gfc_convert_type_warn (e, &case_expr->ts, 2, 0);
5479
5480   if (e->rank != 0)
5481     {
5482       gfc_error ("Expression in CASE statement at %L must be scalar",
5483                  &e->where);
5484       return FAILURE;
5485     }
5486
5487   return SUCCESS;
5488 }
5489
5490
5491 /* Given a completely parsed select statement, we:
5492
5493      - Validate all expressions and code within the SELECT.
5494      - Make sure that the selection expression is not of the wrong type.
5495      - Make sure that no case ranges overlap.
5496      - Eliminate unreachable cases and unreachable code resulting from
5497        removing case labels.
5498
5499    The standard does allow unreachable cases, e.g. CASE (5:3).  But
5500    they are a hassle for code generation, and to prevent that, we just
5501    cut them out here.  This is not necessary for overlapping cases
5502    because they are illegal and we never even try to generate code.
5503
5504    We have the additional caveat that a SELECT construct could have
5505    been a computed GOTO in the source code. Fortunately we can fairly
5506    easily work around that here: The case_expr for a "real" SELECT CASE
5507    is in code->expr1, but for a computed GOTO it is in code->expr2. All
5508    we have to do is make sure that the case_expr is a scalar integer
5509    expression.  */
5510
5511 static void
5512 resolve_select (gfc_code *code)
5513 {
5514   gfc_code *body;
5515   gfc_expr *case_expr;
5516   gfc_case *cp, *default_case, *tail, *head;
5517   int seen_unreachable;
5518   int seen_logical;
5519   int ncases;
5520   bt type;
5521   gfc_try t;
5522
5523   if (code->expr == NULL)
5524     {
5525       /* This was actually a computed GOTO statement.  */
5526       case_expr = code->expr2;
5527       if (case_expr->ts.type != BT_INTEGER|| case_expr->rank != 0)
5528         gfc_error ("Selection expression in computed GOTO statement "
5529                    "at %L must be a scalar integer expression",
5530                    &case_expr->where);
5531
5532       /* Further checking is not necessary because this SELECT was built
5533          by the compiler, so it should always be OK.  Just move the
5534          case_expr from expr2 to expr so that we can handle computed
5535          GOTOs as normal SELECTs from here on.  */
5536       code->expr = code->expr2;
5537       code->expr2 = NULL;
5538       return;
5539     }
5540
5541   case_expr = code->expr;
5542
5543   type = case_expr->ts.type;
5544   if (type != BT_LOGICAL && type != BT_INTEGER && type != BT_CHARACTER)
5545     {
5546       gfc_error ("Argument of SELECT statement at %L cannot be %s",
5547                  &case_expr->where, gfc_typename (&case_expr->ts));
5548
5549       /* Punt. Going on here just produce more garbage error messages.  */
5550       return;
5551     }
5552
5553   if (case_expr->rank != 0)
5554     {
5555       gfc_error ("Argument of SELECT statement at %L must be a scalar "
5556                  "expression", &case_expr->where);
5557
5558       /* Punt.  */
5559       return;
5560     }
5561
5562   /* PR 19168 has a long discussion concerning a mismatch of the kinds
5563      of the SELECT CASE expression and its CASE values.  Walk the lists
5564      of case values, and if we find a mismatch, promote case_expr to
5565      the appropriate kind.  */
5566
5567   if (type == BT_LOGICAL || type == BT_INTEGER)
5568     {
5569       for (body = code->block; body; body = body->block)
5570         {
5571           /* Walk the case label list.  */
5572           for (cp = body->ext.case_list; cp; cp = cp->next)
5573             {
5574               /* Intercept the DEFAULT case.  It does not have a kind.  */
5575               if (cp->low == NULL && cp->high == NULL)
5576                 continue;
5577
5578               /* Unreachable case ranges are discarded, so ignore.  */
5579               if (cp->low != NULL && cp->high != NULL
5580                   && cp->low != cp->high
5581                   && gfc_compare_expr (cp->low, cp->high, INTRINSIC_GT) > 0)
5582                 continue;
5583
5584               /* FIXME: Should a warning be issued?  */
5585               if (cp->low != NULL
5586                   && case_expr->ts.kind != gfc_kind_max(case_expr, cp->low))
5587                 gfc_convert_type_warn (case_expr, &cp->low->ts, 2, 0);
5588
5589               if (cp->high != NULL
5590                   && case_expr->ts.kind != gfc_kind_max(case_expr, cp->high))
5591                 gfc_convert_type_warn (case_expr, &cp->high->ts, 2, 0);
5592             }
5593          }
5594     }
5595
5596   /* Assume there is no DEFAULT case.  */
5597   default_case = NULL;
5598   head = tail = NULL;
5599   ncases = 0;
5600   seen_logical = 0;
5601
5602   for (body = code->block; body; body = body->block)
5603     {
5604       /* Assume the CASE list is OK, and all CASE labels can be matched.  */
5605       t = SUCCESS;
5606       seen_unreachable = 0;
5607
5608       /* Walk the case label list, making sure that all case labels
5609          are legal.  */
5610       for (cp = body->ext.case_list; cp; cp = cp->next)
5611         {
5612           /* Count the number of cases in the whole construct.  */
5613           ncases++;
5614
5615           /* Intercept the DEFAULT case.  */
5616           if (cp->low == NULL && cp->high == NULL)
5617             {
5618               if (default_case != NULL)
5619                 {
5620                   gfc_error ("The DEFAULT CASE at %L cannot be followed "
5621                              "by a second DEFAULT CASE at %L",
5622                              &default_case->where, &cp->where);
5623                   t = FAILURE;
5624                   break;
5625                 }
5626               else
5627                 {
5628                   default_case = cp;
5629                   continue;
5630                 }
5631             }
5632
5633           /* Deal with single value cases and case ranges.  Errors are
5634              issued from the validation function.  */
5635           if(validate_case_label_expr (cp->low, case_expr) != SUCCESS
5636              || validate_case_label_expr (cp->high, case_expr) != SUCCESS)
5637             {
5638               t = FAILURE;
5639               break;
5640             }
5641
5642           if (type == BT_LOGICAL
5643               && ((cp->low == NULL || cp->high == NULL)
5644                   || cp->low != cp->high))
5645             {
5646               gfc_error ("Logical range in CASE statement at %L is not "
5647                          "allowed", &cp->low->where);
5648               t = FAILURE;
5649               break;
5650             }
5651
5652           if (type == BT_LOGICAL && cp->low->expr_type == EXPR_CONSTANT)
5653             {
5654               int value;
5655               value = cp->low->value.logical == 0 ? 2 : 1;
5656               if (value & seen_logical)
5657                 {
5658                   gfc_error ("constant logical value in CASE statement "
5659                              "is repeated at %L",
5660                              &cp->low->where);
5661                   t = FAILURE;
5662                   break;
5663                 }
5664               seen_logical |= value;
5665             }
5666
5667           if (cp->low != NULL && cp->high != NULL
5668               && cp->low != cp->high
5669               && gfc_compare_expr (cp->low, cp->high, INTRINSIC_GT) > 0)
5670             {
5671               if (gfc_option.warn_surprising)
5672                 gfc_warning ("Range specification at %L can never "
5673                              "be matched", &cp->where);
5674
5675               cp->unreachable = 1;
5676               seen_unreachable = 1;
5677             }
5678           else
5679             {
5680               /* If the case range can be matched, it can also overlap with
5681                  other cases.  To make sure it does not, we put it in a
5682                  double linked list here.  We sort that with a merge sort
5683                  later on to detect any overlapping cases.  */
5684               if (!head)
5685                 {
5686                   head = tail = cp;
5687                   head->right = head->left = NULL;
5688                 }
5689               else
5690                 {
5691                   tail->right = cp;
5692                   tail->right->left = tail;
5693                   tail = tail->right;
5694                   tail->right = NULL;
5695                 }
5696             }
5697         }
5698
5699       /* It there was a failure in the previous case label, give up
5700          for this case label list.  Continue with the next block.  */
5701       if (t == FAILURE)
5702         continue;
5703
5704       /* See if any case labels that are unreachable have been seen.
5705          If so, we eliminate them.  This is a bit of a kludge because
5706          the case lists for a single case statement (label) is a
5707          single forward linked lists.  */
5708       if (seen_unreachable)
5709       {
5710         /* Advance until the first case in the list is reachable.  */
5711         while (body->ext.case_list != NULL
5712                && body->ext.case_list->unreachable)
5713           {
5714             gfc_case *n = body->ext.case_list;
5715             body->ext.case_list = body->ext.case_list->next;
5716             n->next = NULL;
5717             gfc_free_case_list (n);
5718           }
5719
5720         /* Strip all other unreachable cases.  */
5721         if (body->ext.case_list)
5722           {
5723             for (cp = body->ext.case_list; cp->next; cp = cp->next)
5724               {
5725                 if (cp->next->unreachable)
5726                   {
5727                     gfc_case *n = cp->next;
5728                     cp->next = cp->next->next;
5729                     n->next = NULL;
5730                     gfc_free_case_list (n);
5731                   }
5732               }
5733           }
5734       }
5735     }
5736
5737   /* See if there were overlapping cases.  If the check returns NULL,
5738      there was overlap.  In that case we don't do anything.  If head
5739      is non-NULL, we prepend the DEFAULT case.  The sorted list can
5740      then used during code generation for SELECT CASE constructs with
5741      a case expression of a CHARACTER type.  */
5742   if (head)
5743     {
5744       head = check_case_overlap (head);
5745
5746       /* Prepend the default_case if it is there.  */
5747       if (head != NULL && default_case)
5748         {
5749           default_case->left = NULL;
5750           default_case->right = head;
5751           head->left = default_case;
5752         }
5753     }
5754
5755   /* Eliminate dead blocks that may be the result if we've seen
5756      unreachable case labels for a block.  */
5757   for (body = code; body && body->block; body = body->block)
5758     {
5759       if (body->block->ext.case_list == NULL)
5760         {
5761           /* Cut the unreachable block from the code chain.  */
5762           gfc_code *c = body->block;
5763           body->block = c->block;
5764
5765           /* Kill the dead block, but not the blocks below it.  */
5766           c->block = NULL;
5767           gfc_free_statements (c);
5768         }
5769     }
5770
5771   /* More than two cases is legal but insane for logical selects.
5772      Issue a warning for it.  */
5773   if (gfc_option.warn_surprising && type == BT_LOGICAL
5774       && ncases > 2)
5775     gfc_warning ("Logical SELECT CASE block at %L has more that two cases",
5776                  &code->loc);
5777 }
5778
5779
5780 /* Resolve a transfer statement. This is making sure that:
5781    -- a derived type being transferred has only non-pointer components
5782    -- a derived type being transferred doesn't have private components, unless 
5783       it's being transferred from the module where the type was defined
5784    -- we're not trying to transfer a whole assumed size array.  */
5785
5786 static void
5787 resolve_transfer (gfc_code *code)
5788 {
5789   gfc_typespec *ts;
5790   gfc_symbol *sym;
5791   gfc_ref *ref;
5792   gfc_expr *exp;
5793
5794   exp = code->expr;
5795
5796   if (exp->expr_type != EXPR_VARIABLE && exp->expr_type != EXPR_FUNCTION)
5797     return;
5798
5799   sym = exp->symtree->n.sym;
5800   ts = &sym->ts;
5801
5802   /* Go to actual component transferred.  */
5803   for (ref = code->expr->ref; ref; ref = ref->next)
5804     if (ref->type == REF_COMPONENT)
5805       ts = &ref->u.c.component->ts;
5806
5807   if (ts->type == BT_DERIVED)
5808     {
5809       /* Check that transferred derived type doesn't contain POINTER
5810          components.  */
5811       if (ts->derived->attr.pointer_comp)
5812         {
5813           gfc_error ("Data transfer element at %L cannot have "
5814                      "POINTER components", &code->loc);
5815           return;
5816         }
5817
5818       if (ts->derived->attr.alloc_comp)
5819         {
5820           gfc_error ("Data transfer element at %L cannot have "
5821                      "ALLOCATABLE components", &code->loc);
5822           return;
5823         }
5824
5825       if (derived_inaccessible (ts->derived))
5826         {
5827           gfc_error ("Data transfer element at %L cannot have "
5828                      "PRIVATE components",&code->loc);
5829           return;
5830         }
5831     }
5832
5833   if (sym->as != NULL && sym->as->type == AS_ASSUMED_SIZE
5834       && exp->ref->type == REF_ARRAY && exp->ref->u.ar.type == AR_FULL)
5835     {
5836       gfc_error ("Data transfer element at %L cannot be a full reference to "
5837                  "an assumed-size array", &code->loc);
5838       return;
5839     }
5840 }
5841
5842
5843 /*********** Toplevel code resolution subroutines ***********/
5844
5845 /* Find the set of labels that are reachable from this block.  We also
5846    record the last statement in each block so that we don't have to do
5847    a linear search to find the END DO statements of the blocks.  */
5848      
5849 static void
5850 reachable_labels (gfc_code *block)
5851 {
5852   gfc_code *c;
5853
5854   if (!block)
5855     return;
5856
5857   cs_base->reachable_labels = bitmap_obstack_alloc (&labels_obstack);
5858
5859   /* Collect labels in this block.  */
5860   for (c = block; c; c = c->next)
5861     {
5862       if (c->here)
5863         bitmap_set_bit (cs_base->reachable_labels, c->here->value);
5864
5865       if (!c->next && cs_base->prev)
5866         cs_base->prev->tail = c;
5867     }
5868
5869   /* Merge with labels from parent block.  */
5870   if (cs_base->prev)
5871     {
5872       gcc_assert (cs_base->prev->reachable_labels);
5873       bitmap_ior_into (cs_base->reachable_labels,
5874                        cs_base->prev->reachable_labels);
5875     }
5876 }
5877
5878 /* Given a branch to a label and a namespace, if the branch is conforming.
5879    The code node describes where the branch is located.  */
5880
5881 static void
5882 resolve_branch (gfc_st_label *label, gfc_code *code)
5883 {
5884   code_stack *stack;
5885
5886   if (label == NULL)
5887     return;
5888
5889   /* Step one: is this a valid branching target?  */
5890
5891   if (label->defined == ST_LABEL_UNKNOWN)
5892     {
5893       gfc_error ("Label %d referenced at %L is never defined", label->value,
5894                  &label->where);
5895       return;
5896     }
5897
5898   if (label->defined != ST_LABEL_TARGET)
5899     {
5900       gfc_error ("Statement at %L is not a valid branch target statement "
5901                  "for the branch statement at %L", &label->where, &code->loc);
5902       return;
5903     }
5904
5905   /* Step two: make sure this branch is not a branch to itself ;-)  */
5906
5907   if (code->here == label)
5908     {
5909       gfc_warning ("Branch at %L may result in an infinite loop", &code->loc);
5910       return;
5911     }
5912
5913   /* Step three:  See if the label is in the same block as the
5914      branching statement.  The hard work has been done by setting up
5915      the bitmap reachable_labels.  */
5916
5917   if (!bitmap_bit_p (cs_base->reachable_labels, label->value))
5918     {
5919       /* The label is not in an enclosing block, so illegal.  This was
5920          allowed in Fortran 66, so we allow it as extension.  No
5921          further checks are necessary in this case.  */
5922       gfc_notify_std (GFC_STD_LEGACY, "Label at %L is not in the same block "
5923                       "as the GOTO statement at %L", &label->where,
5924                       &code->loc);
5925       return;
5926     }
5927
5928   /* Step four: Make sure that the branching target is legal if
5929      the statement is an END {SELECT,IF}.  */
5930
5931   for (stack = cs_base; stack; stack = stack->prev)
5932     if (stack->current->next && stack->current->next->here == label)
5933       break;
5934
5935   if (stack && stack->current->next->op == EXEC_NOP)
5936     {
5937       gfc_notify_std (GFC_STD_F95_DEL, "Deleted feature: GOTO at %L jumps to "
5938                       "END of construct at %L", &code->loc,
5939                       &stack->current->next->loc);
5940       return;  /* We know this is not an END DO.  */
5941     }
5942
5943   /* Step five: Make sure that we're not jumping to the end of a DO
5944      loop from within the loop.  */
5945
5946   for (stack = cs_base; stack; stack = stack->prev)
5947     if ((stack->current->op == EXEC_DO
5948          || stack->current->op == EXEC_DO_WHILE)
5949         && stack->tail->here == label && stack->tail->op == EXEC_NOP)
5950       {
5951         gfc_notify_std (GFC_STD_F95_DEL, "Deleted feature: GOTO at %L jumps "
5952                         "to END of construct at %L", &code->loc,
5953                         &stack->tail->loc);
5954         return;
5955
5956       }
5957 }
5958
5959
5960 /* Check whether EXPR1 has the same shape as EXPR2.  */
5961
5962 static gfc_try
5963 resolve_where_shape (gfc_expr *expr1, gfc_expr *expr2)
5964 {
5965   mpz_t shape[GFC_MAX_DIMENSIONS];
5966   mpz_t shape2[GFC_MAX_DIMENSIONS];
5967   gfc_try result = FAILURE;
5968   int i;
5969
5970   /* Compare the rank.  */
5971   if (expr1->rank != expr2->rank)
5972     return result;
5973
5974   /* Compare the size of each dimension.  */
5975   for (i=0; i<expr1->rank; i++)
5976     {
5977       if (gfc_array_dimen_size (expr1, i, &shape[i]) == FAILURE)
5978         goto ignore;
5979
5980       if (gfc_array_dimen_size (expr2, i, &shape2[i]) == FAILURE)
5981         goto ignore;
5982
5983       if (mpz_cmp (shape[i], shape2[i]))
5984         goto over;
5985     }
5986
5987   /* When either of the two expression is an assumed size array, we
5988      ignore the comparison of dimension sizes.  */
5989 ignore:
5990   result = SUCCESS;
5991
5992 over:
5993   for (i--; i >= 0; i--)
5994     {
5995       mpz_clear (shape[i]);
5996       mpz_clear (shape2[i]);
5997     }
5998   return result;
5999 }
6000
6001
6002 /* Check whether a WHERE assignment target or a WHERE mask expression
6003    has the same shape as the outmost WHERE mask expression.  */
6004
6005 static void
6006 resolve_where (gfc_code *code, gfc_expr *mask)
6007 {
6008   gfc_code *cblock;
6009   gfc_code *cnext;
6010   gfc_expr *e = NULL;
6011
6012   cblock = code->block;
6013
6014   /* Store the first WHERE mask-expr of the WHERE statement or construct.
6015      In case of nested WHERE, only the outmost one is stored.  */
6016   if (mask == NULL) /* outmost WHERE */
6017     e = cblock->expr;
6018   else /* inner WHERE */
6019     e = mask;
6020
6021   while (cblock)
6022     {
6023       if (cblock->expr)
6024         {
6025           /* Check if the mask-expr has a consistent shape with the
6026              outmost WHERE mask-expr.  */
6027           if (resolve_where_shape (cblock->expr, e) == FAILURE)
6028             gfc_error ("WHERE mask at %L has inconsistent shape",
6029                        &cblock->expr->where);
6030          }
6031
6032       /* the assignment statement of a WHERE statement, or the first
6033          statement in where-body-construct of a WHERE construct */
6034       cnext = cblock->next;
6035       while (cnext)
6036         {
6037           switch (cnext->op)
6038             {
6039             /* WHERE assignment statement */
6040             case EXEC_ASSIGN:
6041
6042               /* Check shape consistent for WHERE assignment target.  */
6043               if (e && resolve_where_shape (cnext->expr, e) == FAILURE)
6044                gfc_error ("WHERE assignment target at %L has "
6045                           "inconsistent shape", &cnext->expr->where);
6046               break;
6047
6048   
6049             case EXEC_ASSIGN_CALL:
6050               resolve_call (cnext);
6051               if (!cnext->resolved_sym->attr.elemental)
6052                 gfc_error("Non-ELEMENTAL user-defined assignment in WHERE at %L",
6053                           &cnext->ext.actual->expr->where);
6054               break;
6055
6056             /* WHERE or WHERE construct is part of a where-body-construct */
6057             case EXEC_WHERE:
6058               resolve_where (cnext, e);
6059               break;
6060
6061             default:
6062               gfc_error ("Unsupported statement inside WHERE at %L",
6063                          &cnext->loc);
6064             }
6065          /* the next statement within the same where-body-construct */
6066          cnext = cnext->next;
6067        }
6068     /* the next masked-elsewhere-stmt, elsewhere-stmt, or end-where-stmt */
6069     cblock = cblock->block;
6070   }
6071 }
6072
6073
6074 /* Resolve assignment in FORALL construct.
6075    NVAR is the number of FORALL index variables, and VAR_EXPR records the
6076    FORALL index variables.  */
6077
6078 static void
6079 gfc_resolve_assign_in_forall (gfc_code *code, int nvar, gfc_expr **var_expr)
6080 {
6081   int n;
6082
6083   for (n = 0; n < nvar; n++)
6084     {
6085       gfc_symbol *forall_index;
6086
6087       forall_index = var_expr[n]->symtree->n.sym;
6088
6089       /* Check whether the assignment target is one of the FORALL index
6090          variable.  */
6091       if ((code->expr->expr_type == EXPR_VARIABLE)
6092           && (code->expr->symtree->n.sym == forall_index))
6093         gfc_error ("Assignment to a FORALL index variable at %L",
6094                    &code->expr->where);
6095       else
6096         {
6097           /* If one of the FORALL index variables doesn't appear in the
6098              assignment target, then there will be a many-to-one
6099              assignment.  */
6100           if (find_forall_index (code->expr, forall_index, 0) == FAILURE)
6101             gfc_error ("The FORALL with index '%s' cause more than one "
6102                        "assignment to this object at %L",
6103                        var_expr[n]->symtree->name, &code->expr->where);
6104         }
6105     }
6106 }
6107
6108
6109 /* Resolve WHERE statement in FORALL construct.  */
6110
6111 static void
6112 gfc_resolve_where_code_in_forall (gfc_code *code, int nvar,
6113                                   gfc_expr **var_expr)
6114 {
6115   gfc_code *cblock;
6116   gfc_code *cnext;
6117
6118   cblock = code->block;
6119   while (cblock)
6120     {
6121       /* the assignment statement of a WHERE statement, or the first
6122          statement in where-body-construct of a WHERE construct */
6123       cnext = cblock->next;
6124       while (cnext)
6125         {
6126           switch (cnext->op)
6127             {
6128             /* WHERE assignment statement */
6129             case EXEC_ASSIGN:
6130               gfc_resolve_assign_in_forall (cnext, nvar, var_expr);
6131               break;
6132   
6133             /* WHERE operator assignment statement */
6134             case EXEC_ASSIGN_CALL:
6135               resolve_call (cnext);
6136               if (!cnext->resolved_sym->attr.elemental)
6137                 gfc_error("Non-ELEMENTAL user-defined assignment in WHERE at %L",
6138                           &cnext->ext.actual->expr->where);
6139               break;
6140
6141             /* WHERE or WHERE construct is part of a where-body-construct */
6142             case EXEC_WHERE:
6143               gfc_resolve_where_code_in_forall (cnext, nvar, var_expr);
6144               break;
6145
6146             default:
6147               gfc_error ("Unsupported statement inside WHERE at %L",
6148                          &cnext->loc);
6149             }
6150           /* the next statement within the same where-body-construct */
6151           cnext = cnext->next;
6152         }
6153       /* the next masked-elsewhere-stmt, elsewhere-stmt, or end-where-stmt */
6154       cblock = cblock->block;
6155     }
6156 }
6157
6158
6159 /* Traverse the FORALL body to check whether the following errors exist:
6160    1. For assignment, check if a many-to-one assignment happens.
6161    2. For WHERE statement, check the WHERE body to see if there is any
6162       many-to-one assignment.  */
6163
6164 static void
6165 gfc_resolve_forall_body (gfc_code *code, int nvar, gfc_expr **var_expr)
6166 {
6167   gfc_code *c;
6168
6169   c = code->block->next;
6170   while (c)
6171     {
6172       switch (c->op)
6173         {
6174         case EXEC_ASSIGN:
6175         case EXEC_POINTER_ASSIGN:
6176           gfc_resolve_assign_in_forall (c, nvar, var_expr);
6177           break;
6178
6179         case EXEC_ASSIGN_CALL:
6180           resolve_call (c);
6181           break;
6182
6183         /* Because the gfc_resolve_blocks() will handle the nested FORALL,
6184            there is no need to handle it here.  */
6185         case EXEC_FORALL:
6186           break;
6187         case EXEC_WHERE:
6188           gfc_resolve_where_code_in_forall(c, nvar, var_expr);
6189           break;
6190         default:
6191           break;
6192         }
6193       /* The next statement in the FORALL body.  */
6194       c = c->next;
6195     }
6196 }
6197
6198
6199 /* Given a FORALL construct, first resolve the FORALL iterator, then call
6200    gfc_resolve_forall_body to resolve the FORALL body.  */
6201
6202 static void
6203 gfc_resolve_forall (gfc_code *code, gfc_namespace *ns, int forall_save)
6204 {
6205   static gfc_expr **var_expr;
6206   static int total_var = 0;
6207   static int nvar = 0;
6208   gfc_forall_iterator *fa;
6209   gfc_code *next;
6210   int i;
6211
6212   /* Start to resolve a FORALL construct   */
6213   if (forall_save == 0)
6214     {
6215       /* Count the total number of FORALL index in the nested FORALL
6216          construct in order to allocate the VAR_EXPR with proper size.  */
6217       next = code;
6218       while ((next != NULL) && (next->op == EXEC_FORALL))
6219         {
6220           for (fa = next->ext.forall_iterator; fa; fa = fa->next)
6221             total_var ++;
6222           next = next->block->next;
6223         }
6224
6225       /* Allocate VAR_EXPR with NUMBER_OF_FORALL_INDEX elements.  */
6226       var_expr = (gfc_expr **) gfc_getmem (total_var * sizeof (gfc_expr *));
6227     }
6228
6229   /* The information about FORALL iterator, including FORALL index start, end
6230      and stride. The FORALL index can not appear in start, end or stride.  */
6231   for (fa = code->ext.forall_iterator; fa; fa = fa->next)
6232     {
6233       /* Check if any outer FORALL index name is the same as the current
6234          one.  */
6235       for (i = 0; i < nvar; i++)
6236         {
6237           if (fa->var->symtree->n.sym == var_expr[i]->symtree->n.sym)
6238             {
6239               gfc_error ("An outer FORALL construct already has an index "
6240                          "with this name %L", &fa->var->where);
6241             }
6242         }
6243
6244       /* Record the current FORALL index.  */
6245       var_expr[nvar] = gfc_copy_expr (fa->var);
6246
6247       nvar++;
6248     }
6249
6250   /* Resolve the FORALL body.  */
6251   gfc_resolve_forall_body (code, nvar, var_expr);
6252
6253   /* May call gfc_resolve_forall to resolve the inner FORALL loop.  */
6254   gfc_resolve_blocks (code->block, ns);
6255
6256   /* Free VAR_EXPR after the whole FORALL construct resolved.  */
6257   for (i = 0; i < total_var; i++)
6258     gfc_free_expr (var_expr[i]);
6259
6260   /* Reset the counters.  */
6261   total_var = 0;
6262   nvar = 0;
6263 }
6264
6265
6266 /* Resolve lists of blocks found in IF, SELECT CASE, WHERE, FORALL ,GOTO and
6267    DO code nodes.  */
6268
6269 static void resolve_code (gfc_code *, gfc_namespace *);
6270
6271 void
6272 gfc_resolve_blocks (gfc_code *b, gfc_namespace *ns)
6273 {
6274   gfc_try t;
6275
6276   for (; b; b = b->block)
6277     {
6278       t = gfc_resolve_expr (b->expr);
6279       if (gfc_resolve_expr (b->expr2) == FAILURE)
6280         t = FAILURE;
6281
6282       switch (b->op)
6283         {
6284         case EXEC_IF:
6285           if (t == SUCCESS && b->expr != NULL
6286               && (b->expr->ts.type != BT_LOGICAL || b->expr->rank != 0))
6287             gfc_error ("IF clause at %L requires a scalar LOGICAL expression",
6288                        &b->expr->where);
6289           break;
6290
6291         case EXEC_WHERE:
6292           if (t == SUCCESS
6293               && b->expr != NULL
6294               && (b->expr->ts.type != BT_LOGICAL || b->expr->rank == 0))
6295             gfc_error ("WHERE/ELSEWHERE clause at %L requires a LOGICAL array",
6296                        &b->expr->where);
6297           break;
6298
6299         case EXEC_GOTO:
6300           resolve_branch (b->label, b);
6301           break;
6302
6303         case EXEC_SELECT:
6304         case EXEC_FORALL:
6305         case EXEC_DO:
6306         case EXEC_DO_WHILE:
6307         case EXEC_READ:
6308         case EXEC_WRITE:
6309         case EXEC_IOLENGTH:
6310         case EXEC_WAIT:
6311           break;
6312
6313         case EXEC_OMP_ATOMIC:
6314         case EXEC_OMP_CRITICAL:
6315         case EXEC_OMP_DO:
6316         case EXEC_OMP_MASTER:
6317         case EXEC_OMP_ORDERED:
6318         case EXEC_OMP_PARALLEL:
6319         case EXEC_OMP_PARALLEL_DO:
6320         case EXEC_OMP_PARALLEL_SECTIONS:
6321         case EXEC_OMP_PARALLEL_WORKSHARE:
6322         case EXEC_OMP_SECTIONS:
6323         case EXEC_OMP_SINGLE:
6324         case EXEC_OMP_TASK:
6325         case EXEC_OMP_TASKWAIT:
6326         case EXEC_OMP_WORKSHARE:
6327           break;
6328
6329         default:
6330           gfc_internal_error ("resolve_block(): Bad block type");
6331         }
6332
6333       resolve_code (b->next, ns);
6334     }
6335 }
6336
6337
6338 /* Does everything to resolve an ordinary assignment.  Returns true
6339    if this is an interface assignment.  */
6340 static bool
6341 resolve_ordinary_assign (gfc_code *code, gfc_namespace *ns)
6342 {
6343   bool rval = false;
6344   gfc_expr *lhs;
6345   gfc_expr *rhs;
6346   int llen = 0;
6347   int rlen = 0;
6348   int n;
6349   gfc_ref *ref;
6350
6351   if (gfc_extend_assign (code, ns) == SUCCESS)
6352     {
6353       lhs = code->ext.actual->expr;
6354       rhs = code->ext.actual->next->expr;
6355       if (gfc_pure (NULL) && !gfc_pure (code->symtree->n.sym))
6356         {
6357           gfc_error ("Subroutine '%s' called instead of assignment at "
6358                      "%L must be PURE", code->symtree->n.sym->name,
6359                      &code->loc);
6360           return rval;
6361         }
6362
6363       /* Make a temporary rhs when there is a default initializer
6364          and rhs is the same symbol as the lhs.  */
6365       if (rhs->expr_type == EXPR_VARIABLE
6366             && rhs->symtree->n.sym->ts.type == BT_DERIVED
6367             && has_default_initializer (rhs->symtree->n.sym->ts.derived)
6368             && (lhs->symtree->n.sym == rhs->symtree->n.sym))
6369         code->ext.actual->next->expr = gfc_get_parentheses (rhs);
6370
6371       return true;
6372     }
6373
6374   lhs = code->expr;
6375   rhs = code->expr2;
6376
6377   if (rhs->is_boz
6378       && gfc_notify_std (GFC_STD_GNU, "Extension: BOZ literal at %L outside "
6379                          "a DATA statement and outside INT/REAL/DBLE/CMPLX",
6380                          &code->loc) == FAILURE)
6381     return false;
6382
6383   /* Handle the case of a BOZ literal on the RHS.  */
6384   if (rhs->is_boz && lhs->ts.type != BT_INTEGER)
6385     {
6386       int rc;
6387       if (gfc_option.warn_surprising)
6388         gfc_warning ("BOZ literal at %L is bitwise transferred "
6389                      "non-integer symbol '%s'", &code->loc,
6390                      lhs->symtree->n.sym->name);
6391
6392       if (!gfc_convert_boz (rhs, &lhs->ts))
6393         return false;
6394       if ((rc = gfc_range_check (rhs)) != ARITH_OK)
6395         {
6396           if (rc == ARITH_UNDERFLOW)
6397             gfc_error ("Arithmetic underflow of bit-wise transferred BOZ at %L"
6398                        ". This check can be disabled with the option "
6399                        "-fno-range-check", &rhs->where);
6400           else if (rc == ARITH_OVERFLOW)
6401             gfc_error ("Arithmetic overflow of bit-wise transferred BOZ at %L"
6402                        ". This check can be disabled with the option "
6403                        "-fno-range-check", &rhs->where);
6404           else if (rc == ARITH_NAN)
6405             gfc_error ("Arithmetic NaN of bit-wise transferred BOZ at %L"
6406                        ". This check can be disabled with the option "
6407                        "-fno-range-check", &rhs->where);
6408           return false;
6409         }
6410     }
6411
6412
6413   if (lhs->ts.type == BT_CHARACTER
6414         && gfc_option.warn_character_truncation)
6415     {
6416       if (lhs->ts.cl != NULL
6417             && lhs->ts.cl->length != NULL
6418             && lhs->ts.cl->length->expr_type == EXPR_CONSTANT)
6419         llen = mpz_get_si (lhs->ts.cl->length->value.integer);
6420
6421       if (rhs->expr_type == EXPR_CONSTANT)
6422         rlen = rhs->value.character.length;
6423
6424       else if (rhs->ts.cl != NULL
6425                  && rhs->ts.cl->length != NULL
6426                  && rhs->ts.cl->length->expr_type == EXPR_CONSTANT)
6427         rlen = mpz_get_si (rhs->ts.cl->length->value.integer);
6428
6429       if (rlen && llen && rlen > llen)
6430         gfc_warning_now ("CHARACTER expression will be truncated "
6431                          "in assignment (%d/%d) at %L",
6432                          llen, rlen, &code->loc);
6433     }
6434
6435   /* Ensure that a vector index expression for the lvalue is evaluated
6436      to a temporary if the lvalue symbol is referenced in it.  */
6437   if (lhs->rank)
6438     {
6439       for (ref = lhs->ref; ref; ref= ref->next)
6440         if (ref->type == REF_ARRAY)
6441           {
6442             for (n = 0; n < ref->u.ar.dimen; n++)
6443               if (ref->u.ar.dimen_type[n] == DIMEN_VECTOR
6444                   && gfc_find_sym_in_expr (lhs->symtree->n.sym,
6445                                            ref->u.ar.start[n]))
6446                 ref->u.ar.start[n]
6447                         = gfc_get_parentheses (ref->u.ar.start[n]);
6448           }
6449     }
6450
6451   if (gfc_pure (NULL))
6452     {
6453       if (gfc_impure_variable (lhs->symtree->n.sym))
6454         {
6455           gfc_error ("Cannot assign to variable '%s' in PURE "
6456                      "procedure at %L",
6457                       lhs->symtree->n.sym->name,
6458                       &lhs->where);
6459           return rval;
6460         }
6461
6462       if (lhs->ts.type == BT_DERIVED
6463             && lhs->expr_type == EXPR_VARIABLE
6464             && lhs->ts.derived->attr.pointer_comp
6465             && gfc_impure_variable (rhs->symtree->n.sym))
6466         {
6467           gfc_error ("The impure variable at %L is assigned to "
6468                      "a derived type variable with a POINTER "
6469                      "component in a PURE procedure (12.6)",
6470                      &rhs->where);
6471           return rval;
6472         }
6473     }
6474
6475   gfc_check_assign (lhs, rhs, 1);
6476   return false;
6477 }
6478
6479 /* Given a block of code, recursively resolve everything pointed to by this
6480    code block.  */
6481
6482 static void
6483 resolve_code (gfc_code *code, gfc_namespace *ns)
6484 {
6485   int omp_workshare_save;
6486   int forall_save;
6487   code_stack frame;
6488   gfc_try t;
6489
6490   frame.prev = cs_base;
6491   frame.head = code;
6492   cs_base = &frame;
6493
6494   reachable_labels (code);
6495
6496   for (; code; code = code->next)
6497     {
6498       frame.current = code;
6499       forall_save = forall_flag;
6500
6501       if (code->op == EXEC_FORALL)
6502         {
6503           forall_flag = 1;
6504           gfc_resolve_forall (code, ns, forall_save);
6505           forall_flag = 2;
6506         }
6507       else if (code->block)
6508         {
6509           omp_workshare_save = -1;
6510           switch (code->op)
6511             {
6512             case EXEC_OMP_PARALLEL_WORKSHARE:
6513               omp_workshare_save = omp_workshare_flag;
6514               omp_workshare_flag = 1;
6515               gfc_resolve_omp_parallel_blocks (code, ns);
6516               break;
6517             case EXEC_OMP_PARALLEL:
6518             case EXEC_OMP_PARALLEL_DO:
6519             case EXEC_OMP_PARALLEL_SECTIONS:
6520             case EXEC_OMP_TASK:
6521               omp_workshare_save = omp_workshare_flag;
6522               omp_workshare_flag = 0;
6523               gfc_resolve_omp_parallel_blocks (code, ns);
6524               break;
6525             case EXEC_OMP_DO:
6526               gfc_resolve_omp_do_blocks (code, ns);
6527               break;
6528             case EXEC_OMP_WORKSHARE:
6529               omp_workshare_save = omp_workshare_flag;
6530               omp_workshare_flag = 1;
6531               /* FALLTHROUGH */
6532             default:
6533               gfc_resolve_blocks (code->block, ns);
6534               break;
6535             }
6536
6537           if (omp_workshare_save != -1)
6538             omp_workshare_flag = omp_workshare_save;
6539         }
6540
6541       t = SUCCESS;
6542       if (code->op != EXEC_COMPCALL)
6543         t = gfc_resolve_expr (code->expr);
6544       forall_flag = forall_save;
6545
6546       if (gfc_resolve_expr (code->expr2) == FAILURE)
6547         t = FAILURE;
6548
6549       switch (code->op)
6550         {
6551         case EXEC_NOP:
6552         case EXEC_CYCLE:
6553         case EXEC_PAUSE:
6554         case EXEC_STOP:
6555         case EXEC_EXIT:
6556         case EXEC_CONTINUE:
6557         case EXEC_DT_END:
6558           break;
6559
6560         case EXEC_ENTRY:
6561           /* Keep track of which entry we are up to.  */
6562           current_entry_id = code->ext.entry->id;
6563           break;
6564
6565         case EXEC_WHERE:
6566           resolve_where (code, NULL);
6567           break;
6568
6569         case EXEC_GOTO:
6570           if (code->expr != NULL)
6571             {
6572               if (code->expr->ts.type != BT_INTEGER)
6573                 gfc_error ("ASSIGNED GOTO statement at %L requires an "
6574                            "INTEGER variable", &code->expr->where);
6575               else if (code->expr->symtree->n.sym->attr.assign != 1)
6576                 gfc_error ("Variable '%s' has not been assigned a target "
6577                            "label at %L", code->expr->symtree->n.sym->name,
6578                            &code->expr->where);
6579             }
6580           else
6581             resolve_branch (code->label, code);
6582           break;
6583
6584         case EXEC_RETURN:
6585           if (code->expr != NULL
6586                 && (code->expr->ts.type != BT_INTEGER || code->expr->rank))
6587             gfc_error ("Alternate RETURN statement at %L requires a SCALAR-"
6588                        "INTEGER return specifier", &code->expr->where);
6589           break;
6590
6591         case EXEC_INIT_ASSIGN:
6592           break;
6593
6594         case EXEC_ASSIGN:
6595           if (t == FAILURE)
6596             break;
6597
6598           if (resolve_ordinary_assign (code, ns))
6599             goto call;
6600
6601           break;
6602
6603         case EXEC_LABEL_ASSIGN:
6604           if (code->label->defined == ST_LABEL_UNKNOWN)
6605             gfc_error ("Label %d referenced at %L is never defined",
6606                        code->label->value, &code->label->where);
6607           if (t == SUCCESS
6608               && (code->expr->expr_type != EXPR_VARIABLE
6609                   || code->expr->symtree->n.sym->ts.type != BT_INTEGER
6610                   || code->expr->symtree->n.sym->ts.kind
6611                      != gfc_default_integer_kind
6612                   || code->expr->symtree->n.sym->as != NULL))
6613             gfc_error ("ASSIGN statement at %L requires a scalar "
6614                        "default INTEGER variable", &code->expr->where);
6615           break;
6616
6617         case EXEC_POINTER_ASSIGN:
6618           if (t == FAILURE)
6619             break;
6620
6621           gfc_check_pointer_assign (code->expr, code->expr2);
6622           break;
6623
6624         case EXEC_ARITHMETIC_IF:
6625           if (t == SUCCESS
6626               && code->expr->ts.type != BT_INTEGER
6627               && code->expr->ts.type != BT_REAL)
6628             gfc_error ("Arithmetic IF statement at %L requires a numeric "
6629                        "expression", &code->expr->where);
6630
6631           resolve_branch (code->label, code);
6632           resolve_branch (code->label2, code);
6633           resolve_branch (code->label3, code);
6634           break;
6635
6636         case EXEC_IF:
6637           if (t == SUCCESS && code->expr != NULL
6638               && (code->expr->ts.type != BT_LOGICAL
6639                   || code->expr->rank != 0))
6640             gfc_error ("IF clause at %L requires a scalar LOGICAL expression",
6641                        &code->expr->where);
6642           break;
6643
6644         case EXEC_CALL:
6645         call:
6646           resolve_call (code);
6647           break;
6648
6649         case EXEC_COMPCALL:
6650           resolve_typebound_call (code);
6651           break;
6652
6653         case EXEC_SELECT:
6654           /* Select is complicated. Also, a SELECT construct could be
6655              a transformed computed GOTO.  */
6656           resolve_select (code);
6657           break;
6658
6659         case EXEC_DO:
6660           if (code->ext.iterator != NULL)
6661             {
6662               gfc_iterator *iter = code->ext.iterator;
6663               if (gfc_resolve_iterator (iter, true) != FAILURE)
6664                 gfc_resolve_do_iterator (code, iter->var->symtree->n.sym);
6665             }
6666           break;
6667
6668         case EXEC_DO_WHILE:
6669           if (code->expr == NULL)
6670             gfc_internal_error ("resolve_code(): No expression on DO WHILE");
6671           if (t == SUCCESS
6672               && (code->expr->rank != 0
6673                   || code->expr->ts.type != BT_LOGICAL))
6674             gfc_error ("Exit condition of DO WHILE loop at %L must be "
6675                        "a scalar LOGICAL expression", &code->expr->where);
6676           break;
6677
6678         case EXEC_ALLOCATE:
6679           if (t == SUCCESS)
6680             resolve_allocate_deallocate (code, "ALLOCATE");
6681
6682           break;
6683
6684         case EXEC_DEALLOCATE:
6685           if (t == SUCCESS)
6686             resolve_allocate_deallocate (code, "DEALLOCATE");
6687
6688           break;
6689
6690         case EXEC_OPEN:
6691           if (gfc_resolve_open (code->ext.open) == FAILURE)
6692             break;
6693
6694           resolve_branch (code->ext.open->err, code);
6695           break;
6696
6697         case EXEC_CLOSE:
6698           if (gfc_resolve_close (code->ext.close) == FAILURE)
6699             break;
6700
6701           resolve_branch (code->ext.close->err, code);
6702           break;
6703
6704         case EXEC_BACKSPACE:
6705         case EXEC_ENDFILE:
6706         case EXEC_REWIND:
6707         case EXEC_FLUSH:
6708           if (gfc_resolve_filepos (code->ext.filepos) == FAILURE)
6709             break;
6710
6711           resolve_branch (code->ext.filepos->err, code);
6712           break;
6713
6714         case EXEC_INQUIRE:
6715           if (gfc_resolve_inquire (code->ext.inquire) == FAILURE)
6716               break;
6717
6718           resolve_branch (code->ext.inquire->err, code);
6719           break;
6720
6721         case EXEC_IOLENGTH:
6722           gcc_assert (code->ext.inquire != NULL);
6723           if (gfc_resolve_inquire (code->ext.inquire) == FAILURE)
6724             break;
6725
6726           resolve_branch (code->ext.inquire->err, code);
6727           break;
6728
6729         case EXEC_WAIT:
6730           if (gfc_resolve_wait (code->ext.wait) == FAILURE)
6731             break;
6732
6733           resolve_branch (code->ext.wait->err, code);
6734           resolve_branch (code->ext.wait->end, code);
6735           resolve_branch (code->ext.wait->eor, code);
6736           break;
6737
6738         case EXEC_READ:
6739         case EXEC_WRITE:
6740           if (gfc_resolve_dt (code->ext.dt) == FAILURE)
6741             break;
6742
6743           resolve_branch (code->ext.dt->err, code);
6744           resolve_branch (code->ext.dt->end, code);
6745           resolve_branch (code->ext.dt->eor, code);
6746           break;
6747
6748         case EXEC_TRANSFER:
6749           resolve_transfer (code);
6750           break;
6751
6752         case EXEC_FORALL:
6753           resolve_forall_iterators (code->ext.forall_iterator);
6754
6755           if (code->expr != NULL && code->expr->ts.type != BT_LOGICAL)
6756             gfc_error ("FORALL mask clause at %L requires a LOGICAL "
6757                        "expression", &code->expr->where);
6758           break;
6759
6760         case EXEC_OMP_ATOMIC:
6761         case EXEC_OMP_BARRIER:
6762         case EXEC_OMP_CRITICAL:
6763         case EXEC_OMP_FLUSH:
6764         case EXEC_OMP_DO:
6765         case EXEC_OMP_MASTER:
6766         case EXEC_OMP_ORDERED:
6767         case EXEC_OMP_SECTIONS:
6768         case EXEC_OMP_SINGLE:
6769         case EXEC_OMP_TASKWAIT:
6770         case EXEC_OMP_WORKSHARE:
6771           gfc_resolve_omp_directive (code, ns);
6772           break;
6773
6774         case EXEC_OMP_PARALLEL:
6775         case EXEC_OMP_PARALLEL_DO:
6776         case EXEC_OMP_PARALLEL_SECTIONS:
6777         case EXEC_OMP_PARALLEL_WORKSHARE:
6778         case EXEC_OMP_TASK:
6779           omp_workshare_save = omp_workshare_flag;
6780           omp_workshare_flag = 0;
6781           gfc_resolve_omp_directive (code, ns);
6782           omp_workshare_flag = omp_workshare_save;
6783           break;
6784
6785         default:
6786           gfc_internal_error ("resolve_code(): Bad statement code");
6787         }
6788     }
6789
6790   cs_base = frame.prev;
6791 }
6792
6793
6794 /* Resolve initial values and make sure they are compatible with
6795    the variable.  */
6796
6797 static void
6798 resolve_values (gfc_symbol *sym)
6799 {
6800   if (sym->value == NULL)
6801     return;
6802
6803   if (gfc_resolve_expr (sym->value) == FAILURE)
6804     return;
6805
6806   gfc_check_assign_symbol (sym, sym->value);
6807 }
6808
6809
6810 /* Verify the binding labels for common blocks that are BIND(C).  The label
6811    for a BIND(C) common block must be identical in all scoping units in which
6812    the common block is declared.  Further, the binding label can not collide
6813    with any other global entity in the program.  */
6814
6815 static void
6816 resolve_bind_c_comms (gfc_symtree *comm_block_tree)
6817 {
6818   if (comm_block_tree->n.common->is_bind_c == 1)
6819     {
6820       gfc_gsymbol *binding_label_gsym;
6821       gfc_gsymbol *comm_name_gsym;
6822
6823       /* See if a global symbol exists by the common block's name.  It may
6824          be NULL if the common block is use-associated.  */
6825       comm_name_gsym = gfc_find_gsymbol (gfc_gsym_root,
6826                                          comm_block_tree->n.common->name);
6827       if (comm_name_gsym != NULL && comm_name_gsym->type != GSYM_COMMON)
6828         gfc_error ("Binding label '%s' for common block '%s' at %L collides "
6829                    "with the global entity '%s' at %L",
6830                    comm_block_tree->n.common->binding_label,
6831                    comm_block_tree->n.common->name,
6832                    &(comm_block_tree->n.common->where),
6833                    comm_name_gsym->name, &(comm_name_gsym->where));
6834       else if (comm_name_gsym != NULL
6835                && strcmp (comm_name_gsym->name,
6836                           comm_block_tree->n.common->name) == 0)
6837         {
6838           /* TODO: Need to make sure the fields of gfc_gsymbol are initialized
6839              as expected.  */
6840           if (comm_name_gsym->binding_label == NULL)
6841             /* No binding label for common block stored yet; save this one.  */
6842             comm_name_gsym->binding_label =
6843               comm_block_tree->n.common->binding_label;
6844           else
6845             if (strcmp (comm_name_gsym->binding_label,
6846                         comm_block_tree->n.common->binding_label) != 0)
6847               {
6848                 /* Common block names match but binding labels do not.  */
6849                 gfc_error ("Binding label '%s' for common block '%s' at %L "
6850                            "does not match the binding label '%s' for common "
6851                            "block '%s' at %L",
6852                            comm_block_tree->n.common->binding_label,
6853                            comm_block_tree->n.common->name,
6854                            &(comm_block_tree->n.common->where),
6855                            comm_name_gsym->binding_label,
6856                            comm_name_gsym->name,
6857                            &(comm_name_gsym->where));
6858                 return;
6859               }
6860         }
6861
6862       /* There is no binding label (NAME="") so we have nothing further to
6863          check and nothing to add as a global symbol for the label.  */
6864       if (comm_block_tree->n.common->binding_label[0] == '\0' )
6865         return;
6866       
6867       binding_label_gsym =
6868         gfc_find_gsymbol (gfc_gsym_root,
6869                           comm_block_tree->n.common->binding_label);
6870       if (binding_label_gsym == NULL)
6871         {
6872           /* Need to make a global symbol for the binding label to prevent
6873              it from colliding with another.  */
6874           binding_label_gsym =
6875             gfc_get_gsymbol (comm_block_tree->n.common->binding_label);
6876           binding_label_gsym->sym_name = comm_block_tree->n.common->name;
6877           binding_label_gsym->type = GSYM_COMMON;
6878         }
6879       else
6880         {
6881           /* If comm_name_gsym is NULL, the name common block is use
6882              associated and the name could be colliding.  */
6883           if (binding_label_gsym->type != GSYM_COMMON)
6884             gfc_error ("Binding label '%s' for common block '%s' at %L "
6885                        "collides with the global entity '%s' at %L",
6886                        comm_block_tree->n.common->binding_label,
6887                        comm_block_tree->n.common->name,
6888                        &(comm_block_tree->n.common->where),
6889                        binding_label_gsym->name,
6890                        &(binding_label_gsym->where));
6891           else if (comm_name_gsym != NULL
6892                    && (strcmp (binding_label_gsym->name,
6893                                comm_name_gsym->binding_label) != 0)
6894                    && (strcmp (binding_label_gsym->sym_name,
6895                                comm_name_gsym->name) != 0))
6896             gfc_error ("Binding label '%s' for common block '%s' at %L "
6897                        "collides with global entity '%s' at %L",
6898                        binding_label_gsym->name, binding_label_gsym->sym_name,
6899                        &(comm_block_tree->n.common->where),
6900                        comm_name_gsym->name, &(comm_name_gsym->where));
6901         }
6902     }
6903   
6904   return;
6905 }
6906
6907
6908 /* Verify any BIND(C) derived types in the namespace so we can report errors
6909    for them once, rather than for each variable declared of that type.  */
6910
6911 static void
6912 resolve_bind_c_derived_types (gfc_symbol *derived_sym)
6913 {
6914   if (derived_sym != NULL && derived_sym->attr.flavor == FL_DERIVED
6915       && derived_sym->attr.is_bind_c == 1)
6916     verify_bind_c_derived_type (derived_sym);
6917   
6918   return;
6919 }
6920
6921
6922 /* Verify that any binding labels used in a given namespace do not collide 
6923    with the names or binding labels of any global symbols.  */
6924
6925 static void
6926 gfc_verify_binding_labels (gfc_symbol *sym)
6927 {
6928   int has_error = 0;
6929   
6930   if (sym != NULL && sym->attr.is_bind_c && sym->attr.is_iso_c == 0 
6931       && sym->attr.flavor != FL_DERIVED && sym->binding_label[0] != '\0')
6932     {
6933       gfc_gsymbol *bind_c_sym;
6934
6935       bind_c_sym = gfc_find_gsymbol (gfc_gsym_root, sym->binding_label);
6936       if (bind_c_sym != NULL 
6937           && strcmp (bind_c_sym->name, sym->binding_label) == 0)
6938         {
6939           if (sym->attr.if_source == IFSRC_DECL 
6940               && (bind_c_sym->type != GSYM_SUBROUTINE 
6941                   && bind_c_sym->type != GSYM_FUNCTION) 
6942               && ((sym->attr.contained == 1 
6943                    && strcmp (bind_c_sym->sym_name, sym->name) != 0) 
6944                   || (sym->attr.use_assoc == 1 
6945                       && (strcmp (bind_c_sym->mod_name, sym->module) != 0))))
6946             {
6947               /* Make sure global procedures don't collide with anything.  */
6948               gfc_error ("Binding label '%s' at %L collides with the global "
6949                          "entity '%s' at %L", sym->binding_label,
6950                          &(sym->declared_at), bind_c_sym->name,
6951                          &(bind_c_sym->where));
6952               has_error = 1;
6953             }
6954           else if (sym->attr.contained == 0 
6955                    && (sym->attr.if_source == IFSRC_IFBODY 
6956                        && sym->attr.flavor == FL_PROCEDURE) 
6957                    && (bind_c_sym->sym_name != NULL 
6958                        && strcmp (bind_c_sym->sym_name, sym->name) != 0))
6959             {
6960               /* Make sure procedures in interface bodies don't collide.  */
6961               gfc_error ("Binding label '%s' in interface body at %L collides "
6962                          "with the global entity '%s' at %L",
6963                          sym->binding_label,
6964                          &(sym->declared_at), bind_c_sym->name,
6965                          &(bind_c_sym->where));
6966               has_error = 1;
6967             }
6968           else if (sym->attr.contained == 0 
6969                    && sym->attr.if_source == IFSRC_UNKNOWN)
6970             if ((sym->attr.use_assoc && bind_c_sym->mod_name
6971                  && strcmp (bind_c_sym->mod_name, sym->module) != 0) 
6972                 || sym->attr.use_assoc == 0)
6973               {
6974                 gfc_error ("Binding label '%s' at %L collides with global "
6975                            "entity '%s' at %L", sym->binding_label,
6976                            &(sym->declared_at), bind_c_sym->name,
6977                            &(bind_c_sym->where));
6978                 has_error = 1;
6979               }
6980
6981           if (has_error != 0)
6982             /* Clear the binding label to prevent checking multiple times.  */
6983             sym->binding_label[0] = '\0';
6984         }
6985       else if (bind_c_sym == NULL)
6986         {
6987           bind_c_sym = gfc_get_gsymbol (sym->binding_label);
6988           bind_c_sym->where = sym->declared_at;
6989           bind_c_sym->sym_name = sym->name;
6990
6991           if (sym->attr.use_assoc == 1)
6992             bind_c_sym->mod_name = sym->module;
6993           else
6994             if (sym->ns->proc_name != NULL)
6995               bind_c_sym->mod_name = sym->ns->proc_name->name;
6996
6997           if (sym->attr.contained == 0)
6998             {
6999               if (sym->attr.subroutine)
7000                 bind_c_sym->type = GSYM_SUBROUTINE;
7001               else if (sym->attr.function)
7002                 bind_c_sym->type = GSYM_FUNCTION;
7003             }
7004         }
7005     }
7006   return;
7007 }
7008
7009
7010 /* Resolve an index expression.  */
7011
7012 static gfc_try
7013 resolve_index_expr (gfc_expr *e)
7014 {
7015   if (gfc_resolve_expr (e) == FAILURE)
7016     return FAILURE;
7017
7018   if (gfc_simplify_expr (e, 0) == FAILURE)
7019     return FAILURE;
7020
7021   if (gfc_specification_expr (e) == FAILURE)
7022     return FAILURE;
7023
7024   return SUCCESS;
7025 }
7026
7027 /* Resolve a charlen structure.  */
7028
7029 static gfc_try
7030 resolve_charlen (gfc_charlen *cl)
7031 {
7032   int i;
7033
7034   if (cl->resolved)
7035     return SUCCESS;
7036
7037   cl->resolved = 1;
7038
7039   specification_expr = 1;
7040
7041   if (resolve_index_expr (cl->length) == FAILURE)
7042     {
7043       specification_expr = 0;
7044       return FAILURE;
7045     }
7046
7047   /* "If the character length parameter value evaluates to a negative
7048      value, the length of character entities declared is zero."  */
7049   if (cl->length && !gfc_extract_int (cl->length, &i) && i < 0)
7050     {
7051       gfc_warning_now ("CHARACTER variable has zero length at %L",
7052                        &cl->length->where);
7053       gfc_replace_expr (cl->length, gfc_int_expr (0));
7054     }
7055
7056   return SUCCESS;
7057 }
7058
7059
7060 /* Test for non-constant shape arrays.  */
7061
7062 static bool
7063 is_non_constant_shape_array (gfc_symbol *sym)
7064 {
7065   gfc_expr *e;
7066   int i;
7067   bool not_constant;
7068
7069   not_constant = false;
7070   if (sym->as != NULL)
7071     {
7072       /* Unfortunately, !gfc_is_compile_time_shape hits a legal case that
7073          has not been simplified; parameter array references.  Do the
7074          simplification now.  */
7075       for (i = 0; i < sym->as->rank; i++)
7076         {
7077           e = sym->as->lower[i];
7078           if (e && (resolve_index_expr (e) == FAILURE
7079                     || !gfc_is_constant_expr (e)))
7080             not_constant = true;
7081
7082           e = sym->as->upper[i];
7083           if (e && (resolve_index_expr (e) == FAILURE
7084                     || !gfc_is_constant_expr (e)))
7085             not_constant = true;
7086         }
7087     }
7088   return not_constant;
7089 }
7090
7091 /* Given a symbol and an initialization expression, add code to initialize
7092    the symbol to the function entry.  */
7093 static void
7094 build_init_assign (gfc_symbol *sym, gfc_expr *init)
7095 {
7096   gfc_expr *lval;
7097   gfc_code *init_st;
7098   gfc_namespace *ns = sym->ns;
7099
7100   /* Search for the function namespace if this is a contained
7101      function without an explicit result.  */
7102   if (sym->attr.function && sym == sym->result
7103       && sym->name != sym->ns->proc_name->name)
7104     {
7105       ns = ns->contained;
7106       for (;ns; ns = ns->sibling)
7107         if (strcmp (ns->proc_name->name, sym->name) == 0)
7108           break;
7109     }
7110
7111   if (ns == NULL)
7112     {
7113       gfc_free_expr (init);
7114       return;
7115     }
7116
7117   /* Build an l-value expression for the result.  */
7118   lval = gfc_lval_expr_from_sym (sym);
7119
7120   /* Add the code at scope entry.  */
7121   init_st = gfc_get_code ();
7122   init_st->next = ns->code;
7123   ns->code = init_st;
7124
7125   /* Assign the default initializer to the l-value.  */
7126   init_st->loc = sym->declared_at;
7127   init_st->op = EXEC_INIT_ASSIGN;
7128   init_st->expr = lval;
7129   init_st->expr2 = init;
7130 }
7131
7132 /* Assign the default initializer to a derived type variable or result.  */
7133
7134 static void
7135 apply_default_init (gfc_symbol *sym)
7136 {
7137   gfc_expr *init = NULL;
7138
7139   if (sym->attr.flavor != FL_VARIABLE && !sym->attr.function)
7140     return;
7141
7142   if (sym->ts.type == BT_DERIVED && sym->ts.derived)
7143     init = gfc_default_initializer (&sym->ts);
7144
7145   if (init == NULL)
7146     return;
7147
7148   build_init_assign (sym, init);
7149 }
7150
7151 /* Build an initializer for a local integer, real, complex, logical, or
7152    character variable, based on the command line flags finit-local-zero,
7153    finit-integer=, finit-real=, finit-logical=, and finit-runtime.  Returns 
7154    null if the symbol should not have a default initialization.  */
7155 static gfc_expr *
7156 build_default_init_expr (gfc_symbol *sym)
7157 {
7158   int char_len;
7159   gfc_expr *init_expr;
7160   int i;
7161
7162   /* These symbols should never have a default initialization.  */
7163   if ((sym->attr.dimension && !gfc_is_compile_time_shape (sym->as))
7164       || sym->attr.external
7165       || sym->attr.dummy
7166       || sym->attr.pointer
7167       || sym->attr.in_equivalence
7168       || sym->attr.in_common
7169       || sym->attr.data
7170       || sym->module
7171       || sym->attr.cray_pointee
7172       || sym->attr.cray_pointer)
7173     return NULL;
7174
7175   /* Now we'll try to build an initializer expression.  */
7176   init_expr = gfc_get_expr ();
7177   init_expr->expr_type = EXPR_CONSTANT;
7178   init_expr->ts.type = sym->ts.type;
7179   init_expr->ts.kind = sym->ts.kind;
7180   init_expr->where = sym->declared_at;
7181   
7182   /* We will only initialize integers, reals, complex, logicals, and
7183      characters, and only if the corresponding command-line flags
7184      were set.  Otherwise, we free init_expr and return null.  */
7185   switch (sym->ts.type)
7186     {    
7187     case BT_INTEGER:
7188       if (gfc_option.flag_init_integer != GFC_INIT_INTEGER_OFF)
7189         mpz_init_set_si (init_expr->value.integer, 
7190                          gfc_option.flag_init_integer_value);
7191       else
7192         {
7193           gfc_free_expr (init_expr);
7194           init_expr = NULL;
7195         }
7196       break;
7197
7198     case BT_REAL:
7199       mpfr_init (init_expr->value.real);
7200       switch (gfc_option.flag_init_real)
7201         {
7202         case GFC_INIT_REAL_NAN:
7203           mpfr_set_nan (init_expr->value.real);
7204           break;
7205
7206         case GFC_INIT_REAL_INF:
7207           mpfr_set_inf (init_expr->value.real, 1);
7208           break;
7209
7210         case GFC_INIT_REAL_NEG_INF:
7211           mpfr_set_inf (init_expr->value.real, -1);
7212           break;
7213
7214         case GFC_INIT_REAL_ZERO:
7215           mpfr_set_ui (init_expr->value.real, 0.0, GFC_RND_MODE);
7216           break;
7217
7218         default:
7219           gfc_free_expr (init_expr);
7220           init_expr = NULL;
7221           break;
7222         }
7223       break;
7224           
7225     case BT_COMPLEX:
7226       mpfr_init (init_expr->value.complex.r);
7227       mpfr_init (init_expr->value.complex.i);
7228       switch (gfc_option.flag_init_real)
7229         {
7230         case GFC_INIT_REAL_NAN:
7231           mpfr_set_nan (init_expr->value.complex.r);
7232           mpfr_set_nan (init_expr->value.complex.i);
7233           break;
7234
7235         case GFC_INIT_REAL_INF:
7236           mpfr_set_inf (init_expr->value.complex.r, 1);
7237           mpfr_set_inf (init_expr->value.complex.i, 1);
7238           break;
7239
7240         case GFC_INIT_REAL_NEG_INF:
7241           mpfr_set_inf (init_expr->value.complex.r, -1);
7242           mpfr_set_inf (init_expr->value.complex.i, -1);
7243           break;
7244
7245         case GFC_INIT_REAL_ZERO:
7246           mpfr_set_ui (init_expr->value.complex.r, 0.0, GFC_RND_MODE);
7247           mpfr_set_ui (init_expr->value.complex.i, 0.0, GFC_RND_MODE);
7248           break;
7249
7250         default:
7251           gfc_free_expr (init_expr);
7252           init_expr = NULL;
7253           break;
7254         }
7255       break;
7256           
7257     case BT_LOGICAL:
7258       if (gfc_option.flag_init_logical == GFC_INIT_LOGICAL_FALSE)
7259         init_expr->value.logical = 0;
7260       else if (gfc_option.flag_init_logical == GFC_INIT_LOGICAL_TRUE)
7261         init_expr->value.logical = 1;
7262       else
7263         {
7264           gfc_free_expr (init_expr);
7265           init_expr = NULL;
7266         }
7267       break;
7268           
7269     case BT_CHARACTER:
7270       /* For characters, the length must be constant in order to 
7271          create a default initializer.  */
7272       if (gfc_option.flag_init_character == GFC_INIT_CHARACTER_ON
7273           && sym->ts.cl->length
7274           && sym->ts.cl->length->expr_type == EXPR_CONSTANT)
7275         {
7276           char_len = mpz_get_si (sym->ts.cl->length->value.integer);
7277           init_expr->value.character.length = char_len;
7278           init_expr->value.character.string = gfc_get_wide_string (char_len+1);
7279           for (i = 0; i < char_len; i++)
7280             init_expr->value.character.string[i]
7281               = (unsigned char) gfc_option.flag_init_character_value;
7282         }
7283       else
7284         {
7285           gfc_free_expr (init_expr);
7286           init_expr = NULL;
7287         }
7288       break;
7289           
7290     default:
7291      gfc_free_expr (init_expr);
7292      init_expr = NULL;
7293     }
7294   return init_expr;
7295 }
7296
7297 /* Add an initialization expression to a local variable.  */
7298 static void
7299 apply_default_init_local (gfc_symbol *sym)
7300 {
7301   gfc_expr *init = NULL;
7302
7303   /* The symbol should be a variable or a function return value.  */
7304   if ((sym->attr.flavor != FL_VARIABLE && !sym->attr.function)
7305       || (sym->attr.function && sym->result != sym))
7306     return;
7307
7308   /* Try to build the initializer expression.  If we can't initialize
7309      this symbol, then init will be NULL.  */
7310   init = build_default_init_expr (sym);
7311   if (init == NULL)
7312     return;
7313
7314   /* For saved variables, we don't want to add an initializer at 
7315      function entry, so we just add a static initializer.  */
7316   if (sym->attr.save || sym->ns->save_all)
7317     {
7318       /* Don't clobber an existing initializer!  */
7319       gcc_assert (sym->value == NULL);
7320       sym->value = init;
7321       return;
7322     }
7323
7324   build_init_assign (sym, init);
7325 }
7326
7327 /* Resolution of common features of flavors variable and procedure.  */
7328
7329 static gfc_try
7330 resolve_fl_var_and_proc (gfc_symbol *sym, int mp_flag)
7331 {
7332   /* Constraints on deferred shape variable.  */
7333   if (sym->as == NULL || sym->as->type != AS_DEFERRED)
7334     {
7335       if (sym->attr.allocatable)
7336         {
7337           if (sym->attr.dimension)
7338             gfc_error ("Allocatable array '%s' at %L must have "
7339                        "a deferred shape", sym->name, &sym->declared_at);
7340           else
7341             gfc_error ("Scalar object '%s' at %L may not be ALLOCATABLE",
7342                        sym->name, &sym->declared_at);
7343             return FAILURE;
7344         }
7345
7346       if (sym->attr.pointer && sym->attr.dimension)
7347         {
7348           gfc_error ("Array pointer '%s' at %L must have a deferred shape",
7349                      sym->name, &sym->declared_at);
7350           return FAILURE;
7351         }
7352
7353     }
7354   else
7355     {
7356       if (!mp_flag && !sym->attr.allocatable
7357           && !sym->attr.pointer && !sym->attr.dummy)
7358         {
7359           gfc_error ("Array '%s' at %L cannot have a deferred shape",
7360                      sym->name, &sym->declared_at);
7361           return FAILURE;
7362          }
7363     }
7364   return SUCCESS;
7365 }
7366
7367
7368 /* Additional checks for symbols with flavor variable and derived
7369    type.  To be called from resolve_fl_variable.  */
7370
7371 static gfc_try
7372 resolve_fl_variable_derived (gfc_symbol *sym, int no_init_flag)
7373 {
7374   gcc_assert (sym->ts.type == BT_DERIVED);
7375
7376   /* Check to see if a derived type is blocked from being host
7377      associated by the presence of another class I symbol in the same
7378      namespace.  14.6.1.3 of the standard and the discussion on
7379      comp.lang.fortran.  */
7380   if (sym->ns != sym->ts.derived->ns
7381       && sym->ns->proc_name->attr.if_source != IFSRC_IFBODY)
7382     {
7383       gfc_symbol *s;
7384       gfc_find_symbol (sym->ts.derived->name, sym->ns, 0, &s);
7385       if (s && s->attr.flavor != FL_DERIVED)
7386         {
7387           gfc_error ("The type '%s' cannot be host associated at %L "
7388                      "because it is blocked by an incompatible object "
7389                      "of the same name declared at %L",
7390                      sym->ts.derived->name, &sym->declared_at,
7391                      &s->declared_at);
7392           return FAILURE;
7393         }
7394     }
7395
7396   /* 4th constraint in section 11.3: "If an object of a type for which
7397      component-initialization is specified (R429) appears in the
7398      specification-part of a module and does not have the ALLOCATABLE
7399      or POINTER attribute, the object shall have the SAVE attribute."
7400
7401      The check for initializers is performed with
7402      has_default_initializer because gfc_default_initializer generates
7403      a hidden default for allocatable components.  */
7404   if (!(sym->value || no_init_flag) && sym->ns->proc_name
7405       && sym->ns->proc_name->attr.flavor == FL_MODULE
7406       && !sym->ns->save_all && !sym->attr.save
7407       && !sym->attr.pointer && !sym->attr.allocatable
7408       && has_default_initializer (sym->ts.derived))
7409     {
7410       gfc_error("Object '%s' at %L must have the SAVE attribute for "
7411                 "default initialization of a component",
7412                 sym->name, &sym->declared_at);
7413       return FAILURE;
7414     }
7415
7416   /* Assign default initializer.  */
7417   if (!(sym->value || sym->attr.pointer || sym->attr.allocatable)
7418       && (!no_init_flag || sym->attr.intent == INTENT_OUT))
7419     {
7420       sym->value = gfc_default_initializer (&sym->ts);
7421     }
7422
7423   return SUCCESS;
7424 }
7425
7426
7427 /* Resolve symbols with flavor variable.  */
7428
7429 static gfc_try
7430 resolve_fl_variable (gfc_symbol *sym, int mp_flag)
7431 {
7432   int no_init_flag, automatic_flag;
7433   gfc_expr *e;
7434   const char *auto_save_msg;
7435
7436   auto_save_msg = "Automatic object '%s' at %L cannot have the "
7437                   "SAVE attribute";
7438
7439   if (resolve_fl_var_and_proc (sym, mp_flag) == FAILURE)
7440     return FAILURE;
7441
7442   /* Set this flag to check that variables are parameters of all entries.
7443      This check is effected by the call to gfc_resolve_expr through
7444      is_non_constant_shape_array.  */
7445   specification_expr = 1;
7446
7447   if (sym->ns->proc_name
7448       && (sym->ns->proc_name->attr.flavor == FL_MODULE
7449           || sym->ns->proc_name->attr.is_main_program)
7450       && !sym->attr.use_assoc
7451       && !sym->attr.allocatable
7452       && !sym->attr.pointer
7453       && is_non_constant_shape_array (sym))
7454     {
7455       /* The shape of a main program or module array needs to be
7456          constant.  */
7457       gfc_error ("The module or main program array '%s' at %L must "
7458                  "have constant shape", sym->name, &sym->declared_at);
7459       specification_expr = 0;
7460       return FAILURE;
7461     }
7462
7463   if (sym->ts.type == BT_CHARACTER)
7464     {
7465       /* Make sure that character string variables with assumed length are
7466          dummy arguments.  */
7467       e = sym->ts.cl->length;
7468       if (e == NULL && !sym->attr.dummy && !sym->attr.result)
7469         {
7470           gfc_error ("Entity with assumed character length at %L must be a "
7471                      "dummy argument or a PARAMETER", &sym->declared_at);
7472           return FAILURE;
7473         }
7474
7475       if (e && sym->attr.save && !gfc_is_constant_expr (e))
7476         {
7477           gfc_error (auto_save_msg, sym->name, &sym->declared_at);
7478           return FAILURE;
7479         }
7480
7481       if (!gfc_is_constant_expr (e)
7482           && !(e->expr_type == EXPR_VARIABLE
7483                && e->symtree->n.sym->attr.flavor == FL_PARAMETER)
7484           && sym->ns->proc_name
7485           && (sym->ns->proc_name->attr.flavor == FL_MODULE
7486               || sym->ns->proc_name->attr.is_main_program)
7487           && !sym->attr.use_assoc)
7488         {
7489           gfc_error ("'%s' at %L must have constant character length "
7490                      "in this context", sym->name, &sym->declared_at);
7491           return FAILURE;
7492         }
7493     }
7494
7495   if (sym->value == NULL && sym->attr.referenced)
7496     apply_default_init_local (sym); /* Try to apply a default initialization.  */
7497
7498   /* Determine if the symbol may not have an initializer.  */
7499   no_init_flag = automatic_flag = 0;
7500   if (sym->attr.allocatable || sym->attr.external || sym->attr.dummy
7501       || sym->attr.intrinsic || sym->attr.result)
7502     no_init_flag = 1;
7503   else if (sym->attr.dimension && !sym->attr.pointer
7504            && is_non_constant_shape_array (sym))
7505     {
7506       no_init_flag = automatic_flag = 1;
7507
7508       /* Also, they must not have the SAVE attribute.
7509          SAVE_IMPLICIT is checked below.  */
7510       if (sym->attr.save == SAVE_EXPLICIT)
7511         {
7512           gfc_error (auto_save_msg, sym->name, &sym->declared_at);
7513           return FAILURE;
7514         }
7515     }
7516
7517   /* Reject illegal initializers.  */
7518   if (!sym->mark && sym->value)
7519     {
7520       if (sym->attr.allocatable)
7521         gfc_error ("Allocatable '%s' at %L cannot have an initializer",
7522                    sym->name, &sym->declared_at);
7523       else if (sym->attr.external)
7524         gfc_error ("External '%s' at %L cannot have an initializer",
7525                    sym->name, &sym->declared_at);
7526       else if (sym->attr.dummy
7527         && !(sym->ts.type == BT_DERIVED && sym->attr.intent == INTENT_OUT))
7528         gfc_error ("Dummy '%s' at %L cannot have an initializer",
7529                    sym->name, &sym->declared_at);
7530       else if (sym->attr.intrinsic)
7531         gfc_error ("Intrinsic '%s' at %L cannot have an initializer",
7532                    sym->name, &sym->declared_at);
7533       else if (sym->attr.result)
7534         gfc_error ("Function result '%s' at %L cannot have an initializer",
7535                    sym->name, &sym->declared_at);
7536       else if (automatic_flag)
7537         gfc_error ("Automatic array '%s' at %L cannot have an initializer",
7538                    sym->name, &sym->declared_at);
7539       else
7540         goto no_init_error;
7541       return FAILURE;
7542     }
7543
7544 no_init_error:
7545   if (sym->ts.type == BT_DERIVED)
7546     return resolve_fl_variable_derived (sym, no_init_flag);
7547
7548   return SUCCESS;
7549 }
7550
7551
7552 /* Resolve a procedure.  */
7553
7554 static gfc_try
7555 resolve_fl_procedure (gfc_symbol *sym, int mp_flag)
7556 {
7557   gfc_formal_arglist *arg;
7558
7559   if (sym->attr.ambiguous_interfaces && !sym->attr.referenced)
7560     gfc_warning ("Although not referenced, '%s' at %L has ambiguous "
7561                  "interfaces", sym->name, &sym->declared_at);
7562
7563   if (sym->attr.function
7564       && resolve_fl_var_and_proc (sym, mp_flag) == FAILURE)
7565     return FAILURE;
7566
7567   if (sym->ts.type == BT_CHARACTER)
7568     {
7569       gfc_charlen *cl = sym->ts.cl;
7570
7571       if (cl && cl->length && gfc_is_constant_expr (cl->length)
7572              && resolve_charlen (cl) == FAILURE)
7573         return FAILURE;
7574
7575       if (!cl || !cl->length || cl->length->expr_type != EXPR_CONSTANT)
7576         {
7577           if (sym->attr.proc == PROC_ST_FUNCTION)
7578             {
7579               gfc_error ("Character-valued statement function '%s' at %L must "
7580                          "have constant length", sym->name, &sym->declared_at);
7581               return FAILURE;
7582             }
7583
7584           if (sym->attr.external && sym->formal == NULL
7585               && cl && cl->length && cl->length->expr_type != EXPR_CONSTANT)
7586             {
7587               gfc_error ("Automatic character length function '%s' at %L must "
7588                          "have an explicit interface", sym->name,
7589                          &sym->declared_at);
7590               return FAILURE;
7591             }
7592         }
7593     }
7594
7595   /* Ensure that derived type for are not of a private type.  Internal
7596      module procedures are excluded by 2.2.3.3 - i.e., they are not
7597      externally accessible and can access all the objects accessible in
7598      the host.  */
7599   if (!(sym->ns->parent
7600         && sym->ns->parent->proc_name->attr.flavor == FL_MODULE)
7601       && gfc_check_access(sym->attr.access, sym->ns->default_access))
7602     {
7603       gfc_interface *iface;
7604
7605       for (arg = sym->formal; arg; arg = arg->next)
7606         {
7607           if (arg->sym
7608               && arg->sym->ts.type == BT_DERIVED
7609               && !arg->sym->ts.derived->attr.use_assoc
7610               && !gfc_check_access (arg->sym->ts.derived->attr.access,
7611                                     arg->sym->ts.derived->ns->default_access)
7612               && gfc_notify_std (GFC_STD_F2003, "Fortran 2003: '%s' is of a "
7613                                  "PRIVATE type and cannot be a dummy argument"
7614                                  " of '%s', which is PUBLIC at %L",
7615                                  arg->sym->name, sym->name, &sym->declared_at)
7616                  == FAILURE)
7617             {
7618               /* Stop this message from recurring.  */
7619               arg->sym->ts.derived->attr.access = ACCESS_PUBLIC;
7620               return FAILURE;
7621             }
7622         }
7623
7624       /* PUBLIC interfaces may expose PRIVATE procedures that take types
7625          PRIVATE to the containing module.  */
7626       for (iface = sym->generic; iface; iface = iface->next)
7627         {
7628           for (arg = iface->sym->formal; arg; arg = arg->next)
7629             {
7630               if (arg->sym
7631                   && arg->sym->ts.type == BT_DERIVED
7632                   && !arg->sym->ts.derived->attr.use_assoc
7633                   && !gfc_check_access (arg->sym->ts.derived->attr.access,
7634                                         arg->sym->ts.derived->ns->default_access)
7635                   && gfc_notify_std (GFC_STD_F2003, "Fortran 2003: Procedure "
7636                                      "'%s' in PUBLIC interface '%s' at %L "
7637                                      "takes dummy arguments of '%s' which is "
7638                                      "PRIVATE", iface->sym->name, sym->name,
7639                                      &iface->sym->declared_at,
7640                                      gfc_typename (&arg->sym->ts)) == FAILURE)
7641                 {
7642                   /* Stop this message from recurring.  */
7643                   arg->sym->ts.derived->attr.access = ACCESS_PUBLIC;
7644                   return FAILURE;
7645                 }
7646              }
7647         }
7648
7649       /* PUBLIC interfaces may expose PRIVATE procedures that take types
7650          PRIVATE to the containing module.  */
7651       for (iface = sym->generic; iface; iface = iface->next)
7652         {
7653           for (arg = iface->sym->formal; arg; arg = arg->next)
7654             {
7655               if (arg->sym
7656                   && arg->sym->ts.type == BT_DERIVED
7657                   && !arg->sym->ts.derived->attr.use_assoc
7658                   && !gfc_check_access (arg->sym->ts.derived->attr.access,
7659                                         arg->sym->ts.derived->ns->default_access)
7660                   && gfc_notify_std (GFC_STD_F2003, "Fortran 2003: Procedure "
7661                                      "'%s' in PUBLIC interface '%s' at %L "
7662                                      "takes dummy arguments of '%s' which is "
7663                                      "PRIVATE", iface->sym->name, sym->name,
7664                                      &iface->sym->declared_at,
7665                                      gfc_typename (&arg->sym->ts)) == FAILURE)
7666                 {
7667                   /* Stop this message from recurring.  */
7668                   arg->sym->ts.derived->attr.access = ACCESS_PUBLIC;
7669                   return FAILURE;
7670                 }
7671              }
7672         }
7673     }
7674
7675   if (sym->attr.function && sym->value && sym->attr.proc != PROC_ST_FUNCTION
7676       && !sym->attr.proc_pointer)
7677     {
7678       gfc_error ("Function '%s' at %L cannot have an initializer",
7679                  sym->name, &sym->declared_at);
7680       return FAILURE;
7681     }
7682
7683   /* An external symbol may not have an initializer because it is taken to be
7684      a procedure. Exception: Procedure Pointers.  */
7685   if (sym->attr.external && sym->value && !sym->attr.proc_pointer)
7686     {
7687       gfc_error ("External object '%s' at %L may not have an initializer",
7688                  sym->name, &sym->declared_at);
7689       return FAILURE;
7690     }
7691
7692   /* An elemental function is required to return a scalar 12.7.1  */
7693   if (sym->attr.elemental && sym->attr.function && sym->as)
7694     {
7695       gfc_error ("ELEMENTAL function '%s' at %L must have a scalar "
7696                  "result", sym->name, &sym->declared_at);
7697       /* Reset so that the error only occurs once.  */
7698       sym->attr.elemental = 0;
7699       return FAILURE;
7700     }
7701
7702   /* 5.1.1.5 of the Standard: A function name declared with an asterisk
7703      char-len-param shall not be array-valued, pointer-valued, recursive
7704      or pure.  ....snip... A character value of * may only be used in the
7705      following ways: (i) Dummy arg of procedure - dummy associates with
7706      actual length; (ii) To declare a named constant; or (iii) External
7707      function - but length must be declared in calling scoping unit.  */
7708   if (sym->attr.function
7709       && sym->ts.type == BT_CHARACTER
7710       && sym->ts.cl && sym->ts.cl->length == NULL)
7711     {
7712       if ((sym->as && sym->as->rank) || (sym->attr.pointer)
7713           || (sym->attr.recursive) || (sym->attr.pure))
7714         {
7715           if (sym->as && sym->as->rank)
7716             gfc_error ("CHARACTER(*) function '%s' at %L cannot be "
7717                        "array-valued", sym->name, &sym->declared_at);
7718
7719           if (sym->attr.pointer)
7720             gfc_error ("CHARACTER(*) function '%s' at %L cannot be "
7721                        "pointer-valued", sym->name, &sym->declared_at);
7722
7723           if (sym->attr.pure)
7724             gfc_error ("CHARACTER(*) function '%s' at %L cannot be "
7725                        "pure", sym->name, &sym->declared_at);
7726
7727           if (sym->attr.recursive)
7728             gfc_error ("CHARACTER(*) function '%s' at %L cannot be "
7729                        "recursive", sym->name, &sym->declared_at);
7730
7731           return FAILURE;
7732         }
7733
7734       /* Appendix B.2 of the standard.  Contained functions give an
7735          error anyway.  Fixed-form is likely to be F77/legacy.  */
7736       if (!sym->attr.contained && gfc_current_form != FORM_FIXED)
7737         gfc_notify_std (GFC_STD_F95_OBS, "CHARACTER(*) function "
7738                         "'%s' at %L is obsolescent in fortran 95",
7739                         sym->name, &sym->declared_at);
7740     }
7741
7742   if (sym->attr.is_bind_c && sym->attr.is_c_interop != 1)
7743     {
7744       gfc_formal_arglist *curr_arg;
7745       int has_non_interop_arg = 0;
7746
7747       if (verify_bind_c_sym (sym, &(sym->ts), sym->attr.in_common,
7748                              sym->common_block) == FAILURE)
7749         {
7750           /* Clear these to prevent looking at them again if there was an
7751              error.  */
7752           sym->attr.is_bind_c = 0;
7753           sym->attr.is_c_interop = 0;
7754           sym->ts.is_c_interop = 0;
7755         }
7756       else
7757         {
7758           /* So far, no errors have been found.  */
7759           sym->attr.is_c_interop = 1;
7760           sym->ts.is_c_interop = 1;
7761         }
7762       
7763       curr_arg = sym->formal;
7764       while (curr_arg != NULL)
7765         {
7766           /* Skip implicitly typed dummy args here.  */
7767           if (curr_arg->sym->attr.implicit_type == 0)
7768             if (verify_c_interop_param (curr_arg->sym) == FAILURE)
7769               /* If something is found to fail, record the fact so we
7770                  can mark the symbol for the procedure as not being
7771                  BIND(C) to try and prevent multiple errors being
7772                  reported.  */
7773               has_non_interop_arg = 1;
7774           
7775           curr_arg = curr_arg->next;
7776         }
7777
7778       /* See if any of the arguments were not interoperable and if so, clear
7779          the procedure symbol to prevent duplicate error messages.  */
7780       if (has_non_interop_arg != 0)
7781         {
7782           sym->attr.is_c_interop = 0;
7783           sym->ts.is_c_interop = 0;
7784           sym->attr.is_bind_c = 0;
7785         }
7786     }
7787   
7788   if (sym->attr.save == SAVE_EXPLICIT && !sym->attr.proc_pointer)
7789     {
7790       gfc_error ("PROCEDURE attribute conflicts with SAVE attribute "
7791                  "in '%s' at %L", sym->name, &sym->declared_at);
7792       return FAILURE;
7793     }
7794
7795   if (sym->attr.intent && !sym->attr.proc_pointer)
7796     {
7797       gfc_error ("PROCEDURE attribute conflicts with INTENT attribute "
7798                  "in '%s' at %L", sym->name, &sym->declared_at);
7799       return FAILURE;
7800     }
7801
7802   return SUCCESS;
7803 }
7804
7805
7806 /* Resolve a list of finalizer procedures.  That is, after they have hopefully
7807    been defined and we now know their defined arguments, check that they fulfill
7808    the requirements of the standard for procedures used as finalizers.  */
7809
7810 static gfc_try
7811 gfc_resolve_finalizers (gfc_symbol* derived)
7812 {
7813   gfc_finalizer* list;
7814   gfc_finalizer** prev_link; /* For removing wrong entries from the list.  */
7815   gfc_try result = SUCCESS;
7816   bool seen_scalar = false;
7817
7818   if (!derived->f2k_derived || !derived->f2k_derived->finalizers)
7819     return SUCCESS;
7820
7821   /* Walk over the list of finalizer-procedures, check them, and if any one
7822      does not fit in with the standard's definition, print an error and remove
7823      it from the list.  */
7824   prev_link = &derived->f2k_derived->finalizers;
7825   for (list = derived->f2k_derived->finalizers; list; list = *prev_link)
7826     {
7827       gfc_symbol* arg;
7828       gfc_finalizer* i;
7829       int my_rank;
7830
7831       /* Skip this finalizer if we already resolved it.  */
7832       if (list->proc_tree)
7833         {
7834           prev_link = &(list->next);
7835           continue;
7836         }
7837
7838       /* Check this exists and is a SUBROUTINE.  */
7839       if (!list->proc_sym->attr.subroutine)
7840         {
7841           gfc_error ("FINAL procedure '%s' at %L is not a SUBROUTINE",
7842                      list->proc_sym->name, &list->where);
7843           goto error;
7844         }
7845
7846       /* We should have exactly one argument.  */
7847       if (!list->proc_sym->formal || list->proc_sym->formal->next)
7848         {
7849           gfc_error ("FINAL procedure at %L must have exactly one argument",
7850                      &list->where);
7851           goto error;
7852         }
7853       arg = list->proc_sym->formal->sym;
7854
7855       /* This argument must be of our type.  */
7856       if (arg->ts.type != BT_DERIVED || arg->ts.derived != derived)
7857         {
7858           gfc_error ("Argument of FINAL procedure at %L must be of type '%s'",
7859                      &arg->declared_at, derived->name);
7860           goto error;
7861         }
7862
7863       /* It must neither be a pointer nor allocatable nor optional.  */
7864       if (arg->attr.pointer)
7865         {
7866           gfc_error ("Argument of FINAL procedure at %L must not be a POINTER",
7867                      &arg->declared_at);
7868           goto error;
7869         }
7870       if (arg->attr.allocatable)
7871         {
7872           gfc_error ("Argument of FINAL procedure at %L must not be"
7873                      " ALLOCATABLE", &arg->declared_at);
7874           goto error;
7875         }
7876       if (arg->attr.optional)
7877         {
7878           gfc_error ("Argument of FINAL procedure at %L must not be OPTIONAL",
7879                      &arg->declared_at);
7880           goto error;
7881         }
7882
7883       /* It must not be INTENT(OUT).  */
7884       if (arg->attr.intent == INTENT_OUT)
7885         {
7886           gfc_error ("Argument of FINAL procedure at %L must not be"
7887                      " INTENT(OUT)", &arg->declared_at);
7888           goto error;
7889         }
7890
7891       /* Warn if the procedure is non-scalar and not assumed shape.  */
7892       if (gfc_option.warn_surprising && arg->as && arg->as->rank > 0
7893           && arg->as->type != AS_ASSUMED_SHAPE)
7894         gfc_warning ("Non-scalar FINAL procedure at %L should have assumed"
7895                      " shape argument", &arg->declared_at);
7896
7897       /* Check that it does not match in kind and rank with a FINAL procedure
7898          defined earlier.  To really loop over the *earlier* declarations,
7899          we need to walk the tail of the list as new ones were pushed at the
7900          front.  */
7901       /* TODO: Handle kind parameters once they are implemented.  */
7902       my_rank = (arg->as ? arg->as->rank : 0);
7903       for (i = list->next; i; i = i->next)
7904         {
7905           /* Argument list might be empty; that is an error signalled earlier,
7906              but we nevertheless continued resolving.  */
7907           if (i->proc_sym->formal)
7908             {
7909               gfc_symbol* i_arg = i->proc_sym->formal->sym;
7910               const int i_rank = (i_arg->as ? i_arg->as->rank : 0);
7911               if (i_rank == my_rank)
7912                 {
7913                   gfc_error ("FINAL procedure '%s' declared at %L has the same"
7914                              " rank (%d) as '%s'",
7915                              list->proc_sym->name, &list->where, my_rank, 
7916                              i->proc_sym->name);
7917                   goto error;
7918                 }
7919             }
7920         }
7921
7922         /* Is this the/a scalar finalizer procedure?  */
7923         if (!arg->as || arg->as->rank == 0)
7924           seen_scalar = true;
7925
7926         /* Find the symtree for this procedure.  */
7927         gcc_assert (!list->proc_tree);
7928         list->proc_tree = gfc_find_sym_in_symtree (list->proc_sym);
7929
7930         prev_link = &list->next;
7931         continue;
7932
7933         /* Remove wrong nodes immediately from the list so we don't risk any
7934            troubles in the future when they might fail later expectations.  */
7935 error:
7936         result = FAILURE;
7937         i = list;
7938         *prev_link = list->next;
7939         gfc_free_finalizer (i);
7940     }
7941
7942   /* Warn if we haven't seen a scalar finalizer procedure (but we know there
7943      were nodes in the list, must have been for arrays.  It is surely a good
7944      idea to have a scalar version there if there's something to finalize.  */
7945   if (gfc_option.warn_surprising && result == SUCCESS && !seen_scalar)
7946     gfc_warning ("Only array FINAL procedures declared for derived type '%s'"
7947                  " defined at %L, suggest also scalar one",
7948                  derived->name, &derived->declared_at);
7949
7950   /* TODO:  Remove this error when finalization is finished.  */
7951   gfc_error ("Finalization at %L is not yet implemented",
7952              &derived->declared_at);
7953
7954   return result;
7955 }
7956
7957
7958 /* Check that it is ok for the typebound procedure proc to override the
7959    procedure old.  */
7960
7961 static gfc_try
7962 check_typebound_override (gfc_symtree* proc, gfc_symtree* old)
7963 {
7964   locus where;
7965   const gfc_symbol* proc_target;
7966   const gfc_symbol* old_target;
7967   unsigned proc_pass_arg, old_pass_arg, argpos;
7968   gfc_formal_arglist* proc_formal;
7969   gfc_formal_arglist* old_formal;
7970
7971   /* This procedure should only be called for non-GENERIC proc.  */
7972   gcc_assert (!proc->typebound->is_generic);
7973
7974   /* If the overwritten procedure is GENERIC, this is an error.  */
7975   if (old->typebound->is_generic)
7976     {
7977       gfc_error ("Can't overwrite GENERIC '%s' at %L",
7978                  old->name, &proc->typebound->where);
7979       return FAILURE;
7980     }
7981
7982   where = proc->typebound->where;
7983   proc_target = proc->typebound->u.specific->n.sym;
7984   old_target = old->typebound->u.specific->n.sym;
7985
7986   /* Check that overridden binding is not NON_OVERRIDABLE.  */
7987   if (old->typebound->non_overridable)
7988     {
7989       gfc_error ("'%s' at %L overrides a procedure binding declared"
7990                  " NON_OVERRIDABLE", proc->name, &where);
7991       return FAILURE;
7992     }
7993
7994   /* If the overridden binding is PURE, the overriding must be, too.  */
7995   if (old_target->attr.pure && !proc_target->attr.pure)
7996     {
7997       gfc_error ("'%s' at %L overrides a PURE procedure and must also be PURE",
7998                  proc->name, &where);
7999       return FAILURE;
8000     }
8001
8002   /* If the overridden binding is ELEMENTAL, the overriding must be, too.  If it
8003      is not, the overriding must not be either.  */
8004   if (old_target->attr.elemental && !proc_target->attr.elemental)
8005     {
8006       gfc_error ("'%s' at %L overrides an ELEMENTAL procedure and must also be"
8007                  " ELEMENTAL", proc->name, &where);
8008       return FAILURE;
8009     }
8010   if (!old_target->attr.elemental && proc_target->attr.elemental)
8011     {
8012       gfc_error ("'%s' at %L overrides a non-ELEMENTAL procedure and must not"
8013                  " be ELEMENTAL, either", proc->name, &where);
8014       return FAILURE;
8015     }
8016
8017   /* If the overridden binding is a SUBROUTINE, the overriding must also be a
8018      SUBROUTINE.  */
8019   if (old_target->attr.subroutine && !proc_target->attr.subroutine)
8020     {
8021       gfc_error ("'%s' at %L overrides a SUBROUTINE and must also be a"
8022                  " SUBROUTINE", proc->name, &where);
8023       return FAILURE;
8024     }
8025
8026   /* If the overridden binding is a FUNCTION, the overriding must also be a
8027      FUNCTION and have the same characteristics.  */
8028   if (old_target->attr.function)
8029     {
8030       if (!proc_target->attr.function)
8031         {
8032           gfc_error ("'%s' at %L overrides a FUNCTION and must also be a"
8033                      " FUNCTION", proc->name, &where);
8034           return FAILURE;
8035         }
8036
8037       /* FIXME:  Do more comprehensive checking (including, for instance, the
8038          rank and array-shape).  */
8039       gcc_assert (proc_target->result && old_target->result);
8040       if (!gfc_compare_types (&proc_target->result->ts,
8041                               &old_target->result->ts))
8042         {
8043           gfc_error ("'%s' at %L and the overridden FUNCTION should have"
8044                      " matching result types", proc->name, &where);
8045           return FAILURE;
8046         }
8047     }
8048
8049   /* If the overridden binding is PUBLIC, the overriding one must not be
8050      PRIVATE.  */
8051   if (old->typebound->access == ACCESS_PUBLIC
8052       && proc->typebound->access == ACCESS_PRIVATE)
8053     {
8054       gfc_error ("'%s' at %L overrides a PUBLIC procedure and must not be"
8055                  " PRIVATE", proc->name, &where);
8056       return FAILURE;
8057     }
8058
8059   /* Compare the formal argument lists of both procedures.  This is also abused
8060      to find the position of the passed-object dummy arguments of both
8061      bindings as at least the overridden one might not yet be resolved and we
8062      need those positions in the check below.  */
8063   proc_pass_arg = old_pass_arg = 0;
8064   if (!proc->typebound->nopass && !proc->typebound->pass_arg)
8065     proc_pass_arg = 1;
8066   if (!old->typebound->nopass && !old->typebound->pass_arg)
8067     old_pass_arg = 1;
8068   argpos = 1;
8069   for (proc_formal = proc_target->formal, old_formal = old_target->formal;
8070        proc_formal && old_formal;
8071        proc_formal = proc_formal->next, old_formal = old_formal->next)
8072     {
8073       if (proc->typebound->pass_arg
8074           && !strcmp (proc->typebound->pass_arg, proc_formal->sym->name))
8075         proc_pass_arg = argpos;
8076       if (old->typebound->pass_arg
8077           && !strcmp (old->typebound->pass_arg, old_formal->sym->name))
8078         old_pass_arg = argpos;
8079
8080       /* Check that the names correspond.  */
8081       if (strcmp (proc_formal->sym->name, old_formal->sym->name))
8082         {
8083           gfc_error ("Dummy argument '%s' of '%s' at %L should be named '%s' as"
8084                      " to match the corresponding argument of the overridden"
8085                      " procedure", proc_formal->sym->name, proc->name, &where,
8086                      old_formal->sym->name);
8087           return FAILURE;
8088         }
8089
8090       /* Check that the types correspond if neither is the passed-object
8091          argument.  */
8092       /* FIXME:  Do more comprehensive testing here.  */
8093       if (proc_pass_arg != argpos && old_pass_arg != argpos
8094           && !gfc_compare_types (&proc_formal->sym->ts, &old_formal->sym->ts))
8095         {
8096           gfc_error ("Types mismatch for dummy argument '%s' of '%s' %L in"
8097                      " in respect to the overridden procedure",
8098                      proc_formal->sym->name, proc->name, &where);
8099           return FAILURE;
8100         }
8101
8102       ++argpos;
8103     }
8104   if (proc_formal || old_formal)
8105     {
8106       gfc_error ("'%s' at %L must have the same number of formal arguments as"
8107                  " the overridden procedure", proc->name, &where);
8108       return FAILURE;
8109     }
8110
8111   /* If the overridden binding is NOPASS, the overriding one must also be
8112      NOPASS.  */
8113   if (old->typebound->nopass && !proc->typebound->nopass)
8114     {
8115       gfc_error ("'%s' at %L overrides a NOPASS binding and must also be"
8116                  " NOPASS", proc->name, &where);
8117       return FAILURE;
8118     }
8119
8120   /* If the overridden binding is PASS(x), the overriding one must also be
8121      PASS and the passed-object dummy arguments must correspond.  */
8122   if (!old->typebound->nopass)
8123     {
8124       if (proc->typebound->nopass)
8125         {
8126           gfc_error ("'%s' at %L overrides a binding with PASS and must also be"
8127                      " PASS", proc->name, &where);
8128           return FAILURE;
8129         }
8130
8131       if (proc_pass_arg != old_pass_arg)
8132         {
8133           gfc_error ("Passed-object dummy argument of '%s' at %L must be at"
8134                      " the same position as the passed-object dummy argument of"
8135                      " the overridden procedure", proc->name, &where);
8136           return FAILURE;
8137         }
8138     }
8139
8140   return SUCCESS;
8141 }
8142
8143
8144 /* Check if two GENERIC targets are ambiguous and emit an error is they are.  */
8145
8146 static gfc_try
8147 check_generic_tbp_ambiguity (gfc_tbp_generic* t1, gfc_tbp_generic* t2,
8148                              const char* generic_name, locus where)
8149 {
8150   gfc_symbol* sym1;
8151   gfc_symbol* sym2;
8152
8153   gcc_assert (t1->specific && t2->specific);
8154   gcc_assert (!t1->specific->is_generic);
8155   gcc_assert (!t2->specific->is_generic);
8156
8157   sym1 = t1->specific->u.specific->n.sym;
8158   sym2 = t2->specific->u.specific->n.sym;
8159
8160   /* Both must be SUBROUTINEs or both must be FUNCTIONs.  */
8161   if (sym1->attr.subroutine != sym2->attr.subroutine
8162       || sym1->attr.function != sym2->attr.function)
8163     {
8164       gfc_error ("'%s' and '%s' can't be mixed FUNCTION/SUBROUTINE for"
8165                  " GENERIC '%s' at %L",
8166                  sym1->name, sym2->name, generic_name, &where);
8167       return FAILURE;
8168     }
8169
8170   /* Compare the interfaces.  */
8171   if (gfc_compare_interfaces (sym1, sym2, 1))
8172     {
8173       gfc_error ("'%s' and '%s' for GENERIC '%s' at %L are ambiguous",
8174                  sym1->name, sym2->name, generic_name, &where);
8175       return FAILURE;
8176     }
8177
8178   return SUCCESS;
8179 }
8180
8181
8182 /* Resolve a GENERIC procedure binding for a derived type.  */
8183
8184 static gfc_try
8185 resolve_typebound_generic (gfc_symbol* derived, gfc_symtree* st)
8186 {
8187   gfc_tbp_generic* target;
8188   gfc_symtree* first_target;
8189   gfc_symbol* super_type;
8190   gfc_symtree* inherited;
8191   locus where;
8192
8193   gcc_assert (st->typebound);
8194   gcc_assert (st->typebound->is_generic);
8195
8196   where = st->typebound->where;
8197   super_type = gfc_get_derived_super_type (derived);
8198
8199   /* Find the overridden binding if any.  */
8200   st->typebound->overridden = NULL;
8201   if (super_type)
8202     {
8203       gfc_symtree* overridden;
8204       overridden = gfc_find_typebound_proc (super_type, NULL, st->name, true);
8205
8206       if (overridden && overridden->typebound)
8207         st->typebound->overridden = overridden->typebound;
8208     }
8209
8210   /* Try to find the specific bindings for the symtrees in our target-list.  */
8211   gcc_assert (st->typebound->u.generic);
8212   for (target = st->typebound->u.generic; target; target = target->next)
8213     if (!target->specific)
8214       {
8215         gfc_typebound_proc* overridden_tbp;
8216         gfc_tbp_generic* g;
8217         const char* target_name;
8218
8219         target_name = target->specific_st->name;
8220
8221         /* Defined for this type directly.  */
8222         if (target->specific_st->typebound)
8223           {
8224             target->specific = target->specific_st->typebound;
8225             goto specific_found;
8226           }
8227
8228         /* Look for an inherited specific binding.  */
8229         if (super_type)
8230           {
8231             inherited = gfc_find_typebound_proc (super_type, NULL,
8232                                                  target_name, true);
8233
8234             if (inherited)
8235               {
8236                 gcc_assert (inherited->typebound);
8237                 target->specific = inherited->typebound;
8238                 goto specific_found;
8239               }
8240           }
8241
8242         gfc_error ("Undefined specific binding '%s' as target of GENERIC '%s'"
8243                    " at %L", target_name, st->name, &where);
8244         return FAILURE;
8245
8246         /* Once we've found the specific binding, check it is not ambiguous with
8247            other specifics already found or inherited for the same GENERIC.  */
8248 specific_found:
8249         gcc_assert (target->specific);
8250
8251         /* This must really be a specific binding!  */
8252         if (target->specific->is_generic)
8253           {
8254             gfc_error ("GENERIC '%s' at %L must target a specific binding,"
8255                        " '%s' is GENERIC, too", st->name, &where, target_name);
8256             return FAILURE;
8257           }
8258
8259         /* Check those already resolved on this type directly.  */
8260         for (g = st->typebound->u.generic; g; g = g->next)
8261           if (g != target && g->specific
8262               && check_generic_tbp_ambiguity (target, g, st->name, where)
8263                   == FAILURE)
8264             return FAILURE;
8265
8266         /* Check for ambiguity with inherited specific targets.  */
8267         for (overridden_tbp = st->typebound->overridden; overridden_tbp;
8268              overridden_tbp = overridden_tbp->overridden)
8269           if (overridden_tbp->is_generic)
8270             {
8271               for (g = overridden_tbp->u.generic; g; g = g->next)
8272                 {
8273                   gcc_assert (g->specific);
8274                   if (check_generic_tbp_ambiguity (target, g,
8275                                                    st->name, where) == FAILURE)
8276                     return FAILURE;
8277                 }
8278             }
8279       }
8280
8281   /* If we attempt to "overwrite" a specific binding, this is an error.  */
8282   if (st->typebound->overridden && !st->typebound->overridden->is_generic)
8283     {
8284       gfc_error ("GENERIC '%s' at %L can't overwrite specific binding with"
8285                  " the same name", st->name, &where);
8286       return FAILURE;
8287     }
8288
8289   /* Take the SUBROUTINE/FUNCTION attributes of the first specific target, as
8290      all must have the same attributes here.  */
8291   first_target = st->typebound->u.generic->specific->u.specific;
8292   st->typebound->subroutine = first_target->n.sym->attr.subroutine;
8293   st->typebound->function = first_target->n.sym->attr.function;
8294
8295   return SUCCESS;
8296 }
8297
8298
8299 /* Resolve the type-bound procedures for a derived type.  */
8300
8301 static gfc_symbol* resolve_bindings_derived;
8302 static gfc_try resolve_bindings_result;
8303
8304 static void
8305 resolve_typebound_procedure (gfc_symtree* stree)
8306 {
8307   gfc_symbol* proc;
8308   locus where;
8309   gfc_symbol* me_arg;
8310   gfc_symbol* super_type;
8311   gfc_component* comp;
8312
8313   /* If this is no type-bound procedure, just return.  */
8314   if (!stree->typebound)
8315     return;
8316
8317   /* If this is a GENERIC binding, use that routine.  */
8318   if (stree->typebound->is_generic)
8319     {
8320       if (resolve_typebound_generic (resolve_bindings_derived, stree)
8321             == FAILURE)
8322         goto error;
8323       return;
8324     }
8325
8326   /* Get the target-procedure to check it.  */
8327   gcc_assert (!stree->typebound->is_generic);
8328   gcc_assert (stree->typebound->u.specific);
8329   proc = stree->typebound->u.specific->n.sym;
8330   where = stree->typebound->where;
8331
8332   /* Default access should already be resolved from the parser.  */
8333   gcc_assert (stree->typebound->access != ACCESS_UNKNOWN);
8334
8335   /* It should be a module procedure or an external procedure with explicit
8336      interface.  */
8337   if ((!proc->attr.subroutine && !proc->attr.function)
8338       || (proc->attr.proc != PROC_MODULE
8339           && proc->attr.if_source != IFSRC_IFBODY)
8340       || proc->attr.abstract)
8341     {
8342       gfc_error ("'%s' must be a module procedure or an external procedure with"
8343                  " an explicit interface at %L", proc->name, &where);
8344       goto error;
8345     }
8346   stree->typebound->subroutine = proc->attr.subroutine;
8347   stree->typebound->function = proc->attr.function;
8348
8349   /* Find the super-type of the current derived type.  We could do this once and
8350      store in a global if speed is needed, but as long as not I believe this is
8351      more readable and clearer.  */
8352   super_type = gfc_get_derived_super_type (resolve_bindings_derived);
8353
8354   /* If PASS, resolve and check arguments if not already resolved / loaded
8355      from a .mod file.  */
8356   if (!stree->typebound->nopass && stree->typebound->pass_arg_num == 0)
8357     {
8358       if (stree->typebound->pass_arg)
8359         {
8360           gfc_formal_arglist* i;
8361
8362           /* If an explicit passing argument name is given, walk the arg-list
8363              and look for it.  */
8364
8365           me_arg = NULL;
8366           stree->typebound->pass_arg_num = 1;
8367           for (i = proc->formal; i; i = i->next)
8368             {
8369               if (!strcmp (i->sym->name, stree->typebound->pass_arg))
8370                 {
8371                   me_arg = i->sym;
8372                   break;
8373                 }
8374               ++stree->typebound->pass_arg_num;
8375             }
8376
8377           if (!me_arg)
8378             {
8379               gfc_error ("Procedure '%s' with PASS(%s) at %L has no"
8380                          " argument '%s'",
8381                          proc->name, stree->typebound->pass_arg, &where,
8382                          stree->typebound->pass_arg);
8383               goto error;
8384             }
8385         }
8386       else
8387         {
8388           /* Otherwise, take the first one; there should in fact be at least
8389              one.  */
8390           stree->typebound->pass_arg_num = 1;
8391           if (!proc->formal)
8392             {
8393               gfc_error ("Procedure '%s' with PASS at %L must have at"
8394                          " least one argument", proc->name, &where);
8395               goto error;
8396             }
8397           me_arg = proc->formal->sym;
8398         }
8399
8400       /* Now check that the argument-type matches.  */
8401       gcc_assert (me_arg);
8402       if (me_arg->ts.type != BT_DERIVED
8403           || me_arg->ts.derived != resolve_bindings_derived)
8404         {
8405           gfc_error ("Argument '%s' of '%s' with PASS(%s) at %L must be of"
8406                      " the derived-type '%s'", me_arg->name, proc->name,
8407                      me_arg->name, &where, resolve_bindings_derived->name);
8408           goto error;
8409         }
8410
8411       gfc_warning ("Polymorphic entities are not yet implemented,"
8412                    " non-polymorphic passed-object dummy argument of '%s'"
8413                    " at %L accepted", proc->name, &where);
8414     }
8415
8416   /* If we are extending some type, check that we don't override a procedure
8417      flagged NON_OVERRIDABLE.  */
8418   stree->typebound->overridden = NULL;
8419   if (super_type)
8420     {
8421       gfc_symtree* overridden;
8422       overridden = gfc_find_typebound_proc (super_type, NULL,
8423                                             stree->name, true);
8424
8425       if (overridden && overridden->typebound)
8426         stree->typebound->overridden = overridden->typebound;
8427
8428       if (overridden && check_typebound_override (stree, overridden) == FAILURE)
8429         goto error;
8430     }
8431
8432   /* See if there's a name collision with a component directly in this type.  */
8433   for (comp = resolve_bindings_derived->components; comp; comp = comp->next)
8434     if (!strcmp (comp->name, stree->name))
8435       {
8436         gfc_error ("Procedure '%s' at %L has the same name as a component of"
8437                    " '%s'",
8438                    stree->name, &where, resolve_bindings_derived->name);
8439         goto error;
8440       }
8441
8442   /* Try to find a name collision with an inherited component.  */
8443   if (super_type && gfc_find_component (super_type, stree->name, true, true))
8444     {
8445       gfc_error ("Procedure '%s' at %L has the same name as an inherited"
8446                  " component of '%s'",
8447                  stree->name, &where, resolve_bindings_derived->name);
8448       goto error;
8449     }
8450
8451   return;
8452
8453 error:
8454   resolve_bindings_result = FAILURE;
8455 }
8456
8457 static gfc_try
8458 resolve_typebound_procedures (gfc_symbol* derived)
8459 {
8460   if (!derived->f2k_derived || !derived->f2k_derived->sym_root)
8461     return SUCCESS;
8462
8463   resolve_bindings_derived = derived;
8464   resolve_bindings_result = SUCCESS;
8465   gfc_traverse_symtree (derived->f2k_derived->sym_root,
8466                         &resolve_typebound_procedure);
8467
8468   return resolve_bindings_result;
8469 }
8470
8471
8472 /* Add a derived type to the dt_list.  The dt_list is used in trans-types.c
8473    to give all identical derived types the same backend_decl.  */
8474 static void
8475 add_dt_to_dt_list (gfc_symbol *derived)
8476 {
8477   gfc_dt_list *dt_list;
8478
8479   for (dt_list = gfc_derived_types; dt_list; dt_list = dt_list->next)
8480     if (derived == dt_list->derived)
8481       break;
8482
8483   if (dt_list == NULL)
8484     {
8485       dt_list = gfc_get_dt_list ();
8486       dt_list->next = gfc_derived_types;
8487       dt_list->derived = derived;
8488       gfc_derived_types = dt_list;
8489     }
8490 }
8491
8492
8493 /* Resolve the components of a derived type.  */
8494
8495 static gfc_try
8496 resolve_fl_derived (gfc_symbol *sym)
8497 {
8498   gfc_symbol* super_type;
8499   gfc_component *c;
8500   int i;
8501
8502   super_type = gfc_get_derived_super_type (sym);
8503
8504   /* Ensure the extended type gets resolved before we do.  */
8505   if (super_type && resolve_fl_derived (super_type) == FAILURE)
8506     return FAILURE;
8507
8508   /* An ABSTRACT type must be extensible.  */
8509   if (sym->attr.abstract && (sym->attr.is_bind_c || sym->attr.sequence))
8510     {
8511       gfc_error ("Non-extensible derived-type '%s' at %L must not be ABSTRACT",
8512                  sym->name, &sym->declared_at);
8513       return FAILURE;
8514     }
8515
8516   for (c = sym->components; c != NULL; c = c->next)
8517     {
8518       /* Check type-spec if this is not the parent-type component.  */
8519       if ((!sym->attr.extension || c != sym->components)
8520           && resolve_typespec_used (&c->ts, &c->loc, c->name) == FAILURE)
8521         return FAILURE;
8522
8523       /* If this type is an extension, see if this component has the same name
8524          as an inherited type-bound procedure.  */
8525       if (super_type
8526           && gfc_find_typebound_proc (super_type, NULL, c->name, true))
8527         {
8528           gfc_error ("Component '%s' of '%s' at %L has the same name as an"
8529                      " inherited type-bound procedure",
8530                      c->name, sym->name, &c->loc);
8531           return FAILURE;
8532         }
8533
8534       if (c->ts.type == BT_CHARACTER)
8535         {
8536          if (c->ts.cl->length == NULL
8537              || (resolve_charlen (c->ts.cl) == FAILURE)
8538              || !gfc_is_constant_expr (c->ts.cl->length))
8539            {
8540              gfc_error ("Character length of component '%s' needs to "
8541                         "be a constant specification expression at %L",
8542                         c->name,
8543                         c->ts.cl->length ? &c->ts.cl->length->where : &c->loc);
8544              return FAILURE;
8545            }
8546         }
8547
8548       if (c->ts.type == BT_DERIVED
8549           && sym->component_access != ACCESS_PRIVATE
8550           && gfc_check_access (sym->attr.access, sym->ns->default_access)
8551           && !c->ts.derived->attr.use_assoc
8552           && !gfc_check_access (c->ts.derived->attr.access,
8553                                 c->ts.derived->ns->default_access))
8554         {
8555           gfc_error ("The component '%s' is a PRIVATE type and cannot be "
8556                      "a component of '%s', which is PUBLIC at %L",
8557                      c->name, sym->name, &sym->declared_at);
8558           return FAILURE;
8559         }
8560
8561       if (sym->attr.sequence)
8562         {
8563           if (c->ts.type == BT_DERIVED && c->ts.derived->attr.sequence == 0)
8564             {
8565               gfc_error ("Component %s of SEQUENCE type declared at %L does "
8566                          "not have the SEQUENCE attribute",
8567                          c->ts.derived->name, &sym->declared_at);
8568               return FAILURE;
8569             }
8570         }
8571
8572       if (c->ts.type == BT_DERIVED && c->attr.pointer
8573           && c->ts.derived->components == NULL
8574           && !c->ts.derived->attr.zero_comp)
8575         {
8576           gfc_error ("The pointer component '%s' of '%s' at %L is a type "
8577                      "that has not been declared", c->name, sym->name,
8578                      &c->loc);
8579           return FAILURE;
8580         }
8581
8582       /* Ensure that all the derived type components are put on the
8583          derived type list; even in formal namespaces, where derived type
8584          pointer components might not have been declared.  */
8585       if (c->ts.type == BT_DERIVED
8586             && c->ts.derived
8587             && c->ts.derived->components
8588             && c->attr.pointer
8589             && sym != c->ts.derived)
8590         add_dt_to_dt_list (c->ts.derived);
8591
8592       if (c->attr.pointer || c->attr.allocatable ||  c->as == NULL)
8593         continue;
8594
8595       for (i = 0; i < c->as->rank; i++)
8596         {
8597           if (c->as->lower[i] == NULL
8598               || (resolve_index_expr (c->as->lower[i]) == FAILURE)
8599               || !gfc_is_constant_expr (c->as->lower[i])
8600               || c->as->upper[i] == NULL
8601               || (resolve_index_expr (c->as->upper[i]) == FAILURE)
8602               || !gfc_is_constant_expr (c->as->upper[i]))
8603             {
8604               gfc_error ("Component '%s' of '%s' at %L must have "
8605                          "constant array bounds",
8606                          c->name, sym->name, &c->loc);
8607               return FAILURE;
8608             }
8609         }
8610     }
8611
8612   /* Resolve the type-bound procedures.  */
8613   if (resolve_typebound_procedures (sym) == FAILURE)
8614     return FAILURE;
8615
8616   /* Resolve the finalizer procedures.  */
8617   if (gfc_resolve_finalizers (sym) == FAILURE)
8618     return FAILURE;
8619
8620   /* Add derived type to the derived type list.  */
8621   add_dt_to_dt_list (sym);
8622
8623   return SUCCESS;
8624 }
8625
8626
8627 static gfc_try
8628 resolve_fl_namelist (gfc_symbol *sym)
8629 {
8630   gfc_namelist *nl;
8631   gfc_symbol *nlsym;
8632
8633   /* Reject PRIVATE objects in a PUBLIC namelist.  */
8634   if (gfc_check_access(sym->attr.access, sym->ns->default_access))
8635     {
8636       for (nl = sym->namelist; nl; nl = nl->next)
8637         {
8638           if (!nl->sym->attr.use_assoc
8639               && !(sym->ns->parent == nl->sym->ns)
8640               && !(sym->ns->parent
8641                    && sym->ns->parent->parent == nl->sym->ns)
8642               && !gfc_check_access(nl->sym->attr.access,
8643                                 nl->sym->ns->default_access))
8644             {
8645               gfc_error ("NAMELIST object '%s' was declared PRIVATE and "
8646                          "cannot be member of PUBLIC namelist '%s' at %L",
8647                          nl->sym->name, sym->name, &sym->declared_at);
8648               return FAILURE;
8649             }
8650
8651           /* Types with private components that came here by USE-association.  */
8652           if (nl->sym->ts.type == BT_DERIVED
8653               && derived_inaccessible (nl->sym->ts.derived))
8654             {
8655               gfc_error ("NAMELIST object '%s' has use-associated PRIVATE "
8656                          "components and cannot be member of namelist '%s' at %L",
8657                          nl->sym->name, sym->name, &sym->declared_at);
8658               return FAILURE;
8659             }
8660
8661           /* Types with private components that are defined in the same module.  */
8662           if (nl->sym->ts.type == BT_DERIVED
8663               && !(sym->ns->parent == nl->sym->ts.derived->ns)
8664               && !gfc_check_access (nl->sym->ts.derived->attr.private_comp
8665                                         ? ACCESS_PRIVATE : ACCESS_UNKNOWN,
8666                                         nl->sym->ns->default_access))
8667             {
8668               gfc_error ("NAMELIST object '%s' has PRIVATE components and "
8669                          "cannot be a member of PUBLIC namelist '%s' at %L",
8670                          nl->sym->name, sym->name, &sym->declared_at);
8671               return FAILURE;
8672             }
8673         }
8674     }
8675
8676   for (nl = sym->namelist; nl; nl = nl->next)
8677     {
8678       /* Reject namelist arrays of assumed shape.  */
8679       if (nl->sym->as && nl->sym->as->type == AS_ASSUMED_SHAPE
8680           && gfc_notify_std (GFC_STD_F2003, "NAMELIST array object '%s' "
8681                              "must not have assumed shape in namelist "
8682                              "'%s' at %L", nl->sym->name, sym->name,
8683                              &sym->declared_at) == FAILURE)
8684             return FAILURE;
8685
8686       /* Reject namelist arrays that are not constant shape.  */
8687       if (is_non_constant_shape_array (nl->sym))
8688         {
8689           gfc_error ("NAMELIST array object '%s' must have constant "
8690                      "shape in namelist '%s' at %L", nl->sym->name,
8691                      sym->name, &sym->declared_at);
8692           return FAILURE;
8693         }
8694
8695       /* Namelist objects cannot have allocatable or pointer components.  */
8696       if (nl->sym->ts.type != BT_DERIVED)
8697         continue;
8698
8699       if (nl->sym->ts.derived->attr.alloc_comp)
8700         {
8701           gfc_error ("NAMELIST object '%s' in namelist '%s' at %L cannot "
8702                      "have ALLOCATABLE components",
8703                      nl->sym->name, sym->name, &sym->declared_at);
8704           return FAILURE;
8705         }
8706
8707       if (nl->sym->ts.derived->attr.pointer_comp)
8708         {
8709           gfc_error ("NAMELIST object '%s' in namelist '%s' at %L cannot "
8710                      "have POINTER components", 
8711                      nl->sym->name, sym->name, &sym->declared_at);
8712           return FAILURE;
8713         }
8714     }
8715
8716
8717   /* 14.1.2 A module or internal procedure represent local entities
8718      of the same type as a namelist member and so are not allowed.  */
8719   for (nl = sym->namelist; nl; nl = nl->next)
8720     {
8721       if (nl->sym->ts.kind != 0 && nl->sym->attr.flavor == FL_VARIABLE)
8722         continue;
8723
8724       if (nl->sym->attr.function && nl->sym == nl->sym->result)
8725         if ((nl->sym == sym->ns->proc_name)
8726                ||
8727             (sym->ns->parent && nl->sym == sym->ns->parent->proc_name))
8728           continue;
8729
8730       nlsym = NULL;
8731       if (nl->sym && nl->sym->name)
8732         gfc_find_symbol (nl->sym->name, sym->ns, 1, &nlsym);
8733       if (nlsym && nlsym->attr.flavor == FL_PROCEDURE)
8734         {
8735           gfc_error ("PROCEDURE attribute conflicts with NAMELIST "
8736                      "attribute in '%s' at %L", nlsym->name,
8737                      &sym->declared_at);
8738           return FAILURE;
8739         }
8740     }
8741
8742   return SUCCESS;
8743 }
8744
8745
8746 static gfc_try
8747 resolve_fl_parameter (gfc_symbol *sym)
8748 {
8749   /* A parameter array's shape needs to be constant.  */
8750   if (sym->as != NULL 
8751       && (sym->as->type == AS_DEFERRED
8752           || is_non_constant_shape_array (sym)))
8753     {
8754       gfc_error ("Parameter array '%s' at %L cannot be automatic "
8755                  "or of deferred shape", sym->name, &sym->declared_at);
8756       return FAILURE;
8757     }
8758
8759   /* Make sure a parameter that has been implicitly typed still
8760      matches the implicit type, since PARAMETER statements can precede
8761      IMPLICIT statements.  */
8762   if (sym->attr.implicit_type
8763       && !gfc_compare_types (&sym->ts, gfc_get_default_type (sym, sym->ns)))
8764     {
8765       gfc_error ("Implicitly typed PARAMETER '%s' at %L doesn't match a "
8766                  "later IMPLICIT type", sym->name, &sym->declared_at);
8767       return FAILURE;
8768     }
8769
8770   /* Make sure the types of derived parameters are consistent.  This
8771      type checking is deferred until resolution because the type may
8772      refer to a derived type from the host.  */
8773   if (sym->ts.type == BT_DERIVED
8774       && !gfc_compare_types (&sym->ts, &sym->value->ts))
8775     {
8776       gfc_error ("Incompatible derived type in PARAMETER at %L",
8777                  &sym->value->where);
8778       return FAILURE;
8779     }
8780   return SUCCESS;
8781 }
8782
8783
8784 /* Do anything necessary to resolve a symbol.  Right now, we just
8785    assume that an otherwise unknown symbol is a variable.  This sort
8786    of thing commonly happens for symbols in module.  */
8787
8788 static void
8789 resolve_symbol (gfc_symbol *sym)
8790 {
8791   int check_constant, mp_flag;
8792   gfc_symtree *symtree;
8793   gfc_symtree *this_symtree;
8794   gfc_namespace *ns;
8795   gfc_component *c;
8796
8797   if (sym->attr.flavor == FL_UNKNOWN)
8798     {
8799
8800     /* If we find that a flavorless symbol is an interface in one of the
8801        parent namespaces, find its symtree in this namespace, free the
8802        symbol and set the symtree to point to the interface symbol.  */
8803       for (ns = gfc_current_ns->parent; ns; ns = ns->parent)
8804         {
8805           symtree = gfc_find_symtree (ns->sym_root, sym->name);
8806           if (symtree && symtree->n.sym->generic)
8807             {
8808               this_symtree = gfc_find_symtree (gfc_current_ns->sym_root,
8809                                                sym->name);
8810               sym->refs--;
8811               if (!sym->refs)
8812                 gfc_free_symbol (sym);
8813               symtree->n.sym->refs++;
8814               this_symtree->n.sym = symtree->n.sym;
8815               return;
8816             }
8817         }
8818
8819       /* Otherwise give it a flavor according to such attributes as
8820          it has.  */
8821       if (sym->attr.external == 0 && sym->attr.intrinsic == 0)
8822         sym->attr.flavor = FL_VARIABLE;
8823       else
8824         {
8825           sym->attr.flavor = FL_PROCEDURE;
8826           if (sym->attr.dimension)
8827             sym->attr.function = 1;
8828         }
8829     }
8830
8831   if (sym->attr.procedure && sym->ts.interface
8832       && sym->attr.if_source != IFSRC_DECL)
8833     {
8834       if (sym->ts.interface->attr.procedure)
8835         gfc_error ("Interface '%s', used by procedure '%s' at %L, is declared "
8836                    "in a later PROCEDURE statement", sym->ts.interface->name,
8837                    sym->name,&sym->declared_at);
8838
8839       /* Get the attributes from the interface (now resolved).  */
8840       if (sym->ts.interface->attr.if_source || sym->ts.interface->attr.intrinsic)
8841         {
8842           gfc_symbol *ifc = sym->ts.interface;
8843           sym->ts = ifc->ts;
8844           sym->ts.interface = ifc;
8845           sym->attr.function = ifc->attr.function;
8846           sym->attr.subroutine = ifc->attr.subroutine;
8847           sym->attr.allocatable = ifc->attr.allocatable;
8848           sym->attr.pointer = ifc->attr.pointer;
8849           sym->attr.pure = ifc->attr.pure;
8850           sym->attr.elemental = ifc->attr.elemental;
8851           sym->attr.dimension = ifc->attr.dimension;
8852           sym->attr.recursive = ifc->attr.recursive;
8853           sym->attr.always_explicit = ifc->attr.always_explicit;
8854           sym->as = gfc_copy_array_spec (ifc->as);
8855           copy_formal_args (sym, ifc);
8856         }
8857       else if (sym->ts.interface->name[0] != '\0')
8858         {
8859           gfc_error ("Interface '%s' of procedure '%s' at %L must be explicit",
8860                     sym->ts.interface->name, sym->name, &sym->declared_at);
8861           return;
8862         }
8863     }
8864
8865   if (sym->attr.flavor == FL_DERIVED && resolve_fl_derived (sym) == FAILURE)
8866     return;
8867
8868   /* Symbols that are module procedures with results (functions) have
8869      the types and array specification copied for type checking in
8870      procedures that call them, as well as for saving to a module
8871      file.  These symbols can't stand the scrutiny that their results
8872      can.  */
8873   mp_flag = (sym->result != NULL && sym->result != sym);
8874
8875
8876   /* Make sure that the intrinsic is consistent with its internal 
8877      representation. This needs to be done before assigning a default 
8878      type to avoid spurious warnings.  */
8879   if (sym->attr.flavor != FL_MODULE && sym->attr.intrinsic)
8880     {
8881       gfc_intrinsic_sym* isym;
8882       const char* symstd;
8883
8884       /* We already know this one is an intrinsic, so we don't call
8885          gfc_is_intrinsic for full checking but rather use gfc_find_function and
8886          gfc_find_subroutine directly to check whether it is a function or
8887          subroutine.  */
8888
8889       if ((isym = gfc_find_function (sym->name)))
8890         {
8891           if (sym->ts.type != BT_UNKNOWN && gfc_option.warn_surprising)
8892             gfc_warning ("Type specified for intrinsic function '%s' at %L is"
8893                          " ignored", sym->name, &sym->declared_at);
8894         }
8895       else if ((isym = gfc_find_subroutine (sym->name)))
8896         {
8897           if (sym->ts.type != BT_UNKNOWN)
8898             {
8899               gfc_error ("Intrinsic subroutine '%s' at %L shall not have a type"
8900                          " specifier", sym->name, &sym->declared_at);
8901               return;
8902             }
8903         }
8904       else
8905         {
8906           gfc_error ("'%s' declared INTRINSIC at %L does not exist",
8907                      sym->name, &sym->declared_at);
8908           return;
8909         }
8910
8911       /* Check it is actually available in the standard settings.  */
8912       if (gfc_check_intrinsic_standard (isym, &symstd, false, sym->declared_at)
8913             == FAILURE)
8914         {
8915           gfc_error ("The intrinsic '%s' declared INTRINSIC at %L is not"
8916                      " available in the current standard settings but %s.  Use"
8917                      " an appropriate -std=* option or enable -fall-intrinsics"
8918                      " in order to use it.",
8919                      sym->name, &sym->declared_at, symstd);
8920           return;
8921         }
8922      }
8923
8924   /* Assign default type to symbols that need one and don't have one.  */
8925   if (sym->ts.type == BT_UNKNOWN)
8926     {
8927       if (sym->attr.flavor == FL_VARIABLE || sym->attr.flavor == FL_PARAMETER)
8928         gfc_set_default_type (sym, 1, NULL);
8929
8930       if (sym->attr.flavor == FL_PROCEDURE && sym->attr.function)
8931         {
8932           /* The specific case of an external procedure should emit an error
8933              in the case that there is no implicit type.  */
8934           if (!mp_flag)
8935             gfc_set_default_type (sym, sym->attr.external, NULL);
8936           else
8937             {
8938               /* Result may be in another namespace.  */
8939               resolve_symbol (sym->result);
8940
8941               sym->ts = sym->result->ts;
8942               sym->as = gfc_copy_array_spec (sym->result->as);
8943               sym->attr.dimension = sym->result->attr.dimension;
8944               sym->attr.pointer = sym->result->attr.pointer;
8945               sym->attr.allocatable = sym->result->attr.allocatable;
8946             }
8947         }
8948     }
8949
8950   /* Assumed size arrays and assumed shape arrays must be dummy
8951      arguments.  */
8952
8953   if (sym->as != NULL
8954       && (sym->as->type == AS_ASSUMED_SIZE
8955           || sym->as->type == AS_ASSUMED_SHAPE)
8956       && sym->attr.dummy == 0)
8957     {
8958       if (sym->as->type == AS_ASSUMED_SIZE)
8959         gfc_error ("Assumed size array at %L must be a dummy argument",
8960                    &sym->declared_at);
8961       else
8962         gfc_error ("Assumed shape array at %L must be a dummy argument",
8963                    &sym->declared_at);
8964       return;
8965     }
8966
8967   /* Make sure symbols with known intent or optional are really dummy
8968      variable.  Because of ENTRY statement, this has to be deferred
8969      until resolution time.  */
8970
8971   if (!sym->attr.dummy
8972       && (sym->attr.optional || sym->attr.intent != INTENT_UNKNOWN))
8973     {
8974       gfc_error ("Symbol at %L is not a DUMMY variable", &sym->declared_at);
8975       return;
8976     }
8977
8978   if (sym->attr.value && !sym->attr.dummy)
8979     {
8980       gfc_error ("'%s' at %L cannot have the VALUE attribute because "
8981                  "it is not a dummy argument", sym->name, &sym->declared_at);
8982       return;
8983     }
8984
8985   if (sym->attr.value && sym->ts.type == BT_CHARACTER)
8986     {
8987       gfc_charlen *cl = sym->ts.cl;
8988       if (!cl || !cl->length || cl->length->expr_type != EXPR_CONSTANT)
8989         {
8990           gfc_error ("Character dummy variable '%s' at %L with VALUE "
8991                      "attribute must have constant length",
8992                      sym->name, &sym->declared_at);
8993           return;
8994         }
8995
8996       if (sym->ts.is_c_interop
8997           && mpz_cmp_si (cl->length->value.integer, 1) != 0)
8998         {
8999           gfc_error ("C interoperable character dummy variable '%s' at %L "
9000                      "with VALUE attribute must have length one",
9001                      sym->name, &sym->declared_at);
9002           return;
9003         }
9004     }
9005
9006   /* If the symbol is marked as bind(c), verify it's type and kind.  Do not
9007      do this for something that was implicitly typed because that is handled
9008      in gfc_set_default_type.  Handle dummy arguments and procedure
9009      definitions separately.  Also, anything that is use associated is not
9010      handled here but instead is handled in the module it is declared in.
9011      Finally, derived type definitions are allowed to be BIND(C) since that
9012      only implies that they're interoperable, and they are checked fully for
9013      interoperability when a variable is declared of that type.  */
9014   if (sym->attr.is_bind_c && sym->attr.implicit_type == 0 &&
9015       sym->attr.use_assoc == 0 && sym->attr.dummy == 0 &&
9016       sym->attr.flavor != FL_PROCEDURE && sym->attr.flavor != FL_DERIVED)
9017     {
9018       gfc_try t = SUCCESS;
9019       
9020       /* First, make sure the variable is declared at the
9021          module-level scope (J3/04-007, Section 15.3).  */
9022       if (sym->ns->proc_name->attr.flavor != FL_MODULE &&
9023           sym->attr.in_common == 0)
9024         {
9025           gfc_error ("Variable '%s' at %L cannot be BIND(C) because it "
9026                      "is neither a COMMON block nor declared at the "
9027                      "module level scope", sym->name, &(sym->declared_at));
9028           t = FAILURE;
9029         }
9030       else if (sym->common_head != NULL)
9031         {
9032           t = verify_com_block_vars_c_interop (sym->common_head);
9033         }
9034       else
9035         {
9036           /* If type() declaration, we need to verify that the components
9037              of the given type are all C interoperable, etc.  */
9038           if (sym->ts.type == BT_DERIVED &&
9039               sym->ts.derived->attr.is_c_interop != 1)
9040             {
9041               /* Make sure the user marked the derived type as BIND(C).  If
9042                  not, call the verify routine.  This could print an error
9043                  for the derived type more than once if multiple variables
9044                  of that type are declared.  */
9045               if (sym->ts.derived->attr.is_bind_c != 1)
9046                 verify_bind_c_derived_type (sym->ts.derived);
9047               t = FAILURE;
9048             }
9049           
9050           /* Verify the variable itself as C interoperable if it
9051              is BIND(C).  It is not possible for this to succeed if
9052              the verify_bind_c_derived_type failed, so don't have to handle
9053              any error returned by verify_bind_c_derived_type.  */
9054           t = verify_bind_c_sym (sym, &(sym->ts), sym->attr.in_common,
9055                                  sym->common_block);
9056         }
9057
9058       if (t == FAILURE)
9059         {
9060           /* clear the is_bind_c flag to prevent reporting errors more than
9061              once if something failed.  */
9062           sym->attr.is_bind_c = 0;
9063           return;
9064         }
9065     }
9066
9067   /* If a derived type symbol has reached this point, without its
9068      type being declared, we have an error.  Notice that most
9069      conditions that produce undefined derived types have already
9070      been dealt with.  However, the likes of:
9071      implicit type(t) (t) ..... call foo (t) will get us here if
9072      the type is not declared in the scope of the implicit
9073      statement. Change the type to BT_UNKNOWN, both because it is so
9074      and to prevent an ICE.  */
9075   if (sym->ts.type == BT_DERIVED && sym->ts.derived->components == NULL
9076       && !sym->ts.derived->attr.zero_comp)
9077     {
9078       gfc_error ("The derived type '%s' at %L is of type '%s', "
9079                  "which has not been defined", sym->name,
9080                   &sym->declared_at, sym->ts.derived->name);
9081       sym->ts.type = BT_UNKNOWN;
9082       return;
9083     }
9084
9085   /* Make sure that the derived type has been resolved and that the
9086      derived type is visible in the symbol's namespace, if it is a
9087      module function and is not PRIVATE.  */
9088   if (sym->ts.type == BT_DERIVED
9089         && sym->ts.derived->attr.use_assoc
9090         && sym->ns->proc_name->attr.flavor == FL_MODULE)
9091     {
9092       gfc_symbol *ds;
9093
9094       if (resolve_fl_derived (sym->ts.derived) == FAILURE)
9095         return;
9096
9097       gfc_find_symbol (sym->ts.derived->name, sym->ns, 1, &ds);
9098       if (!ds && sym->attr.function
9099             && gfc_check_access (sym->attr.access, sym->ns->default_access))
9100         {
9101           symtree = gfc_new_symtree (&sym->ns->sym_root,
9102                                      sym->ts.derived->name);
9103           symtree->n.sym = sym->ts.derived;
9104           sym->ts.derived->refs++;
9105         }
9106     }
9107
9108   /* Unless the derived-type declaration is use associated, Fortran 95
9109      does not allow public entries of private derived types.
9110      See 4.4.1 (F95) and 4.5.1.1 (F2003); and related interpretation
9111      161 in 95-006r3.  */
9112   if (sym->ts.type == BT_DERIVED
9113       && sym->ns->proc_name && sym->ns->proc_name->attr.flavor == FL_MODULE
9114       && !sym->ts.derived->attr.use_assoc
9115       && gfc_check_access (sym->attr.access, sym->ns->default_access)
9116       && !gfc_check_access (sym->ts.derived->attr.access,
9117                             sym->ts.derived->ns->default_access)
9118       && gfc_notify_std (GFC_STD_F2003, "Fortran 2003: PUBLIC %s '%s' at %L "
9119                          "of PRIVATE derived type '%s'",
9120                          (sym->attr.flavor == FL_PARAMETER) ? "parameter"
9121                          : "variable", sym->name, &sym->declared_at,
9122                          sym->ts.derived->name) == FAILURE)
9123     return;
9124
9125   /* An assumed-size array with INTENT(OUT) shall not be of a type for which
9126      default initialization is defined (5.1.2.4.4).  */
9127   if (sym->ts.type == BT_DERIVED
9128       && sym->attr.dummy
9129       && sym->attr.intent == INTENT_OUT
9130       && sym->as
9131       && sym->as->type == AS_ASSUMED_SIZE)
9132     {
9133       for (c = sym->ts.derived->components; c; c = c->next)
9134         {
9135           if (c->initializer)
9136             {
9137               gfc_error ("The INTENT(OUT) dummy argument '%s' at %L is "
9138                          "ASSUMED SIZE and so cannot have a default initializer",
9139                          sym->name, &sym->declared_at);
9140               return;
9141             }
9142         }
9143     }
9144
9145   switch (sym->attr.flavor)
9146     {
9147     case FL_VARIABLE:
9148       if (resolve_fl_variable (sym, mp_flag) == FAILURE)
9149         return;
9150       break;
9151
9152     case FL_PROCEDURE:
9153       if (resolve_fl_procedure (sym, mp_flag) == FAILURE)
9154         return;
9155       break;
9156
9157     case FL_NAMELIST:
9158       if (resolve_fl_namelist (sym) == FAILURE)
9159         return;
9160       break;
9161
9162     case FL_PARAMETER:
9163       if (resolve_fl_parameter (sym) == FAILURE)
9164         return;
9165       break;
9166
9167     default:
9168       break;
9169     }
9170
9171   /* Resolve array specifier. Check as well some constraints
9172      on COMMON blocks.  */
9173
9174   check_constant = sym->attr.in_common && !sym->attr.pointer;
9175
9176   /* Set the formal_arg_flag so that check_conflict will not throw
9177      an error for host associated variables in the specification
9178      expression for an array_valued function.  */
9179   if (sym->attr.function && sym->as)
9180     formal_arg_flag = 1;
9181
9182   gfc_resolve_array_spec (sym->as, check_constant);
9183
9184   formal_arg_flag = 0;
9185
9186   /* Resolve formal namespaces.  */
9187   if (sym->formal_ns && sym->formal_ns != gfc_current_ns)
9188     gfc_resolve (sym->formal_ns);
9189
9190   /* Check threadprivate restrictions.  */
9191   if (sym->attr.threadprivate && !sym->attr.save && !sym->ns->save_all
9192       && (!sym->attr.in_common
9193           && sym->module == NULL
9194           && (sym->ns->proc_name == NULL
9195               || sym->ns->proc_name->attr.flavor != FL_MODULE)))
9196     gfc_error ("Threadprivate at %L isn't SAVEd", &sym->declared_at);
9197
9198   /* If we have come this far we can apply default-initializers, as
9199      described in 14.7.5, to those variables that have not already
9200      been assigned one.  */
9201   if (sym->ts.type == BT_DERIVED
9202       && sym->attr.referenced
9203       && sym->ns == gfc_current_ns
9204       && !sym->value
9205       && !sym->attr.allocatable
9206       && !sym->attr.alloc_comp)
9207     {
9208       symbol_attribute *a = &sym->attr;
9209
9210       if ((!a->save && !a->dummy && !a->pointer
9211            && !a->in_common && !a->use_assoc
9212            && !(a->function && sym != sym->result))
9213           || (a->dummy && a->intent == INTENT_OUT))
9214         apply_default_init (sym);
9215     }
9216
9217   /* If this symbol has a type-spec, check it.  */
9218   if (sym->attr.flavor == FL_VARIABLE || sym->attr.flavor == FL_PARAMETER
9219       || (sym->attr.flavor == FL_PROCEDURE && sym->attr.function))
9220     if (resolve_typespec_used (&sym->ts, &sym->declared_at, sym->name)
9221           == FAILURE)
9222       return;
9223 }
9224
9225
9226 /************* Resolve DATA statements *************/
9227
9228 static struct
9229 {
9230   gfc_data_value *vnode;
9231   mpz_t left;
9232 }
9233 values;
9234
9235
9236 /* Advance the values structure to point to the next value in the data list.  */
9237
9238 static gfc_try
9239 next_data_value (void)
9240 {
9241
9242   while (mpz_cmp_ui (values.left, 0) == 0)
9243     {
9244       if (values.vnode->next == NULL)
9245         return FAILURE;
9246
9247       values.vnode = values.vnode->next;
9248       mpz_set (values.left, values.vnode->repeat);
9249     }
9250
9251   return SUCCESS;
9252 }
9253
9254
9255 static gfc_try
9256 check_data_variable (gfc_data_variable *var, locus *where)
9257 {
9258   gfc_expr *e;
9259   mpz_t size;
9260   mpz_t offset;
9261   gfc_try t;
9262   ar_type mark = AR_UNKNOWN;
9263   int i;
9264   mpz_t section_index[GFC_MAX_DIMENSIONS];
9265   gfc_ref *ref;
9266   gfc_array_ref *ar;
9267
9268   if (gfc_resolve_expr (var->expr) == FAILURE)
9269     return FAILURE;
9270
9271   ar = NULL;
9272   mpz_init_set_si (offset, 0);
9273   e = var->expr;
9274
9275   if (e->expr_type != EXPR_VARIABLE)
9276     gfc_internal_error ("check_data_variable(): Bad expression");
9277
9278   if (e->symtree->n.sym->ns->is_block_data
9279       && !e->symtree->n.sym->attr.in_common)
9280     {
9281       gfc_error ("BLOCK DATA element '%s' at %L must be in COMMON",
9282                  e->symtree->n.sym->name, &e->symtree->n.sym->declared_at);
9283     }
9284
9285   if (e->ref == NULL && e->symtree->n.sym->as)
9286     {
9287       gfc_error ("DATA array '%s' at %L must be specified in a previous"
9288                  " declaration", e->symtree->n.sym->name, where);
9289       return FAILURE;
9290     }
9291
9292   if (e->rank == 0)
9293     {
9294       mpz_init_set_ui (size, 1);
9295       ref = NULL;
9296     }
9297   else
9298     {
9299       ref = e->ref;
9300
9301       /* Find the array section reference.  */
9302       for (ref = e->ref; ref; ref = ref->next)
9303         {
9304           if (ref->type != REF_ARRAY)
9305             continue;
9306           if (ref->u.ar.type == AR_ELEMENT)
9307             continue;
9308           break;
9309         }
9310       gcc_assert (ref);
9311
9312       /* Set marks according to the reference pattern.  */
9313       switch (ref->u.ar.type)
9314         {
9315         case AR_FULL:
9316           mark = AR_FULL;
9317           break;
9318
9319         case AR_SECTION:
9320           ar = &ref->u.ar;
9321           /* Get the start position of array section.  */
9322           gfc_get_section_index (ar, section_index, &offset);
9323           mark = AR_SECTION;
9324           break;
9325
9326         default:
9327           gcc_unreachable ();
9328         }
9329
9330       if (gfc_array_size (e, &size) == FAILURE)
9331         {
9332           gfc_error ("Nonconstant array section at %L in DATA statement",
9333                      &e->where);
9334           mpz_clear (offset);
9335           return FAILURE;
9336         }
9337     }
9338
9339   t = SUCCESS;
9340
9341   while (mpz_cmp_ui (size, 0) > 0)
9342     {
9343       if (next_data_value () == FAILURE)
9344         {
9345           gfc_error ("DATA statement at %L has more variables than values",
9346                      where);
9347           t = FAILURE;
9348           break;
9349         }
9350
9351       t = gfc_check_assign (var->expr, values.vnode->expr, 0);
9352       if (t == FAILURE)
9353         break;
9354
9355       /* If we have more than one element left in the repeat count,
9356          and we have more than one element left in the target variable,
9357          then create a range assignment.  */
9358       /* FIXME: Only done for full arrays for now, since array sections
9359          seem tricky.  */
9360       if (mark == AR_FULL && ref && ref->next == NULL
9361           && mpz_cmp_ui (values.left, 1) > 0 && mpz_cmp_ui (size, 1) > 0)
9362         {
9363           mpz_t range;
9364
9365           if (mpz_cmp (size, values.left) >= 0)
9366             {
9367               mpz_init_set (range, values.left);
9368               mpz_sub (size, size, values.left);
9369               mpz_set_ui (values.left, 0);
9370             }
9371           else
9372             {
9373               mpz_init_set (range, size);
9374               mpz_sub (values.left, values.left, size);
9375               mpz_set_ui (size, 0);
9376             }
9377
9378           gfc_assign_data_value_range (var->expr, values.vnode->expr,
9379                                        offset, range);
9380
9381           mpz_add (offset, offset, range);
9382           mpz_clear (range);
9383         }
9384
9385       /* Assign initial value to symbol.  */
9386       else
9387         {
9388           mpz_sub_ui (values.left, values.left, 1);
9389           mpz_sub_ui (size, size, 1);
9390
9391           t = gfc_assign_data_value (var->expr, values.vnode->expr, offset);
9392           if (t == FAILURE)
9393             break;
9394
9395           if (mark == AR_FULL)
9396             mpz_add_ui (offset, offset, 1);
9397
9398           /* Modify the array section indexes and recalculate the offset
9399              for next element.  */
9400           else if (mark == AR_SECTION)
9401             gfc_advance_section (section_index, ar, &offset);
9402         }
9403     }
9404
9405   if (mark == AR_SECTION)
9406     {
9407       for (i = 0; i < ar->dimen; i++)
9408         mpz_clear (section_index[i]);
9409     }
9410
9411   mpz_clear (size);
9412   mpz_clear (offset);
9413
9414   return t;
9415 }
9416
9417
9418 static gfc_try traverse_data_var (gfc_data_variable *, locus *);
9419
9420 /* Iterate over a list of elements in a DATA statement.  */
9421
9422 static gfc_try
9423 traverse_data_list (gfc_data_variable *var, locus *where)
9424 {
9425   mpz_t trip;
9426   iterator_stack frame;
9427   gfc_expr *e, *start, *end, *step;
9428   gfc_try retval = SUCCESS;
9429
9430   mpz_init (frame.value);
9431
9432   start = gfc_copy_expr (var->iter.start);
9433   end = gfc_copy_expr (var->iter.end);
9434   step = gfc_copy_expr (var->iter.step);
9435
9436   if (gfc_simplify_expr (start, 1) == FAILURE
9437       || start->expr_type != EXPR_CONSTANT)
9438     {
9439       gfc_error ("iterator start at %L does not simplify", &start->where);
9440       retval = FAILURE;
9441       goto cleanup;
9442     }
9443   if (gfc_simplify_expr (end, 1) == FAILURE
9444       || end->expr_type != EXPR_CONSTANT)
9445     {
9446       gfc_error ("iterator end at %L does not simplify", &end->where);
9447       retval = FAILURE;
9448       goto cleanup;
9449     }
9450   if (gfc_simplify_expr (step, 1) == FAILURE
9451       || step->expr_type != EXPR_CONSTANT)
9452     {
9453       gfc_error ("iterator step at %L does not simplify", &step->where);
9454       retval = FAILURE;
9455       goto cleanup;
9456     }
9457
9458   mpz_init_set (trip, end->value.integer);
9459   mpz_sub (trip, trip, start->value.integer);
9460   mpz_add (trip, trip, step->value.integer);
9461
9462   mpz_div (trip, trip, step->value.integer);
9463
9464   mpz_set (frame.value, start->value.integer);
9465
9466   frame.prev = iter_stack;
9467   frame.variable = var->iter.var->symtree;
9468   iter_stack = &frame;
9469
9470   while (mpz_cmp_ui (trip, 0) > 0)
9471     {
9472       if (traverse_data_var (var->list, where) == FAILURE)
9473         {
9474           mpz_clear (trip);
9475           retval = FAILURE;
9476           goto cleanup;
9477         }
9478
9479       e = gfc_copy_expr (var->expr);
9480       if (gfc_simplify_expr (e, 1) == FAILURE)
9481         {
9482           gfc_free_expr (e);
9483           mpz_clear (trip);
9484           retval = FAILURE;
9485           goto cleanup;
9486         }
9487
9488       mpz_add (frame.value, frame.value, step->value.integer);
9489
9490       mpz_sub_ui (trip, trip, 1);
9491     }
9492
9493   mpz_clear (trip);
9494 cleanup:
9495   mpz_clear (frame.value);
9496
9497   gfc_free_expr (start);
9498   gfc_free_expr (end);
9499   gfc_free_expr (step);
9500
9501   iter_stack = frame.prev;
9502   return retval;
9503 }
9504
9505
9506 /* Type resolve variables in the variable list of a DATA statement.  */
9507
9508 static gfc_try
9509 traverse_data_var (gfc_data_variable *var, locus *where)
9510 {
9511   gfc_try t;
9512
9513   for (; var; var = var->next)
9514     {
9515       if (var->expr == NULL)
9516         t = traverse_data_list (var, where);
9517       else
9518         t = check_data_variable (var, where);
9519
9520       if (t == FAILURE)
9521         return FAILURE;
9522     }
9523
9524   return SUCCESS;
9525 }
9526
9527
9528 /* Resolve the expressions and iterators associated with a data statement.
9529    This is separate from the assignment checking because data lists should
9530    only be resolved once.  */
9531
9532 static gfc_try
9533 resolve_data_variables (gfc_data_variable *d)
9534 {
9535   for (; d; d = d->next)
9536     {
9537       if (d->list == NULL)
9538         {
9539           if (gfc_resolve_expr (d->expr) == FAILURE)
9540             return FAILURE;
9541         }
9542       else
9543         {
9544           if (gfc_resolve_iterator (&d->iter, false) == FAILURE)
9545             return FAILURE;
9546
9547           if (resolve_data_variables (d->list) == FAILURE)
9548             return FAILURE;
9549         }
9550     }
9551
9552   return SUCCESS;
9553 }
9554
9555
9556 /* Resolve a single DATA statement.  We implement this by storing a pointer to
9557    the value list into static variables, and then recursively traversing the
9558    variables list, expanding iterators and such.  */
9559
9560 static void
9561 resolve_data (gfc_data *d)
9562 {
9563
9564   if (resolve_data_variables (d->var) == FAILURE)
9565     return;
9566
9567   values.vnode = d->value;
9568   if (d->value == NULL)
9569     mpz_set_ui (values.left, 0);
9570   else
9571     mpz_set (values.left, d->value->repeat);
9572
9573   if (traverse_data_var (d->var, &d->where) == FAILURE)
9574     return;
9575
9576   /* At this point, we better not have any values left.  */
9577
9578   if (next_data_value () == SUCCESS)
9579     gfc_error ("DATA statement at %L has more values than variables",
9580                &d->where);
9581 }
9582
9583
9584 /* 12.6 Constraint: In a pure subprogram any variable which is in common or
9585    accessed by host or use association, is a dummy argument to a pure function,
9586    is a dummy argument with INTENT (IN) to a pure subroutine, or an object that
9587    is storage associated with any such variable, shall not be used in the
9588    following contexts: (clients of this function).  */
9589
9590 /* Determines if a variable is not 'pure', i.e., not assignable within a pure
9591    procedure.  Returns zero if assignment is OK, nonzero if there is a
9592    problem.  */
9593 int
9594 gfc_impure_variable (gfc_symbol *sym)
9595 {
9596   gfc_symbol *proc;
9597
9598   if (sym->attr.use_assoc || sym->attr.in_common)
9599     return 1;
9600
9601   if (sym->ns != gfc_current_ns)
9602     return !sym->attr.function;
9603
9604   proc = sym->ns->proc_name;
9605   if (sym->attr.dummy && gfc_pure (proc)
9606         && ((proc->attr.subroutine && sym->attr.intent == INTENT_IN)
9607                 ||
9608              proc->attr.function))
9609     return 1;
9610
9611   /* TODO: Sort out what can be storage associated, if anything, and include
9612      it here.  In principle equivalences should be scanned but it does not
9613      seem to be possible to storage associate an impure variable this way.  */
9614   return 0;
9615 }
9616
9617
9618 /* Test whether a symbol is pure or not.  For a NULL pointer, checks the
9619    symbol of the current procedure.  */
9620
9621 int
9622 gfc_pure (gfc_symbol *sym)
9623 {
9624   symbol_attribute attr;
9625
9626   if (sym == NULL)
9627     sym = gfc_current_ns->proc_name;
9628   if (sym == NULL)
9629     return 0;
9630
9631   attr = sym->attr;
9632
9633   return attr.flavor == FL_PROCEDURE && (attr.pure || attr.elemental);
9634 }
9635
9636
9637 /* Test whether the current procedure is elemental or not.  */
9638
9639 int
9640 gfc_elemental (gfc_symbol *sym)
9641 {
9642   symbol_attribute attr;
9643
9644   if (sym == NULL)
9645     sym = gfc_current_ns->proc_name;
9646   if (sym == NULL)
9647     return 0;
9648   attr = sym->attr;
9649
9650   return attr.flavor == FL_PROCEDURE && attr.elemental;
9651 }
9652
9653
9654 /* Warn about unused labels.  */
9655
9656 static void
9657 warn_unused_fortran_label (gfc_st_label *label)
9658 {
9659   if (label == NULL)
9660     return;
9661
9662   warn_unused_fortran_label (label->left);
9663
9664   if (label->defined == ST_LABEL_UNKNOWN)
9665     return;
9666
9667   switch (label->referenced)
9668     {
9669     case ST_LABEL_UNKNOWN:
9670       gfc_warning ("Label %d at %L defined but not used", label->value,
9671                    &label->where);
9672       break;
9673
9674     case ST_LABEL_BAD_TARGET:
9675       gfc_warning ("Label %d at %L defined but cannot be used",
9676                    label->value, &label->where);
9677       break;
9678
9679     default:
9680       break;
9681     }
9682
9683   warn_unused_fortran_label (label->right);
9684 }
9685
9686
9687 /* Returns the sequence type of a symbol or sequence.  */
9688
9689 static seq_type
9690 sequence_type (gfc_typespec ts)
9691 {
9692   seq_type result;
9693   gfc_component *c;
9694
9695   switch (ts.type)
9696   {
9697     case BT_DERIVED:
9698
9699       if (ts.derived->components == NULL)
9700         return SEQ_NONDEFAULT;
9701
9702       result = sequence_type (ts.derived->components->ts);
9703       for (c = ts.derived->components->next; c; c = c->next)
9704         if (sequence_type (c->ts) != result)
9705           return SEQ_MIXED;
9706
9707       return result;
9708
9709     case BT_CHARACTER:
9710       if (ts.kind != gfc_default_character_kind)
9711           return SEQ_NONDEFAULT;
9712
9713       return SEQ_CHARACTER;
9714
9715     case BT_INTEGER:
9716       if (ts.kind != gfc_default_integer_kind)
9717           return SEQ_NONDEFAULT;
9718
9719       return SEQ_NUMERIC;
9720
9721     case BT_REAL:
9722       if (!(ts.kind == gfc_default_real_kind
9723             || ts.kind == gfc_default_double_kind))
9724           return SEQ_NONDEFAULT;
9725
9726       return SEQ_NUMERIC;
9727
9728     case BT_COMPLEX:
9729       if (ts.kind != gfc_default_complex_kind)
9730           return SEQ_NONDEFAULT;
9731
9732       return SEQ_NUMERIC;
9733
9734     case BT_LOGICAL:
9735       if (ts.kind != gfc_default_logical_kind)
9736           return SEQ_NONDEFAULT;
9737
9738       return SEQ_NUMERIC;
9739
9740     default:
9741       return SEQ_NONDEFAULT;
9742   }
9743 }
9744
9745
9746 /* Resolve derived type EQUIVALENCE object.  */
9747
9748 static gfc_try
9749 resolve_equivalence_derived (gfc_symbol *derived, gfc_symbol *sym, gfc_expr *e)
9750 {
9751   gfc_symbol *d;
9752   gfc_component *c = derived->components;
9753
9754   if (!derived)
9755     return SUCCESS;
9756
9757   /* Shall not be an object of nonsequence derived type.  */
9758   if (!derived->attr.sequence)
9759     {
9760       gfc_error ("Derived type variable '%s' at %L must have SEQUENCE "
9761                  "attribute to be an EQUIVALENCE object", sym->name,
9762                  &e->where);
9763       return FAILURE;
9764     }
9765
9766   /* Shall not have allocatable components.  */
9767   if (derived->attr.alloc_comp)
9768     {
9769       gfc_error ("Derived type variable '%s' at %L cannot have ALLOCATABLE "
9770                  "components to be an EQUIVALENCE object",sym->name,
9771                  &e->where);
9772       return FAILURE;
9773     }
9774
9775   if (sym->attr.in_common && has_default_initializer (sym->ts.derived))
9776     {
9777       gfc_error ("Derived type variable '%s' at %L with default "
9778                  "initialization cannot be in EQUIVALENCE with a variable "
9779                  "in COMMON", sym->name, &e->where);
9780       return FAILURE;
9781     }
9782
9783   for (; c ; c = c->next)
9784     {
9785       d = c->ts.derived;
9786       if (d
9787           && (resolve_equivalence_derived (c->ts.derived, sym, e) == FAILURE))
9788         return FAILURE;
9789
9790       /* Shall not be an object of sequence derived type containing a pointer
9791          in the structure.  */
9792       if (c->attr.pointer)
9793         {
9794           gfc_error ("Derived type variable '%s' at %L with pointer "
9795                      "component(s) cannot be an EQUIVALENCE object",
9796                      sym->name, &e->where);
9797           return FAILURE;
9798         }
9799     }
9800   return SUCCESS;
9801 }
9802
9803
9804 /* Resolve equivalence object. 
9805    An EQUIVALENCE object shall not be a dummy argument, a pointer, a target,
9806    an allocatable array, an object of nonsequence derived type, an object of
9807    sequence derived type containing a pointer at any level of component
9808    selection, an automatic object, a function name, an entry name, a result
9809    name, a named constant, a structure component, or a subobject of any of
9810    the preceding objects.  A substring shall not have length zero.  A
9811    derived type shall not have components with default initialization nor
9812    shall two objects of an equivalence group be initialized.
9813    Either all or none of the objects shall have an protected attribute.
9814    The simple constraints are done in symbol.c(check_conflict) and the rest
9815    are implemented here.  */
9816
9817 static void
9818 resolve_equivalence (gfc_equiv *eq)
9819 {
9820   gfc_symbol *sym;
9821   gfc_symbol *derived;
9822   gfc_symbol *first_sym;
9823   gfc_expr *e;
9824   gfc_ref *r;
9825   locus *last_where = NULL;
9826   seq_type eq_type, last_eq_type;
9827   gfc_typespec *last_ts;
9828   int object, cnt_protected;
9829   const char *value_name;
9830   const char *msg;
9831
9832   value_name = NULL;
9833   last_ts = &eq->expr->symtree->n.sym->ts;
9834
9835   first_sym = eq->expr->symtree->n.sym;
9836
9837   cnt_protected = 0;
9838
9839   for (object = 1; eq; eq = eq->eq, object++)
9840     {
9841       e = eq->expr;
9842
9843       e->ts = e->symtree->n.sym->ts;
9844       /* match_varspec might not know yet if it is seeing
9845          array reference or substring reference, as it doesn't
9846          know the types.  */
9847       if (e->ref && e->ref->type == REF_ARRAY)
9848         {
9849           gfc_ref *ref = e->ref;
9850           sym = e->symtree->n.sym;
9851
9852           if (sym->attr.dimension)
9853             {
9854               ref->u.ar.as = sym->as;
9855               ref = ref->next;
9856             }
9857
9858           /* For substrings, convert REF_ARRAY into REF_SUBSTRING.  */
9859           if (e->ts.type == BT_CHARACTER
9860               && ref
9861               && ref->type == REF_ARRAY
9862               && ref->u.ar.dimen == 1
9863               && ref->u.ar.dimen_type[0] == DIMEN_RANGE
9864               && ref->u.ar.stride[0] == NULL)
9865             {
9866               gfc_expr *start = ref->u.ar.start[0];
9867               gfc_expr *end = ref->u.ar.end[0];
9868               void *mem = NULL;
9869
9870               /* Optimize away the (:) reference.  */
9871               if (start == NULL && end == NULL)
9872                 {
9873                   if (e->ref == ref)
9874                     e->ref = ref->next;
9875                   else
9876                     e->ref->next = ref->next;
9877                   mem = ref;
9878                 }
9879               else
9880                 {
9881                   ref->type = REF_SUBSTRING;
9882                   if (start == NULL)
9883                     start = gfc_int_expr (1);
9884                   ref->u.ss.start = start;
9885                   if (end == NULL && e->ts.cl)
9886                     end = gfc_copy_expr (e->ts.cl->length);
9887                   ref->u.ss.end = end;
9888                   ref->u.ss.length = e->ts.cl;
9889                   e->ts.cl = NULL;
9890                 }
9891               ref = ref->next;
9892               gfc_free (mem);
9893             }
9894
9895           /* Any further ref is an error.  */
9896           if (ref)
9897             {
9898               gcc_assert (ref->type == REF_ARRAY);
9899               gfc_error ("Syntax error in EQUIVALENCE statement at %L",
9900                          &ref->u.ar.where);
9901               continue;
9902             }
9903         }
9904
9905       if (gfc_resolve_expr (e) == FAILURE)
9906         continue;
9907
9908       sym = e->symtree->n.sym;
9909
9910       if (sym->attr.is_protected)
9911         cnt_protected++;
9912       if (cnt_protected > 0 && cnt_protected != object)
9913         {
9914               gfc_error ("Either all or none of the objects in the "
9915                          "EQUIVALENCE set at %L shall have the "
9916                          "PROTECTED attribute",
9917                          &e->where);
9918               break;
9919         }
9920
9921       /* Shall not equivalence common block variables in a PURE procedure.  */
9922       if (sym->ns->proc_name
9923           && sym->ns->proc_name->attr.pure
9924           && sym->attr.in_common)
9925         {
9926           gfc_error ("Common block member '%s' at %L cannot be an EQUIVALENCE "
9927                      "object in the pure procedure '%s'",
9928                      sym->name, &e->where, sym->ns->proc_name->name);
9929           break;
9930         }
9931
9932       /* Shall not be a named constant.  */
9933       if (e->expr_type == EXPR_CONSTANT)
9934         {
9935           gfc_error ("Named constant '%s' at %L cannot be an EQUIVALENCE "
9936                      "object", sym->name, &e->where);
9937           continue;
9938         }
9939
9940       derived = e->ts.derived;
9941       if (derived && resolve_equivalence_derived (derived, sym, e) == FAILURE)
9942         continue;
9943
9944       /* Check that the types correspond correctly:
9945          Note 5.28:
9946          A numeric sequence structure may be equivalenced to another sequence
9947          structure, an object of default integer type, default real type, double
9948          precision real type, default logical type such that components of the
9949          structure ultimately only become associated to objects of the same
9950          kind. A character sequence structure may be equivalenced to an object
9951          of default character kind or another character sequence structure.
9952          Other objects may be equivalenced only to objects of the same type and
9953          kind parameters.  */
9954
9955       /* Identical types are unconditionally OK.  */
9956       if (object == 1 || gfc_compare_types (last_ts, &sym->ts))
9957         goto identical_types;
9958
9959       last_eq_type = sequence_type (*last_ts);
9960       eq_type = sequence_type (sym->ts);
9961
9962       /* Since the pair of objects is not of the same type, mixed or
9963          non-default sequences can be rejected.  */
9964
9965       msg = "Sequence %s with mixed components in EQUIVALENCE "
9966             "statement at %L with different type objects";
9967       if ((object ==2
9968            && last_eq_type == SEQ_MIXED
9969            && gfc_notify_std (GFC_STD_GNU, msg, first_sym->name, last_where)
9970               == FAILURE)
9971           || (eq_type == SEQ_MIXED
9972               && gfc_notify_std (GFC_STD_GNU, msg, sym->name,
9973                                  &e->where) == FAILURE))
9974         continue;
9975
9976       msg = "Non-default type object or sequence %s in EQUIVALENCE "
9977             "statement at %L with objects of different type";
9978       if ((object ==2
9979            && last_eq_type == SEQ_NONDEFAULT
9980            && gfc_notify_std (GFC_STD_GNU, msg, first_sym->name,
9981                               last_where) == FAILURE)
9982           || (eq_type == SEQ_NONDEFAULT
9983               && gfc_notify_std (GFC_STD_GNU, msg, sym->name,
9984                                  &e->where) == FAILURE))
9985         continue;
9986
9987       msg ="Non-CHARACTER object '%s' in default CHARACTER "
9988            "EQUIVALENCE statement at %L";
9989       if (last_eq_type == SEQ_CHARACTER
9990           && eq_type != SEQ_CHARACTER
9991           && gfc_notify_std (GFC_STD_GNU, msg, sym->name,
9992                              &e->where) == FAILURE)
9993                 continue;
9994
9995       msg ="Non-NUMERIC object '%s' in default NUMERIC "
9996            "EQUIVALENCE statement at %L";
9997       if (last_eq_type == SEQ_NUMERIC
9998           && eq_type != SEQ_NUMERIC
9999           && gfc_notify_std (GFC_STD_GNU, msg, sym->name,
10000                              &e->where) == FAILURE)
10001                 continue;
10002
10003   identical_types:
10004       last_ts =&sym->ts;
10005       last_where = &e->where;
10006
10007       if (!e->ref)
10008         continue;
10009
10010       /* Shall not be an automatic array.  */
10011       if (e->ref->type == REF_ARRAY
10012           && gfc_resolve_array_spec (e->ref->u.ar.as, 1) == FAILURE)
10013         {
10014           gfc_error ("Array '%s' at %L with non-constant bounds cannot be "
10015                      "an EQUIVALENCE object", sym->name, &e->where);
10016           continue;
10017         }
10018
10019       r = e->ref;
10020       while (r)
10021         {
10022           /* Shall not be a structure component.  */
10023           if (r->type == REF_COMPONENT)
10024             {
10025               gfc_error ("Structure component '%s' at %L cannot be an "
10026                          "EQUIVALENCE object",
10027                          r->u.c.component->name, &e->where);
10028               break;
10029             }
10030
10031           /* A substring shall not have length zero.  */
10032           if (r->type == REF_SUBSTRING)
10033             {
10034               if (compare_bound (r->u.ss.start, r->u.ss.end) == CMP_GT)
10035                 {
10036                   gfc_error ("Substring at %L has length zero",
10037                              &r->u.ss.start->where);
10038                   break;
10039                 }
10040             }
10041           r = r->next;
10042         }
10043     }
10044 }
10045
10046
10047 /* Resolve function and ENTRY types, issue diagnostics if needed.  */
10048
10049 static void
10050 resolve_fntype (gfc_namespace *ns)
10051 {
10052   gfc_entry_list *el;
10053   gfc_symbol *sym;
10054
10055   if (ns->proc_name == NULL || !ns->proc_name->attr.function)
10056     return;
10057
10058   /* If there are any entries, ns->proc_name is the entry master
10059      synthetic symbol and ns->entries->sym actual FUNCTION symbol.  */
10060   if (ns->entries)
10061     sym = ns->entries->sym;
10062   else
10063     sym = ns->proc_name;
10064   if (sym->result == sym
10065       && sym->ts.type == BT_UNKNOWN
10066       && gfc_set_default_type (sym, 0, NULL) == FAILURE
10067       && !sym->attr.untyped)
10068     {
10069       gfc_error ("Function '%s' at %L has no IMPLICIT type",
10070                  sym->name, &sym->declared_at);
10071       sym->attr.untyped = 1;
10072     }
10073
10074   if (sym->ts.type == BT_DERIVED && !sym->ts.derived->attr.use_assoc
10075       && !gfc_check_access (sym->ts.derived->attr.access,
10076                             sym->ts.derived->ns->default_access)
10077       && gfc_check_access (sym->attr.access, sym->ns->default_access))
10078     {
10079       gfc_error ("PUBLIC function '%s' at %L cannot be of PRIVATE type '%s'",
10080                  sym->name, &sym->declared_at, sym->ts.derived->name);
10081     }
10082
10083     if (ns->entries)
10084     for (el = ns->entries->next; el; el = el->next)
10085       {
10086         if (el->sym->result == el->sym
10087             && el->sym->ts.type == BT_UNKNOWN
10088             && gfc_set_default_type (el->sym, 0, NULL) == FAILURE
10089             && !el->sym->attr.untyped)
10090           {
10091             gfc_error ("ENTRY '%s' at %L has no IMPLICIT type",
10092                        el->sym->name, &el->sym->declared_at);
10093             el->sym->attr.untyped = 1;
10094           }
10095       }
10096 }
10097
10098 /* 12.3.2.1.1 Defined operators.  */
10099
10100 static void
10101 gfc_resolve_uops (gfc_symtree *symtree)
10102 {
10103   gfc_interface *itr;
10104   gfc_symbol *sym;
10105   gfc_formal_arglist *formal;
10106
10107   if (symtree == NULL)
10108     return;
10109
10110   gfc_resolve_uops (symtree->left);
10111   gfc_resolve_uops (symtree->right);
10112
10113   for (itr = symtree->n.uop->op; itr; itr = itr->next)
10114     {
10115       sym = itr->sym;
10116       if (!sym->attr.function)
10117         gfc_error ("User operator procedure '%s' at %L must be a FUNCTION",
10118                    sym->name, &sym->declared_at);
10119
10120       if (sym->ts.type == BT_CHARACTER
10121           && !(sym->ts.cl && sym->ts.cl->length)
10122           && !(sym->result && sym->result->ts.cl
10123                && sym->result->ts.cl->length))
10124         gfc_error ("User operator procedure '%s' at %L cannot be assumed "
10125                    "character length", sym->name, &sym->declared_at);
10126
10127       formal = sym->formal;
10128       if (!formal || !formal->sym)
10129         {
10130           gfc_error ("User operator procedure '%s' at %L must have at least "
10131                      "one argument", sym->name, &sym->declared_at);
10132           continue;
10133         }
10134
10135       if (formal->sym->attr.intent != INTENT_IN)
10136         gfc_error ("First argument of operator interface at %L must be "
10137                    "INTENT(IN)", &sym->declared_at);
10138
10139       if (formal->sym->attr.optional)
10140         gfc_error ("First argument of operator interface at %L cannot be "
10141                    "optional", &sym->declared_at);
10142
10143       formal = formal->next;
10144       if (!formal || !formal->sym)
10145         continue;
10146
10147       if (formal->sym->attr.intent != INTENT_IN)
10148         gfc_error ("Second argument of operator interface at %L must be "
10149                    "INTENT(IN)", &sym->declared_at);
10150
10151       if (formal->sym->attr.optional)
10152         gfc_error ("Second argument of operator interface at %L cannot be "
10153                    "optional", &sym->declared_at);
10154
10155       if (formal->next)
10156         gfc_error ("Operator interface at %L must have, at most, two "
10157                    "arguments", &sym->declared_at);
10158     }
10159 }
10160
10161
10162 /* Examine all of the expressions associated with a program unit,
10163    assign types to all intermediate expressions, make sure that all
10164    assignments are to compatible types and figure out which names
10165    refer to which functions or subroutines.  It doesn't check code
10166    block, which is handled by resolve_code.  */
10167
10168 static void
10169 resolve_types (gfc_namespace *ns)
10170 {
10171   gfc_namespace *n;
10172   gfc_charlen *cl;
10173   gfc_data *d;
10174   gfc_equiv *eq;
10175   gfc_namespace* old_ns = gfc_current_ns;
10176
10177   /* Check that all IMPLICIT types are ok.  */
10178   if (!ns->seen_implicit_none)
10179     {
10180       unsigned letter;
10181       for (letter = 0; letter != GFC_LETTERS; ++letter)
10182         if (ns->set_flag[letter]
10183             && resolve_typespec_used (&ns->default_type[letter],
10184                                       &ns->implicit_loc[letter],
10185                                       NULL) == FAILURE)
10186           return;
10187     }
10188
10189   gfc_current_ns = ns;
10190
10191   resolve_entries (ns);
10192
10193   resolve_common_vars (ns->blank_common.head, false);
10194   resolve_common_blocks (ns->common_root);
10195
10196   resolve_contained_functions (ns);
10197
10198   gfc_traverse_ns (ns, resolve_bind_c_derived_types);
10199
10200   for (cl = ns->cl_list; cl; cl = cl->next)
10201     resolve_charlen (cl);
10202
10203   gfc_traverse_ns (ns, resolve_symbol);
10204
10205   resolve_fntype (ns);
10206
10207   for (n = ns->contained; n; n = n->sibling)
10208     {
10209       if (gfc_pure (ns->proc_name) && !gfc_pure (n->proc_name))
10210         gfc_error ("Contained procedure '%s' at %L of a PURE procedure must "
10211                    "also be PURE", n->proc_name->name,
10212                    &n->proc_name->declared_at);
10213
10214       resolve_types (n);
10215     }
10216
10217   forall_flag = 0;
10218   gfc_check_interfaces (ns);
10219
10220   gfc_traverse_ns (ns, resolve_values);
10221
10222   if (ns->save_all)
10223     gfc_save_all (ns);
10224
10225   iter_stack = NULL;
10226   for (d = ns->data; d; d = d->next)
10227     resolve_data (d);
10228
10229   iter_stack = NULL;
10230   gfc_traverse_ns (ns, gfc_formalize_init_value);
10231
10232   gfc_traverse_ns (ns, gfc_verify_binding_labels);
10233
10234   if (ns->common_root != NULL)
10235     gfc_traverse_symtree (ns->common_root, resolve_bind_c_comms);
10236
10237   for (eq = ns->equiv; eq; eq = eq->next)
10238     resolve_equivalence (eq);
10239
10240   /* Warn about unused labels.  */
10241   if (warn_unused_label)
10242     warn_unused_fortran_label (ns->st_labels);
10243
10244   gfc_resolve_uops (ns->uop_root);
10245
10246   gfc_current_ns = old_ns;
10247 }
10248
10249
10250 /* Call resolve_code recursively.  */
10251
10252 static void
10253 resolve_codes (gfc_namespace *ns)
10254 {
10255   gfc_namespace *n;
10256
10257   for (n = ns->contained; n; n = n->sibling)
10258     resolve_codes (n);
10259
10260   gfc_current_ns = ns;
10261   cs_base = NULL;
10262   /* Set to an out of range value.  */
10263   current_entry_id = -1;
10264
10265   bitmap_obstack_initialize (&labels_obstack);
10266   resolve_code (ns->code, ns);
10267   bitmap_obstack_release (&labels_obstack);
10268 }
10269
10270
10271 /* This function is called after a complete program unit has been compiled.
10272    Its purpose is to examine all of the expressions associated with a program
10273    unit, assign types to all intermediate expressions, make sure that all
10274    assignments are to compatible types and figure out which names refer to
10275    which functions or subroutines.  */
10276
10277 void
10278 gfc_resolve (gfc_namespace *ns)
10279 {
10280   gfc_namespace *old_ns;
10281
10282   old_ns = gfc_current_ns;
10283
10284   resolve_types (ns);
10285   resolve_codes (ns);
10286
10287   gfc_current_ns = old_ns;
10288 }