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