]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blame - gdb/f-lang.c
Split out eval_op_f_ceil
[thirdparty/binutils-gdb.git] / gdb / f-lang.c
CommitLineData
c906108c 1/* Fortran language support routines for GDB, the GNU debugger.
ce27fb25 2
3666a048 3 Copyright (C) 1993-2021 Free Software Foundation, Inc.
ce27fb25 4
c906108c
SS
5 Contributed by Motorola. Adapted from the C parser by Farooq Butt
6 (fmbutt@engage.sps.mot.com).
7
c5aa993b 8 This file is part of GDB.
c906108c 9
c5aa993b
JM
10 This program is free software; you can redistribute it and/or modify
11 it under the terms of the GNU General Public License as published by
a9762ec7 12 the Free Software Foundation; either version 3 of the License, or
c5aa993b 13 (at your option) any later version.
c906108c 14
c5aa993b
JM
15 This program is distributed in the hope that it will be useful,
16 but WITHOUT ANY WARRANTY; without even the implied warranty of
17 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 GNU General Public License for more details.
c906108c 19
c5aa993b 20 You should have received a copy of the GNU General Public License
a9762ec7 21 along with this program. If not, see <http://www.gnu.org/licenses/>. */
c906108c
SS
22
23#include "defs.h"
4de283e4 24#include "symtab.h"
d55e5aa6 25#include "gdbtypes.h"
4de283e4 26#include "expression.h"
d55e5aa6 27#include "parser-defs.h"
4de283e4
TT
28#include "language.h"
29#include "varobj.h"
30#include "gdbcore.h"
31#include "f-lang.h"
745b8ca0 32#include "valprint.h"
5f9a71c3 33#include "value.h"
4de283e4
TT
34#include "cp-support.h"
35#include "charset.h"
36#include "c-lang.h"
37#include "target-float.h"
0d12e84c 38#include "gdbarch.h"
a5c641b5
AB
39#include "gdbcmd.h"
40#include "f-array-walker.h"
4de283e4
TT
41
42#include <math.h>
c906108c 43
a5c641b5
AB
44/* Whether GDB should repack array slices created by the user. */
45static bool repack_array_slices = false;
46
47/* Implement 'show fortran repack-array-slices'. */
48static void
49show_repack_array_slices (struct ui_file *file, int from_tty,
50 struct cmd_list_element *c, const char *value)
51{
52 fprintf_filtered (file, _("Repacking of Fortran array slices is %s.\n"),
53 value);
54}
55
56/* Debugging of Fortran's array slicing. */
57static bool fortran_array_slicing_debug = false;
58
59/* Implement 'show debug fortran-array-slicing'. */
60static void
61show_fortran_array_slicing_debug (struct ui_file *file, int from_tty,
62 struct cmd_list_element *c,
63 const char *value)
64{
65 fprintf_filtered (file, _("Debugging of Fortran array slicing is %s.\n"),
66 value);
67}
68
c906108c
SS
69/* Local functions */
70
68337b8b
AB
71static value *fortran_prepare_argument (struct expression *exp, int *pos,
72 int arg_num, bool is_internal_call_p,
73 struct type *func_type,
74 enum noside noside);
5a7cf527 75
3b2b8fea
TT
76/* Return the encoding that should be used for the character type
77 TYPE. */
78
1a0ea399
AB
79const char *
80f_language::get_encoding (struct type *type)
3b2b8fea
TT
81{
82 const char *encoding;
83
84 switch (TYPE_LENGTH (type))
85 {
86 case 1:
8ee511af 87 encoding = target_charset (type->arch ());
3b2b8fea
TT
88 break;
89 case 4:
34877895 90 if (type_byte_order (type) == BFD_ENDIAN_BIG)
3b2b8fea
TT
91 encoding = "UTF-32BE";
92 else
93 encoding = "UTF-32LE";
94 break;
95
96 default:
97 error (_("unrecognized character type"));
98 }
99
100 return encoding;
101}
102
c906108c 103\f
c5aa993b 104
c906108c
SS
105/* Table of operators and their precedences for printing expressions. */
106
1a0ea399 107const struct op_print f_language::op_print_tab[] =
c5aa993b
JM
108{
109 {"+", BINOP_ADD, PREC_ADD, 0},
110 {"+", UNOP_PLUS, PREC_PREFIX, 0},
111 {"-", BINOP_SUB, PREC_ADD, 0},
112 {"-", UNOP_NEG, PREC_PREFIX, 0},
113 {"*", BINOP_MUL, PREC_MUL, 0},
114 {"/", BINOP_DIV, PREC_MUL, 0},
115 {"DIV", BINOP_INTDIV, PREC_MUL, 0},
116 {"MOD", BINOP_REM, PREC_MUL, 0},
117 {"=", BINOP_ASSIGN, PREC_ASSIGN, 1},
118 {".OR.", BINOP_LOGICAL_OR, PREC_LOGICAL_OR, 0},
119 {".AND.", BINOP_LOGICAL_AND, PREC_LOGICAL_AND, 0},
120 {".NOT.", UNOP_LOGICAL_NOT, PREC_PREFIX, 0},
121 {".EQ.", BINOP_EQUAL, PREC_EQUAL, 0},
122 {".NE.", BINOP_NOTEQUAL, PREC_EQUAL, 0},
123 {".LE.", BINOP_LEQ, PREC_ORDER, 0},
124 {".GE.", BINOP_GEQ, PREC_ORDER, 0},
125 {".GT.", BINOP_GTR, PREC_ORDER, 0},
126 {".LT.", BINOP_LESS, PREC_ORDER, 0},
127 {"**", UNOP_IND, PREC_PREFIX, 0},
128 {"@", BINOP_REPEAT, PREC_REPEAT, 0},
f486487f 129 {NULL, OP_NULL, PREC_REPEAT, 0}
c906108c
SS
130};
131\f
c906108c 132
e92c8eb8
AB
133/* Create an array containing the lower bounds (when LBOUND_P is true) or
134 the upper bounds (when LBOUND_P is false) of ARRAY (which must be of
135 array type). GDBARCH is the current architecture. */
136
137static struct value *
138fortran_bounds_all_dims (bool lbound_p,
139 struct gdbarch *gdbarch,
140 struct value *array)
141{
142 type *array_type = check_typedef (value_type (array));
143 int ndimensions = calc_f77_array_dims (array_type);
144
145 /* Allocate a result value of the correct type. */
146 struct type *range
147 = create_static_range_type (nullptr,
148 builtin_type (gdbarch)->builtin_int,
149 1, ndimensions);
150 struct type *elm_type = builtin_type (gdbarch)->builtin_long_long;
151 struct type *result_type = create_array_type (nullptr, elm_type, range);
152 struct value *result = allocate_value (result_type);
153
154 /* Walk the array dimensions backwards due to the way the array will be
155 laid out in memory, the first dimension will be the most inner. */
156 LONGEST elm_len = TYPE_LENGTH (elm_type);
157 for (LONGEST dst_offset = elm_len * (ndimensions - 1);
158 dst_offset >= 0;
159 dst_offset -= elm_len)
160 {
161 LONGEST b;
162
163 /* Grab the required bound. */
164 if (lbound_p)
165 b = f77_get_lowerbound (array_type);
166 else
167 b = f77_get_upperbound (array_type);
168
169 /* And copy the value into the result value. */
170 struct value *v = value_from_longest (elm_type, b);
171 gdb_assert (dst_offset + TYPE_LENGTH (value_type (v))
172 <= TYPE_LENGTH (value_type (result)));
173 gdb_assert (TYPE_LENGTH (value_type (v)) == elm_len);
174 value_contents_copy (result, dst_offset, v, 0, elm_len);
175
176 /* Peel another dimension of the array. */
177 array_type = TYPE_TARGET_TYPE (array_type);
178 }
179
180 return result;
181}
182
183/* Return the lower bound (when LBOUND_P is true) or the upper bound (when
184 LBOUND_P is false) for dimension DIM_VAL (which must be an integer) of
185 ARRAY (which must be an array). GDBARCH is the current architecture. */
186
187static struct value *
188fortran_bounds_for_dimension (bool lbound_p,
189 struct gdbarch *gdbarch,
190 struct value *array,
191 struct value *dim_val)
192{
193 /* Check the requested dimension is valid for this array. */
194 type *array_type = check_typedef (value_type (array));
195 int ndimensions = calc_f77_array_dims (array_type);
196 long dim = value_as_long (dim_val);
197 if (dim < 1 || dim > ndimensions)
198 {
199 if (lbound_p)
200 error (_("LBOUND dimension must be from 1 to %d"), ndimensions);
201 else
202 error (_("UBOUND dimension must be from 1 to %d"), ndimensions);
203 }
204
205 /* The type for the result. */
206 struct type *bound_type = builtin_type (gdbarch)->builtin_long_long;
207
208 /* Walk the dimensions backwards, due to the ordering in which arrays are
209 laid out the first dimension is the most inner. */
210 for (int i = ndimensions - 1; i >= 0; --i)
211 {
212 /* If this is the requested dimension then we're done. Grab the
213 bounds and return. */
214 if (i == dim - 1)
215 {
216 LONGEST b;
217
218 if (lbound_p)
219 b = f77_get_lowerbound (array_type);
220 else
221 b = f77_get_upperbound (array_type);
222
223 return value_from_longest (bound_type, b);
224 }
225
226 /* Peel off another dimension of the array. */
227 array_type = TYPE_TARGET_TYPE (array_type);
228 }
229
230 gdb_assert_not_reached ("failed to find matching dimension");
231}
232\f
233
6d816919
AB
234/* Return the number of dimensions for a Fortran array or string. */
235
236int
237calc_f77_array_dims (struct type *array_type)
238{
239 int ndimen = 1;
240 struct type *tmp_type;
241
242 if ((array_type->code () == TYPE_CODE_STRING))
243 return 1;
244
245 if ((array_type->code () != TYPE_CODE_ARRAY))
246 error (_("Can't get dimensions for a non-array type"));
247
248 tmp_type = array_type;
249
250 while ((tmp_type = TYPE_TARGET_TYPE (tmp_type)))
251 {
252 if (tmp_type->code () == TYPE_CODE_ARRAY)
253 ++ndimen;
254 }
255 return ndimen;
256}
257
a5c641b5
AB
258/* A class used by FORTRAN_VALUE_SUBARRAY when repacking Fortran array
259 slices. This is a base class for two alternative repacking mechanisms,
260 one for when repacking from a lazy value, and one for repacking from a
261 non-lazy (already loaded) value. */
262class fortran_array_repacker_base_impl
263 : public fortran_array_walker_base_impl
264{
265public:
266 /* Constructor, DEST is the value we are repacking into. */
267 fortran_array_repacker_base_impl (struct value *dest)
268 : m_dest (dest),
269 m_dest_offset (0)
270 { /* Nothing. */ }
271
272 /* When we start processing the inner most dimension, this is where we
273 will be creating values for each element as we load them and then copy
274 them into the M_DEST value. Set a value mark so we can free these
275 temporary values. */
276 void start_dimension (bool inner_p)
277 {
278 if (inner_p)
279 {
280 gdb_assert (m_mark == nullptr);
281 m_mark = value_mark ();
282 }
283 }
284
285 /* When we finish processing the inner most dimension free all temporary
286 value that were created. */
287 void finish_dimension (bool inner_p, bool last_p)
288 {
289 if (inner_p)
290 {
291 gdb_assert (m_mark != nullptr);
292 value_free_to_mark (m_mark);
293 m_mark = nullptr;
294 }
295 }
296
297protected:
298 /* Copy the contents of array element ELT into M_DEST at the next
299 available offset. */
300 void copy_element_to_dest (struct value *elt)
301 {
302 value_contents_copy (m_dest, m_dest_offset, elt, 0,
303 TYPE_LENGTH (value_type (elt)));
304 m_dest_offset += TYPE_LENGTH (value_type (elt));
305 }
306
307 /* The value being written to. */
308 struct value *m_dest;
309
310 /* The byte offset in M_DEST at which the next element should be
311 written. */
312 LONGEST m_dest_offset;
313
314 /* Set with a call to VALUE_MARK, and then reset after calling
315 VALUE_FREE_TO_MARK. */
316 struct value *m_mark = nullptr;
317};
318
319/* A class used by FORTRAN_VALUE_SUBARRAY when repacking Fortran array
320 slices. This class is specialised for repacking an array slice from a
321 lazy array value, as such it does not require the parent array value to
322 be loaded into GDB's memory; the parent value could be huge, while the
323 slice could be tiny. */
324class fortran_lazy_array_repacker_impl
325 : public fortran_array_repacker_base_impl
326{
327public:
328 /* Constructor. TYPE is the type of the slice being loaded from the
329 parent value, so this type will correctly reflect the strides required
330 to find all of the elements from the parent value. ADDRESS is the
331 address in target memory of value matching TYPE, and DEST is the value
332 we are repacking into. */
333 explicit fortran_lazy_array_repacker_impl (struct type *type,
334 CORE_ADDR address,
335 struct value *dest)
336 : fortran_array_repacker_base_impl (dest),
337 m_addr (address)
338 { /* Nothing. */ }
339
340 /* Create a lazy value in target memory representing a single element,
341 then load the element into GDB's memory and copy the contents into the
342 destination value. */
343 void process_element (struct type *elt_type, LONGEST elt_off, bool last_p)
344 {
345 copy_element_to_dest (value_at_lazy (elt_type, m_addr + elt_off));
346 }
347
348private:
349 /* The address in target memory where the parent value starts. */
350 CORE_ADDR m_addr;
351};
352
353/* A class used by FORTRAN_VALUE_SUBARRAY when repacking Fortran array
354 slices. This class is specialised for repacking an array slice from a
355 previously loaded (non-lazy) array value, as such it fetches the
356 element values from the contents of the parent value. */
357class fortran_array_repacker_impl
358 : public fortran_array_repacker_base_impl
359{
360public:
361 /* Constructor. TYPE is the type for the array slice within the parent
362 value, as such it has stride values as required to find the elements
363 within the original parent value. ADDRESS is the address in target
364 memory of the value matching TYPE. BASE_OFFSET is the offset from
365 the start of VAL's content buffer to the start of the object of TYPE,
366 VAL is the parent object from which we are loading the value, and
367 DEST is the value into which we are repacking. */
368 explicit fortran_array_repacker_impl (struct type *type, CORE_ADDR address,
369 LONGEST base_offset,
370 struct value *val, struct value *dest)
371 : fortran_array_repacker_base_impl (dest),
372 m_base_offset (base_offset),
373 m_val (val)
374 {
375 gdb_assert (!value_lazy (val));
376 }
377
378 /* Extract an element of ELT_TYPE at offset (M_BASE_OFFSET + ELT_OFF)
379 from the content buffer of M_VAL then copy this extracted value into
380 the repacked destination value. */
381 void process_element (struct type *elt_type, LONGEST elt_off, bool last_p)
382 {
383 struct value *elt
384 = value_from_component (m_val, elt_type, (elt_off + m_base_offset));
385 copy_element_to_dest (elt);
386 }
387
388private:
389 /* The offset into the content buffer of M_VAL to the start of the slice
390 being extracted. */
391 LONGEST m_base_offset;
392
393 /* The parent value from which we are extracting a slice. */
394 struct value *m_val;
395};
396
6d816919
AB
397/* Called from evaluate_subexp_standard to perform array indexing, and
398 sub-range extraction, for Fortran. As well as arrays this function
399 also handles strings as they can be treated like arrays of characters.
400 ARRAY is the array or string being accessed. EXP, POS, and NOSIDE are
401 as for evaluate_subexp_standard, and NARGS is the number of arguments
402 in this access (e.g. 'array (1,2,3)' would be NARGS 3). */
403
404static struct value *
405fortran_value_subarray (struct value *array, struct expression *exp,
406 int *pos, int nargs, enum noside noside)
407{
a5c641b5
AB
408 type *original_array_type = check_typedef (value_type (array));
409 bool is_string_p = original_array_type->code () == TYPE_CODE_STRING;
410
411 /* Perform checks for ARRAY not being available. The somewhat overly
412 complex logic here is just to keep backward compatibility with the
413 errors that we used to get before FORTRAN_VALUE_SUBARRAY was
414 rewritten. Maybe a future task would streamline the error messages we
415 get here, and update all the expected test results. */
416 if (exp->elts[*pos].opcode != OP_RANGE)
417 {
418 if (type_not_associated (original_array_type))
419 error (_("no such vector element (vector not associated)"));
420 else if (type_not_allocated (original_array_type))
421 error (_("no such vector element (vector not allocated)"));
422 }
423 else
6d816919 424 {
a5c641b5
AB
425 if (type_not_associated (original_array_type))
426 error (_("array not associated"));
427 else if (type_not_allocated (original_array_type))
428 error (_("array not allocated"));
6d816919
AB
429 }
430
a5c641b5
AB
431 /* First check that the number of dimensions in the type we are slicing
432 matches the number of arguments we were passed. */
433 int ndimensions = calc_f77_array_dims (original_array_type);
434 if (nargs != ndimensions)
435 error (_("Wrong number of subscripts"));
436
437 /* This will be initialised below with the type of the elements held in
438 ARRAY. */
439 struct type *inner_element_type;
440
441 /* Extract the types of each array dimension from the original array
442 type. We need these available so we can fill in the default upper and
443 lower bounds if the user requested slice doesn't provide that
444 information. Additionally unpacking the dimensions like this gives us
445 the inner element type. */
446 std::vector<struct type *> dim_types;
447 {
448 dim_types.reserve (ndimensions);
449 struct type *type = original_array_type;
450 for (int i = 0; i < ndimensions; ++i)
451 {
452 dim_types.push_back (type);
453 type = TYPE_TARGET_TYPE (type);
454 }
455 /* TYPE is now the inner element type of the array, we start the new
456 array slice off as this type, then as we process the requested slice
457 (from the user) we wrap new types around this to build up the final
458 slice type. */
459 inner_element_type = type;
460 }
461
462 /* As we analyse the new slice type we need to understand if the data
463 being referenced is contiguous. Do decide this we must track the size
464 of an element at each dimension of the new slice array. Initially the
465 elements of the inner most dimension of the array are the same inner
466 most elements as the original ARRAY. */
467 LONGEST slice_element_size = TYPE_LENGTH (inner_element_type);
468
469 /* Start off assuming all data is contiguous, this will be set to false
470 if access to any dimension results in non-contiguous data. */
471 bool is_all_contiguous = true;
472
473 /* The TOTAL_OFFSET is the distance in bytes from the start of the
474 original ARRAY to the start of the new slice. This is calculated as
475 we process the information from the user. */
476 LONGEST total_offset = 0;
477
478 /* A structure representing information about each dimension of the
479 resulting slice. */
480 struct slice_dim
481 {
482 /* Constructor. */
483 slice_dim (LONGEST l, LONGEST h, LONGEST s, struct type *idx)
484 : low (l),
485 high (h),
486 stride (s),
487 index (idx)
488 { /* Nothing. */ }
489
490 /* The low bound for this dimension of the slice. */
491 LONGEST low;
6d816919 492
a5c641b5
AB
493 /* The high bound for this dimension of the slice. */
494 LONGEST high;
6d816919 495
a5c641b5
AB
496 /* The byte stride for this dimension of the slice. */
497 LONGEST stride;
6d816919 498
a5c641b5
AB
499 struct type *index;
500 };
501
502 /* The dimensions of the resulting slice. */
503 std::vector<slice_dim> slice_dims;
504
505 /* Process the incoming arguments. These arguments are in the reverse
506 order to the array dimensions, that is the first argument refers to
507 the last array dimension. */
508 if (fortran_array_slicing_debug)
509 debug_printf ("Processing array access:\n");
510 for (int i = 0; i < nargs; ++i)
511 {
512 /* For each dimension of the array the user will have either provided
513 a ranged access with optional lower bound, upper bound, and
514 stride, or the user will have supplied a single index. */
515 struct type *dim_type = dim_types[ndimensions - (i + 1)];
516 if (exp->elts[*pos].opcode == OP_RANGE)
517 {
518 int pc = (*pos) + 1;
519 enum range_flag range_flag = (enum range_flag) exp->elts[pc].longconst;
520 *pos += 3;
521
522 LONGEST low, high, stride;
523 low = high = stride = 0;
524
525 if ((range_flag & RANGE_LOW_BOUND_DEFAULT) == 0)
526 low = value_as_long (evaluate_subexp (nullptr, exp, pos, noside));
527 else
528 low = f77_get_lowerbound (dim_type);
529 if ((range_flag & RANGE_HIGH_BOUND_DEFAULT) == 0)
530 high = value_as_long (evaluate_subexp (nullptr, exp, pos, noside));
531 else
532 high = f77_get_upperbound (dim_type);
533 if ((range_flag & RANGE_HAS_STRIDE) == RANGE_HAS_STRIDE)
534 stride = value_as_long (evaluate_subexp (nullptr, exp, pos, noside));
535 else
536 stride = 1;
537
538 if (stride == 0)
539 error (_("stride must not be 0"));
540
541 /* Get information about this dimension in the original ARRAY. */
542 struct type *target_type = TYPE_TARGET_TYPE (dim_type);
543 struct type *index_type = dim_type->index_type ();
544 LONGEST lb = f77_get_lowerbound (dim_type);
545 LONGEST ub = f77_get_upperbound (dim_type);
546 LONGEST sd = index_type->bit_stride ();
547 if (sd == 0)
548 sd = TYPE_LENGTH (target_type) * 8;
549
550 if (fortran_array_slicing_debug)
551 {
552 debug_printf ("|-> Range access\n");
553 std::string str = type_to_string (dim_type);
554 debug_printf ("| |-> Type: %s\n", str.c_str ());
555 debug_printf ("| |-> Array:\n");
a5adb8f3
SM
556 debug_printf ("| | |-> Low bound: %s\n", plongest (lb));
557 debug_printf ("| | |-> High bound: %s\n", plongest (ub));
558 debug_printf ("| | |-> Bit stride: %s\n", plongest (sd));
559 debug_printf ("| | |-> Byte stride: %s\n", plongest (sd / 8));
560 debug_printf ("| | |-> Type size: %s\n",
561 pulongest (TYPE_LENGTH (dim_type)));
562 debug_printf ("| | '-> Target type size: %s\n",
563 pulongest (TYPE_LENGTH (target_type)));
a5c641b5 564 debug_printf ("| |-> Accessing:\n");
a5adb8f3
SM
565 debug_printf ("| | |-> Low bound: %s\n",
566 plongest (low));
567 debug_printf ("| | |-> High bound: %s\n",
568 plongest (high));
569 debug_printf ("| | '-> Element stride: %s\n",
570 plongest (stride));
a5c641b5
AB
571 }
572
573 /* Check the user hasn't asked for something invalid. */
574 if (high > ub || low < lb)
575 error (_("array subscript out of bounds"));
576
577 /* Calculate what this dimension of the new slice array will look
578 like. OFFSET is the byte offset from the start of the
579 previous (more outer) dimension to the start of this
580 dimension. E_COUNT is the number of elements in this
581 dimension. REMAINDER is the number of elements remaining
582 between the last included element and the upper bound. For
583 example an access '1:6:2' will include elements 1, 3, 5 and
584 have a remainder of 1 (element #6). */
585 LONGEST lowest = std::min (low, high);
586 LONGEST offset = (sd / 8) * (lowest - lb);
587 LONGEST e_count = std::abs (high - low) + 1;
588 e_count = (e_count + (std::abs (stride) - 1)) / std::abs (stride);
589 LONGEST new_low = 1;
590 LONGEST new_high = new_low + e_count - 1;
591 LONGEST new_stride = (sd * stride) / 8;
592 LONGEST last_elem = low + ((e_count - 1) * stride);
593 LONGEST remainder = high - last_elem;
594 if (low > high)
595 {
596 offset += std::abs (remainder) * TYPE_LENGTH (target_type);
597 if (stride > 0)
598 error (_("incorrect stride and boundary combination"));
599 }
600 else if (stride < 0)
601 error (_("incorrect stride and boundary combination"));
602
603 /* Is the data within this dimension contiguous? It is if the
604 newly computed stride is the same size as a single element of
605 this dimension. */
606 bool is_dim_contiguous = (new_stride == slice_element_size);
607 is_all_contiguous &= is_dim_contiguous;
6d816919 608
a5c641b5
AB
609 if (fortran_array_slicing_debug)
610 {
611 debug_printf ("| '-> Results:\n");
a5adb8f3
SM
612 debug_printf ("| |-> Offset = %s\n", plongest (offset));
613 debug_printf ("| |-> Elements = %s\n", plongest (e_count));
614 debug_printf ("| |-> Low bound = %s\n", plongest (new_low));
615 debug_printf ("| |-> High bound = %s\n",
616 plongest (new_high));
617 debug_printf ("| |-> Byte stride = %s\n",
618 plongest (new_stride));
619 debug_printf ("| |-> Last element = %s\n",
620 plongest (last_elem));
621 debug_printf ("| |-> Remainder = %s\n",
622 plongest (remainder));
a5c641b5
AB
623 debug_printf ("| '-> Contiguous = %s\n",
624 (is_dim_contiguous ? "Yes" : "No"));
625 }
626
627 /* Figure out how big (in bytes) an element of this dimension of
628 the new array slice will be. */
629 slice_element_size = std::abs (new_stride * e_count);
6d816919 630
a5c641b5
AB
631 slice_dims.emplace_back (new_low, new_high, new_stride,
632 index_type);
633
634 /* Update the total offset. */
635 total_offset += offset;
636 }
637 else
638 {
639 /* There is a single index for this dimension. */
640 LONGEST index
641 = value_as_long (evaluate_subexp_with_coercion (exp, pos, noside));
642
643 /* Get information about this dimension in the original ARRAY. */
644 struct type *target_type = TYPE_TARGET_TYPE (dim_type);
645 struct type *index_type = dim_type->index_type ();
646 LONGEST lb = f77_get_lowerbound (dim_type);
647 LONGEST ub = f77_get_upperbound (dim_type);
648 LONGEST sd = index_type->bit_stride () / 8;
649 if (sd == 0)
650 sd = TYPE_LENGTH (target_type);
651
652 if (fortran_array_slicing_debug)
653 {
654 debug_printf ("|-> Index access\n");
655 std::string str = type_to_string (dim_type);
656 debug_printf ("| |-> Type: %s\n", str.c_str ());
657 debug_printf ("| |-> Array:\n");
a5adb8f3
SM
658 debug_printf ("| | |-> Low bound: %s\n", plongest (lb));
659 debug_printf ("| | |-> High bound: %s\n", plongest (ub));
660 debug_printf ("| | |-> Byte stride: %s\n", plongest (sd));
661 debug_printf ("| | |-> Type size: %s\n",
662 pulongest (TYPE_LENGTH (dim_type)));
663 debug_printf ("| | '-> Target type size: %s\n",
664 pulongest (TYPE_LENGTH (target_type)));
a5c641b5 665 debug_printf ("| '-> Accessing:\n");
a5adb8f3
SM
666 debug_printf ("| '-> Index: %s\n",
667 plongest (index));
a5c641b5
AB
668 }
669
670 /* If the array has actual content then check the index is in
671 bounds. An array without content (an unbound array) doesn't
672 have a known upper bound, so don't error check in that
673 situation. */
674 if (index < lb
675 || (dim_type->index_type ()->bounds ()->high.kind () != PROP_UNDEFINED
676 && index > ub)
677 || (VALUE_LVAL (array) != lval_memory
678 && dim_type->index_type ()->bounds ()->high.kind () == PROP_UNDEFINED))
679 {
680 if (type_not_associated (dim_type))
681 error (_("no such vector element (vector not associated)"));
682 else if (type_not_allocated (dim_type))
683 error (_("no such vector element (vector not allocated)"));
684 else
685 error (_("no such vector element"));
686 }
687
688 /* Calculate using the type stride, not the target type size. */
689 LONGEST offset = sd * (index - lb);
690 total_offset += offset;
691 }
692 }
693
694 if (noside == EVAL_SKIP)
695 return array;
6d816919 696
a5c641b5
AB
697 /* Build a type that represents the new array slice in the target memory
698 of the original ARRAY, this type makes use of strides to correctly
699 find only those elements that are part of the new slice. */
700 struct type *array_slice_type = inner_element_type;
701 for (const auto &d : slice_dims)
6d816919 702 {
a5c641b5
AB
703 /* Create the range. */
704 dynamic_prop p_low, p_high, p_stride;
705
706 p_low.set_const_val (d.low);
707 p_high.set_const_val (d.high);
708 p_stride.set_const_val (d.stride);
709
710 struct type *new_range
711 = create_range_type_with_stride ((struct type *) NULL,
712 TYPE_TARGET_TYPE (d.index),
713 &p_low, &p_high, 0, &p_stride,
714 true);
715 array_slice_type
716 = create_array_type (nullptr, array_slice_type, new_range);
717 }
6d816919 718
a5c641b5
AB
719 if (fortran_array_slicing_debug)
720 {
721 debug_printf ("'-> Final result:\n");
722 debug_printf (" |-> Type: %s\n",
723 type_to_string (array_slice_type).c_str ());
a5adb8f3
SM
724 debug_printf (" |-> Total offset: %s\n",
725 plongest (total_offset));
a5c641b5
AB
726 debug_printf (" |-> Base address: %s\n",
727 core_addr_to_string (value_address (array)));
728 debug_printf (" '-> Contiguous = %s\n",
729 (is_all_contiguous ? "Yes" : "No"));
6d816919
AB
730 }
731
a5c641b5
AB
732 /* Should we repack this array slice? */
733 if (!is_all_contiguous && (repack_array_slices || is_string_p))
6d816919 734 {
a5c641b5
AB
735 /* Build a type for the repacked slice. */
736 struct type *repacked_array_type = inner_element_type;
737 for (const auto &d : slice_dims)
738 {
739 /* Create the range. */
740 dynamic_prop p_low, p_high, p_stride;
741
742 p_low.set_const_val (d.low);
743 p_high.set_const_val (d.high);
744 p_stride.set_const_val (TYPE_LENGTH (repacked_array_type));
745
746 struct type *new_range
747 = create_range_type_with_stride ((struct type *) NULL,
748 TYPE_TARGET_TYPE (d.index),
749 &p_low, &p_high, 0, &p_stride,
750 true);
751 repacked_array_type
752 = create_array_type (nullptr, repacked_array_type, new_range);
753 }
6d816919 754
a5c641b5
AB
755 /* Now copy the elements from the original ARRAY into the packed
756 array value DEST. */
757 struct value *dest = allocate_value (repacked_array_type);
758 if (value_lazy (array)
759 || (total_offset + TYPE_LENGTH (array_slice_type)
760 > TYPE_LENGTH (check_typedef (value_type (array)))))
761 {
762 fortran_array_walker<fortran_lazy_array_repacker_impl> p
763 (array_slice_type, value_address (array) + total_offset, dest);
764 p.walk ();
765 }
766 else
767 {
768 fortran_array_walker<fortran_array_repacker_impl> p
769 (array_slice_type, value_address (array) + total_offset,
770 total_offset, array, dest);
771 p.walk ();
772 }
773 array = dest;
774 }
775 else
776 {
777 if (VALUE_LVAL (array) == lval_memory)
778 {
779 /* If the value we're taking a slice from is not yet loaded, or
780 the requested slice is outside the values content range then
781 just create a new lazy value pointing at the memory where the
782 contents we're looking for exist. */
783 if (value_lazy (array)
784 || (total_offset + TYPE_LENGTH (array_slice_type)
785 > TYPE_LENGTH (check_typedef (value_type (array)))))
786 array = value_at_lazy (array_slice_type,
787 value_address (array) + total_offset);
788 else
789 array = value_from_contents_and_address (array_slice_type,
790 (value_contents (array)
791 + total_offset),
792 (value_address (array)
793 + total_offset));
794 }
795 else if (!value_lazy (array))
e3436813 796 array = value_from_component (array, array_slice_type, total_offset);
a5c641b5
AB
797 else
798 error (_("cannot subscript arrays that are not in memory"));
6d816919
AB
799 }
800
801 return array;
802}
803
faeb9f13
AB
804/* Evaluate FORTRAN_ASSOCIATED expressions. Both GDBARCH and LANG are
805 extracted from the expression being evaluated. POINTER is the required
806 first argument to the 'associated' keyword, and TARGET is the optional
807 second argument, this will be nullptr if the user only passed one
808 argument to their use of 'associated'. */
809
810static struct value *
811fortran_associated (struct gdbarch *gdbarch, const language_defn *lang,
812 struct value *pointer, struct value *target = nullptr)
813{
814 struct type *result_type = language_bool_type (lang, gdbarch);
815
816 /* All Fortran pointers should have the associated property, this is
817 how we know the pointer is pointing at something or not. */
818 struct type *pointer_type = check_typedef (value_type (pointer));
819 if (TYPE_ASSOCIATED_PROP (pointer_type) == nullptr
820 && pointer_type->code () != TYPE_CODE_PTR)
821 error (_("ASSOCIATED can only be applied to pointers"));
822
823 /* Get an address from POINTER. Fortran (or at least gfortran) models
824 array pointers as arrays with a dynamic data address, so we need to
825 use two approaches here, for real pointers we take the contents of the
826 pointer as an address. For non-pointers we take the address of the
827 content. */
828 CORE_ADDR pointer_addr;
829 if (pointer_type->code () == TYPE_CODE_PTR)
830 pointer_addr = value_as_address (pointer);
831 else
832 pointer_addr = value_address (pointer);
833
834 /* The single argument case, is POINTER associated with anything? */
835 if (target == nullptr)
836 {
837 bool is_associated = false;
838
839 /* If POINTER is an actual pointer and doesn't have an associated
840 property then we need to figure out whether this pointer is
841 associated by looking at the value of the pointer itself. We make
842 the assumption that a non-associated pointer will be set to 0.
843 This is probably true for most targets, but might not be true for
844 everyone. */
845 if (pointer_type->code () == TYPE_CODE_PTR
846 && TYPE_ASSOCIATED_PROP (pointer_type) == nullptr)
847 is_associated = (pointer_addr != 0);
848 else
849 is_associated = !type_not_associated (pointer_type);
850 return value_from_longest (result_type, is_associated ? 1 : 0);
851 }
852
853 /* The two argument case, is POINTER associated with TARGET? */
854
855 struct type *target_type = check_typedef (value_type (target));
856
857 struct type *pointer_target_type;
858 if (pointer_type->code () == TYPE_CODE_PTR)
859 pointer_target_type = TYPE_TARGET_TYPE (pointer_type);
860 else
861 pointer_target_type = pointer_type;
862
863 struct type *target_target_type;
864 if (target_type->code () == TYPE_CODE_PTR)
865 target_target_type = TYPE_TARGET_TYPE (target_type);
866 else
867 target_target_type = target_type;
868
869 if (pointer_target_type->code () != target_target_type->code ()
870 || (pointer_target_type->code () != TYPE_CODE_ARRAY
871 && (TYPE_LENGTH (pointer_target_type)
872 != TYPE_LENGTH (target_target_type))))
873 error (_("arguments to associated must be of same type and kind"));
874
875 /* If TARGET is not in memory, or the original pointer is specifically
876 known to be not associated with anything, then the answer is obviously
877 false. Alternatively, if POINTER is an actual pointer and has no
878 associated property, then we have to check if its associated by
879 looking the value of the pointer itself. We make the assumption that
880 a non-associated pointer will be set to 0. This is probably true for
881 most targets, but might not be true for everyone. */
882 if (value_lval_const (target) != lval_memory
883 || type_not_associated (pointer_type)
884 || (TYPE_ASSOCIATED_PROP (pointer_type) == nullptr
885 && pointer_type->code () == TYPE_CODE_PTR
886 && pointer_addr == 0))
887 return value_from_longest (result_type, 0);
888
889 /* See the comment for POINTER_ADDR above. */
890 CORE_ADDR target_addr;
891 if (target_type->code () == TYPE_CODE_PTR)
892 target_addr = value_as_address (target);
893 else
894 target_addr = value_address (target);
895
896 /* Wrap the following checks inside a do { ... } while (false) loop so
897 that we can use `break' to jump out of the loop. */
898 bool is_associated = false;
899 do
900 {
901 /* If the addresses are different then POINTER is definitely not
902 pointing at TARGET. */
903 if (pointer_addr != target_addr)
904 break;
905
906 /* If POINTER is a real pointer (i.e. not an array pointer, which are
907 implemented as arrays with a dynamic content address), then this
908 is all the checking that is needed. */
909 if (pointer_type->code () == TYPE_CODE_PTR)
910 {
911 is_associated = true;
912 break;
913 }
914
915 /* We have an array pointer. Check the number of dimensions. */
916 int pointer_dims = calc_f77_array_dims (pointer_type);
917 int target_dims = calc_f77_array_dims (target_type);
918 if (pointer_dims != target_dims)
919 break;
920
921 /* Now check that every dimension has the same upper bound, lower
922 bound, and stride value. */
923 int dim = 0;
924 while (dim < pointer_dims)
925 {
926 LONGEST pointer_lowerbound, pointer_upperbound, pointer_stride;
927 LONGEST target_lowerbound, target_upperbound, target_stride;
928
929 pointer_type = check_typedef (pointer_type);
930 target_type = check_typedef (target_type);
931
932 struct type *pointer_range = pointer_type->index_type ();
933 struct type *target_range = target_type->index_type ();
934
935 if (!get_discrete_bounds (pointer_range, &pointer_lowerbound,
936 &pointer_upperbound))
937 break;
938
939 if (!get_discrete_bounds (target_range, &target_lowerbound,
940 &target_upperbound))
941 break;
942
943 if (pointer_lowerbound != target_lowerbound
944 || pointer_upperbound != target_upperbound)
945 break;
946
947 /* Figure out the stride (in bits) for both pointer and target.
948 If either doesn't have a stride then we take the element size,
949 but we need to convert to bits (hence the * 8). */
950 pointer_stride = pointer_range->bounds ()->bit_stride ();
951 if (pointer_stride == 0)
952 pointer_stride
953 = type_length_units (check_typedef
954 (TYPE_TARGET_TYPE (pointer_type))) * 8;
955 target_stride = target_range->bounds ()->bit_stride ();
956 if (target_stride == 0)
957 target_stride
958 = type_length_units (check_typedef
959 (TYPE_TARGET_TYPE (target_type))) * 8;
960 if (pointer_stride != target_stride)
961 break;
962
963 ++dim;
964 }
965
966 if (dim < pointer_dims)
967 break;
968
969 is_associated = true;
970 }
971 while (false);
972
973 return value_from_longest (result_type, is_associated ? 1 : 0);
974}
975
976
cc05c68e
TT
977/* A helper function for UNOP_ABS. */
978
979static struct value *
980eval_op_f_abs (struct type *expect_type, struct expression *exp,
981 enum noside noside,
982 struct value *arg1)
983{
984 if (noside == EVAL_SKIP)
985 return eval_skip_value (exp);
986 struct type *type = value_type (arg1);
987 switch (type->code ())
988 {
989 case TYPE_CODE_FLT:
990 {
991 double d
992 = fabs (target_float_to_host_double (value_contents (arg1),
993 value_type (arg1)));
994 return value_from_host_double (type, d);
995 }
996 case TYPE_CODE_INT:
997 {
998 LONGEST l = value_as_long (arg1);
999 l = llabs (l);
1000 return value_from_longest (type, l);
1001 }
1002 }
1003 error (_("ABS of type %s not supported"), TYPE_SAFE_NAME (type));
1004}
1005
e08109f2
TT
1006/* A helper function for BINOP_MOD. */
1007
1008static struct value *
1009eval_op_f_mod (struct type *expect_type, struct expression *exp,
1010 enum noside noside,
1011 struct value *arg1, struct value *arg2)
1012{
1013 if (noside == EVAL_SKIP)
1014 return eval_skip_value (exp);
1015 struct type *type = value_type (arg1);
1016 if (type->code () != value_type (arg2)->code ())
1017 error (_("non-matching types for parameters to MOD ()"));
1018 switch (type->code ())
1019 {
1020 case TYPE_CODE_FLT:
1021 {
1022 double d1
1023 = target_float_to_host_double (value_contents (arg1),
1024 value_type (arg1));
1025 double d2
1026 = target_float_to_host_double (value_contents (arg2),
1027 value_type (arg2));
1028 double d3 = fmod (d1, d2);
1029 return value_from_host_double (type, d3);
1030 }
1031 case TYPE_CODE_INT:
1032 {
1033 LONGEST v1 = value_as_long (arg1);
1034 LONGEST v2 = value_as_long (arg2);
1035 if (v2 == 0)
1036 error (_("calling MOD (N, 0) is undefined"));
1037 LONGEST v3 = v1 - (v1 / v2) * v2;
1038 return value_from_longest (value_type (arg1), v3);
1039 }
1040 }
1041 error (_("MOD of type %s not supported"), TYPE_SAFE_NAME (type));
1042}
1043
3dc41f3c
TT
1044/* A helper function for UNOP_FORTRAN_CEILING. */
1045
1046static struct value *
1047eval_op_f_ceil (struct type *expect_type, struct expression *exp,
1048 enum noside noside,
1049 struct value *arg1)
1050{
1051 if (noside == EVAL_SKIP)
1052 return eval_skip_value (exp);
1053 struct type *type = value_type (arg1);
1054 if (type->code () != TYPE_CODE_FLT)
1055 error (_("argument to CEILING must be of type float"));
1056 double val
1057 = target_float_to_host_double (value_contents (arg1),
1058 value_type (arg1));
1059 val = ceil (val);
1060 return value_from_host_double (type, val);
1061}
1062
9dad4a58 1063/* Special expression evaluation cases for Fortran. */
cb8c24b6
SM
1064
1065static struct value *
9dad4a58
AB
1066evaluate_subexp_f (struct type *expect_type, struct expression *exp,
1067 int *pos, enum noside noside)
1068{
b6d03bb2 1069 struct value *arg1 = NULL, *arg2 = NULL;
4d00f5d8
AB
1070 enum exp_opcode op;
1071 int pc;
1072 struct type *type;
1073
1074 pc = *pos;
1075 *pos += 1;
1076 op = exp->elts[pc].opcode;
1077
1078 switch (op)
1079 {
1080 default:
1081 *pos -= 1;
1082 return evaluate_subexp_standard (expect_type, exp, pos, noside);
1083
0841c79a 1084 case UNOP_ABS:
fe1fe7ea 1085 arg1 = evaluate_subexp (nullptr, exp, pos, noside);
cc05c68e 1086 return eval_op_f_abs (expect_type, exp, noside, arg1);
0841c79a 1087
b6d03bb2 1088 case BINOP_MOD:
fe1fe7ea 1089 arg1 = evaluate_subexp (nullptr, exp, pos, noside);
b6d03bb2 1090 arg2 = evaluate_subexp (value_type (arg1), exp, pos, noside);
e08109f2 1091 return eval_op_f_mod (expect_type, exp, noside, arg1, arg2);
b6d03bb2
AB
1092
1093 case UNOP_FORTRAN_CEILING:
3dc41f3c
TT
1094 arg1 = evaluate_subexp (nullptr, exp, pos, noside);
1095 return eval_op_f_ceil (expect_type, exp, noside, arg1);
b6d03bb2
AB
1096
1097 case UNOP_FORTRAN_FLOOR:
1098 {
fe1fe7ea 1099 arg1 = evaluate_subexp (nullptr, exp, pos, noside);
b6d03bb2
AB
1100 if (noside == EVAL_SKIP)
1101 return eval_skip_value (exp);
1102 type = value_type (arg1);
78134374 1103 if (type->code () != TYPE_CODE_FLT)
b6d03bb2
AB
1104 error (_("argument to FLOOR must be of type float"));
1105 double val
1106 = target_float_to_host_double (value_contents (arg1),
1107 value_type (arg1));
1108 val = floor (val);
1109 return value_from_host_double (type, val);
1110 }
1111
96df3e28
AB
1112 case UNOP_FORTRAN_ALLOCATED:
1113 {
1114 arg1 = evaluate_subexp (nullptr, exp, pos, noside);
1115 if (noside == EVAL_SKIP)
1116 return eval_skip_value (exp);
1117 type = check_typedef (value_type (arg1));
1118 if (type->code () != TYPE_CODE_ARRAY)
1119 error (_("ALLOCATED can only be applied to arrays"));
1120 struct type *result_type
1121 = builtin_f_type (exp->gdbarch)->builtin_logical;
1122 LONGEST result_value = type_not_allocated (type) ? 0 : 1;
1123 return value_from_longest (result_type, result_value);
1124 }
1125
b6d03bb2
AB
1126 case BINOP_FORTRAN_MODULO:
1127 {
fe1fe7ea 1128 arg1 = evaluate_subexp (nullptr, exp, pos, noside);
b6d03bb2
AB
1129 arg2 = evaluate_subexp (value_type (arg1), exp, pos, noside);
1130 if (noside == EVAL_SKIP)
1131 return eval_skip_value (exp);
1132 type = value_type (arg1);
78134374 1133 if (type->code () != value_type (arg2)->code ())
b6d03bb2 1134 error (_("non-matching types for parameters to MODULO ()"));
dda83cd7 1135 /* MODULO(A, P) = A - FLOOR (A / P) * P */
78134374 1136 switch (type->code ())
b6d03bb2
AB
1137 {
1138 case TYPE_CODE_INT:
1139 {
1140 LONGEST a = value_as_long (arg1);
1141 LONGEST p = value_as_long (arg2);
1142 LONGEST result = a - (a / p) * p;
1143 if (result != 0 && (a < 0) != (p < 0))
1144 result += p;
1145 return value_from_longest (value_type (arg1), result);
1146 }
1147 case TYPE_CODE_FLT:
1148 {
1149 double a
1150 = target_float_to_host_double (value_contents (arg1),
1151 value_type (arg1));
1152 double p
1153 = target_float_to_host_double (value_contents (arg2),
1154 value_type (arg2));
1155 double result = fmod (a, p);
1156 if (result != 0 && (a < 0.0) != (p < 0.0))
1157 result += p;
1158 return value_from_host_double (type, result);
1159 }
1160 }
1161 error (_("MODULO of type %s not supported"), TYPE_SAFE_NAME (type));
1162 }
1163
e92c8eb8
AB
1164 case FORTRAN_LBOUND:
1165 case FORTRAN_UBOUND:
1166 {
1167 int nargs = longest_to_int (exp->elts[pc + 1].longconst);
1168 (*pos) += 2;
1169
1170 /* This assertion should be enforced by the expression parser. */
1171 gdb_assert (nargs == 1 || nargs == 2);
1172
1173 bool lbound_p = op == FORTRAN_LBOUND;
1174
1175 /* Check that the first argument is array like. */
1176 arg1 = evaluate_subexp (nullptr, exp, pos, noside);
1177 type = check_typedef (value_type (arg1));
1178 if (type->code () != TYPE_CODE_ARRAY)
1179 {
1180 if (lbound_p)
1181 error (_("LBOUND can only be applied to arrays"));
1182 else
1183 error (_("UBOUND can only be applied to arrays"));
1184 }
1185
1186 if (nargs == 1)
1187 return fortran_bounds_all_dims (lbound_p, exp->gdbarch, arg1);
1188
1189 /* User asked for the bounds of a specific dimension of the array. */
1190 arg2 = evaluate_subexp (nullptr, exp, pos, noside);
1191 type = check_typedef (value_type (arg2));
1192 if (type->code () != TYPE_CODE_INT)
1193 {
1194 if (lbound_p)
1195 error (_("LBOUND second argument should be an integer"));
1196 else
1197 error (_("UBOUND second argument should be an integer"));
1198 }
1199
1200 return fortran_bounds_for_dimension (lbound_p, exp->gdbarch, arg1,
1201 arg2);
1202 }
1203 break;
1204
faeb9f13
AB
1205 case FORTRAN_ASSOCIATED:
1206 {
1207 int nargs = longest_to_int (exp->elts[pc + 1].longconst);
1208 (*pos) += 2;
1209
1210 /* This assertion should be enforced by the expression parser. */
1211 gdb_assert (nargs == 1 || nargs == 2);
1212
1213 arg1 = evaluate_subexp (nullptr, exp, pos, noside);
1214
1215 if (nargs == 1)
1216 {
1217 if (noside == EVAL_SKIP)
1218 return eval_skip_value (exp);
1219 return fortran_associated (exp->gdbarch, exp->language_defn,
1220 arg1);
1221 }
1222
1223 arg2 = evaluate_subexp (nullptr, exp, pos, noside);
1224 if (noside == EVAL_SKIP)
1225 return eval_skip_value (exp);
1226 return fortran_associated (exp->gdbarch, exp->language_defn,
1227 arg1, arg2);
1228 }
1229 break;
1230
b6d03bb2 1231 case BINOP_FORTRAN_CMPLX:
fe1fe7ea 1232 arg1 = evaluate_subexp (nullptr, exp, pos, noside);
b6d03bb2
AB
1233 arg2 = evaluate_subexp (value_type (arg1), exp, pos, noside);
1234 if (noside == EVAL_SKIP)
1235 return eval_skip_value (exp);
1236 type = builtin_f_type(exp->gdbarch)->builtin_complex_s16;
1237 return value_literal_complex (arg1, arg2, type);
1238
83228e93 1239 case UNOP_FORTRAN_KIND:
4d00f5d8
AB
1240 arg1 = evaluate_subexp (NULL, exp, pos, EVAL_AVOID_SIDE_EFFECTS);
1241 type = value_type (arg1);
1242
78134374 1243 switch (type->code ())
dda83cd7
SM
1244 {
1245 case TYPE_CODE_STRUCT:
1246 case TYPE_CODE_UNION:
1247 case TYPE_CODE_MODULE:
1248 case TYPE_CODE_FUNC:
1249 error (_("argument to kind must be an intrinsic type"));
1250 }
4d00f5d8
AB
1251
1252 if (!TYPE_TARGET_TYPE (type))
dda83cd7 1253 return value_from_longest (builtin_type (exp->gdbarch)->builtin_int,
4d00f5d8
AB
1254 TYPE_LENGTH (type));
1255 return value_from_longest (builtin_type (exp->gdbarch)->builtin_int,
78134374 1256 TYPE_LENGTH (TYPE_TARGET_TYPE (type)));
6d816919
AB
1257
1258
1259 case OP_F77_UNDETERMINED_ARGLIST:
1260 /* Remember that in F77, functions, substring ops and array subscript
dda83cd7
SM
1261 operations cannot be disambiguated at parse time. We have made
1262 all array subscript operations, substring operations as well as
1263 function calls come here and we now have to discover what the heck
1264 this thing actually was. If it is a function, we process just as
1265 if we got an OP_FUNCALL. */
6d816919
AB
1266 int nargs = longest_to_int (exp->elts[pc + 1].longconst);
1267 (*pos) += 2;
1268
1269 /* First determine the type code we are dealing with. */
1270 arg1 = evaluate_subexp (nullptr, exp, pos, noside);
1271 type = check_typedef (value_type (arg1));
1272 enum type_code code = type->code ();
1273
1274 if (code == TYPE_CODE_PTR)
1275 {
1276 /* Fortran always passes variable to subroutines as pointer.
1277 So we need to look into its target type to see if it is
1278 array, string or function. If it is, we need to switch
1279 to the target value the original one points to. */
1280 struct type *target_type = check_typedef (TYPE_TARGET_TYPE (type));
1281
1282 if (target_type->code () == TYPE_CODE_ARRAY
1283 || target_type->code () == TYPE_CODE_STRING
1284 || target_type->code () == TYPE_CODE_FUNC)
1285 {
1286 arg1 = value_ind (arg1);
1287 type = check_typedef (value_type (arg1));
1288 code = type->code ();
1289 }
1290 }
1291
1292 switch (code)
1293 {
1294 case TYPE_CODE_ARRAY:
1295 case TYPE_CODE_STRING:
1296 return fortran_value_subarray (arg1, exp, pos, nargs, noside);
1297
1298 case TYPE_CODE_PTR:
1299 case TYPE_CODE_FUNC:
1300 case TYPE_CODE_INTERNAL_FUNCTION:
1301 {
1302 /* It's a function call. Allocate arg vector, including
1303 space for the function to be called in argvec[0] and a
1304 termination NULL. */
1305 struct value **argvec = (struct value **)
1306 alloca (sizeof (struct value *) * (nargs + 2));
1307 argvec[0] = arg1;
1308 int tem = 1;
1309 for (; tem <= nargs; tem++)
1310 {
68337b8b
AB
1311 bool is_internal_func = (code == TYPE_CODE_INTERNAL_FUNCTION);
1312 argvec[tem]
1313 = fortran_prepare_argument (exp, pos, (tem - 1),
1314 is_internal_func,
1315 value_type (arg1), noside);
6d816919
AB
1316 }
1317 argvec[tem] = 0; /* signal end of arglist */
1318 if (noside == EVAL_SKIP)
1319 return eval_skip_value (exp);
1ab8280d
TT
1320 return evaluate_subexp_do_call (exp, noside, argvec[0],
1321 gdb::make_array_view (argvec + 1,
1322 nargs),
1323 NULL, expect_type);
6d816919
AB
1324 }
1325
1326 default:
1327 error (_("Cannot perform substring on this type"));
1328 }
4d00f5d8
AB
1329 }
1330
1331 /* Should be unreachable. */
1332 return nullptr;
9dad4a58
AB
1333}
1334
83228e93
AB
1335/* Special expression lengths for Fortran. */
1336
1337static void
1338operator_length_f (const struct expression *exp, int pc, int *oplenp,
1339 int *argsp)
1340{
1341 int oplen = 1;
1342 int args = 0;
1343
1344 switch (exp->elts[pc - 1].opcode)
1345 {
1346 default:
1347 operator_length_standard (exp, pc, oplenp, argsp);
1348 return;
1349
1350 case UNOP_FORTRAN_KIND:
b6d03bb2
AB
1351 case UNOP_FORTRAN_FLOOR:
1352 case UNOP_FORTRAN_CEILING:
96df3e28 1353 case UNOP_FORTRAN_ALLOCATED:
83228e93
AB
1354 oplen = 1;
1355 args = 1;
1356 break;
b6d03bb2
AB
1357
1358 case BINOP_FORTRAN_CMPLX:
1359 case BINOP_FORTRAN_MODULO:
1360 oplen = 1;
1361 args = 2;
1362 break;
6d816919 1363
faeb9f13 1364 case FORTRAN_ASSOCIATED:
e92c8eb8
AB
1365 case FORTRAN_LBOUND:
1366 case FORTRAN_UBOUND:
1367 oplen = 3;
1368 args = longest_to_int (exp->elts[pc - 2].longconst);
1369 break;
1370
6d816919
AB
1371 case OP_F77_UNDETERMINED_ARGLIST:
1372 oplen = 3;
1373 args = 1 + longest_to_int (exp->elts[pc - 2].longconst);
1374 break;
83228e93
AB
1375 }
1376
1377 *oplenp = oplen;
1378 *argsp = args;
1379}
1380
b6d03bb2
AB
1381/* Helper for PRINT_SUBEXP_F. Arguments are as for PRINT_SUBEXP_F, except
1382 the extra argument NAME which is the text that should be printed as the
1383 name of this operation. */
1384
1385static void
1386print_unop_subexp_f (struct expression *exp, int *pos,
1387 struct ui_file *stream, enum precedence prec,
1388 const char *name)
1389{
1390 (*pos)++;
1391 fprintf_filtered (stream, "%s(", name);
1392 print_subexp (exp, pos, stream, PREC_SUFFIX);
1393 fputs_filtered (")", stream);
1394}
1395
1396/* Helper for PRINT_SUBEXP_F. Arguments are as for PRINT_SUBEXP_F, except
1397 the extra argument NAME which is the text that should be printed as the
1398 name of this operation. */
1399
1400static void
1401print_binop_subexp_f (struct expression *exp, int *pos,
1402 struct ui_file *stream, enum precedence prec,
1403 const char *name)
1404{
1405 (*pos)++;
1406 fprintf_filtered (stream, "%s(", name);
1407 print_subexp (exp, pos, stream, PREC_SUFFIX);
1408 fputs_filtered (",", stream);
1409 print_subexp (exp, pos, stream, PREC_SUFFIX);
1410 fputs_filtered (")", stream);
1411}
1412
faeb9f13
AB
1413/* Helper for PRINT_SUBEXP_F. Arguments are as for PRINT_SUBEXP_F, except
1414 the extra argument NAME which is the text that should be printed as the
1415 name of this operation. */
1416
1417static void
1418print_unop_or_binop_subexp_f (struct expression *exp, int *pos,
1419 struct ui_file *stream, enum precedence prec,
1420 const char *name)
1421{
1422 unsigned nargs = longest_to_int (exp->elts[*pos + 1].longconst);
1423 (*pos) += 3;
1424 fprintf_filtered (stream, "%s (", name);
1425 for (unsigned tem = 0; tem < nargs; tem++)
1426 {
1427 if (tem != 0)
1428 fputs_filtered (", ", stream);
1429 print_subexp (exp, pos, stream, PREC_ABOVE_COMMA);
1430 }
1431 fputs_filtered (")", stream);
1432}
1433
83228e93
AB
1434/* Special expression printing for Fortran. */
1435
1436static void
1437print_subexp_f (struct expression *exp, int *pos,
1438 struct ui_file *stream, enum precedence prec)
1439{
1440 int pc = *pos;
1441 enum exp_opcode op = exp->elts[pc].opcode;
1442
1443 switch (op)
1444 {
1445 default:
1446 print_subexp_standard (exp, pos, stream, prec);
1447 return;
1448
1449 case UNOP_FORTRAN_KIND:
b6d03bb2
AB
1450 print_unop_subexp_f (exp, pos, stream, prec, "KIND");
1451 return;
1452
1453 case UNOP_FORTRAN_FLOOR:
1454 print_unop_subexp_f (exp, pos, stream, prec, "FLOOR");
1455 return;
1456
1457 case UNOP_FORTRAN_CEILING:
1458 print_unop_subexp_f (exp, pos, stream, prec, "CEILING");
1459 return;
1460
96df3e28
AB
1461 case UNOP_FORTRAN_ALLOCATED:
1462 print_unop_subexp_f (exp, pos, stream, prec, "ALLOCATED");
1463 return;
1464
b6d03bb2
AB
1465 case BINOP_FORTRAN_CMPLX:
1466 print_binop_subexp_f (exp, pos, stream, prec, "CMPLX");
1467 return;
1468
1469 case BINOP_FORTRAN_MODULO:
1470 print_binop_subexp_f (exp, pos, stream, prec, "MODULO");
83228e93 1471 return;
6d816919 1472
faeb9f13
AB
1473 case FORTRAN_ASSOCIATED:
1474 print_unop_or_binop_subexp_f (exp, pos, stream, prec, "ASSOCIATED");
1475 return;
1476
e92c8eb8 1477 case FORTRAN_LBOUND:
faeb9f13
AB
1478 print_unop_or_binop_subexp_f (exp, pos, stream, prec, "LBOUND");
1479 return;
1480
e92c8eb8 1481 case FORTRAN_UBOUND:
faeb9f13
AB
1482 print_unop_or_binop_subexp_f (exp, pos, stream, prec, "UBOUND");
1483 return;
e92c8eb8 1484
6d816919 1485 case OP_F77_UNDETERMINED_ARGLIST:
86775fab 1486 (*pos)++;
6d816919
AB
1487 print_subexp_funcall (exp, pos, stream);
1488 return;
83228e93
AB
1489 }
1490}
1491
83228e93
AB
1492/* Special expression dumping for Fortran. */
1493
1494static int
1495dump_subexp_body_f (struct expression *exp,
1496 struct ui_file *stream, int elt)
1497{
1498 int opcode = exp->elts[elt].opcode;
1499 int oplen, nargs, i;
1500
1501 switch (opcode)
1502 {
1503 default:
1504 return dump_subexp_body_standard (exp, stream, elt);
1505
1506 case UNOP_FORTRAN_KIND:
b6d03bb2
AB
1507 case UNOP_FORTRAN_FLOOR:
1508 case UNOP_FORTRAN_CEILING:
96df3e28 1509 case UNOP_FORTRAN_ALLOCATED:
b6d03bb2
AB
1510 case BINOP_FORTRAN_CMPLX:
1511 case BINOP_FORTRAN_MODULO:
83228e93
AB
1512 operator_length_f (exp, (elt + 1), &oplen, &nargs);
1513 break;
6d816919 1514
faeb9f13 1515 case FORTRAN_ASSOCIATED:
e92c8eb8
AB
1516 case FORTRAN_LBOUND:
1517 case FORTRAN_UBOUND:
1518 operator_length_f (exp, (elt + 3), &oplen, &nargs);
1519 break;
1520
6d816919 1521 case OP_F77_UNDETERMINED_ARGLIST:
86775fab 1522 return dump_subexp_body_funcall (exp, stream, elt + 1);
83228e93
AB
1523 }
1524
1525 elt += oplen;
1526 for (i = 0; i < nargs; i += 1)
1527 elt = dump_subexp (exp, stream, elt);
1528
1529 return elt;
1530}
1531
1532/* Special expression checking for Fortran. */
1533
1534static int
1535operator_check_f (struct expression *exp, int pos,
1536 int (*objfile_func) (struct objfile *objfile,
1537 void *data),
1538 void *data)
1539{
1540 const union exp_element *const elts = exp->elts;
1541
1542 switch (elts[pos].opcode)
1543 {
1544 case UNOP_FORTRAN_KIND:
b6d03bb2
AB
1545 case UNOP_FORTRAN_FLOOR:
1546 case UNOP_FORTRAN_CEILING:
96df3e28 1547 case UNOP_FORTRAN_ALLOCATED:
b6d03bb2
AB
1548 case BINOP_FORTRAN_CMPLX:
1549 case BINOP_FORTRAN_MODULO:
faeb9f13 1550 case FORTRAN_ASSOCIATED:
e92c8eb8
AB
1551 case FORTRAN_LBOUND:
1552 case FORTRAN_UBOUND:
83228e93
AB
1553 /* Any references to objfiles are held in the arguments to this
1554 expression, not within the expression itself, so no additional
1555 checking is required here, the outer expression iteration code
1556 will take care of checking each argument. */
1557 break;
1558
1559 default:
1560 return operator_check_standard (exp, pos, objfile_func, data);
1561 }
1562
1563 return 0;
1564}
1565
9dad4a58 1566/* Expression processing for Fortran. */
1a0ea399 1567const struct exp_descriptor f_language::exp_descriptor_tab =
9dad4a58 1568{
83228e93
AB
1569 print_subexp_f,
1570 operator_length_f,
1571 operator_check_f,
83228e93 1572 dump_subexp_body_f,
9dad4a58
AB
1573 evaluate_subexp_f
1574};
1575
1a0ea399 1576/* See language.h. */
0874fd07 1577
1a0ea399
AB
1578void
1579f_language::language_arch_info (struct gdbarch *gdbarch,
1580 struct language_arch_info *lai) const
0874fd07 1581{
1a0ea399
AB
1582 const struct builtin_f_type *builtin = builtin_f_type (gdbarch);
1583
7bea47f0
AB
1584 /* Helper function to allow shorter lines below. */
1585 auto add = [&] (struct type * t)
1586 {
1587 lai->add_primitive_type (t);
1588 };
1589
1590 add (builtin->builtin_character);
1591 add (builtin->builtin_logical);
1592 add (builtin->builtin_logical_s1);
1593 add (builtin->builtin_logical_s2);
1594 add (builtin->builtin_logical_s8);
1595 add (builtin->builtin_real);
1596 add (builtin->builtin_real_s8);
1597 add (builtin->builtin_real_s16);
1598 add (builtin->builtin_complex_s8);
1599 add (builtin->builtin_complex_s16);
1600 add (builtin->builtin_void);
1601
1602 lai->set_string_char_type (builtin->builtin_character);
1603 lai->set_bool_type (builtin->builtin_logical_s2, "logical");
1a0ea399 1604}
5aba6ebe 1605
1a0ea399 1606/* See language.h. */
5aba6ebe 1607
1a0ea399
AB
1608unsigned int
1609f_language::search_name_hash (const char *name) const
1610{
1611 return cp_search_name_hash (name);
1612}
b7c6e27d 1613
1a0ea399 1614/* See language.h. */
b7c6e27d 1615
1a0ea399
AB
1616struct block_symbol
1617f_language::lookup_symbol_nonlocal (const char *name,
1618 const struct block *block,
1619 const domain_enum domain) const
1620{
1621 return cp_lookup_symbol_nonlocal (this, name, block, domain);
1622}
c9debfb9 1623
1a0ea399 1624/* See language.h. */
c9debfb9 1625
1a0ea399
AB
1626symbol_name_matcher_ftype *
1627f_language::get_symbol_name_matcher_inner
1628 (const lookup_name_info &lookup_name) const
1629{
1630 return cp_get_symbol_name_matcher (lookup_name);
1631}
0874fd07
AB
1632
1633/* Single instance of the Fortran language class. */
1634
1635static f_language f_language_defn;
1636
54ef06c7
UW
1637static void *
1638build_fortran_types (struct gdbarch *gdbarch)
c906108c 1639{
54ef06c7
UW
1640 struct builtin_f_type *builtin_f_type
1641 = GDBARCH_OBSTACK_ZALLOC (gdbarch, struct builtin_f_type);
1642
e9bb382b 1643 builtin_f_type->builtin_void
bbe75b9d 1644 = arch_type (gdbarch, TYPE_CODE_VOID, TARGET_CHAR_BIT, "void");
e9bb382b
UW
1645
1646 builtin_f_type->builtin_character
4a270568 1647 = arch_type (gdbarch, TYPE_CODE_CHAR, TARGET_CHAR_BIT, "character");
e9bb382b
UW
1648
1649 builtin_f_type->builtin_logical_s1
1650 = arch_boolean_type (gdbarch, TARGET_CHAR_BIT, 1, "logical*1");
1651
1652 builtin_f_type->builtin_integer_s2
1653 = arch_integer_type (gdbarch, gdbarch_short_bit (gdbarch), 0,
1654 "integer*2");
1655
067630bd
AB
1656 builtin_f_type->builtin_integer_s8
1657 = arch_integer_type (gdbarch, gdbarch_long_long_bit (gdbarch), 0,
1658 "integer*8");
1659
e9bb382b
UW
1660 builtin_f_type->builtin_logical_s2
1661 = arch_boolean_type (gdbarch, gdbarch_short_bit (gdbarch), 1,
1662 "logical*2");
1663
ce4b0682
SDJ
1664 builtin_f_type->builtin_logical_s8
1665 = arch_boolean_type (gdbarch, gdbarch_long_long_bit (gdbarch), 1,
1666 "logical*8");
1667
e9bb382b
UW
1668 builtin_f_type->builtin_integer
1669 = arch_integer_type (gdbarch, gdbarch_int_bit (gdbarch), 0,
1670 "integer");
1671
1672 builtin_f_type->builtin_logical
1673 = arch_boolean_type (gdbarch, gdbarch_int_bit (gdbarch), 1,
1674 "logical*4");
1675
1676 builtin_f_type->builtin_real
1677 = arch_float_type (gdbarch, gdbarch_float_bit (gdbarch),
49f190bc 1678 "real", gdbarch_float_format (gdbarch));
e9bb382b
UW
1679 builtin_f_type->builtin_real_s8
1680 = arch_float_type (gdbarch, gdbarch_double_bit (gdbarch),
49f190bc 1681 "real*8", gdbarch_double_format (gdbarch));
34d11c68 1682 auto fmt = gdbarch_floatformat_for_type (gdbarch, "real(kind=16)", 128);
dc42e902
AB
1683 if (fmt != nullptr)
1684 builtin_f_type->builtin_real_s16
1685 = arch_float_type (gdbarch, 128, "real*16", fmt);
1686 else if (gdbarch_long_double_bit (gdbarch) == 128)
1687 builtin_f_type->builtin_real_s16
1688 = arch_float_type (gdbarch, gdbarch_long_double_bit (gdbarch),
1689 "real*16", gdbarch_long_double_format (gdbarch));
1690 else
1691 builtin_f_type->builtin_real_s16
1692 = arch_type (gdbarch, TYPE_CODE_ERROR, 128, "real*16");
e9bb382b
UW
1693
1694 builtin_f_type->builtin_complex_s8
5b930b45 1695 = init_complex_type ("complex*8", builtin_f_type->builtin_real);
e9bb382b 1696 builtin_f_type->builtin_complex_s16
5b930b45 1697 = init_complex_type ("complex*16", builtin_f_type->builtin_real_s8);
0830d301 1698
78134374 1699 if (builtin_f_type->builtin_real_s16->code () == TYPE_CODE_ERROR)
0830d301
TT
1700 builtin_f_type->builtin_complex_s32
1701 = arch_type (gdbarch, TYPE_CODE_ERROR, 256, "complex*32");
1702 else
1703 builtin_f_type->builtin_complex_s32
1704 = init_complex_type ("complex*32", builtin_f_type->builtin_real_s16);
54ef06c7
UW
1705
1706 return builtin_f_type;
1707}
1708
1709static struct gdbarch_data *f_type_data;
1710
1711const struct builtin_f_type *
1712builtin_f_type (struct gdbarch *gdbarch)
1713{
9a3c8263 1714 return (const struct builtin_f_type *) gdbarch_data (gdbarch, f_type_data);
4e845cd3
MS
1715}
1716
a5c641b5
AB
1717/* Command-list for the "set/show fortran" prefix command. */
1718static struct cmd_list_element *set_fortran_list;
1719static struct cmd_list_element *show_fortran_list;
1720
6c265988 1721void _initialize_f_language ();
4e845cd3 1722void
6c265988 1723_initialize_f_language ()
4e845cd3 1724{
54ef06c7 1725 f_type_data = gdbarch_data_register_post_init (build_fortran_types);
a5c641b5
AB
1726
1727 add_basic_prefix_cmd ("fortran", no_class,
1728 _("Prefix command for changing Fortran-specific settings."),
1729 &set_fortran_list, "set fortran ", 0, &setlist);
1730
1731 add_show_prefix_cmd ("fortran", no_class,
1732 _("Generic command for showing Fortran-specific settings."),
1733 &show_fortran_list, "show fortran ", 0, &showlist);
1734
1735 add_setshow_boolean_cmd ("repack-array-slices", class_vars,
1736 &repack_array_slices, _("\
1737Enable or disable repacking of non-contiguous array slices."), _("\
1738Show whether non-contiguous array slices are repacked."), _("\
1739When the user requests a slice of a Fortran array then we can either return\n\
1740a descriptor that describes the array in place (using the original array data\n\
1741in its existing location) or the original data can be repacked (copied) to a\n\
1742new location.\n\
1743\n\
1744When the content of the array slice is contiguous within the original array\n\
1745then the result will never be repacked, but when the data for the new array\n\
1746is non-contiguous within the original array repacking will only be performed\n\
1747when this setting is on."),
1748 NULL,
1749 show_repack_array_slices,
1750 &set_fortran_list, &show_fortran_list);
1751
1752 /* Debug Fortran's array slicing logic. */
1753 add_setshow_boolean_cmd ("fortran-array-slicing", class_maintenance,
1754 &fortran_array_slicing_debug, _("\
1755Set debugging of Fortran array slicing."), _("\
1756Show debugging of Fortran array slicing."), _("\
1757When on, debugging of Fortran array slicing is enabled."),
1758 NULL,
1759 show_fortran_array_slicing_debug,
1760 &setdebuglist, &showdebuglist);
c906108c 1761}
aa3cfbda 1762
5a7cf527
AB
1763/* Ensures that function argument VALUE is in the appropriate form to
1764 pass to a Fortran function. Returns a possibly new value that should
1765 be used instead of VALUE.
1766
1767 When IS_ARTIFICIAL is true this indicates an artificial argument,
1768 e.g. hidden string lengths which the GNU Fortran argument passing
1769 convention specifies as being passed by value.
aa3cfbda 1770
5a7cf527
AB
1771 When IS_ARTIFICIAL is false, the argument is passed by pointer. If the
1772 value is already in target memory then return a value that is a pointer
1773 to VALUE. If VALUE is not in memory (e.g. an integer literal), allocate
1774 space in the target, copy VALUE in, and return a pointer to the in
1775 memory copy. */
1776
1777static struct value *
aa3cfbda
RB
1778fortran_argument_convert (struct value *value, bool is_artificial)
1779{
1780 if (!is_artificial)
1781 {
1782 /* If the value is not in the inferior e.g. registers values,
1783 convenience variables and user input. */
1784 if (VALUE_LVAL (value) != lval_memory)
1785 {
1786 struct type *type = value_type (value);
1787 const int length = TYPE_LENGTH (type);
1788 const CORE_ADDR addr
1789 = value_as_long (value_allocate_space_in_inferior (length));
1790 write_memory (addr, value_contents (value), length);
1791 struct value *val
1792 = value_from_contents_and_address (type, value_contents (value),
1793 addr);
1794 return value_addr (val);
1795 }
1796 else
1797 return value_addr (value); /* Program variables, e.g. arrays. */
1798 }
1799 return value;
1800}
1801
68337b8b
AB
1802/* Prepare (and return) an argument value ready for an inferior function
1803 call to a Fortran function. EXP and POS are the expressions describing
1804 the argument to prepare. ARG_NUM is the argument number being
1805 prepared, with 0 being the first argument and so on. FUNC_TYPE is the
1806 type of the function being called.
1807
1808 IS_INTERNAL_CALL_P is true if this is a call to a function of type
1809 TYPE_CODE_INTERNAL_FUNCTION, otherwise this parameter is false.
1810
1811 NOSIDE has its usual meaning for expression parsing (see eval.c).
1812
1813 Arguments in Fortran are normally passed by address, we coerce the
1814 arguments here rather than in value_arg_coerce as otherwise the call to
1815 malloc (to place the non-lvalue parameters in target memory) is hit by
1816 this Fortran specific logic. This results in malloc being called with a
1817 pointer to an integer followed by an attempt to malloc the arguments to
1818 malloc in target memory. Infinite recursion ensues. */
1819
1820static value *
1821fortran_prepare_argument (struct expression *exp, int *pos,
1822 int arg_num, bool is_internal_call_p,
1823 struct type *func_type, enum noside noside)
1824{
1825 if (is_internal_call_p)
1826 return evaluate_subexp_with_coercion (exp, pos, noside);
1827
1828 bool is_artificial = ((arg_num >= func_type->num_fields ())
1829 ? true
1830 : TYPE_FIELD_ARTIFICIAL (func_type, arg_num));
1831
1832 /* If this is an artificial argument, then either, this is an argument
1833 beyond the end of the known arguments, or possibly, there are no known
1834 arguments (maybe missing debug info).
1835
1836 For these artificial arguments, if the user has prefixed it with '&'
1837 (for address-of), then lets always allow this to succeed, even if the
1838 argument is not actually in inferior memory. This will allow the user
1839 to pass arguments to a Fortran function even when there's no debug
1840 information.
1841
1842 As we already pass the address of non-artificial arguments, all we
1843 need to do if skip the UNOP_ADDR operator in the expression and mark
1844 the argument as non-artificial. */
1845 if (is_artificial && exp->elts[*pos].opcode == UNOP_ADDR)
1846 {
1847 (*pos)++;
1848 is_artificial = false;
1849 }
1850
1851 struct value *arg_val = evaluate_subexp_with_coercion (exp, pos, noside);
1852 return fortran_argument_convert (arg_val, is_artificial);
1853}
1854
aa3cfbda
RB
1855/* See f-lang.h. */
1856
1857struct type *
1858fortran_preserve_arg_pointer (struct value *arg, struct type *type)
1859{
78134374 1860 if (value_type (arg)->code () == TYPE_CODE_PTR)
aa3cfbda
RB
1861 return value_type (arg);
1862 return type;
1863}
a5c641b5
AB
1864
1865/* See f-lang.h. */
1866
1867CORE_ADDR
1868fortran_adjust_dynamic_array_base_address_hack (struct type *type,
1869 CORE_ADDR address)
1870{
1871 gdb_assert (type->code () == TYPE_CODE_ARRAY);
1872
b7874836
AB
1873 /* We can't adjust the base address for arrays that have no content. */
1874 if (type_not_allocated (type) || type_not_associated (type))
1875 return address;
1876
a5c641b5
AB
1877 int ndimensions = calc_f77_array_dims (type);
1878 LONGEST total_offset = 0;
1879
1880 /* Walk through each of the dimensions of this array type and figure out
1881 if any of the dimensions are "backwards", that is the base address
1882 for this dimension points to the element at the highest memory
1883 address and the stride is negative. */
1884 struct type *tmp_type = type;
1885 for (int i = 0 ; i < ndimensions; ++i)
1886 {
1887 /* Grab the range for this dimension and extract the lower and upper
1888 bounds. */
1889 tmp_type = check_typedef (tmp_type);
1890 struct type *range_type = tmp_type->index_type ();
1891 LONGEST lowerbound, upperbound, stride;
1f8d2881 1892 if (!get_discrete_bounds (range_type, &lowerbound, &upperbound))
a5c641b5
AB
1893 error ("failed to get range bounds");
1894
1895 /* Figure out the stride for this dimension. */
1896 struct type *elt_type = check_typedef (TYPE_TARGET_TYPE (tmp_type));
1897 stride = tmp_type->index_type ()->bounds ()->bit_stride ();
1898 if (stride == 0)
1899 stride = type_length_units (elt_type);
1900 else
1901 {
8ee511af
SM
1902 int unit_size
1903 = gdbarch_addressable_memory_unit_size (elt_type->arch ());
a5c641b5
AB
1904 stride /= (unit_size * 8);
1905 }
1906
1907 /* If this dimension is "backward" then figure out the offset
1908 adjustment required to point to the element at the lowest memory
1909 address, and add this to the total offset. */
1910 LONGEST offset = 0;
1911 if (stride < 0 && lowerbound < upperbound)
1912 offset = (upperbound - lowerbound) * stride;
1913 total_offset += offset;
1914 tmp_type = TYPE_TARGET_TYPE (tmp_type);
1915 }
1916
1917 /* Adjust the address of this object and return it. */
1918 address += total_offset;
1919 return address;
1920}