OSDN Git Service

2011-02-20 Paul Thomas <pault@gcc.gnu.org>
[pf3gnuchains/gcc-fork.git] / gcc / fortran / trans-types.c
1 /* Backend support for Fortran 95 basic types and derived types.
2    Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009,
3    2010, 2011
4    Free Software Foundation, Inc.
5    Contributed by Paul Brook <paul@nowt.org>
6    and Steven Bosscher <s.bosscher@student.tudelft.nl>
7
8 This file is part of GCC.
9
10 GCC is free software; you can redistribute it and/or modify it under
11 the terms of the GNU General Public License as published by the Free
12 Software Foundation; either version 3, or (at your option) any later
13 version.
14
15 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
16 WARRANTY; without even the implied warranty of MERCHANTABILITY or
17 FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
18 for more details.
19
20 You should have received a copy of the GNU General Public License
21 along with GCC; see the file COPYING3.  If not see
22 <http://www.gnu.org/licenses/>.  */
23
24 /* trans-types.c -- gfortran backend types */
25
26 #include "config.h"
27 #include "system.h"
28 #include "coretypes.h"
29 #include "tree.h"
30 #include "langhooks.h"  /* For iso-c-bindings.def.  */
31 #include "target.h"
32 #include "ggc.h"
33 #include "diagnostic-core.h"  /* For fatal_error.  */
34 #include "toplev.h"     /* For rest_of_decl_compilation.  */
35 #include "gfortran.h"
36 #include "trans.h"
37 #include "trans-types.h"
38 #include "trans-const.h"
39 #include "flags.h"
40 #include "dwarf2out.h"  /* For struct array_descr_info.  */
41 \f
42
43 #if (GFC_MAX_DIMENSIONS < 10)
44 #define GFC_RANK_DIGITS 1
45 #define GFC_RANK_PRINTF_FORMAT "%01d"
46 #elif (GFC_MAX_DIMENSIONS < 100)
47 #define GFC_RANK_DIGITS 2
48 #define GFC_RANK_PRINTF_FORMAT "%02d"
49 #else
50 #error If you really need >99 dimensions, continue the sequence above...
51 #endif
52
53 /* array of structs so we don't have to worry about xmalloc or free */
54 CInteropKind_t c_interop_kinds_table[ISOCBINDING_NUMBER];
55
56 tree gfc_array_index_type;
57 tree gfc_array_range_type;
58 tree gfc_character1_type_node;
59 tree pvoid_type_node;
60 tree prvoid_type_node;
61 tree ppvoid_type_node;
62 tree pchar_type_node;
63 tree pfunc_type_node;
64
65 tree gfc_charlen_type_node;
66
67 tree float128_type_node = NULL_TREE;
68 tree complex_float128_type_node = NULL_TREE;
69
70 bool gfc_real16_is_float128 = false;
71
72 static GTY(()) tree gfc_desc_dim_type;
73 static GTY(()) tree gfc_max_array_element_size;
74 static GTY(()) tree gfc_array_descriptor_base[2 * GFC_MAX_DIMENSIONS];
75
76 /* Arrays for all integral and real kinds.  We'll fill this in at runtime
77    after the target has a chance to process command-line options.  */
78
79 #define MAX_INT_KINDS 5
80 gfc_integer_info gfc_integer_kinds[MAX_INT_KINDS + 1];
81 gfc_logical_info gfc_logical_kinds[MAX_INT_KINDS + 1];
82 static GTY(()) tree gfc_integer_types[MAX_INT_KINDS + 1];
83 static GTY(()) tree gfc_logical_types[MAX_INT_KINDS + 1];
84
85 #define MAX_REAL_KINDS 5
86 gfc_real_info gfc_real_kinds[MAX_REAL_KINDS + 1];
87 static GTY(()) tree gfc_real_types[MAX_REAL_KINDS + 1];
88 static GTY(()) tree gfc_complex_types[MAX_REAL_KINDS + 1];
89
90 #define MAX_CHARACTER_KINDS 2
91 gfc_character_info gfc_character_kinds[MAX_CHARACTER_KINDS + 1];
92 static GTY(()) tree gfc_character_types[MAX_CHARACTER_KINDS + 1];
93 static GTY(()) tree gfc_pcharacter_types[MAX_CHARACTER_KINDS + 1];
94
95 static tree gfc_add_field_to_struct_1 (tree, tree, tree, tree **);
96
97 /* The integer kind to use for array indices.  This will be set to the
98    proper value based on target information from the backend.  */
99
100 int gfc_index_integer_kind;
101
102 /* The default kinds of the various types.  */
103
104 int gfc_default_integer_kind;
105 int gfc_max_integer_kind;
106 int gfc_default_real_kind;
107 int gfc_default_double_kind;
108 int gfc_default_character_kind;
109 int gfc_default_logical_kind;
110 int gfc_default_complex_kind;
111 int gfc_c_int_kind;
112
113 /* The kind size used for record offsets. If the target system supports
114    kind=8, this will be set to 8, otherwise it is set to 4.  */
115 int gfc_intio_kind; 
116
117 /* The integer kind used to store character lengths.  */
118 int gfc_charlen_int_kind;
119
120 /* The size of the numeric storage unit and character storage unit.  */
121 int gfc_numeric_storage_size;
122 int gfc_character_storage_size;
123
124
125 gfc_try
126 gfc_check_any_c_kind (gfc_typespec *ts)
127 {
128   int i;
129   
130   for (i = 0; i < ISOCBINDING_NUMBER; i++)
131     {
132       /* Check for any C interoperable kind for the given type/kind in ts.
133          This can be used after verify_c_interop to make sure that the
134          Fortran kind being used exists in at least some form for C.  */
135       if (c_interop_kinds_table[i].f90_type == ts->type &&
136           c_interop_kinds_table[i].value == ts->kind)
137         return SUCCESS;
138     }
139
140   return FAILURE;
141 }
142
143
144 static int
145 get_real_kind_from_node (tree type)
146 {
147   int i;
148
149   for (i = 0; gfc_real_kinds[i].kind != 0; i++)
150     if (gfc_real_kinds[i].mode_precision == TYPE_PRECISION (type))
151       return gfc_real_kinds[i].kind;
152
153   return -4;
154 }
155
156 static int
157 get_int_kind_from_node (tree type)
158 {
159   int i;
160
161   if (!type)
162     return -2;
163
164   for (i = 0; gfc_integer_kinds[i].kind != 0; i++)
165     if (gfc_integer_kinds[i].bit_size == TYPE_PRECISION (type))
166       return gfc_integer_kinds[i].kind;
167
168   return -1;
169 }
170
171 /* Return a typenode for the "standard" C type with a given name.  */
172 static tree
173 get_typenode_from_name (const char *name)
174 {
175   if (name == NULL || *name == '\0')
176     return NULL_TREE;
177
178   if (strcmp (name, "char") == 0)
179     return char_type_node;
180   if (strcmp (name, "unsigned char") == 0)
181     return unsigned_char_type_node;
182   if (strcmp (name, "signed char") == 0)
183     return signed_char_type_node;
184
185   if (strcmp (name, "short int") == 0)
186     return short_integer_type_node;
187   if (strcmp (name, "short unsigned int") == 0)
188     return short_unsigned_type_node;
189
190   if (strcmp (name, "int") == 0)
191     return integer_type_node;
192   if (strcmp (name, "unsigned int") == 0)
193     return unsigned_type_node;
194
195   if (strcmp (name, "long int") == 0)
196     return long_integer_type_node;
197   if (strcmp (name, "long unsigned int") == 0)
198     return long_unsigned_type_node;
199
200   if (strcmp (name, "long long int") == 0)
201     return long_long_integer_type_node;
202   if (strcmp (name, "long long unsigned int") == 0)
203     return long_long_unsigned_type_node;
204
205   gcc_unreachable ();
206 }
207
208 static int
209 get_int_kind_from_name (const char *name)
210 {
211   return get_int_kind_from_node (get_typenode_from_name (name));
212 }
213
214
215 /* Get the kind number corresponding to an integer of given size,
216    following the required return values for ISO_FORTRAN_ENV INT* constants:
217    -2 is returned if we support a kind of larger size, -1 otherwise.  */
218 int
219 gfc_get_int_kind_from_width_isofortranenv (int size)
220 {
221   int i;
222
223   /* Look for a kind with matching storage size.  */
224   for (i = 0; gfc_integer_kinds[i].kind != 0; i++)
225     if (gfc_integer_kinds[i].bit_size == size)
226       return gfc_integer_kinds[i].kind;
227
228   /* Look for a kind with larger storage size.  */
229   for (i = 0; gfc_integer_kinds[i].kind != 0; i++)
230     if (gfc_integer_kinds[i].bit_size > size)
231       return -2;
232
233   return -1;
234 }
235
236 /* Get the kind number corresponding to a real of given storage size,
237    following the required return values for ISO_FORTRAN_ENV REAL* constants:
238    -2 is returned if we support a kind of larger size, -1 otherwise.  */
239 int
240 gfc_get_real_kind_from_width_isofortranenv (int size)
241 {
242   int i;
243
244   size /= 8;
245
246   /* Look for a kind with matching storage size.  */
247   for (i = 0; gfc_real_kinds[i].kind != 0; i++)
248     if (int_size_in_bytes (gfc_get_real_type (gfc_real_kinds[i].kind)) == size)
249       return gfc_real_kinds[i].kind;
250
251   /* Look for a kind with larger storage size.  */
252   for (i = 0; gfc_real_kinds[i].kind != 0; i++)
253     if (int_size_in_bytes (gfc_get_real_type (gfc_real_kinds[i].kind)) > size)
254       return -2;
255
256   return -1;
257 }
258
259
260
261 static int
262 get_int_kind_from_width (int size)
263 {
264   int i;
265
266   for (i = 0; gfc_integer_kinds[i].kind != 0; i++)
267     if (gfc_integer_kinds[i].bit_size == size)
268       return gfc_integer_kinds[i].kind;
269
270   return -2;
271 }
272
273 static int
274 get_int_kind_from_minimal_width (int size)
275 {
276   int i;
277
278   for (i = 0; gfc_integer_kinds[i].kind != 0; i++)
279     if (gfc_integer_kinds[i].bit_size >= size)
280       return gfc_integer_kinds[i].kind;
281
282   return -2;
283 }
284
285
286 /* Generate the CInteropKind_t objects for the C interoperable
287    kinds.  */
288
289 static
290 void init_c_interop_kinds (void)
291 {
292   int i;
293
294   /* init all pointers in the list to NULL */
295   for (i = 0; i < ISOCBINDING_NUMBER; i++)
296     {
297       /* Initialize the name and value fields.  */
298       c_interop_kinds_table[i].name[0] = '\0';
299       c_interop_kinds_table[i].value = -100;
300       c_interop_kinds_table[i].f90_type = BT_UNKNOWN;
301     }
302
303 #define NAMED_INTCST(a,b,c,d) \
304   strncpy (c_interop_kinds_table[a].name, b, strlen(b) + 1); \
305   c_interop_kinds_table[a].f90_type = BT_INTEGER; \
306   c_interop_kinds_table[a].value = c;
307 #define NAMED_REALCST(a,b,c) \
308   strncpy (c_interop_kinds_table[a].name, b, strlen(b) + 1); \
309   c_interop_kinds_table[a].f90_type = BT_REAL; \
310   c_interop_kinds_table[a].value = c;
311 #define NAMED_CMPXCST(a,b,c) \
312   strncpy (c_interop_kinds_table[a].name, b, strlen(b) + 1); \
313   c_interop_kinds_table[a].f90_type = BT_COMPLEX; \
314   c_interop_kinds_table[a].value = c;
315 #define NAMED_LOGCST(a,b,c) \
316   strncpy (c_interop_kinds_table[a].name, b, strlen(b) + 1); \
317   c_interop_kinds_table[a].f90_type = BT_LOGICAL; \
318   c_interop_kinds_table[a].value = c;
319 #define NAMED_CHARKNDCST(a,b,c) \
320   strncpy (c_interop_kinds_table[a].name, b, strlen(b) + 1); \
321   c_interop_kinds_table[a].f90_type = BT_CHARACTER; \
322   c_interop_kinds_table[a].value = c;
323 #define NAMED_CHARCST(a,b,c) \
324   strncpy (c_interop_kinds_table[a].name, b, strlen(b) + 1); \
325   c_interop_kinds_table[a].f90_type = BT_CHARACTER; \
326   c_interop_kinds_table[a].value = c;
327 #define DERIVED_TYPE(a,b,c) \
328   strncpy (c_interop_kinds_table[a].name, b, strlen(b) + 1); \
329   c_interop_kinds_table[a].f90_type = BT_DERIVED; \
330   c_interop_kinds_table[a].value = c;
331 #define PROCEDURE(a,b) \
332   strncpy (c_interop_kinds_table[a].name, b, strlen(b) + 1); \
333   c_interop_kinds_table[a].f90_type = BT_PROCEDURE; \
334   c_interop_kinds_table[a].value = 0;
335 #include "iso-c-binding.def"
336 #define NAMED_FUNCTION(a,b,c,d) \
337   strncpy (c_interop_kinds_table[a].name, b, strlen(b) + 1); \
338   c_interop_kinds_table[a].f90_type = BT_PROCEDURE; \
339   c_interop_kinds_table[a].value = c;
340 #include "iso-c-binding.def"
341 }
342
343
344 /* Query the target to determine which machine modes are available for
345    computation.  Choose KIND numbers for them.  */
346
347 void
348 gfc_init_kinds (void)
349 {
350   unsigned int mode;
351   int i_index, r_index, kind;
352   bool saw_i4 = false, saw_i8 = false;
353   bool saw_r4 = false, saw_r8 = false, saw_r16 = false;
354
355   for (i_index = 0, mode = MIN_MODE_INT; mode <= MAX_MODE_INT; mode++)
356     {
357       int kind, bitsize;
358
359       if (!targetm.scalar_mode_supported_p ((enum machine_mode) mode))
360         continue;
361
362       /* The middle end doesn't support constants larger than 2*HWI.
363          Perhaps the target hook shouldn't have accepted these either,
364          but just to be safe...  */
365       bitsize = GET_MODE_BITSIZE (mode);
366       if (bitsize > 2*HOST_BITS_PER_WIDE_INT)
367         continue;
368
369       gcc_assert (i_index != MAX_INT_KINDS);
370
371       /* Let the kind equal the bit size divided by 8.  This insulates the
372          programmer from the underlying byte size.  */
373       kind = bitsize / 8;
374
375       if (kind == 4)
376         saw_i4 = true;
377       if (kind == 8)
378         saw_i8 = true;
379
380       gfc_integer_kinds[i_index].kind = kind;
381       gfc_integer_kinds[i_index].radix = 2;
382       gfc_integer_kinds[i_index].digits = bitsize - 1;
383       gfc_integer_kinds[i_index].bit_size = bitsize;
384
385       gfc_logical_kinds[i_index].kind = kind;
386       gfc_logical_kinds[i_index].bit_size = bitsize;
387
388       i_index += 1;
389     }
390
391   /* Set the kind used to match GFC_INT_IO in libgfortran.  This is 
392      used for large file access.  */
393
394   if (saw_i8)
395     gfc_intio_kind = 8;
396   else
397     gfc_intio_kind = 4;
398
399   /* If we do not at least have kind = 4, everything is pointless.  */  
400   gcc_assert(saw_i4);  
401
402   /* Set the maximum integer kind.  Used with at least BOZ constants.  */
403   gfc_max_integer_kind = gfc_integer_kinds[i_index - 1].kind;
404
405   for (r_index = 0, mode = MIN_MODE_FLOAT; mode <= MAX_MODE_FLOAT; mode++)
406     {
407       const struct real_format *fmt =
408         REAL_MODE_FORMAT ((enum machine_mode) mode);
409       int kind;
410
411       if (fmt == NULL)
412         continue;
413       if (!targetm.scalar_mode_supported_p ((enum machine_mode) mode))
414         continue;
415
416       /* Only let float, double, long double and __float128 go through.
417          Runtime support for others is not provided, so they would be
418          useless.  */
419         if (mode != TYPE_MODE (float_type_node)
420             && (mode != TYPE_MODE (double_type_node))
421             && (mode != TYPE_MODE (long_double_type_node))
422 #if defined(LIBGCC2_HAS_TF_MODE) && defined(ENABLE_LIBQUADMATH_SUPPORT)
423             && (mode != TFmode)
424 #endif
425            )
426         continue;
427
428       /* Let the kind equal the precision divided by 8, rounding up.  Again,
429          this insulates the programmer from the underlying byte size.
430
431          Also, it effectively deals with IEEE extended formats.  There, the
432          total size of the type may equal 16, but it's got 6 bytes of padding
433          and the increased size can get in the way of a real IEEE quad format
434          which may also be supported by the target.
435
436          We round up so as to handle IA-64 __floatreg (RFmode), which is an
437          82 bit type.  Not to be confused with __float80 (XFmode), which is
438          an 80 bit type also supported by IA-64.  So XFmode should come out
439          to be kind=10, and RFmode should come out to be kind=11.  Egads.  */
440
441       kind = (GET_MODE_PRECISION (mode) + 7) / 8;
442
443       if (kind == 4)
444         saw_r4 = true;
445       if (kind == 8)
446         saw_r8 = true;
447       if (kind == 16)
448         saw_r16 = true;
449
450       /* Careful we don't stumble a weird internal mode.  */
451       gcc_assert (r_index <= 0 || gfc_real_kinds[r_index-1].kind != kind);
452       /* Or have too many modes for the allocated space.  */
453       gcc_assert (r_index != MAX_REAL_KINDS);
454
455       gfc_real_kinds[r_index].kind = kind;
456       gfc_real_kinds[r_index].radix = fmt->b;
457       gfc_real_kinds[r_index].digits = fmt->p;
458       gfc_real_kinds[r_index].min_exponent = fmt->emin;
459       gfc_real_kinds[r_index].max_exponent = fmt->emax;
460       if (fmt->pnan < fmt->p)
461         /* This is an IBM extended double format (or the MIPS variant)
462            made up of two IEEE doubles.  The value of the long double is
463            the sum of the values of the two parts.  The most significant
464            part is required to be the value of the long double rounded
465            to the nearest double.  If we use emax of 1024 then we can't
466            represent huge(x) = (1 - b**(-p)) * b**(emax-1) * b, because
467            rounding will make the most significant part overflow.  */
468         gfc_real_kinds[r_index].max_exponent = fmt->emax - 1;
469       gfc_real_kinds[r_index].mode_precision = GET_MODE_PRECISION (mode);
470       r_index += 1;
471     }
472
473   /* Choose the default integer kind.  We choose 4 unless the user
474      directs us otherwise.  */
475   if (gfc_option.flag_default_integer)
476     {
477       if (!saw_i8)
478         fatal_error ("integer kind=8 not available for -fdefault-integer-8 option");
479       gfc_default_integer_kind = 8;
480
481       /* Even if the user specified that the default integer kind be 8,
482          the numeric storage size isn't 64.  In this case, a warning will
483          be issued when NUMERIC_STORAGE_SIZE is used.  */
484       gfc_numeric_storage_size = 4 * 8;
485     }
486   else if (saw_i4)
487     {
488       gfc_default_integer_kind = 4;
489       gfc_numeric_storage_size = 4 * 8;
490     }
491   else
492     {
493       gfc_default_integer_kind = gfc_integer_kinds[i_index - 1].kind;
494       gfc_numeric_storage_size = gfc_integer_kinds[i_index - 1].bit_size;
495     }
496
497   /* Choose the default real kind.  Again, we choose 4 when possible.  */
498   if (gfc_option.flag_default_real)
499     {
500       if (!saw_r8)
501         fatal_error ("real kind=8 not available for -fdefault-real-8 option");
502       gfc_default_real_kind = 8;
503     }
504   else if (saw_r4)
505     gfc_default_real_kind = 4;
506   else
507     gfc_default_real_kind = gfc_real_kinds[0].kind;
508
509   /* Choose the default double kind.  If -fdefault-real and -fdefault-double 
510      are specified, we use kind=8, if it's available.  If -fdefault-real is
511      specified without -fdefault-double, we use kind=16, if it's available.
512      Otherwise we do not change anything.  */
513   if (gfc_option.flag_default_double && !gfc_option.flag_default_real)
514     fatal_error ("Use of -fdefault-double-8 requires -fdefault-real-8");
515
516   if (gfc_option.flag_default_real && gfc_option.flag_default_double && saw_r8)
517     gfc_default_double_kind = 8;
518   else if (gfc_option.flag_default_real && saw_r16)
519     gfc_default_double_kind = 16;
520   else if (saw_r4 && saw_r8)
521     gfc_default_double_kind = 8;
522   else
523     {
524       /* F95 14.6.3.1: A nonpointer scalar object of type double precision
525          real ... occupies two contiguous numeric storage units.
526
527          Therefore we must be supplied a kind twice as large as we chose
528          for single precision.  There are loopholes, in that double
529          precision must *occupy* two storage units, though it doesn't have
530          to *use* two storage units.  Which means that you can make this
531          kind artificially wide by padding it.  But at present there are
532          no GCC targets for which a two-word type does not exist, so we
533          just let gfc_validate_kind abort and tell us if something breaks.  */
534
535       gfc_default_double_kind
536         = gfc_validate_kind (BT_REAL, gfc_default_real_kind * 2, false);
537     }
538
539   /* The default logical kind is constrained to be the same as the
540      default integer kind.  Similarly with complex and real.  */
541   gfc_default_logical_kind = gfc_default_integer_kind;
542   gfc_default_complex_kind = gfc_default_real_kind;
543
544   /* We only have two character kinds: ASCII and UCS-4.
545      ASCII corresponds to a 8-bit integer type, if one is available.
546      UCS-4 corresponds to a 32-bit integer type, if one is available. */
547   i_index = 0;
548   if ((kind = get_int_kind_from_width (8)) > 0)
549     {
550       gfc_character_kinds[i_index].kind = kind;
551       gfc_character_kinds[i_index].bit_size = 8;
552       gfc_character_kinds[i_index].name = "ascii";
553       i_index++;
554     }
555   if ((kind = get_int_kind_from_width (32)) > 0)
556     {
557       gfc_character_kinds[i_index].kind = kind;
558       gfc_character_kinds[i_index].bit_size = 32;
559       gfc_character_kinds[i_index].name = "iso_10646";
560       i_index++;
561     }
562
563   /* Choose the smallest integer kind for our default character.  */
564   gfc_default_character_kind = gfc_character_kinds[0].kind;
565   gfc_character_storage_size = gfc_default_character_kind * 8;
566
567   /* Choose the integer kind the same size as "void*" for our index kind.  */
568   gfc_index_integer_kind = POINTER_SIZE / 8;
569   /* Pick a kind the same size as the C "int" type.  */
570   gfc_c_int_kind = INT_TYPE_SIZE / 8;
571
572   /* initialize the C interoperable kinds  */
573   init_c_interop_kinds();
574 }
575
576 /* Make sure that a valid kind is present.  Returns an index into the
577    associated kinds array, -1 if the kind is not present.  */
578
579 static int
580 validate_integer (int kind)
581 {
582   int i;
583
584   for (i = 0; gfc_integer_kinds[i].kind != 0; i++)
585     if (gfc_integer_kinds[i].kind == kind)
586       return i;
587
588   return -1;
589 }
590
591 static int
592 validate_real (int kind)
593 {
594   int i;
595
596   for (i = 0; gfc_real_kinds[i].kind != 0; i++)
597     if (gfc_real_kinds[i].kind == kind)
598       return i;
599
600   return -1;
601 }
602
603 static int
604 validate_logical (int kind)
605 {
606   int i;
607
608   for (i = 0; gfc_logical_kinds[i].kind; i++)
609     if (gfc_logical_kinds[i].kind == kind)
610       return i;
611
612   return -1;
613 }
614
615 static int
616 validate_character (int kind)
617 {
618   int i;
619
620   for (i = 0; gfc_character_kinds[i].kind; i++)
621     if (gfc_character_kinds[i].kind == kind)
622       return i;
623
624   return -1;
625 }
626
627 /* Validate a kind given a basic type.  The return value is the same
628    for the child functions, with -1 indicating nonexistence of the
629    type.  If MAY_FAIL is false, then -1 is never returned, and we ICE.  */
630
631 int
632 gfc_validate_kind (bt type, int kind, bool may_fail)
633 {
634   int rc;
635
636   switch (type)
637     {
638     case BT_REAL:               /* Fall through */
639     case BT_COMPLEX:
640       rc = validate_real (kind);
641       break;
642     case BT_INTEGER:
643       rc = validate_integer (kind);
644       break;
645     case BT_LOGICAL:
646       rc = validate_logical (kind);
647       break;
648     case BT_CHARACTER:
649       rc = validate_character (kind);
650       break;
651
652     default:
653       gfc_internal_error ("gfc_validate_kind(): Got bad type");
654     }
655
656   if (rc < 0 && !may_fail)
657     gfc_internal_error ("gfc_validate_kind(): Got bad kind");
658
659   return rc;
660 }
661
662
663 /* Four subroutines of gfc_init_types.  Create type nodes for the given kind.
664    Reuse common type nodes where possible.  Recognize if the kind matches up
665    with a C type.  This will be used later in determining which routines may
666    be scarfed from libm.  */
667
668 static tree
669 gfc_build_int_type (gfc_integer_info *info)
670 {
671   int mode_precision = info->bit_size;
672
673   if (mode_precision == CHAR_TYPE_SIZE)
674     info->c_char = 1;
675   if (mode_precision == SHORT_TYPE_SIZE)
676     info->c_short = 1;
677   if (mode_precision == INT_TYPE_SIZE)
678     info->c_int = 1;
679   if (mode_precision == LONG_TYPE_SIZE)
680     info->c_long = 1;
681   if (mode_precision == LONG_LONG_TYPE_SIZE)
682     info->c_long_long = 1;
683
684   if (TYPE_PRECISION (intQI_type_node) == mode_precision)
685     return intQI_type_node;
686   if (TYPE_PRECISION (intHI_type_node) == mode_precision)
687     return intHI_type_node;
688   if (TYPE_PRECISION (intSI_type_node) == mode_precision)
689     return intSI_type_node;
690   if (TYPE_PRECISION (intDI_type_node) == mode_precision)
691     return intDI_type_node;
692   if (TYPE_PRECISION (intTI_type_node) == mode_precision)
693     return intTI_type_node;
694
695   return make_signed_type (mode_precision);
696 }
697
698 tree
699 gfc_build_uint_type (int size)
700 {
701   if (size == CHAR_TYPE_SIZE)
702     return unsigned_char_type_node;
703   if (size == SHORT_TYPE_SIZE)
704     return short_unsigned_type_node;
705   if (size == INT_TYPE_SIZE)
706     return unsigned_type_node;
707   if (size == LONG_TYPE_SIZE)
708     return long_unsigned_type_node;
709   if (size == LONG_LONG_TYPE_SIZE)
710     return long_long_unsigned_type_node;
711
712   return make_unsigned_type (size);
713 }
714
715
716 static tree
717 gfc_build_real_type (gfc_real_info *info)
718 {
719   int mode_precision = info->mode_precision;
720   tree new_type;
721
722   if (mode_precision == FLOAT_TYPE_SIZE)
723     info->c_float = 1;
724   if (mode_precision == DOUBLE_TYPE_SIZE)
725     info->c_double = 1;
726   if (mode_precision == LONG_DOUBLE_TYPE_SIZE)
727     info->c_long_double = 1;
728   if (mode_precision != LONG_DOUBLE_TYPE_SIZE && mode_precision == 128)
729     {
730       info->c_float128 = 1;
731       gfc_real16_is_float128 = true;
732     }
733
734   if (TYPE_PRECISION (float_type_node) == mode_precision)
735     return float_type_node;
736   if (TYPE_PRECISION (double_type_node) == mode_precision)
737     return double_type_node;
738   if (TYPE_PRECISION (long_double_type_node) == mode_precision)
739     return long_double_type_node;
740
741   new_type = make_node (REAL_TYPE);
742   TYPE_PRECISION (new_type) = mode_precision;
743   layout_type (new_type);
744   return new_type;
745 }
746
747 static tree
748 gfc_build_complex_type (tree scalar_type)
749 {
750   tree new_type;
751
752   if (scalar_type == NULL)
753     return NULL;
754   if (scalar_type == float_type_node)
755     return complex_float_type_node;
756   if (scalar_type == double_type_node)
757     return complex_double_type_node;
758   if (scalar_type == long_double_type_node)
759     return complex_long_double_type_node;
760
761   new_type = make_node (COMPLEX_TYPE);
762   TREE_TYPE (new_type) = scalar_type;
763   layout_type (new_type);
764   return new_type;
765 }
766
767 static tree
768 gfc_build_logical_type (gfc_logical_info *info)
769 {
770   int bit_size = info->bit_size;
771   tree new_type;
772
773   if (bit_size == BOOL_TYPE_SIZE)
774     {
775       info->c_bool = 1;
776       return boolean_type_node;
777     }
778
779   new_type = make_unsigned_type (bit_size);
780   TREE_SET_CODE (new_type, BOOLEAN_TYPE);
781   TYPE_MAX_VALUE (new_type) = build_int_cst (new_type, 1);
782   TYPE_PRECISION (new_type) = 1;
783
784   return new_type;
785 }
786
787
788 #if 0
789 /* Return the bit size of the C "size_t".  */
790
791 static unsigned int
792 c_size_t_size (void)
793 {
794 #ifdef SIZE_TYPE  
795   if (strcmp (SIZE_TYPE, "unsigned int") == 0)
796     return INT_TYPE_SIZE;
797   if (strcmp (SIZE_TYPE, "long unsigned int") == 0)
798     return LONG_TYPE_SIZE;
799   if (strcmp (SIZE_TYPE, "short unsigned int") == 0)
800     return SHORT_TYPE_SIZE;
801   gcc_unreachable ();
802 #else
803   return LONG_TYPE_SIZE;
804 #endif
805 }
806 #endif
807
808 /* Create the backend type nodes. We map them to their
809    equivalent C type, at least for now.  We also give
810    names to the types here, and we push them in the
811    global binding level context.*/
812
813 void
814 gfc_init_types (void)
815 {
816   char name_buf[18];
817   int index;
818   tree type;
819   unsigned n;
820   unsigned HOST_WIDE_INT hi;
821   unsigned HOST_WIDE_INT lo;
822
823   /* Create and name the types.  */
824 #define PUSH_TYPE(name, node) \
825   pushdecl (build_decl (input_location, \
826                         TYPE_DECL, get_identifier (name), node))
827
828   for (index = 0; gfc_integer_kinds[index].kind != 0; ++index)
829     {
830       type = gfc_build_int_type (&gfc_integer_kinds[index]);
831       /* Ensure integer(kind=1) doesn't have TYPE_STRING_FLAG set.  */
832       if (TYPE_STRING_FLAG (type))
833         type = make_signed_type (gfc_integer_kinds[index].bit_size);
834       gfc_integer_types[index] = type;
835       snprintf (name_buf, sizeof(name_buf), "integer(kind=%d)",
836                 gfc_integer_kinds[index].kind);
837       PUSH_TYPE (name_buf, type);
838     }
839
840   for (index = 0; gfc_logical_kinds[index].kind != 0; ++index)
841     {
842       type = gfc_build_logical_type (&gfc_logical_kinds[index]);
843       gfc_logical_types[index] = type;
844       snprintf (name_buf, sizeof(name_buf), "logical(kind=%d)",
845                 gfc_logical_kinds[index].kind);
846       PUSH_TYPE (name_buf, type);
847     }
848
849   for (index = 0; gfc_real_kinds[index].kind != 0; index++)
850     {
851       type = gfc_build_real_type (&gfc_real_kinds[index]);
852       gfc_real_types[index] = type;
853       snprintf (name_buf, sizeof(name_buf), "real(kind=%d)",
854                 gfc_real_kinds[index].kind);
855       PUSH_TYPE (name_buf, type);
856
857       if (gfc_real_kinds[index].c_float128)
858         float128_type_node = type;
859
860       type = gfc_build_complex_type (type);
861       gfc_complex_types[index] = type;
862       snprintf (name_buf, sizeof(name_buf), "complex(kind=%d)",
863                 gfc_real_kinds[index].kind);
864       PUSH_TYPE (name_buf, type);
865
866       if (gfc_real_kinds[index].c_float128)
867         complex_float128_type_node = type;
868     }
869
870   for (index = 0; gfc_character_kinds[index].kind != 0; ++index)
871     {
872       type = gfc_build_uint_type (gfc_character_kinds[index].bit_size);
873       type = build_qualified_type (type, TYPE_UNQUALIFIED);
874       snprintf (name_buf, sizeof(name_buf), "character(kind=%d)",
875                 gfc_character_kinds[index].kind);
876       PUSH_TYPE (name_buf, type);
877       gfc_character_types[index] = type;
878       gfc_pcharacter_types[index] = build_pointer_type (type);
879     }
880   gfc_character1_type_node = gfc_character_types[0];
881
882   PUSH_TYPE ("byte", unsigned_char_type_node);
883   PUSH_TYPE ("void", void_type_node);
884
885   /* DBX debugging output gets upset if these aren't set.  */
886   if (!TYPE_NAME (integer_type_node))
887     PUSH_TYPE ("c_integer", integer_type_node);
888   if (!TYPE_NAME (char_type_node))
889     PUSH_TYPE ("c_char", char_type_node);
890
891 #undef PUSH_TYPE
892
893   pvoid_type_node = build_pointer_type (void_type_node);
894   prvoid_type_node = build_qualified_type (pvoid_type_node, TYPE_QUAL_RESTRICT);
895   ppvoid_type_node = build_pointer_type (pvoid_type_node);
896   pchar_type_node = build_pointer_type (gfc_character1_type_node);
897   pfunc_type_node
898     = build_pointer_type (build_function_type_list (void_type_node, NULL_TREE));
899
900   gfc_array_index_type = gfc_get_int_type (gfc_index_integer_kind);
901   /* We cannot use gfc_index_zero_node in definition of gfc_array_range_type,
902      since this function is called before gfc_init_constants.  */
903   gfc_array_range_type
904           = build_range_type (gfc_array_index_type,
905                               build_int_cst (gfc_array_index_type, 0),
906                               NULL_TREE);
907
908   /* The maximum array element size that can be handled is determined
909      by the number of bits available to store this field in the array
910      descriptor.  */
911
912   n = TYPE_PRECISION (gfc_array_index_type) - GFC_DTYPE_SIZE_SHIFT;
913   lo = ~ (unsigned HOST_WIDE_INT) 0;
914   if (n > HOST_BITS_PER_WIDE_INT)
915     hi = lo >> (2*HOST_BITS_PER_WIDE_INT - n);
916   else
917     hi = 0, lo >>= HOST_BITS_PER_WIDE_INT - n;
918   gfc_max_array_element_size
919     = build_int_cst_wide (long_unsigned_type_node, lo, hi);
920
921   boolean_type_node = gfc_get_logical_type (gfc_default_logical_kind);
922   boolean_true_node = build_int_cst (boolean_type_node, 1);
923   boolean_false_node = build_int_cst (boolean_type_node, 0);
924
925   /* ??? Shouldn't this be based on gfc_index_integer_kind or so?  */
926   gfc_charlen_int_kind = 4;
927   gfc_charlen_type_node = gfc_get_int_type (gfc_charlen_int_kind);
928 }
929
930 /* Get the type node for the given type and kind.  */
931
932 tree
933 gfc_get_int_type (int kind)
934 {
935   int index = gfc_validate_kind (BT_INTEGER, kind, true);
936   return index < 0 ? 0 : gfc_integer_types[index];
937 }
938
939 tree
940 gfc_get_real_type (int kind)
941 {
942   int index = gfc_validate_kind (BT_REAL, kind, true);
943   return index < 0 ? 0 : gfc_real_types[index];
944 }
945
946 tree
947 gfc_get_complex_type (int kind)
948 {
949   int index = gfc_validate_kind (BT_COMPLEX, kind, true);
950   return index < 0 ? 0 : gfc_complex_types[index];
951 }
952
953 tree
954 gfc_get_logical_type (int kind)
955 {
956   int index = gfc_validate_kind (BT_LOGICAL, kind, true);
957   return index < 0 ? 0 : gfc_logical_types[index];
958 }
959
960 tree
961 gfc_get_char_type (int kind)
962 {
963   int index = gfc_validate_kind (BT_CHARACTER, kind, true);
964   return index < 0 ? 0 : gfc_character_types[index];
965 }
966
967 tree
968 gfc_get_pchar_type (int kind)
969 {
970   int index = gfc_validate_kind (BT_CHARACTER, kind, true);
971   return index < 0 ? 0 : gfc_pcharacter_types[index];
972 }
973
974 \f
975 /* Create a character type with the given kind and length.  */
976
977 tree
978 gfc_get_character_type_len_for_eltype (tree eltype, tree len)
979 {
980   tree bounds, type;
981
982   bounds = build_range_type (gfc_charlen_type_node, gfc_index_one_node, len);
983   type = build_array_type (eltype, bounds);
984   TYPE_STRING_FLAG (type) = 1;
985
986   return type;
987 }
988
989 tree
990 gfc_get_character_type_len (int kind, tree len)
991 {
992   gfc_validate_kind (BT_CHARACTER, kind, false);
993   return gfc_get_character_type_len_for_eltype (gfc_get_char_type (kind), len);
994 }
995
996
997 /* Get a type node for a character kind.  */
998
999 tree
1000 gfc_get_character_type (int kind, gfc_charlen * cl)
1001 {
1002   tree len;
1003
1004   len = (cl == NULL) ? NULL_TREE : cl->backend_decl;
1005
1006   return gfc_get_character_type_len (kind, len);
1007 }
1008 \f
1009 /* Covert a basic type.  This will be an array for character types.  */
1010
1011 tree
1012 gfc_typenode_for_spec (gfc_typespec * spec)
1013 {
1014   tree basetype;
1015
1016   switch (spec->type)
1017     {
1018     case BT_UNKNOWN:
1019       gcc_unreachable ();
1020
1021     case BT_INTEGER:
1022       /* We use INTEGER(c_intptr_t) for C_PTR and C_FUNPTR once the symbol
1023          has been resolved.  This is done so we can convert C_PTR and
1024          C_FUNPTR to simple variables that get translated to (void *).  */
1025       if (spec->f90_type == BT_VOID)
1026         {
1027           if (spec->u.derived
1028               && spec->u.derived->intmod_sym_id == ISOCBINDING_PTR)
1029             basetype = ptr_type_node;
1030           else
1031             basetype = pfunc_type_node;
1032         }
1033       else
1034         basetype = gfc_get_int_type (spec->kind);
1035       break;
1036
1037     case BT_REAL:
1038       basetype = gfc_get_real_type (spec->kind);
1039       break;
1040
1041     case BT_COMPLEX:
1042       basetype = gfc_get_complex_type (spec->kind);
1043       break;
1044
1045     case BT_LOGICAL:
1046       basetype = gfc_get_logical_type (spec->kind);
1047       break;
1048
1049     case BT_CHARACTER:
1050 #if 0
1051       if (spec->deferred)
1052         basetype = gfc_get_character_type (spec->kind, NULL);
1053       else
1054 #endif
1055         basetype = gfc_get_character_type (spec->kind, spec->u.cl);
1056       break;
1057
1058     case BT_DERIVED:
1059     case BT_CLASS:
1060       basetype = gfc_get_derived_type (spec->u.derived);
1061
1062       /* If we're dealing with either C_PTR or C_FUNPTR, we modified the
1063          type and kind to fit a (void *) and the basetype returned was a
1064          ptr_type_node.  We need to pass up this new information to the
1065          symbol that was declared of type C_PTR or C_FUNPTR.  */
1066       if (spec->u.derived->attr.is_iso_c)
1067         {
1068           spec->type = spec->u.derived->ts.type;
1069           spec->kind = spec->u.derived->ts.kind;
1070           spec->f90_type = spec->u.derived->ts.f90_type;
1071         }
1072       break;
1073     case BT_VOID:
1074       /* This is for the second arg to c_f_pointer and c_f_procpointer
1075          of the iso_c_binding module, to accept any ptr type.  */
1076       basetype = ptr_type_node;
1077       if (spec->f90_type == BT_VOID)
1078         {
1079           if (spec->u.derived
1080               && spec->u.derived->intmod_sym_id == ISOCBINDING_PTR)
1081             basetype = ptr_type_node;
1082           else
1083             basetype = pfunc_type_node;
1084         }
1085        break;
1086     default:
1087       gcc_unreachable ();
1088     }
1089   return basetype;
1090 }
1091 \f
1092 /* Build an INT_CST for constant expressions, otherwise return NULL_TREE.  */
1093
1094 static tree
1095 gfc_conv_array_bound (gfc_expr * expr)
1096 {
1097   /* If expr is an integer constant, return that.  */
1098   if (expr != NULL && expr->expr_type == EXPR_CONSTANT)
1099     return gfc_conv_mpz_to_tree (expr->value.integer, gfc_index_integer_kind);
1100
1101   /* Otherwise return NULL.  */
1102   return NULL_TREE;
1103 }
1104 \f
1105 tree
1106 gfc_get_element_type (tree type)
1107 {
1108   tree element;
1109
1110   if (GFC_ARRAY_TYPE_P (type))
1111     {
1112       if (TREE_CODE (type) == POINTER_TYPE)
1113         type = TREE_TYPE (type);
1114       gcc_assert (TREE_CODE (type) == ARRAY_TYPE);
1115       element = TREE_TYPE (type);
1116     }
1117   else
1118     {
1119       gcc_assert (GFC_DESCRIPTOR_TYPE_P (type));
1120       element = GFC_TYPE_ARRAY_DATAPTR_TYPE (type);
1121
1122       gcc_assert (TREE_CODE (element) == POINTER_TYPE);
1123       element = TREE_TYPE (element);
1124
1125       gcc_assert (TREE_CODE (element) == ARRAY_TYPE);
1126       element = TREE_TYPE (element);
1127     }
1128
1129   return element;
1130 }
1131 \f
1132 /* Build an array.  This function is called from gfc_sym_type().
1133    Actually returns array descriptor type.
1134
1135    Format of array descriptors is as follows:
1136
1137     struct gfc_array_descriptor
1138     {
1139       array *data
1140       index offset;
1141       index dtype;
1142       struct descriptor_dimension dimension[N_DIM];
1143     }
1144
1145     struct descriptor_dimension
1146     {
1147       index stride;
1148       index lbound;
1149       index ubound;
1150     }
1151
1152    Translation code should use gfc_conv_descriptor_* rather than
1153    accessing the descriptor directly.  Any changes to the array
1154    descriptor type will require changes in gfc_conv_descriptor_* and
1155    gfc_build_array_initializer.
1156
1157    This is represented internally as a RECORD_TYPE. The index nodes
1158    are gfc_array_index_type and the data node is a pointer to the
1159    data.  See below for the handling of character types.
1160
1161    The dtype member is formatted as follows:
1162     rank = dtype & GFC_DTYPE_RANK_MASK // 3 bits
1163     type = (dtype & GFC_DTYPE_TYPE_MASK) >> GFC_DTYPE_TYPE_SHIFT // 3 bits
1164     size = dtype >> GFC_DTYPE_SIZE_SHIFT
1165
1166    I originally used nested ARRAY_TYPE nodes to represent arrays, but
1167    this generated poor code for assumed/deferred size arrays.  These
1168    require use of PLACEHOLDER_EXPR/WITH_RECORD_EXPR, which isn't part
1169    of the GENERIC grammar.  Also, there is no way to explicitly set
1170    the array stride, so all data must be packed(1).  I've tried to
1171    mark all the functions which would require modification with a GCC
1172    ARRAYS comment.
1173
1174    The data component points to the first element in the array.  The
1175    offset field is the position of the origin of the array (i.e. element
1176    (0, 0 ...)).  This may be outside the bounds of the array.
1177
1178    An element is accessed by
1179     data[offset + index0*stride0 + index1*stride1 + index2*stride2]
1180    This gives good performance as the computation does not involve the
1181    bounds of the array.  For packed arrays, this is optimized further
1182    by substituting the known strides.
1183
1184    This system has one problem: all array bounds must be within 2^31
1185    elements of the origin (2^63 on 64-bit machines).  For example
1186     integer, dimension (80000:90000, 80000:90000, 2) :: array
1187    may not work properly on 32-bit machines because 80000*80000 >
1188    2^31, so the calculation for stride2 would overflow.  This may
1189    still work, but I haven't checked, and it relies on the overflow
1190    doing the right thing.
1191
1192    The way to fix this problem is to access elements as follows:
1193     data[(index0-lbound0)*stride0 + (index1-lbound1)*stride1]
1194    Obviously this is much slower.  I will make this a compile time
1195    option, something like -fsmall-array-offsets.  Mixing code compiled
1196    with and without this switch will work.
1197
1198    (1) This can be worked around by modifying the upper bound of the
1199    previous dimension.  This requires extra fields in the descriptor
1200    (both real_ubound and fake_ubound).  */
1201
1202
1203 /* Returns true if the array sym does not require a descriptor.  */
1204
1205 int
1206 gfc_is_nodesc_array (gfc_symbol * sym)
1207 {
1208   gcc_assert (sym->attr.dimension);
1209
1210   /* We only want local arrays.  */
1211   if (sym->attr.pointer || sym->attr.allocatable)
1212     return 0;
1213
1214   /* We want a descriptor for associate-name arrays that do not have an
1215      explicitely known shape already.  */
1216   if (sym->assoc && sym->as->type != AS_EXPLICIT)
1217     return 0;
1218
1219   if (sym->attr.dummy)
1220     return sym->as->type != AS_ASSUMED_SHAPE;
1221
1222   if (sym->attr.result || sym->attr.function)
1223     return 0;
1224
1225   gcc_assert (sym->as->type == AS_EXPLICIT || sym->as->cp_was_assumed);
1226
1227   return 1;
1228 }
1229
1230
1231 /* Create an array descriptor type.  */
1232
1233 static tree
1234 gfc_build_array_type (tree type, gfc_array_spec * as,
1235                       enum gfc_array_kind akind, bool restricted,
1236                       bool contiguous)
1237 {
1238   tree lbound[GFC_MAX_DIMENSIONS];
1239   tree ubound[GFC_MAX_DIMENSIONS];
1240   int n;
1241
1242   for (n = 0; n < as->rank; n++)
1243     {
1244       /* Create expressions for the known bounds of the array.  */
1245       if (as->type == AS_ASSUMED_SHAPE && as->lower[n] == NULL)
1246         lbound[n] = gfc_index_one_node;
1247       else
1248         lbound[n] = gfc_conv_array_bound (as->lower[n]);
1249       ubound[n] = gfc_conv_array_bound (as->upper[n]);
1250     }
1251
1252   if (as->type == AS_ASSUMED_SHAPE)
1253     akind = contiguous ? GFC_ARRAY_ASSUMED_SHAPE_CONT
1254                        : GFC_ARRAY_ASSUMED_SHAPE;
1255   return gfc_get_array_type_bounds (type, as->rank, as->corank, lbound,
1256                                     ubound, 0, akind, restricted);
1257 }
1258 \f
1259 /* Returns the struct descriptor_dimension type.  */
1260
1261 static tree
1262 gfc_get_desc_dim_type (void)
1263 {
1264   tree type;
1265   tree decl, *chain = NULL;
1266
1267   if (gfc_desc_dim_type)
1268     return gfc_desc_dim_type;
1269
1270   /* Build the type node.  */
1271   type = make_node (RECORD_TYPE);
1272
1273   TYPE_NAME (type) = get_identifier ("descriptor_dimension");
1274   TYPE_PACKED (type) = 1;
1275
1276   /* Consists of the stride, lbound and ubound members.  */
1277   decl = gfc_add_field_to_struct_1 (type,
1278                                     get_identifier ("stride"),
1279                                     gfc_array_index_type, &chain);
1280   TREE_NO_WARNING (decl) = 1;
1281
1282   decl = gfc_add_field_to_struct_1 (type,
1283                                     get_identifier ("lbound"),
1284                                     gfc_array_index_type, &chain);
1285   TREE_NO_WARNING (decl) = 1;
1286
1287   decl = gfc_add_field_to_struct_1 (type,
1288                                     get_identifier ("ubound"),
1289                                     gfc_array_index_type, &chain);
1290   TREE_NO_WARNING (decl) = 1;
1291
1292   /* Finish off the type.  */
1293   gfc_finish_type (type);
1294   TYPE_DECL_SUPPRESS_DEBUG (TYPE_STUB_DECL (type)) = 1;
1295
1296   gfc_desc_dim_type = type;
1297   return type;
1298 }
1299
1300
1301 /* Return the DTYPE for an array.  This describes the type and type parameters
1302    of the array.  */
1303 /* TODO: Only call this when the value is actually used, and make all the
1304    unknown cases abort.  */
1305
1306 tree
1307 gfc_get_dtype (tree type)
1308 {
1309   tree size;
1310   int n;
1311   HOST_WIDE_INT i;
1312   tree tmp;
1313   tree dtype;
1314   tree etype;
1315   int rank;
1316
1317   gcc_assert (GFC_DESCRIPTOR_TYPE_P (type) || GFC_ARRAY_TYPE_P (type));
1318
1319   if (GFC_TYPE_ARRAY_DTYPE (type))
1320     return GFC_TYPE_ARRAY_DTYPE (type);
1321
1322   rank = GFC_TYPE_ARRAY_RANK (type);
1323   etype = gfc_get_element_type (type);
1324
1325   switch (TREE_CODE (etype))
1326     {
1327     case INTEGER_TYPE:
1328       n = BT_INTEGER;
1329       break;
1330
1331     case BOOLEAN_TYPE:
1332       n = BT_LOGICAL;
1333       break;
1334
1335     case REAL_TYPE:
1336       n = BT_REAL;
1337       break;
1338
1339     case COMPLEX_TYPE:
1340       n = BT_COMPLEX;
1341       break;
1342
1343     /* We will never have arrays of arrays.  */
1344     case RECORD_TYPE:
1345       n = BT_DERIVED;
1346       break;
1347
1348     case ARRAY_TYPE:
1349       n = BT_CHARACTER;
1350       break;
1351
1352     default:
1353       /* TODO: Don't do dtype for temporary descriptorless arrays.  */
1354       /* We can strange array types for temporary arrays.  */
1355       return gfc_index_zero_node;
1356     }
1357
1358   gcc_assert (rank <= GFC_DTYPE_RANK_MASK);
1359   size = TYPE_SIZE_UNIT (etype);
1360
1361   i = rank | (n << GFC_DTYPE_TYPE_SHIFT);
1362   if (size && INTEGER_CST_P (size))
1363     {
1364       if (tree_int_cst_lt (gfc_max_array_element_size, size))
1365         internal_error ("Array element size too big");
1366
1367       i += TREE_INT_CST_LOW (size) << GFC_DTYPE_SIZE_SHIFT;
1368     }
1369   dtype = build_int_cst (gfc_array_index_type, i);
1370
1371   if (size && !INTEGER_CST_P (size))
1372     {
1373       tmp = build_int_cst (gfc_array_index_type, GFC_DTYPE_SIZE_SHIFT);
1374       tmp  = fold_build2_loc (input_location, LSHIFT_EXPR,
1375                               gfc_array_index_type,
1376                               fold_convert (gfc_array_index_type, size), tmp);
1377       dtype = fold_build2_loc (input_location, PLUS_EXPR, gfc_array_index_type,
1378                                tmp, dtype);
1379     }
1380   /* If we don't know the size we leave it as zero.  This should never happen
1381      for anything that is actually used.  */
1382   /* TODO: Check this is actually true, particularly when repacking
1383      assumed size parameters.  */
1384
1385   GFC_TYPE_ARRAY_DTYPE (type) = dtype;
1386   return dtype;
1387 }
1388
1389
1390 /* Build an array type for use without a descriptor, packed according
1391    to the value of PACKED.  */
1392
1393 tree
1394 gfc_get_nodesc_array_type (tree etype, gfc_array_spec * as, gfc_packed packed,
1395                            bool restricted)
1396 {
1397   tree range;
1398   tree type;
1399   tree tmp;
1400   int n;
1401   int known_stride;
1402   int known_offset;
1403   mpz_t offset;
1404   mpz_t stride;
1405   mpz_t delta;
1406   gfc_expr *expr;
1407
1408   mpz_init_set_ui (offset, 0);
1409   mpz_init_set_ui (stride, 1);
1410   mpz_init (delta);
1411
1412   /* We don't use build_array_type because this does not include include
1413      lang-specific information (i.e. the bounds of the array) when checking
1414      for duplicates.  */
1415   type = make_node (ARRAY_TYPE);
1416
1417   GFC_ARRAY_TYPE_P (type) = 1;
1418   TYPE_LANG_SPECIFIC (type)
1419       = ggc_alloc_cleared_lang_type (sizeof (struct lang_type));
1420
1421   known_stride = (packed != PACKED_NO);
1422   known_offset = 1;
1423   for (n = 0; n < as->rank; n++)
1424     {
1425       /* Fill in the stride and bound components of the type.  */
1426       if (known_stride)
1427         tmp = gfc_conv_mpz_to_tree (stride, gfc_index_integer_kind);
1428       else
1429         tmp = NULL_TREE;
1430       GFC_TYPE_ARRAY_STRIDE (type, n) = tmp;
1431
1432       expr = as->lower[n];
1433       if (expr->expr_type == EXPR_CONSTANT)
1434         {
1435           tmp = gfc_conv_mpz_to_tree (expr->value.integer,
1436                                       gfc_index_integer_kind);
1437         }
1438       else
1439         {
1440           known_stride = 0;
1441           tmp = NULL_TREE;
1442         }
1443       GFC_TYPE_ARRAY_LBOUND (type, n) = tmp;
1444
1445       if (known_stride)
1446         {
1447           /* Calculate the offset.  */
1448           mpz_mul (delta, stride, as->lower[n]->value.integer);
1449           mpz_sub (offset, offset, delta);
1450         }
1451       else
1452         known_offset = 0;
1453
1454       expr = as->upper[n];
1455       if (expr && expr->expr_type == EXPR_CONSTANT)
1456         {
1457           tmp = gfc_conv_mpz_to_tree (expr->value.integer,
1458                                   gfc_index_integer_kind);
1459         }
1460       else
1461         {
1462           tmp = NULL_TREE;
1463           known_stride = 0;
1464         }
1465       GFC_TYPE_ARRAY_UBOUND (type, n) = tmp;
1466
1467       if (known_stride)
1468         {
1469           /* Calculate the stride.  */
1470           mpz_sub (delta, as->upper[n]->value.integer,
1471                    as->lower[n]->value.integer);
1472           mpz_add_ui (delta, delta, 1);
1473           mpz_mul (stride, stride, delta);
1474         }
1475
1476       /* Only the first stride is known for partial packed arrays.  */
1477       if (packed == PACKED_NO || packed == PACKED_PARTIAL)
1478         known_stride = 0;
1479     }
1480
1481   if (known_offset)
1482     {
1483       GFC_TYPE_ARRAY_OFFSET (type) =
1484         gfc_conv_mpz_to_tree (offset, gfc_index_integer_kind);
1485     }
1486   else
1487     GFC_TYPE_ARRAY_OFFSET (type) = NULL_TREE;
1488
1489   if (known_stride)
1490     {
1491       GFC_TYPE_ARRAY_SIZE (type) =
1492         gfc_conv_mpz_to_tree (stride, gfc_index_integer_kind);
1493     }
1494   else
1495     GFC_TYPE_ARRAY_SIZE (type) = NULL_TREE;
1496
1497   GFC_TYPE_ARRAY_RANK (type) = as->rank;
1498   GFC_TYPE_ARRAY_DTYPE (type) = NULL_TREE;
1499   range = build_range_type (gfc_array_index_type, gfc_index_zero_node,
1500                             NULL_TREE);
1501   /* TODO: use main type if it is unbounded.  */
1502   GFC_TYPE_ARRAY_DATAPTR_TYPE (type) =
1503     build_pointer_type (build_array_type (etype, range));
1504   if (restricted)
1505     GFC_TYPE_ARRAY_DATAPTR_TYPE (type) =
1506       build_qualified_type (GFC_TYPE_ARRAY_DATAPTR_TYPE (type),
1507                             TYPE_QUAL_RESTRICT);
1508
1509   if (known_stride)
1510     {
1511       mpz_sub_ui (stride, stride, 1);
1512       range = gfc_conv_mpz_to_tree (stride, gfc_index_integer_kind);
1513     }
1514   else
1515     range = NULL_TREE;
1516
1517   range = build_range_type (gfc_array_index_type, gfc_index_zero_node, range);
1518   TYPE_DOMAIN (type) = range;
1519
1520   build_pointer_type (etype);
1521   TREE_TYPE (type) = etype;
1522
1523   layout_type (type);
1524
1525   mpz_clear (offset);
1526   mpz_clear (stride);
1527   mpz_clear (delta);
1528
1529   /* Represent packed arrays as multi-dimensional if they have rank >
1530      1 and with proper bounds, instead of flat arrays.  This makes for
1531      better debug info.  */
1532   if (known_offset)
1533     {
1534       tree gtype = etype, rtype, type_decl;
1535
1536       for (n = as->rank - 1; n >= 0; n--)
1537         {
1538           rtype = build_range_type (gfc_array_index_type,
1539                                     GFC_TYPE_ARRAY_LBOUND (type, n),
1540                                     GFC_TYPE_ARRAY_UBOUND (type, n));
1541           gtype = build_array_type (gtype, rtype);
1542         }
1543       TYPE_NAME (type) = type_decl = build_decl (input_location,
1544                                                  TYPE_DECL, NULL, gtype);
1545       DECL_ORIGINAL_TYPE (type_decl) = gtype;
1546     }
1547
1548   if (packed != PACKED_STATIC || !known_stride)
1549     {
1550       /* For dummy arrays and automatic (heap allocated) arrays we
1551          want a pointer to the array.  */
1552       type = build_pointer_type (type);
1553       if (restricted)
1554         type = build_qualified_type (type, TYPE_QUAL_RESTRICT);
1555       GFC_ARRAY_TYPE_P (type) = 1;
1556       TYPE_LANG_SPECIFIC (type) = TYPE_LANG_SPECIFIC (TREE_TYPE (type));
1557     }
1558   return type;
1559 }
1560
1561 /* Return or create the base type for an array descriptor.  */
1562
1563 static tree
1564 gfc_get_array_descriptor_base (int dimen, int codimen, bool restricted)
1565 {
1566   tree fat_type, decl, arraytype, *chain = NULL;
1567   char name[16 + 2*GFC_RANK_DIGITS + 1 + 1];
1568   int idx = 2 * (codimen + dimen - 1) + restricted;
1569
1570   gcc_assert (dimen >= 1 && codimen + dimen <= GFC_MAX_DIMENSIONS);
1571   if (gfc_array_descriptor_base[idx])
1572     return gfc_array_descriptor_base[idx];
1573
1574   /* Build the type node.  */
1575   fat_type = make_node (RECORD_TYPE);
1576
1577   sprintf (name, "array_descriptor" GFC_RANK_PRINTF_FORMAT, dimen + codimen);
1578   TYPE_NAME (fat_type) = get_identifier (name);
1579   TYPE_NAMELESS (fat_type) = 1;
1580
1581   /* Add the data member as the first element of the descriptor.  */
1582   decl = gfc_add_field_to_struct_1 (fat_type,
1583                                     get_identifier ("data"),
1584                                     (restricted
1585                                      ? prvoid_type_node
1586                                      : ptr_type_node), &chain);
1587
1588   /* Add the base component.  */
1589   decl = gfc_add_field_to_struct_1 (fat_type,
1590                                     get_identifier ("offset"),
1591                                     gfc_array_index_type, &chain);
1592   TREE_NO_WARNING (decl) = 1;
1593
1594   /* Add the dtype component.  */
1595   decl = gfc_add_field_to_struct_1 (fat_type,
1596                                     get_identifier ("dtype"),
1597                                     gfc_array_index_type, &chain);
1598   TREE_NO_WARNING (decl) = 1;
1599
1600   /* Build the array type for the stride and bound components.  */
1601   arraytype =
1602     build_array_type (gfc_get_desc_dim_type (),
1603                       build_range_type (gfc_array_index_type,
1604                                         gfc_index_zero_node,
1605                                         gfc_rank_cst[codimen + dimen - 1]));
1606
1607   decl = gfc_add_field_to_struct_1 (fat_type,
1608                                     get_identifier ("dim"),
1609                                     arraytype, &chain);
1610   TREE_NO_WARNING (decl) = 1;
1611
1612   /* Finish off the type.  */
1613   gfc_finish_type (fat_type);
1614   TYPE_DECL_SUPPRESS_DEBUG (TYPE_STUB_DECL (fat_type)) = 1;
1615
1616   gfc_array_descriptor_base[idx] = fat_type;
1617   return fat_type;
1618 }
1619
1620 /* Build an array (descriptor) type with given bounds.  */
1621
1622 tree
1623 gfc_get_array_type_bounds (tree etype, int dimen, int codimen, tree * lbound,
1624                            tree * ubound, int packed,
1625                            enum gfc_array_kind akind, bool restricted)
1626 {
1627   char name[8 + 2*GFC_RANK_DIGITS + 1 + GFC_MAX_SYMBOL_LEN];
1628   tree fat_type, base_type, arraytype, lower, upper, stride, tmp, rtype;
1629   const char *type_name;
1630   int n;
1631
1632   base_type = gfc_get_array_descriptor_base (dimen, codimen, restricted);
1633   fat_type = build_distinct_type_copy (base_type);
1634   /* Make sure that nontarget and target array type have the same canonical
1635      type (and same stub decl for debug info).  */
1636   base_type = gfc_get_array_descriptor_base (dimen, codimen, false);
1637   TYPE_CANONICAL (fat_type) = base_type;
1638   TYPE_STUB_DECL (fat_type) = TYPE_STUB_DECL (base_type);
1639
1640   tmp = TYPE_NAME (etype);
1641   if (tmp && TREE_CODE (tmp) == TYPE_DECL)
1642     tmp = DECL_NAME (tmp);
1643   if (tmp)
1644     type_name = IDENTIFIER_POINTER (tmp);
1645   else
1646     type_name = "unknown";
1647   sprintf (name, "array" GFC_RANK_PRINTF_FORMAT "_%.*s", dimen + codimen,
1648            GFC_MAX_SYMBOL_LEN, type_name);
1649   TYPE_NAME (fat_type) = get_identifier (name);
1650   TYPE_NAMELESS (fat_type) = 1;
1651
1652   GFC_DESCRIPTOR_TYPE_P (fat_type) = 1;
1653   TYPE_LANG_SPECIFIC (fat_type)
1654     = ggc_alloc_cleared_lang_type (sizeof (struct lang_type));
1655
1656   GFC_TYPE_ARRAY_RANK (fat_type) = dimen;
1657   GFC_TYPE_ARRAY_DTYPE (fat_type) = NULL_TREE;
1658   GFC_TYPE_ARRAY_AKIND (fat_type) = akind;
1659
1660   /* Build an array descriptor record type.  */
1661   if (packed != 0)
1662     stride = gfc_index_one_node;
1663   else
1664     stride = NULL_TREE;
1665   for (n = 0; n < dimen; n++)
1666     {
1667       GFC_TYPE_ARRAY_STRIDE (fat_type, n) = stride;
1668
1669       if (lbound)
1670         lower = lbound[n];
1671       else
1672         lower = NULL_TREE;
1673
1674       if (lower != NULL_TREE)
1675         {
1676           if (INTEGER_CST_P (lower))
1677             GFC_TYPE_ARRAY_LBOUND (fat_type, n) = lower;
1678           else
1679             lower = NULL_TREE;
1680         }
1681
1682       upper = ubound[n];
1683       if (upper != NULL_TREE)
1684         {
1685           if (INTEGER_CST_P (upper))
1686             GFC_TYPE_ARRAY_UBOUND (fat_type, n) = upper;
1687           else
1688             upper = NULL_TREE;
1689         }
1690
1691       if (upper != NULL_TREE && lower != NULL_TREE && stride != NULL_TREE)
1692         {
1693           tmp = fold_build2_loc (input_location, MINUS_EXPR,
1694                                  gfc_array_index_type, upper, lower);
1695           tmp = fold_build2_loc (input_location, PLUS_EXPR,
1696                                  gfc_array_index_type, tmp,
1697                                  gfc_index_one_node);
1698           stride = fold_build2_loc (input_location, MULT_EXPR,
1699                                     gfc_array_index_type, tmp, stride);
1700           /* Check the folding worked.  */
1701           gcc_assert (INTEGER_CST_P (stride));
1702         }
1703       else
1704         stride = NULL_TREE;
1705     }
1706   GFC_TYPE_ARRAY_SIZE (fat_type) = stride;
1707
1708   /* TODO: known offsets for descriptors.  */
1709   GFC_TYPE_ARRAY_OFFSET (fat_type) = NULL_TREE;
1710
1711   /* We define data as an array with the correct size if possible.
1712      Much better than doing pointer arithmetic.  */
1713   if (stride)
1714     rtype = build_range_type (gfc_array_index_type, gfc_index_zero_node,
1715                               int_const_binop (MINUS_EXPR, stride,
1716                                                integer_one_node, 0));
1717   else
1718     rtype = gfc_array_range_type;
1719   arraytype = build_array_type (etype, rtype);
1720   arraytype = build_pointer_type (arraytype);
1721   if (restricted)
1722     arraytype = build_qualified_type (arraytype, TYPE_QUAL_RESTRICT);
1723   GFC_TYPE_ARRAY_DATAPTR_TYPE (fat_type) = arraytype;
1724
1725   /* This will generate the base declarations we need to emit debug
1726      information for this type.  FIXME: there must be a better way to
1727      avoid divergence between compilations with and without debug
1728      information.  */
1729   {
1730     struct array_descr_info info;
1731     gfc_get_array_descr_info (fat_type, &info);
1732     gfc_get_array_descr_info (build_pointer_type (fat_type), &info);
1733   }
1734
1735   return fat_type;
1736 }
1737 \f
1738 /* Build a pointer type. This function is called from gfc_sym_type().  */
1739
1740 static tree
1741 gfc_build_pointer_type (gfc_symbol * sym, tree type)
1742 {
1743   /* Array pointer types aren't actually pointers.  */
1744   if (sym->attr.dimension)
1745     return type;
1746   else
1747     return build_pointer_type (type);
1748 }
1749
1750 static tree gfc_nonrestricted_type (tree t);
1751 /* Given two record or union type nodes TO and FROM, ensure
1752    that all fields in FROM have a corresponding field in TO,
1753    their type being nonrestrict variants.  This accepts a TO
1754    node that already has a prefix of the fields in FROM.  */
1755 static void
1756 mirror_fields (tree to, tree from)
1757 {
1758   tree fto, ffrom;
1759   tree *chain;
1760
1761   /* Forward to the end of TOs fields.  */
1762   fto = TYPE_FIELDS (to);
1763   ffrom = TYPE_FIELDS (from);
1764   chain = &TYPE_FIELDS (to);
1765   while (fto)
1766     {
1767       gcc_assert (ffrom && DECL_NAME (fto) == DECL_NAME (ffrom));
1768       chain = &DECL_CHAIN (fto);
1769       fto = DECL_CHAIN (fto);
1770       ffrom = DECL_CHAIN (ffrom);
1771     }
1772
1773   /* Now add all fields remaining in FROM (starting with ffrom).  */
1774   for (; ffrom; ffrom = DECL_CHAIN (ffrom))
1775     {
1776       tree newfield = copy_node (ffrom);
1777       DECL_CONTEXT (newfield) = to;
1778       /* The store to DECL_CHAIN might seem redundant with the
1779          stores to *chain, but not clearing it here would mean
1780          leaving a chain into the old fields.  If ever
1781          our called functions would look at them confusion
1782          will arise.  */
1783       DECL_CHAIN (newfield) = NULL_TREE;
1784       *chain = newfield;
1785       chain = &DECL_CHAIN (newfield);
1786
1787       if (TREE_CODE (ffrom) == FIELD_DECL)
1788         {
1789           tree elemtype = gfc_nonrestricted_type (TREE_TYPE (ffrom));
1790           TREE_TYPE (newfield) = elemtype;
1791         }
1792     }
1793   *chain = NULL_TREE;
1794 }
1795
1796 /* Given a type T, returns a different type of the same structure,
1797    except that all types it refers to (recursively) are always
1798    non-restrict qualified types.  */
1799 static tree
1800 gfc_nonrestricted_type (tree t)
1801 {
1802   tree ret = t;
1803
1804   /* If the type isn't layed out yet, don't copy it.  If something
1805      needs it for real it should wait until the type got finished.  */
1806   if (!TYPE_SIZE (t))
1807     return t;
1808
1809   if (!TYPE_LANG_SPECIFIC (t))
1810     TYPE_LANG_SPECIFIC (t)
1811       = ggc_alloc_cleared_lang_type (sizeof (struct lang_type));
1812   /* If we're dealing with this very node already further up
1813      the call chain (recursion via pointers and struct members)
1814      we haven't yet determined if we really need a new type node.
1815      Assume we don't, return T itself.  */
1816   if (TYPE_LANG_SPECIFIC (t)->nonrestricted_type == error_mark_node)
1817     return t;
1818
1819   /* If we have calculated this all already, just return it.  */
1820   if (TYPE_LANG_SPECIFIC (t)->nonrestricted_type)
1821     return TYPE_LANG_SPECIFIC (t)->nonrestricted_type;
1822
1823   /* Mark this type.  */
1824   TYPE_LANG_SPECIFIC (t)->nonrestricted_type = error_mark_node;
1825
1826   switch (TREE_CODE (t))
1827     {
1828       default:
1829         break;
1830
1831       case POINTER_TYPE:
1832       case REFERENCE_TYPE:
1833         {
1834           tree totype = gfc_nonrestricted_type (TREE_TYPE (t));
1835           if (totype == TREE_TYPE (t))
1836             ret = t;
1837           else if (TREE_CODE (t) == POINTER_TYPE)
1838             ret = build_pointer_type (totype);
1839           else
1840             ret = build_reference_type (totype);
1841           ret = build_qualified_type (ret,
1842                                       TYPE_QUALS (t) & ~TYPE_QUAL_RESTRICT);
1843         }
1844         break;
1845
1846       case ARRAY_TYPE:
1847         {
1848           tree elemtype = gfc_nonrestricted_type (TREE_TYPE (t));
1849           if (elemtype == TREE_TYPE (t))
1850             ret = t;
1851           else
1852             {
1853               ret = build_variant_type_copy (t);
1854               TREE_TYPE (ret) = elemtype;
1855               if (TYPE_LANG_SPECIFIC (t)
1856                   && GFC_TYPE_ARRAY_DATAPTR_TYPE (t))
1857                 {
1858                   tree dataptr_type = GFC_TYPE_ARRAY_DATAPTR_TYPE (t);
1859                   dataptr_type = gfc_nonrestricted_type (dataptr_type);
1860                   if (dataptr_type != GFC_TYPE_ARRAY_DATAPTR_TYPE (t))
1861                     {
1862                       TYPE_LANG_SPECIFIC (ret)
1863                         = ggc_alloc_cleared_lang_type (sizeof (struct
1864                                                                lang_type));
1865                       *TYPE_LANG_SPECIFIC (ret) = *TYPE_LANG_SPECIFIC (t);
1866                       GFC_TYPE_ARRAY_DATAPTR_TYPE (ret) = dataptr_type;
1867                     }
1868                 }
1869             }
1870         }
1871         break;
1872
1873       case RECORD_TYPE:
1874       case UNION_TYPE:
1875       case QUAL_UNION_TYPE:
1876         {
1877           tree field;
1878           /* First determine if we need a new type at all.
1879              Careful, the two calls to gfc_nonrestricted_type per field
1880              might return different values.  That happens exactly when
1881              one of the fields reaches back to this very record type
1882              (via pointers).  The first calls will assume that we don't
1883              need to copy T (see the error_mark_node marking).  If there
1884              are any reasons for copying T apart from having to copy T,
1885              we'll indeed copy it, and the second calls to
1886              gfc_nonrestricted_type will use that new node if they
1887              reach back to T.  */
1888           for (field = TYPE_FIELDS (t); field; field = DECL_CHAIN (field))
1889             if (TREE_CODE (field) == FIELD_DECL)
1890               {
1891                 tree elemtype = gfc_nonrestricted_type (TREE_TYPE (field));
1892                 if (elemtype != TREE_TYPE (field))
1893                   break;
1894               }
1895           if (!field)
1896             break;
1897           ret = build_variant_type_copy (t);
1898           TYPE_FIELDS (ret) = NULL_TREE;
1899
1900           /* Here we make sure that as soon as we know we have to copy
1901              T, that also fields reaching back to us will use the new
1902              copy.  It's okay if that copy still contains the old fields,
1903              we won't look at them.  */
1904           TYPE_LANG_SPECIFIC (t)->nonrestricted_type = ret;
1905           mirror_fields (ret, t);
1906         }
1907         break;
1908     }
1909
1910   TYPE_LANG_SPECIFIC (t)->nonrestricted_type = ret;
1911   return ret;
1912 }
1913
1914 \f
1915 /* Return the type for a symbol.  Special handling is required for character
1916    types to get the correct level of indirection.
1917    For functions return the return type.
1918    For subroutines return void_type_node.
1919    Calling this multiple times for the same symbol should be avoided,
1920    especially for character and array types.  */
1921
1922 tree
1923 gfc_sym_type (gfc_symbol * sym)
1924 {
1925   tree type;
1926   int byref;
1927   bool restricted;
1928
1929   /* Procedure Pointers inside COMMON blocks.  */
1930   if (sym->attr.proc_pointer && sym->attr.in_common)
1931     {
1932       /* Unset proc_pointer as gfc_get_function_type calls gfc_sym_type.  */
1933       sym->attr.proc_pointer = 0;
1934       type = build_pointer_type (gfc_get_function_type (sym));
1935       sym->attr.proc_pointer = 1;
1936       return type;
1937     }
1938
1939   if (sym->attr.flavor == FL_PROCEDURE && !sym->attr.function)
1940     return void_type_node;
1941
1942   /* In the case of a function the fake result variable may have a
1943      type different from the function type, so don't return early in
1944      that case.  */
1945   if (sym->backend_decl && !sym->attr.function)
1946     return TREE_TYPE (sym->backend_decl);
1947
1948   if (sym->ts.type == BT_CHARACTER
1949       && ((sym->attr.function && sym->attr.is_bind_c)
1950           || (sym->attr.result
1951               && sym->ns->proc_name
1952               && sym->ns->proc_name->attr.is_bind_c)))
1953     type = gfc_character1_type_node;
1954   else
1955     type = gfc_typenode_for_spec (&sym->ts);
1956
1957   if (sym->attr.dummy && !sym->attr.function && !sym->attr.value)
1958     byref = 1;
1959   else
1960     byref = 0;
1961
1962   restricted = !sym->attr.target && !sym->attr.pointer
1963                && !sym->attr.proc_pointer && !sym->attr.cray_pointee;
1964   if (!restricted)
1965     type = gfc_nonrestricted_type (type);
1966
1967   if (sym->attr.dimension)
1968     {
1969       if (gfc_is_nodesc_array (sym))
1970         {
1971           /* If this is a character argument of unknown length, just use the
1972              base type.  */
1973           if (sym->ts.type != BT_CHARACTER
1974               || !(sym->attr.dummy || sym->attr.function)
1975               || sym->ts.u.cl->backend_decl)
1976             {
1977               type = gfc_get_nodesc_array_type (type, sym->as,
1978                                                 byref ? PACKED_FULL
1979                                                       : PACKED_STATIC,
1980                                                 restricted);
1981               byref = 0;
1982             }
1983
1984           if (sym->attr.cray_pointee)
1985             GFC_POINTER_TYPE_P (type) = 1;
1986         }
1987       else
1988         {
1989           enum gfc_array_kind akind = GFC_ARRAY_UNKNOWN;
1990           if (sym->attr.pointer)
1991             akind = sym->attr.contiguous ? GFC_ARRAY_POINTER_CONT
1992                                          : GFC_ARRAY_POINTER;
1993           else if (sym->attr.allocatable)
1994             akind = GFC_ARRAY_ALLOCATABLE;
1995           type = gfc_build_array_type (type, sym->as, akind, restricted,
1996                                        sym->attr.contiguous);
1997         }
1998     }
1999   else
2000     {
2001       if (sym->attr.allocatable || sym->attr.pointer
2002           || gfc_is_associate_pointer (sym))
2003         type = gfc_build_pointer_type (sym, type);
2004       if (sym->attr.pointer || sym->attr.cray_pointee)
2005         GFC_POINTER_TYPE_P (type) = 1;
2006     }
2007
2008   /* We currently pass all parameters by reference.
2009      See f95_get_function_decl.  For dummy function parameters return the
2010      function type.  */
2011   if (byref)
2012     {
2013       /* We must use pointer types for potentially absent variables.  The
2014          optimizers assume a reference type argument is never NULL.  */
2015       if (sym->attr.optional || sym->ns->proc_name->attr.entry_master)
2016         type = build_pointer_type (type);
2017       else
2018         {
2019           type = build_reference_type (type);
2020           if (restricted)
2021             type = build_qualified_type (type, TYPE_QUAL_RESTRICT);
2022         }
2023     }
2024
2025   return (type);
2026 }
2027 \f
2028 /* Layout and output debug info for a record type.  */
2029
2030 void
2031 gfc_finish_type (tree type)
2032 {
2033   tree decl;
2034
2035   decl = build_decl (input_location,
2036                      TYPE_DECL, NULL_TREE, type);
2037   TYPE_STUB_DECL (type) = decl;
2038   layout_type (type);
2039   rest_of_type_compilation (type, 1);
2040   rest_of_decl_compilation (decl, 1, 0);
2041 }
2042 \f
2043 /* Add a field of given NAME and TYPE to the context of a UNION_TYPE
2044    or RECORD_TYPE pointed to by CONTEXT.  The new field is chained
2045    to the end of the field list pointed to by *CHAIN.
2046
2047    Returns a pointer to the new field.  */
2048
2049 static tree
2050 gfc_add_field_to_struct_1 (tree context, tree name, tree type, tree **chain)
2051 {
2052   tree decl = build_decl (input_location, FIELD_DECL, name, type);
2053
2054   DECL_CONTEXT (decl) = context;
2055   DECL_CHAIN (decl) = NULL_TREE;
2056   if (TYPE_FIELDS (context) == NULL_TREE)
2057     TYPE_FIELDS (context) = decl;
2058   if (chain != NULL)
2059     {
2060       if (*chain != NULL)
2061         **chain = decl;
2062       *chain = &DECL_CHAIN (decl);
2063     }
2064
2065   return decl;
2066 }
2067
2068 /* Like `gfc_add_field_to_struct_1', but adds alignment
2069    information.  */
2070
2071 tree
2072 gfc_add_field_to_struct (tree context, tree name, tree type, tree **chain)
2073 {
2074   tree decl = gfc_add_field_to_struct_1 (context, name, type, chain);
2075
2076   DECL_INITIAL (decl) = 0;
2077   DECL_ALIGN (decl) = 0;
2078   DECL_USER_ALIGN (decl) = 0;
2079
2080   return decl;
2081 }
2082
2083
2084 /* Copy the backend_decl and component backend_decls if
2085    the two derived type symbols are "equal", as described
2086    in 4.4.2 and resolved by gfc_compare_derived_types.  */
2087
2088 int
2089 gfc_copy_dt_decls_ifequal (gfc_symbol *from, gfc_symbol *to,
2090                            bool from_gsym)
2091 {
2092   gfc_component *to_cm;
2093   gfc_component *from_cm;
2094
2095   if (from->backend_decl == NULL
2096         || !gfc_compare_derived_types (from, to))
2097     return 0;
2098
2099   to->backend_decl = from->backend_decl;
2100
2101   to_cm = to->components;
2102   from_cm = from->components;
2103
2104   /* Copy the component declarations.  If a component is itself
2105      a derived type, we need a copy of its component declarations.
2106      This is done by recursing into gfc_get_derived_type and
2107      ensures that the component's component declarations have
2108      been built.  If it is a character, we need the character 
2109      length, as well.  */
2110   for (; to_cm; to_cm = to_cm->next, from_cm = from_cm->next)
2111     {
2112       to_cm->backend_decl = from_cm->backend_decl;
2113       if (from_cm->ts.type == BT_DERIVED
2114           && (!from_cm->attr.pointer || from_gsym))
2115         gfc_get_derived_type (to_cm->ts.u.derived);
2116       else if (from_cm->ts.type == BT_CLASS
2117                && (!CLASS_DATA (from_cm)->attr.class_pointer || from_gsym))
2118         gfc_get_derived_type (to_cm->ts.u.derived);
2119       else if (from_cm->ts.type == BT_CHARACTER)
2120         to_cm->ts.u.cl->backend_decl = from_cm->ts.u.cl->backend_decl;
2121     }
2122
2123   return 1;
2124 }
2125
2126
2127 /* Build a tree node for a procedure pointer component.  */
2128
2129 tree
2130 gfc_get_ppc_type (gfc_component* c)
2131 {
2132   tree t;
2133
2134   /* Explicit interface.  */
2135   if (c->attr.if_source != IFSRC_UNKNOWN && c->ts.interface)
2136     return build_pointer_type (gfc_get_function_type (c->ts.interface));
2137
2138   /* Implicit interface (only return value may be known).  */
2139   if (c->attr.function && !c->attr.dimension && c->ts.type != BT_CHARACTER)
2140     t = gfc_typenode_for_spec (&c->ts);
2141   else
2142     t = void_type_node;
2143
2144   return build_pointer_type (build_function_type_list (t, NULL_TREE));
2145 }
2146
2147
2148 /* Build a tree node for a derived type.  If there are equal
2149    derived types, with different local names, these are built
2150    at the same time.  If an equal derived type has been built
2151    in a parent namespace, this is used.  */
2152
2153 tree
2154 gfc_get_derived_type (gfc_symbol * derived)
2155 {
2156   tree typenode = NULL, field = NULL, field_type = NULL;
2157   tree canonical = NULL_TREE;
2158   tree *chain = NULL;
2159   bool got_canonical = false;
2160   gfc_component *c;
2161   gfc_dt_list *dt;
2162   gfc_namespace *ns;
2163
2164   gcc_assert (derived && derived->attr.flavor == FL_DERIVED);
2165
2166   /* See if it's one of the iso_c_binding derived types.  */
2167   if (derived->attr.is_iso_c == 1)
2168     {
2169       if (derived->backend_decl)
2170         return derived->backend_decl;
2171
2172       if (derived->intmod_sym_id == ISOCBINDING_PTR)
2173         derived->backend_decl = ptr_type_node;
2174       else
2175         derived->backend_decl = pfunc_type_node;
2176
2177       derived->ts.kind = gfc_index_integer_kind;
2178       derived->ts.type = BT_INTEGER;
2179       /* Set the f90_type to BT_VOID as a way to recognize something of type
2180          BT_INTEGER that needs to fit a void * for the purpose of the
2181          iso_c_binding derived types.  */
2182       derived->ts.f90_type = BT_VOID;
2183       
2184       return derived->backend_decl;
2185     }
2186
2187   /* If use associated, use the module type for this one.  */
2188   if (gfc_option.flag_whole_file
2189         && derived->backend_decl == NULL
2190         && derived->attr.use_assoc
2191         && derived->module
2192         && gfc_get_module_backend_decl (derived))
2193     goto copy_derived_types;
2194
2195   /* If a whole file compilation, the derived types from an earlier
2196      namespace can be used as the the canonical type.  */
2197   if (gfc_option.flag_whole_file
2198         && derived->backend_decl == NULL
2199         && !derived->attr.use_assoc
2200         && gfc_global_ns_list)
2201     {
2202       for (ns = gfc_global_ns_list;
2203            ns->translated && !got_canonical;
2204            ns = ns->sibling)
2205         {
2206           dt = ns->derived_types;
2207           for (; dt && !canonical; dt = dt->next)
2208             {
2209               gfc_copy_dt_decls_ifequal (dt->derived, derived, true);
2210               if (derived->backend_decl)
2211                 got_canonical = true;
2212             }
2213         }
2214     }
2215
2216   /* Store up the canonical type to be added to this one.  */
2217   if (got_canonical)
2218     {
2219       if (TYPE_CANONICAL (derived->backend_decl))
2220         canonical = TYPE_CANONICAL (derived->backend_decl);
2221       else
2222         canonical = derived->backend_decl;
2223
2224       derived->backend_decl = NULL_TREE;
2225     }
2226
2227   /* derived->backend_decl != 0 means we saw it before, but its
2228      components' backend_decl may have not been built.  */
2229   if (derived->backend_decl)
2230     {
2231       /* Its components' backend_decl have been built or we are
2232          seeing recursion through the formal arglist of a procedure
2233          pointer component.  */
2234       if (TYPE_FIELDS (derived->backend_decl)
2235             || derived->attr.proc_pointer_comp)
2236         return derived->backend_decl;
2237       else
2238         typenode = derived->backend_decl;
2239     }
2240   else
2241     {
2242       /* We see this derived type first time, so build the type node.  */
2243       typenode = make_node (RECORD_TYPE);
2244       TYPE_NAME (typenode) = get_identifier (derived->name);
2245       TYPE_PACKED (typenode) = gfc_option.flag_pack_derived;
2246       derived->backend_decl = typenode;
2247     }
2248
2249   /* Go through the derived type components, building them as
2250      necessary. The reason for doing this now is that it is
2251      possible to recurse back to this derived type through a
2252      pointer component (PR24092). If this happens, the fields
2253      will be built and so we can return the type.  */
2254   for (c = derived->components; c; c = c->next)
2255     {
2256       if (c->ts.type != BT_DERIVED && c->ts.type != BT_CLASS)
2257         continue;
2258
2259       if ((!c->attr.pointer && !c->attr.proc_pointer)
2260           || c->ts.u.derived->backend_decl == NULL)
2261         c->ts.u.derived->backend_decl = gfc_get_derived_type (c->ts.u.derived);
2262
2263       if (c->ts.u.derived && c->ts.u.derived->attr.is_iso_c)
2264         {
2265           /* Need to copy the modified ts from the derived type.  The
2266              typespec was modified because C_PTR/C_FUNPTR are translated
2267              into (void *) from derived types.  */
2268           c->ts.type = c->ts.u.derived->ts.type;
2269           c->ts.kind = c->ts.u.derived->ts.kind;
2270           c->ts.f90_type = c->ts.u.derived->ts.f90_type;
2271           if (c->initializer)
2272             {
2273               c->initializer->ts.type = c->ts.type;
2274               c->initializer->ts.kind = c->ts.kind;
2275               c->initializer->ts.f90_type = c->ts.f90_type;
2276               c->initializer->expr_type = EXPR_NULL;
2277             }
2278         }
2279     }
2280
2281   if (TYPE_FIELDS (derived->backend_decl))
2282     return derived->backend_decl;
2283
2284   /* Build the type member list. Install the newly created RECORD_TYPE
2285      node as DECL_CONTEXT of each FIELD_DECL.  */
2286   for (c = derived->components; c; c = c->next)
2287     {
2288       if (c->attr.proc_pointer)
2289         field_type = gfc_get_ppc_type (c);
2290       else if (c->ts.type == BT_DERIVED || c->ts.type == BT_CLASS)
2291         field_type = c->ts.u.derived->backend_decl;
2292       else
2293         {
2294           if (c->ts.type == BT_CHARACTER)
2295             {
2296               /* Evaluate the string length.  */
2297               gfc_conv_const_charlen (c->ts.u.cl);
2298               gcc_assert (c->ts.u.cl->backend_decl);
2299             }
2300
2301           field_type = gfc_typenode_for_spec (&c->ts);
2302         }
2303
2304       /* This returns an array descriptor type.  Initialization may be
2305          required.  */
2306       if (c->attr.dimension && !c->attr.proc_pointer)
2307         {
2308           if (c->attr.pointer || c->attr.allocatable)
2309             {
2310               enum gfc_array_kind akind;
2311               if (c->attr.pointer)
2312                 akind = c->attr.contiguous ? GFC_ARRAY_POINTER_CONT
2313                                            : GFC_ARRAY_POINTER;
2314               else
2315                 akind = GFC_ARRAY_ALLOCATABLE;
2316               /* Pointers to arrays aren't actually pointer types.  The
2317                  descriptors are separate, but the data is common.  */
2318               field_type = gfc_build_array_type (field_type, c->as, akind,
2319                                                  !c->attr.target
2320                                                  && !c->attr.pointer,
2321                                                  c->attr.contiguous);
2322             }
2323           else
2324             field_type = gfc_get_nodesc_array_type (field_type, c->as,
2325                                                     PACKED_STATIC,
2326                                                     !c->attr.target);
2327         }
2328       else if ((c->attr.pointer || c->attr.allocatable)
2329                && !c->attr.proc_pointer)
2330         field_type = build_pointer_type (field_type);
2331
2332       /* vtype fields can point to different types to the base type.  */
2333       if (c->ts.type == BT_DERIVED && c->ts.u.derived->attr.vtype)
2334           field_type = build_pointer_type_for_mode (TREE_TYPE (field_type),
2335                                                     ptr_mode, true);
2336
2337       field = gfc_add_field_to_struct (typenode,
2338                                        get_identifier (c->name),
2339                                        field_type, &chain);
2340       if (c->loc.lb)
2341         gfc_set_decl_location (field, &c->loc);
2342       else if (derived->declared_at.lb)
2343         gfc_set_decl_location (field, &derived->declared_at);
2344
2345       DECL_PACKED (field) |= TYPE_PACKED (typenode);
2346
2347       gcc_assert (field);
2348       if (!c->backend_decl)
2349         c->backend_decl = field;
2350     }
2351
2352   /* Now lay out the derived type, including the fields.  */
2353   if (canonical)
2354     TYPE_CANONICAL (typenode) = canonical;
2355
2356   gfc_finish_type (typenode);
2357   gfc_set_decl_location (TYPE_STUB_DECL (typenode), &derived->declared_at);
2358   if (derived->module && derived->ns->proc_name
2359       && derived->ns->proc_name->attr.flavor == FL_MODULE)
2360     {
2361       if (derived->ns->proc_name->backend_decl
2362           && TREE_CODE (derived->ns->proc_name->backend_decl)
2363              == NAMESPACE_DECL)
2364         {
2365           TYPE_CONTEXT (typenode) = derived->ns->proc_name->backend_decl;
2366           DECL_CONTEXT (TYPE_STUB_DECL (typenode))
2367             = derived->ns->proc_name->backend_decl;
2368         }
2369     }
2370
2371   derived->backend_decl = typenode;
2372
2373 copy_derived_types:
2374
2375   for (dt = gfc_derived_types; dt; dt = dt->next)
2376     gfc_copy_dt_decls_ifequal (derived, dt->derived, false);
2377
2378   return derived->backend_decl;
2379 }
2380
2381
2382 int
2383 gfc_return_by_reference (gfc_symbol * sym)
2384 {
2385   if (!sym->attr.function)
2386     return 0;
2387
2388   if (sym->attr.dimension)
2389     return 1;
2390
2391   if (sym->ts.type == BT_CHARACTER
2392       && !sym->attr.is_bind_c
2393       && (!sym->attr.result
2394           || !sym->ns->proc_name
2395           || !sym->ns->proc_name->attr.is_bind_c))
2396     return 1;
2397
2398   /* Possibly return complex numbers by reference for g77 compatibility.
2399      We don't do this for calls to intrinsics (as the library uses the
2400      -fno-f2c calling convention), nor for calls to functions which always
2401      require an explicit interface, as no compatibility problems can
2402      arise there.  */
2403   if (gfc_option.flag_f2c
2404       && sym->ts.type == BT_COMPLEX
2405       && !sym->attr.intrinsic && !sym->attr.always_explicit)
2406     return 1;
2407
2408   return 0;
2409 }
2410 \f
2411 static tree
2412 gfc_get_mixed_entry_union (gfc_namespace *ns)
2413 {
2414   tree type;
2415   tree *chain = NULL;
2416   char name[GFC_MAX_SYMBOL_LEN + 1];
2417   gfc_entry_list *el, *el2;
2418
2419   gcc_assert (ns->proc_name->attr.mixed_entry_master);
2420   gcc_assert (memcmp (ns->proc_name->name, "master.", 7) == 0);
2421
2422   snprintf (name, GFC_MAX_SYMBOL_LEN, "munion.%s", ns->proc_name->name + 7);
2423
2424   /* Build the type node.  */
2425   type = make_node (UNION_TYPE);
2426
2427   TYPE_NAME (type) = get_identifier (name);
2428
2429   for (el = ns->entries; el; el = el->next)
2430     {
2431       /* Search for duplicates.  */
2432       for (el2 = ns->entries; el2 != el; el2 = el2->next)
2433         if (el2->sym->result == el->sym->result)
2434           break;
2435
2436       if (el == el2)
2437         gfc_add_field_to_struct_1 (type,
2438                                    get_identifier (el->sym->result->name),
2439                                    gfc_sym_type (el->sym->result), &chain);
2440     }
2441
2442   /* Finish off the type.  */
2443   gfc_finish_type (type);
2444   TYPE_DECL_SUPPRESS_DEBUG (TYPE_STUB_DECL (type)) = 1;
2445   return type;
2446 }
2447 \f
2448 /* Create a "fn spec" based on the formal arguments;
2449    cf. create_function_arglist.  */
2450
2451 static tree
2452 create_fn_spec (gfc_symbol *sym, tree fntype)
2453 {
2454   char spec[150];
2455   size_t spec_len;
2456   gfc_formal_arglist *f;
2457   tree tmp;
2458
2459   memset (&spec, 0, sizeof (spec));
2460   spec[0] = '.';
2461   spec_len = 1;
2462
2463   if (sym->attr.entry_master)
2464     spec[spec_len++] = 'R';
2465   if (gfc_return_by_reference (sym))
2466     {
2467       gfc_symbol *result = sym->result ? sym->result : sym;
2468
2469       if (result->attr.pointer || sym->attr.proc_pointer)
2470         spec[spec_len++] = '.';
2471       else
2472         spec[spec_len++] = 'w';
2473       if (sym->ts.type == BT_CHARACTER)
2474         spec[spec_len++] = 'R';
2475     }
2476
2477   for (f = sym->formal; f; f = f->next)
2478     if (spec_len < sizeof (spec))
2479       {
2480         if (!f->sym || f->sym->attr.pointer || f->sym->attr.target
2481             || f->sym->attr.external || f->sym->attr.cray_pointer
2482             || (f->sym->ts.type == BT_DERIVED
2483                 && (f->sym->ts.u.derived->attr.proc_pointer_comp
2484                     || f->sym->ts.u.derived->attr.pointer_comp))
2485             || (f->sym->ts.type == BT_CLASS
2486                 && (CLASS_DATA (f->sym)->ts.u.derived->attr.proc_pointer_comp
2487                     || CLASS_DATA (f->sym)->ts.u.derived->attr.pointer_comp)))
2488           spec[spec_len++] = '.';
2489         else if (f->sym->attr.intent == INTENT_IN)
2490           spec[spec_len++] = 'r';
2491         else if (f->sym)
2492           spec[spec_len++] = 'w';
2493       }
2494
2495   tmp = build_tree_list (NULL_TREE, build_string (spec_len, spec));
2496   tmp = tree_cons (get_identifier ("fn spec"), tmp, TYPE_ATTRIBUTES (fntype));
2497   return build_type_attribute_variant (fntype, tmp);
2498 }
2499
2500
2501 tree
2502 gfc_get_function_type (gfc_symbol * sym)
2503 {
2504   tree type;
2505   tree typelist;
2506   gfc_formal_arglist *f;
2507   gfc_symbol *arg;
2508   int alternate_return;
2509
2510   /* Make sure this symbol is a function, a subroutine or the main
2511      program.  */
2512   gcc_assert (sym->attr.flavor == FL_PROCEDURE
2513               || sym->attr.flavor == FL_PROGRAM);
2514
2515   if (sym->backend_decl)
2516     return TREE_TYPE (sym->backend_decl);
2517
2518   alternate_return = 0;
2519   typelist = NULL_TREE;
2520
2521   if (sym->attr.entry_master)
2522     {
2523       /* Additional parameter for selecting an entry point.  */
2524       typelist = gfc_chainon_list (typelist, gfc_array_index_type);
2525     }
2526
2527   if (sym->result)
2528     arg = sym->result;
2529   else
2530     arg = sym;
2531
2532   if (arg->ts.type == BT_CHARACTER)
2533     gfc_conv_const_charlen (arg->ts.u.cl);
2534
2535   /* Some functions we use an extra parameter for the return value.  */
2536   if (gfc_return_by_reference (sym))
2537     {
2538       type = gfc_sym_type (arg);
2539       if (arg->ts.type == BT_COMPLEX
2540           || arg->attr.dimension
2541           || arg->ts.type == BT_CHARACTER)
2542         type = build_reference_type (type);
2543
2544       typelist = gfc_chainon_list (typelist, type);
2545       if (arg->ts.type == BT_CHARACTER)
2546         {
2547           if (!arg->ts.deferred)
2548             /* Transfer by value.  */
2549             typelist = gfc_chainon_list (typelist, gfc_charlen_type_node);
2550           else
2551             /* Deferred character lengths are transferred by reference
2552                so that the value can be returned.  */
2553             typelist = gfc_chainon_list (typelist,
2554                                 build_pointer_type (gfc_charlen_type_node));
2555         }
2556     }
2557
2558   /* Build the argument types for the function.  */
2559   for (f = sym->formal; f; f = f->next)
2560     {
2561       arg = f->sym;
2562       if (arg)
2563         {
2564           /* Evaluate constant character lengths here so that they can be
2565              included in the type.  */
2566           if (arg->ts.type == BT_CHARACTER)
2567             gfc_conv_const_charlen (arg->ts.u.cl);
2568
2569           if (arg->attr.flavor == FL_PROCEDURE)
2570             {
2571               type = gfc_get_function_type (arg);
2572               type = build_pointer_type (type);
2573             }
2574           else
2575             type = gfc_sym_type (arg);
2576
2577           /* Parameter Passing Convention
2578
2579              We currently pass all parameters by reference.
2580              Parameters with INTENT(IN) could be passed by value.
2581              The problem arises if a function is called via an implicit
2582              prototype. In this situation the INTENT is not known.
2583              For this reason all parameters to global functions must be
2584              passed by reference.  Passing by value would potentially
2585              generate bad code.  Worse there would be no way of telling that
2586              this code was bad, except that it would give incorrect results.
2587
2588              Contained procedures could pass by value as these are never
2589              used without an explicit interface, and cannot be passed as
2590              actual parameters for a dummy procedure.  */
2591
2592           typelist = gfc_chainon_list (typelist, type);
2593         }
2594       else
2595         {
2596           if (sym->attr.subroutine)
2597             alternate_return = 1;
2598         }
2599     }
2600
2601   /* Add hidden string length parameters.  */
2602   for (f = sym->formal; f; f = f->next)
2603     {
2604       arg = f->sym;
2605       if (arg && arg->ts.type == BT_CHARACTER && !sym->attr.is_bind_c)
2606         {
2607           if (!arg->ts.deferred)
2608             /* Transfer by value.  */
2609             type = gfc_charlen_type_node;
2610           else
2611             /* Deferred character lengths are transferred by reference
2612                so that the value can be returned.  */
2613             type = build_pointer_type (gfc_charlen_type_node);
2614
2615           typelist = gfc_chainon_list (typelist, type);
2616         }
2617     }
2618
2619   if (typelist)
2620     typelist = chainon (typelist, void_list_node);
2621   else if (sym->attr.is_main_program)
2622     typelist = void_list_node;
2623
2624   if (alternate_return)
2625     type = integer_type_node;
2626   else if (!sym->attr.function || gfc_return_by_reference (sym))
2627     type = void_type_node;
2628   else if (sym->attr.mixed_entry_master)
2629     type = gfc_get_mixed_entry_union (sym->ns);
2630   else if (gfc_option.flag_f2c
2631            && sym->ts.type == BT_REAL
2632            && sym->ts.kind == gfc_default_real_kind
2633            && !sym->attr.always_explicit)
2634     {
2635       /* Special case: f2c calling conventions require that (scalar) 
2636          default REAL functions return the C type double instead.  f2c
2637          compatibility is only an issue with functions that don't
2638          require an explicit interface, as only these could be
2639          implemented in Fortran 77.  */
2640       sym->ts.kind = gfc_default_double_kind;
2641       type = gfc_typenode_for_spec (&sym->ts);
2642       sym->ts.kind = gfc_default_real_kind;
2643     }
2644   else if (sym->result && sym->result->attr.proc_pointer)
2645     /* Procedure pointer return values.  */
2646     {
2647       if (sym->result->attr.result && strcmp (sym->name,"ppr@") != 0)
2648         {
2649           /* Unset proc_pointer as gfc_get_function_type
2650              is called recursively.  */
2651           sym->result->attr.proc_pointer = 0;
2652           type = build_pointer_type (gfc_get_function_type (sym->result));
2653           sym->result->attr.proc_pointer = 1;
2654         }
2655       else
2656        type = gfc_sym_type (sym->result);
2657     }
2658   else
2659     type = gfc_sym_type (sym);
2660
2661   type = build_function_type (type, typelist);
2662   type = create_fn_spec (sym, type);
2663
2664   return type;
2665 }
2666 \f
2667 /* Language hooks for middle-end access to type nodes.  */
2668
2669 /* Return an integer type with BITS bits of precision,
2670    that is unsigned if UNSIGNEDP is nonzero, otherwise signed.  */
2671
2672 tree
2673 gfc_type_for_size (unsigned bits, int unsignedp)
2674 {
2675   if (!unsignedp)
2676     {
2677       int i;
2678       for (i = 0; i <= MAX_INT_KINDS; ++i)
2679         {
2680           tree type = gfc_integer_types[i];
2681           if (type && bits == TYPE_PRECISION (type))
2682             return type;
2683         }
2684
2685       /* Handle TImode as a special case because it is used by some backends
2686          (e.g. ARM) even though it is not available for normal use.  */
2687 #if HOST_BITS_PER_WIDE_INT >= 64
2688       if (bits == TYPE_PRECISION (intTI_type_node))
2689         return intTI_type_node;
2690 #endif
2691     }
2692   else
2693     {
2694       if (bits == TYPE_PRECISION (unsigned_intQI_type_node))
2695         return unsigned_intQI_type_node;
2696       if (bits == TYPE_PRECISION (unsigned_intHI_type_node))
2697         return unsigned_intHI_type_node;
2698       if (bits == TYPE_PRECISION (unsigned_intSI_type_node))
2699         return unsigned_intSI_type_node;
2700       if (bits == TYPE_PRECISION (unsigned_intDI_type_node))
2701         return unsigned_intDI_type_node;
2702       if (bits == TYPE_PRECISION (unsigned_intTI_type_node))
2703         return unsigned_intTI_type_node;
2704     }
2705
2706   return NULL_TREE;
2707 }
2708
2709 /* Return a data type that has machine mode MODE.  If the mode is an
2710    integer, then UNSIGNEDP selects between signed and unsigned types.  */
2711
2712 tree
2713 gfc_type_for_mode (enum machine_mode mode, int unsignedp)
2714 {
2715   int i;
2716   tree *base;
2717
2718   if (GET_MODE_CLASS (mode) == MODE_FLOAT)
2719     base = gfc_real_types;
2720   else if (GET_MODE_CLASS (mode) == MODE_COMPLEX_FLOAT)
2721     base = gfc_complex_types;
2722   else if (SCALAR_INT_MODE_P (mode))
2723     return gfc_type_for_size (GET_MODE_PRECISION (mode), unsignedp);
2724   else if (VECTOR_MODE_P (mode))
2725     {
2726       enum machine_mode inner_mode = GET_MODE_INNER (mode);
2727       tree inner_type = gfc_type_for_mode (inner_mode, unsignedp);
2728       if (inner_type != NULL_TREE)
2729         return build_vector_type_for_mode (inner_type, mode);
2730       return NULL_TREE;
2731     }
2732   else
2733     return NULL_TREE;
2734
2735   for (i = 0; i <= MAX_REAL_KINDS; ++i)
2736     {
2737       tree type = base[i];
2738       if (type && mode == TYPE_MODE (type))
2739         return type;
2740     }
2741
2742   return NULL_TREE;
2743 }
2744
2745 /* Return TRUE if TYPE is a type with a hidden descriptor, fill in INFO
2746    in that case.  */
2747
2748 bool
2749 gfc_get_array_descr_info (const_tree type, struct array_descr_info *info)
2750 {
2751   int rank, dim;
2752   bool indirect = false;
2753   tree etype, ptype, field, t, base_decl;
2754   tree data_off, dim_off, dim_size, elem_size;
2755   tree lower_suboff, upper_suboff, stride_suboff;
2756
2757   if (! GFC_DESCRIPTOR_TYPE_P (type))
2758     {
2759       if (! POINTER_TYPE_P (type))
2760         return false;
2761       type = TREE_TYPE (type);
2762       if (! GFC_DESCRIPTOR_TYPE_P (type))
2763         return false;
2764       indirect = true;
2765     }
2766
2767   rank = GFC_TYPE_ARRAY_RANK (type);
2768   if (rank >= (int) (sizeof (info->dimen) / sizeof (info->dimen[0])))
2769     return false;
2770
2771   etype = GFC_TYPE_ARRAY_DATAPTR_TYPE (type);
2772   gcc_assert (POINTER_TYPE_P (etype));
2773   etype = TREE_TYPE (etype);
2774   gcc_assert (TREE_CODE (etype) == ARRAY_TYPE);
2775   etype = TREE_TYPE (etype);
2776   /* Can't handle variable sized elements yet.  */
2777   if (int_size_in_bytes (etype) <= 0)
2778     return false;
2779   /* Nor non-constant lower bounds in assumed shape arrays.  */
2780   if (GFC_TYPE_ARRAY_AKIND (type) == GFC_ARRAY_ASSUMED_SHAPE
2781       || GFC_TYPE_ARRAY_AKIND (type) == GFC_ARRAY_ASSUMED_SHAPE_CONT)
2782     {
2783       for (dim = 0; dim < rank; dim++)
2784         if (GFC_TYPE_ARRAY_LBOUND (type, dim) == NULL_TREE
2785             || TREE_CODE (GFC_TYPE_ARRAY_LBOUND (type, dim)) != INTEGER_CST)
2786           return false;
2787     }
2788
2789   memset (info, '\0', sizeof (*info));
2790   info->ndimensions = rank;
2791   info->element_type = etype;
2792   ptype = build_pointer_type (gfc_array_index_type);
2793   base_decl = GFC_TYPE_ARRAY_BASE_DECL (type, indirect);
2794   if (!base_decl)
2795     {
2796       base_decl = build_decl (input_location, VAR_DECL, NULL_TREE,
2797                               indirect ? build_pointer_type (ptype) : ptype);
2798       GFC_TYPE_ARRAY_BASE_DECL (type, indirect) = base_decl;
2799     }
2800   info->base_decl = base_decl;
2801   if (indirect)
2802     base_decl = build1 (INDIRECT_REF, ptype, base_decl);
2803
2804   if (GFC_TYPE_ARRAY_SPAN (type))
2805     elem_size = GFC_TYPE_ARRAY_SPAN (type);
2806   else
2807     elem_size = fold_convert (gfc_array_index_type, TYPE_SIZE_UNIT (etype));
2808   field = TYPE_FIELDS (TYPE_MAIN_VARIANT (type));
2809   data_off = byte_position (field);
2810   field = DECL_CHAIN (field);
2811   field = DECL_CHAIN (field);
2812   field = DECL_CHAIN (field);
2813   dim_off = byte_position (field);
2814   dim_size = TYPE_SIZE_UNIT (TREE_TYPE (TREE_TYPE (field)));
2815   field = TYPE_FIELDS (TREE_TYPE (TREE_TYPE (field)));
2816   stride_suboff = byte_position (field);
2817   field = DECL_CHAIN (field);
2818   lower_suboff = byte_position (field);
2819   field = DECL_CHAIN (field);
2820   upper_suboff = byte_position (field);
2821
2822   t = base_decl;
2823   if (!integer_zerop (data_off))
2824     t = build2 (POINTER_PLUS_EXPR, ptype, t, data_off);
2825   t = build1 (NOP_EXPR, build_pointer_type (ptr_type_node), t);
2826   info->data_location = build1 (INDIRECT_REF, ptr_type_node, t);
2827   if (GFC_TYPE_ARRAY_AKIND (type) == GFC_ARRAY_ALLOCATABLE)
2828     info->allocated = build2 (NE_EXPR, boolean_type_node,
2829                               info->data_location, null_pointer_node);
2830   else if (GFC_TYPE_ARRAY_AKIND (type) == GFC_ARRAY_POINTER
2831            || GFC_TYPE_ARRAY_AKIND (type) == GFC_ARRAY_POINTER_CONT)
2832     info->associated = build2 (NE_EXPR, boolean_type_node,
2833                                info->data_location, null_pointer_node);
2834
2835   for (dim = 0; dim < rank; dim++)
2836     {
2837       t = build2 (POINTER_PLUS_EXPR, ptype, base_decl,
2838                   size_binop (PLUS_EXPR, dim_off, lower_suboff));
2839       t = build1 (INDIRECT_REF, gfc_array_index_type, t);
2840       info->dimen[dim].lower_bound = t;
2841       t = build2 (POINTER_PLUS_EXPR, ptype, base_decl,
2842                   size_binop (PLUS_EXPR, dim_off, upper_suboff));
2843       t = build1 (INDIRECT_REF, gfc_array_index_type, t);
2844       info->dimen[dim].upper_bound = t;
2845       if (GFC_TYPE_ARRAY_AKIND (type) == GFC_ARRAY_ASSUMED_SHAPE
2846           || GFC_TYPE_ARRAY_AKIND (type) == GFC_ARRAY_ASSUMED_SHAPE_CONT)
2847         {
2848           /* Assumed shape arrays have known lower bounds.  */
2849           info->dimen[dim].upper_bound
2850             = build2 (MINUS_EXPR, gfc_array_index_type,
2851                       info->dimen[dim].upper_bound,
2852                       info->dimen[dim].lower_bound);
2853           info->dimen[dim].lower_bound
2854             = fold_convert (gfc_array_index_type,
2855                             GFC_TYPE_ARRAY_LBOUND (type, dim));
2856           info->dimen[dim].upper_bound
2857             = build2 (PLUS_EXPR, gfc_array_index_type,
2858                       info->dimen[dim].lower_bound,
2859                       info->dimen[dim].upper_bound);
2860         }
2861       t = build2 (POINTER_PLUS_EXPR, ptype, base_decl,
2862                   size_binop (PLUS_EXPR, dim_off, stride_suboff));
2863       t = build1 (INDIRECT_REF, gfc_array_index_type, t);
2864       t = build2 (MULT_EXPR, gfc_array_index_type, t, elem_size);
2865       info->dimen[dim].stride = t;
2866       dim_off = size_binop (PLUS_EXPR, dim_off, dim_size);
2867     }
2868
2869   return true;
2870 }
2871
2872 #include "gt-fortran-trans-types.h"