]> git.ipfire.org Git - thirdparty/gcc.git/blob - gcc/c/c-typeck.c
gcc/ChangeLog:
[thirdparty/gcc.git] / gcc / c / c-typeck.c
1 /* Build expressions with type checking for C compiler.
2 Copyright (C) 1987-2018 Free Software Foundation, Inc.
3
4 This file is part of GCC.
5
6 GCC is free software; you can redistribute it and/or modify it under
7 the terms of the GNU General Public License as published by the Free
8 Software Foundation; either version 3, or (at your option) any later
9 version.
10
11 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
12 WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14 for more details.
15
16 You should have received a copy of the GNU General Public License
17 along with GCC; see the file COPYING3. If not see
18 <http://www.gnu.org/licenses/>. */
19
20
21 /* This file is part of the C front end.
22 It contains routines to build C expressions given their operands,
23 including computing the types of the result, C-specific error checks,
24 and some optimization. */
25
26 #include "config.h"
27 #include "system.h"
28 #include "coretypes.h"
29 #include "memmodel.h"
30 #include "target.h"
31 #include "function.h"
32 #include "bitmap.h"
33 #include "c-tree.h"
34 #include "gimple-expr.h"
35 #include "predict.h"
36 #include "stor-layout.h"
37 #include "trans-mem.h"
38 #include "varasm.h"
39 #include "stmt.h"
40 #include "langhooks.h"
41 #include "c-lang.h"
42 #include "intl.h"
43 #include "tree-iterator.h"
44 #include "gimplify.h"
45 #include "tree-inline.h"
46 #include "omp-general.h"
47 #include "c-family/c-objc.h"
48 #include "c-family/c-ubsan.h"
49 #include "gomp-constants.h"
50 #include "spellcheck-tree.h"
51 #include "gcc-rich-location.h"
52 #include "stringpool.h"
53 #include "attribs.h"
54 #include "asan.h"
55
56 /* Possible cases of implicit bad conversions. Used to select
57 diagnostic messages in convert_for_assignment. */
58 enum impl_conv {
59 ic_argpass,
60 ic_assign,
61 ic_init,
62 ic_return
63 };
64
65 /* The level of nesting inside "__alignof__". */
66 int in_alignof;
67
68 /* The level of nesting inside "sizeof". */
69 int in_sizeof;
70
71 /* The level of nesting inside "typeof". */
72 int in_typeof;
73
74 /* The argument of last parsed sizeof expression, only to be tested
75 if expr.original_code == SIZEOF_EXPR. */
76 tree c_last_sizeof_arg;
77 location_t c_last_sizeof_loc;
78
79 /* Nonzero if we might need to print a "missing braces around
80 initializer" message within this initializer. */
81 static int found_missing_braces;
82
83 static int require_constant_value;
84 static int require_constant_elements;
85
86 static bool null_pointer_constant_p (const_tree);
87 static tree qualify_type (tree, tree);
88 static int tagged_types_tu_compatible_p (const_tree, const_tree, bool *,
89 bool *);
90 static int comp_target_types (location_t, tree, tree);
91 static int function_types_compatible_p (const_tree, const_tree, bool *,
92 bool *);
93 static int type_lists_compatible_p (const_tree, const_tree, bool *, bool *);
94 static tree lookup_field (tree, tree);
95 static int convert_arguments (location_t, vec<location_t>, tree,
96 vec<tree, va_gc> *, vec<tree, va_gc> *, tree,
97 tree);
98 static tree pointer_diff (location_t, tree, tree, tree *);
99 static tree convert_for_assignment (location_t, location_t, tree, tree, tree,
100 enum impl_conv, bool, tree, tree, int);
101 static tree valid_compound_expr_initializer (tree, tree);
102 static void push_string (const char *);
103 static void push_member_name (tree);
104 static int spelling_length (void);
105 static char *print_spelling (char *);
106 static void warning_init (location_t, int, const char *);
107 static tree digest_init (location_t, tree, tree, tree, bool, bool, int);
108 static void output_init_element (location_t, tree, tree, bool, tree, tree, bool,
109 bool, struct obstack *);
110 static void output_pending_init_elements (int, struct obstack *);
111 static bool set_designator (location_t, bool, struct obstack *);
112 static void push_range_stack (tree, struct obstack *);
113 static void add_pending_init (location_t, tree, tree, tree, bool,
114 struct obstack *);
115 static void set_nonincremental_init (struct obstack *);
116 static void set_nonincremental_init_from_string (tree, struct obstack *);
117 static tree find_init_member (tree, struct obstack *);
118 static void readonly_warning (tree, enum lvalue_use);
119 static int lvalue_or_else (location_t, const_tree, enum lvalue_use);
120 static void record_maybe_used_decl (tree);
121 static int comptypes_internal (const_tree, const_tree, bool *, bool *);
122 \f
123 /* Return true if EXP is a null pointer constant, false otherwise. */
124
125 static bool
126 null_pointer_constant_p (const_tree expr)
127 {
128 /* This should really operate on c_expr structures, but they aren't
129 yet available everywhere required. */
130 tree type = TREE_TYPE (expr);
131 return (TREE_CODE (expr) == INTEGER_CST
132 && !TREE_OVERFLOW (expr)
133 && integer_zerop (expr)
134 && (INTEGRAL_TYPE_P (type)
135 || (TREE_CODE (type) == POINTER_TYPE
136 && VOID_TYPE_P (TREE_TYPE (type))
137 && TYPE_QUALS (TREE_TYPE (type)) == TYPE_UNQUALIFIED)));
138 }
139
140 /* EXPR may appear in an unevaluated part of an integer constant
141 expression, but not in an evaluated part. Wrap it in a
142 C_MAYBE_CONST_EXPR, or mark it with TREE_OVERFLOW if it is just an
143 INTEGER_CST and we cannot create a C_MAYBE_CONST_EXPR. */
144
145 static tree
146 note_integer_operands (tree expr)
147 {
148 tree ret;
149 if (TREE_CODE (expr) == INTEGER_CST && in_late_binary_op)
150 {
151 ret = copy_node (expr);
152 TREE_OVERFLOW (ret) = 1;
153 }
154 else
155 {
156 ret = build2 (C_MAYBE_CONST_EXPR, TREE_TYPE (expr), NULL_TREE, expr);
157 C_MAYBE_CONST_EXPR_INT_OPERANDS (ret) = 1;
158 }
159 return ret;
160 }
161
162 /* Having checked whether EXPR may appear in an unevaluated part of an
163 integer constant expression and found that it may, remove any
164 C_MAYBE_CONST_EXPR noting this fact and return the resulting
165 expression. */
166
167 static inline tree
168 remove_c_maybe_const_expr (tree expr)
169 {
170 if (TREE_CODE (expr) == C_MAYBE_CONST_EXPR)
171 return C_MAYBE_CONST_EXPR_EXPR (expr);
172 else
173 return expr;
174 }
175
176 \f/* This is a cache to hold if two types are compatible or not. */
177
178 struct tagged_tu_seen_cache {
179 const struct tagged_tu_seen_cache * next;
180 const_tree t1;
181 const_tree t2;
182 /* The return value of tagged_types_tu_compatible_p if we had seen
183 these two types already. */
184 int val;
185 };
186
187 static const struct tagged_tu_seen_cache * tagged_tu_seen_base;
188 static void free_all_tagged_tu_seen_up_to (const struct tagged_tu_seen_cache *);
189
190 /* Do `exp = require_complete_type (loc, exp);' to make sure exp
191 does not have an incomplete type. (That includes void types.)
192 LOC is the location of the use. */
193
194 tree
195 require_complete_type (location_t loc, tree value)
196 {
197 tree type = TREE_TYPE (value);
198
199 if (error_operand_p (value))
200 return error_mark_node;
201
202 /* First, detect a valid value with a complete type. */
203 if (COMPLETE_TYPE_P (type))
204 return value;
205
206 c_incomplete_type_error (loc, value, type);
207 return error_mark_node;
208 }
209
210 /* Print an error message for invalid use of an incomplete type.
211 VALUE is the expression that was used (or 0 if that isn't known)
212 and TYPE is the type that was invalid. LOC is the location for
213 the error. */
214
215 void
216 c_incomplete_type_error (location_t loc, const_tree value, const_tree type)
217 {
218 /* Avoid duplicate error message. */
219 if (TREE_CODE (type) == ERROR_MARK)
220 return;
221
222 if (value != NULL_TREE && (VAR_P (value) || TREE_CODE (value) == PARM_DECL))
223 error_at (loc, "%qD has an incomplete type %qT", value, type);
224 else
225 {
226 retry:
227 /* We must print an error message. Be clever about what it says. */
228
229 switch (TREE_CODE (type))
230 {
231 case RECORD_TYPE:
232 case UNION_TYPE:
233 case ENUMERAL_TYPE:
234 break;
235
236 case VOID_TYPE:
237 error_at (loc, "invalid use of void expression");
238 return;
239
240 case ARRAY_TYPE:
241 if (TYPE_DOMAIN (type))
242 {
243 if (TYPE_MAX_VALUE (TYPE_DOMAIN (type)) == NULL)
244 {
245 error_at (loc, "invalid use of flexible array member");
246 return;
247 }
248 type = TREE_TYPE (type);
249 goto retry;
250 }
251 error_at (loc, "invalid use of array with unspecified bounds");
252 return;
253
254 default:
255 gcc_unreachable ();
256 }
257
258 if (TREE_CODE (TYPE_NAME (type)) == IDENTIFIER_NODE)
259 error_at (loc, "invalid use of undefined type %qT", type);
260 else
261 /* If this type has a typedef-name, the TYPE_NAME is a TYPE_DECL. */
262 error_at (loc, "invalid use of incomplete typedef %qT", type);
263 }
264 }
265
266 /* Given a type, apply default promotions wrt unnamed function
267 arguments and return the new type. */
268
269 tree
270 c_type_promotes_to (tree type)
271 {
272 tree ret = NULL_TREE;
273
274 if (TYPE_MAIN_VARIANT (type) == float_type_node)
275 ret = double_type_node;
276 else if (c_promoting_integer_type_p (type))
277 {
278 /* Preserve unsignedness if not really getting any wider. */
279 if (TYPE_UNSIGNED (type)
280 && (TYPE_PRECISION (type) == TYPE_PRECISION (integer_type_node)))
281 ret = unsigned_type_node;
282 else
283 ret = integer_type_node;
284 }
285
286 if (ret != NULL_TREE)
287 return (TYPE_ATOMIC (type)
288 ? c_build_qualified_type (ret, TYPE_QUAL_ATOMIC)
289 : ret);
290
291 return type;
292 }
293
294 /* Return true if between two named address spaces, whether there is a superset
295 named address space that encompasses both address spaces. If there is a
296 superset, return which address space is the superset. */
297
298 static bool
299 addr_space_superset (addr_space_t as1, addr_space_t as2, addr_space_t *common)
300 {
301 if (as1 == as2)
302 {
303 *common = as1;
304 return true;
305 }
306 else if (targetm.addr_space.subset_p (as1, as2))
307 {
308 *common = as2;
309 return true;
310 }
311 else if (targetm.addr_space.subset_p (as2, as1))
312 {
313 *common = as1;
314 return true;
315 }
316 else
317 return false;
318 }
319
320 /* Return a variant of TYPE which has all the type qualifiers of LIKE
321 as well as those of TYPE. */
322
323 static tree
324 qualify_type (tree type, tree like)
325 {
326 addr_space_t as_type = TYPE_ADDR_SPACE (type);
327 addr_space_t as_like = TYPE_ADDR_SPACE (like);
328 addr_space_t as_common;
329
330 /* If the two named address spaces are different, determine the common
331 superset address space. If there isn't one, raise an error. */
332 if (!addr_space_superset (as_type, as_like, &as_common))
333 {
334 as_common = as_type;
335 error ("%qT and %qT are in disjoint named address spaces",
336 type, like);
337 }
338
339 return c_build_qualified_type (type,
340 TYPE_QUALS_NO_ADDR_SPACE (type)
341 | TYPE_QUALS_NO_ADDR_SPACE_NO_ATOMIC (like)
342 | ENCODE_QUAL_ADDR_SPACE (as_common));
343 }
344
345 /* Return true iff the given tree T is a variable length array. */
346
347 bool
348 c_vla_type_p (const_tree t)
349 {
350 if (TREE_CODE (t) == ARRAY_TYPE
351 && C_TYPE_VARIABLE_SIZE (t))
352 return true;
353 return false;
354 }
355 \f
356 /* Return the composite type of two compatible types.
357
358 We assume that comptypes has already been done and returned
359 nonzero; if that isn't so, this may crash. In particular, we
360 assume that qualifiers match. */
361
362 tree
363 composite_type (tree t1, tree t2)
364 {
365 enum tree_code code1;
366 enum tree_code code2;
367 tree attributes;
368
369 /* Save time if the two types are the same. */
370
371 if (t1 == t2) return t1;
372
373 /* If one type is nonsense, use the other. */
374 if (t1 == error_mark_node)
375 return t2;
376 if (t2 == error_mark_node)
377 return t1;
378
379 code1 = TREE_CODE (t1);
380 code2 = TREE_CODE (t2);
381
382 /* Merge the attributes. */
383 attributes = targetm.merge_type_attributes (t1, t2);
384
385 /* If one is an enumerated type and the other is the compatible
386 integer type, the composite type might be either of the two
387 (DR#013 question 3). For consistency, use the enumerated type as
388 the composite type. */
389
390 if (code1 == ENUMERAL_TYPE && code2 == INTEGER_TYPE)
391 return t1;
392 if (code2 == ENUMERAL_TYPE && code1 == INTEGER_TYPE)
393 return t2;
394
395 gcc_assert (code1 == code2);
396
397 switch (code1)
398 {
399 case POINTER_TYPE:
400 /* For two pointers, do this recursively on the target type. */
401 {
402 tree pointed_to_1 = TREE_TYPE (t1);
403 tree pointed_to_2 = TREE_TYPE (t2);
404 tree target = composite_type (pointed_to_1, pointed_to_2);
405 t1 = build_pointer_type_for_mode (target, TYPE_MODE (t1), false);
406 t1 = build_type_attribute_variant (t1, attributes);
407 return qualify_type (t1, t2);
408 }
409
410 case ARRAY_TYPE:
411 {
412 tree elt = composite_type (TREE_TYPE (t1), TREE_TYPE (t2));
413 int quals;
414 tree unqual_elt;
415 tree d1 = TYPE_DOMAIN (t1);
416 tree d2 = TYPE_DOMAIN (t2);
417 bool d1_variable, d2_variable;
418 bool d1_zero, d2_zero;
419 bool t1_complete, t2_complete;
420
421 /* We should not have any type quals on arrays at all. */
422 gcc_assert (!TYPE_QUALS_NO_ADDR_SPACE (t1)
423 && !TYPE_QUALS_NO_ADDR_SPACE (t2));
424
425 t1_complete = COMPLETE_TYPE_P (t1);
426 t2_complete = COMPLETE_TYPE_P (t2);
427
428 d1_zero = d1 == NULL_TREE || !TYPE_MAX_VALUE (d1);
429 d2_zero = d2 == NULL_TREE || !TYPE_MAX_VALUE (d2);
430
431 d1_variable = (!d1_zero
432 && (TREE_CODE (TYPE_MIN_VALUE (d1)) != INTEGER_CST
433 || TREE_CODE (TYPE_MAX_VALUE (d1)) != INTEGER_CST));
434 d2_variable = (!d2_zero
435 && (TREE_CODE (TYPE_MIN_VALUE (d2)) != INTEGER_CST
436 || TREE_CODE (TYPE_MAX_VALUE (d2)) != INTEGER_CST));
437 d1_variable = d1_variable || (d1_zero && c_vla_type_p (t1));
438 d2_variable = d2_variable || (d2_zero && c_vla_type_p (t2));
439
440 /* Save space: see if the result is identical to one of the args. */
441 if (elt == TREE_TYPE (t1) && TYPE_DOMAIN (t1)
442 && (d2_variable || d2_zero || !d1_variable))
443 return build_type_attribute_variant (t1, attributes);
444 if (elt == TREE_TYPE (t2) && TYPE_DOMAIN (t2)
445 && (d1_variable || d1_zero || !d2_variable))
446 return build_type_attribute_variant (t2, attributes);
447
448 if (elt == TREE_TYPE (t1) && !TYPE_DOMAIN (t2) && !TYPE_DOMAIN (t1))
449 return build_type_attribute_variant (t1, attributes);
450 if (elt == TREE_TYPE (t2) && !TYPE_DOMAIN (t2) && !TYPE_DOMAIN (t1))
451 return build_type_attribute_variant (t2, attributes);
452
453 /* Merge the element types, and have a size if either arg has
454 one. We may have qualifiers on the element types. To set
455 up TYPE_MAIN_VARIANT correctly, we need to form the
456 composite of the unqualified types and add the qualifiers
457 back at the end. */
458 quals = TYPE_QUALS (strip_array_types (elt));
459 unqual_elt = c_build_qualified_type (elt, TYPE_UNQUALIFIED);
460 t1 = build_array_type (unqual_elt,
461 TYPE_DOMAIN ((TYPE_DOMAIN (t1)
462 && (d2_variable
463 || d2_zero
464 || !d1_variable))
465 ? t1
466 : t2));
467 /* Ensure a composite type involving a zero-length array type
468 is a zero-length type not an incomplete type. */
469 if (d1_zero && d2_zero
470 && (t1_complete || t2_complete)
471 && !COMPLETE_TYPE_P (t1))
472 {
473 TYPE_SIZE (t1) = bitsize_zero_node;
474 TYPE_SIZE_UNIT (t1) = size_zero_node;
475 }
476 t1 = c_build_qualified_type (t1, quals);
477 return build_type_attribute_variant (t1, attributes);
478 }
479
480 case ENUMERAL_TYPE:
481 case RECORD_TYPE:
482 case UNION_TYPE:
483 if (attributes != NULL)
484 {
485 /* Try harder not to create a new aggregate type. */
486 if (attribute_list_equal (TYPE_ATTRIBUTES (t1), attributes))
487 return t1;
488 if (attribute_list_equal (TYPE_ATTRIBUTES (t2), attributes))
489 return t2;
490 }
491 return build_type_attribute_variant (t1, attributes);
492
493 case FUNCTION_TYPE:
494 /* Function types: prefer the one that specified arg types.
495 If both do, merge the arg types. Also merge the return types. */
496 {
497 tree valtype = composite_type (TREE_TYPE (t1), TREE_TYPE (t2));
498 tree p1 = TYPE_ARG_TYPES (t1);
499 tree p2 = TYPE_ARG_TYPES (t2);
500 int len;
501 tree newargs, n;
502 int i;
503
504 /* Save space: see if the result is identical to one of the args. */
505 if (valtype == TREE_TYPE (t1) && !TYPE_ARG_TYPES (t2))
506 return build_type_attribute_variant (t1, attributes);
507 if (valtype == TREE_TYPE (t2) && !TYPE_ARG_TYPES (t1))
508 return build_type_attribute_variant (t2, attributes);
509
510 /* Simple way if one arg fails to specify argument types. */
511 if (TYPE_ARG_TYPES (t1) == NULL_TREE)
512 {
513 t1 = build_function_type (valtype, TYPE_ARG_TYPES (t2));
514 t1 = build_type_attribute_variant (t1, attributes);
515 return qualify_type (t1, t2);
516 }
517 if (TYPE_ARG_TYPES (t2) == NULL_TREE)
518 {
519 t1 = build_function_type (valtype, TYPE_ARG_TYPES (t1));
520 t1 = build_type_attribute_variant (t1, attributes);
521 return qualify_type (t1, t2);
522 }
523
524 /* If both args specify argument types, we must merge the two
525 lists, argument by argument. */
526
527 for (len = 0, newargs = p1;
528 newargs && newargs != void_list_node;
529 len++, newargs = TREE_CHAIN (newargs))
530 ;
531
532 for (i = 0; i < len; i++)
533 newargs = tree_cons (NULL_TREE, NULL_TREE, newargs);
534
535 n = newargs;
536
537 for (; p1 && p1 != void_list_node;
538 p1 = TREE_CHAIN (p1), p2 = TREE_CHAIN (p2), n = TREE_CHAIN (n))
539 {
540 /* A null type means arg type is not specified.
541 Take whatever the other function type has. */
542 if (TREE_VALUE (p1) == NULL_TREE)
543 {
544 TREE_VALUE (n) = TREE_VALUE (p2);
545 goto parm_done;
546 }
547 if (TREE_VALUE (p2) == NULL_TREE)
548 {
549 TREE_VALUE (n) = TREE_VALUE (p1);
550 goto parm_done;
551 }
552
553 /* Given wait (union {union wait *u; int *i} *)
554 and wait (union wait *),
555 prefer union wait * as type of parm. */
556 if (TREE_CODE (TREE_VALUE (p1)) == UNION_TYPE
557 && TREE_VALUE (p1) != TREE_VALUE (p2))
558 {
559 tree memb;
560 tree mv2 = TREE_VALUE (p2);
561 if (mv2 && mv2 != error_mark_node
562 && TREE_CODE (mv2) != ARRAY_TYPE)
563 mv2 = TYPE_MAIN_VARIANT (mv2);
564 for (memb = TYPE_FIELDS (TREE_VALUE (p1));
565 memb; memb = DECL_CHAIN (memb))
566 {
567 tree mv3 = TREE_TYPE (memb);
568 if (mv3 && mv3 != error_mark_node
569 && TREE_CODE (mv3) != ARRAY_TYPE)
570 mv3 = TYPE_MAIN_VARIANT (mv3);
571 if (comptypes (mv3, mv2))
572 {
573 TREE_VALUE (n) = composite_type (TREE_TYPE (memb),
574 TREE_VALUE (p2));
575 pedwarn (input_location, OPT_Wpedantic,
576 "function types not truly compatible in ISO C");
577 goto parm_done;
578 }
579 }
580 }
581 if (TREE_CODE (TREE_VALUE (p2)) == UNION_TYPE
582 && TREE_VALUE (p2) != TREE_VALUE (p1))
583 {
584 tree memb;
585 tree mv1 = TREE_VALUE (p1);
586 if (mv1 && mv1 != error_mark_node
587 && TREE_CODE (mv1) != ARRAY_TYPE)
588 mv1 = TYPE_MAIN_VARIANT (mv1);
589 for (memb = TYPE_FIELDS (TREE_VALUE (p2));
590 memb; memb = DECL_CHAIN (memb))
591 {
592 tree mv3 = TREE_TYPE (memb);
593 if (mv3 && mv3 != error_mark_node
594 && TREE_CODE (mv3) != ARRAY_TYPE)
595 mv3 = TYPE_MAIN_VARIANT (mv3);
596 if (comptypes (mv3, mv1))
597 {
598 TREE_VALUE (n) = composite_type (TREE_TYPE (memb),
599 TREE_VALUE (p1));
600 pedwarn (input_location, OPT_Wpedantic,
601 "function types not truly compatible in ISO C");
602 goto parm_done;
603 }
604 }
605 }
606 TREE_VALUE (n) = composite_type (TREE_VALUE (p1), TREE_VALUE (p2));
607 parm_done: ;
608 }
609
610 t1 = build_function_type (valtype, newargs);
611 t1 = qualify_type (t1, t2);
612 }
613 /* FALLTHRU */
614
615 default:
616 return build_type_attribute_variant (t1, attributes);
617 }
618
619 }
620
621 /* Return the type of a conditional expression between pointers to
622 possibly differently qualified versions of compatible types.
623
624 We assume that comp_target_types has already been done and returned
625 nonzero; if that isn't so, this may crash. */
626
627 static tree
628 common_pointer_type (tree t1, tree t2)
629 {
630 tree attributes;
631 tree pointed_to_1, mv1;
632 tree pointed_to_2, mv2;
633 tree target;
634 unsigned target_quals;
635 addr_space_t as1, as2, as_common;
636 int quals1, quals2;
637
638 /* Save time if the two types are the same. */
639
640 if (t1 == t2) return t1;
641
642 /* If one type is nonsense, use the other. */
643 if (t1 == error_mark_node)
644 return t2;
645 if (t2 == error_mark_node)
646 return t1;
647
648 gcc_assert (TREE_CODE (t1) == POINTER_TYPE
649 && TREE_CODE (t2) == POINTER_TYPE);
650
651 /* Merge the attributes. */
652 attributes = targetm.merge_type_attributes (t1, t2);
653
654 /* Find the composite type of the target types, and combine the
655 qualifiers of the two types' targets. Do not lose qualifiers on
656 array element types by taking the TYPE_MAIN_VARIANT. */
657 mv1 = pointed_to_1 = TREE_TYPE (t1);
658 mv2 = pointed_to_2 = TREE_TYPE (t2);
659 if (TREE_CODE (mv1) != ARRAY_TYPE)
660 mv1 = TYPE_MAIN_VARIANT (pointed_to_1);
661 if (TREE_CODE (mv2) != ARRAY_TYPE)
662 mv2 = TYPE_MAIN_VARIANT (pointed_to_2);
663 target = composite_type (mv1, mv2);
664
665 /* Strip array types to get correct qualifier for pointers to arrays */
666 quals1 = TYPE_QUALS_NO_ADDR_SPACE (strip_array_types (pointed_to_1));
667 quals2 = TYPE_QUALS_NO_ADDR_SPACE (strip_array_types (pointed_to_2));
668
669 /* For function types do not merge const qualifiers, but drop them
670 if used inconsistently. The middle-end uses these to mark const
671 and noreturn functions. */
672 if (TREE_CODE (pointed_to_1) == FUNCTION_TYPE)
673 target_quals = (quals1 & quals2);
674 else
675 target_quals = (quals1 | quals2);
676
677 /* If the two named address spaces are different, determine the common
678 superset address space. This is guaranteed to exist due to the
679 assumption that comp_target_type returned non-zero. */
680 as1 = TYPE_ADDR_SPACE (pointed_to_1);
681 as2 = TYPE_ADDR_SPACE (pointed_to_2);
682 if (!addr_space_superset (as1, as2, &as_common))
683 gcc_unreachable ();
684
685 target_quals |= ENCODE_QUAL_ADDR_SPACE (as_common);
686
687 t1 = build_pointer_type (c_build_qualified_type (target, target_quals));
688 return build_type_attribute_variant (t1, attributes);
689 }
690
691 /* Return the common type for two arithmetic types under the usual
692 arithmetic conversions. The default conversions have already been
693 applied, and enumerated types converted to their compatible integer
694 types. The resulting type is unqualified and has no attributes.
695
696 This is the type for the result of most arithmetic operations
697 if the operands have the given two types. */
698
699 static tree
700 c_common_type (tree t1, tree t2)
701 {
702 enum tree_code code1;
703 enum tree_code code2;
704
705 /* If one type is nonsense, use the other. */
706 if (t1 == error_mark_node)
707 return t2;
708 if (t2 == error_mark_node)
709 return t1;
710
711 if (TYPE_QUALS (t1) != TYPE_UNQUALIFIED)
712 t1 = TYPE_MAIN_VARIANT (t1);
713
714 if (TYPE_QUALS (t2) != TYPE_UNQUALIFIED)
715 t2 = TYPE_MAIN_VARIANT (t2);
716
717 if (TYPE_ATTRIBUTES (t1) != NULL_TREE)
718 t1 = build_type_attribute_variant (t1, NULL_TREE);
719
720 if (TYPE_ATTRIBUTES (t2) != NULL_TREE)
721 t2 = build_type_attribute_variant (t2, NULL_TREE);
722
723 /* Save time if the two types are the same. */
724
725 if (t1 == t2) return t1;
726
727 code1 = TREE_CODE (t1);
728 code2 = TREE_CODE (t2);
729
730 gcc_assert (code1 == VECTOR_TYPE || code1 == COMPLEX_TYPE
731 || code1 == FIXED_POINT_TYPE || code1 == REAL_TYPE
732 || code1 == INTEGER_TYPE);
733 gcc_assert (code2 == VECTOR_TYPE || code2 == COMPLEX_TYPE
734 || code2 == FIXED_POINT_TYPE || code2 == REAL_TYPE
735 || code2 == INTEGER_TYPE);
736
737 /* When one operand is a decimal float type, the other operand cannot be
738 a generic float type or a complex type. We also disallow vector types
739 here. */
740 if ((DECIMAL_FLOAT_TYPE_P (t1) || DECIMAL_FLOAT_TYPE_P (t2))
741 && !(DECIMAL_FLOAT_TYPE_P (t1) && DECIMAL_FLOAT_TYPE_P (t2)))
742 {
743 if (code1 == VECTOR_TYPE || code2 == VECTOR_TYPE)
744 {
745 error ("can%'t mix operands of decimal float and vector types");
746 return error_mark_node;
747 }
748 if (code1 == COMPLEX_TYPE || code2 == COMPLEX_TYPE)
749 {
750 error ("can%'t mix operands of decimal float and complex types");
751 return error_mark_node;
752 }
753 if (code1 == REAL_TYPE && code2 == REAL_TYPE)
754 {
755 error ("can%'t mix operands of decimal float and other float types");
756 return error_mark_node;
757 }
758 }
759
760 /* If one type is a vector type, return that type. (How the usual
761 arithmetic conversions apply to the vector types extension is not
762 precisely specified.) */
763 if (code1 == VECTOR_TYPE)
764 return t1;
765
766 if (code2 == VECTOR_TYPE)
767 return t2;
768
769 /* If one type is complex, form the common type of the non-complex
770 components, then make that complex. Use T1 or T2 if it is the
771 required type. */
772 if (code1 == COMPLEX_TYPE || code2 == COMPLEX_TYPE)
773 {
774 tree subtype1 = code1 == COMPLEX_TYPE ? TREE_TYPE (t1) : t1;
775 tree subtype2 = code2 == COMPLEX_TYPE ? TREE_TYPE (t2) : t2;
776 tree subtype = c_common_type (subtype1, subtype2);
777
778 if (code1 == COMPLEX_TYPE && TREE_TYPE (t1) == subtype)
779 return t1;
780 else if (code2 == COMPLEX_TYPE && TREE_TYPE (t2) == subtype)
781 return t2;
782 else
783 return build_complex_type (subtype);
784 }
785
786 /* If only one is real, use it as the result. */
787
788 if (code1 == REAL_TYPE && code2 != REAL_TYPE)
789 return t1;
790
791 if (code2 == REAL_TYPE && code1 != REAL_TYPE)
792 return t2;
793
794 /* If both are real and either are decimal floating point types, use
795 the decimal floating point type with the greater precision. */
796
797 if (code1 == REAL_TYPE && code2 == REAL_TYPE)
798 {
799 if (TYPE_MAIN_VARIANT (t1) == dfloat128_type_node
800 || TYPE_MAIN_VARIANT (t2) == dfloat128_type_node)
801 return dfloat128_type_node;
802 else if (TYPE_MAIN_VARIANT (t1) == dfloat64_type_node
803 || TYPE_MAIN_VARIANT (t2) == dfloat64_type_node)
804 return dfloat64_type_node;
805 else if (TYPE_MAIN_VARIANT (t1) == dfloat32_type_node
806 || TYPE_MAIN_VARIANT (t2) == dfloat32_type_node)
807 return dfloat32_type_node;
808 }
809
810 /* Deal with fixed-point types. */
811 if (code1 == FIXED_POINT_TYPE || code2 == FIXED_POINT_TYPE)
812 {
813 unsigned int unsignedp = 0, satp = 0;
814 scalar_mode m1, m2;
815 unsigned int fbit1, ibit1, fbit2, ibit2, max_fbit, max_ibit;
816
817 m1 = SCALAR_TYPE_MODE (t1);
818 m2 = SCALAR_TYPE_MODE (t2);
819
820 /* If one input type is saturating, the result type is saturating. */
821 if (TYPE_SATURATING (t1) || TYPE_SATURATING (t2))
822 satp = 1;
823
824 /* If both fixed-point types are unsigned, the result type is unsigned.
825 When mixing fixed-point and integer types, follow the sign of the
826 fixed-point type.
827 Otherwise, the result type is signed. */
828 if ((TYPE_UNSIGNED (t1) && TYPE_UNSIGNED (t2)
829 && code1 == FIXED_POINT_TYPE && code2 == FIXED_POINT_TYPE)
830 || (code1 == FIXED_POINT_TYPE && code2 != FIXED_POINT_TYPE
831 && TYPE_UNSIGNED (t1))
832 || (code1 != FIXED_POINT_TYPE && code2 == FIXED_POINT_TYPE
833 && TYPE_UNSIGNED (t2)))
834 unsignedp = 1;
835
836 /* The result type is signed. */
837 if (unsignedp == 0)
838 {
839 /* If the input type is unsigned, we need to convert to the
840 signed type. */
841 if (code1 == FIXED_POINT_TYPE && TYPE_UNSIGNED (t1))
842 {
843 enum mode_class mclass = (enum mode_class) 0;
844 if (GET_MODE_CLASS (m1) == MODE_UFRACT)
845 mclass = MODE_FRACT;
846 else if (GET_MODE_CLASS (m1) == MODE_UACCUM)
847 mclass = MODE_ACCUM;
848 else
849 gcc_unreachable ();
850 m1 = as_a <scalar_mode>
851 (mode_for_size (GET_MODE_PRECISION (m1), mclass, 0));
852 }
853 if (code2 == FIXED_POINT_TYPE && TYPE_UNSIGNED (t2))
854 {
855 enum mode_class mclass = (enum mode_class) 0;
856 if (GET_MODE_CLASS (m2) == MODE_UFRACT)
857 mclass = MODE_FRACT;
858 else if (GET_MODE_CLASS (m2) == MODE_UACCUM)
859 mclass = MODE_ACCUM;
860 else
861 gcc_unreachable ();
862 m2 = as_a <scalar_mode>
863 (mode_for_size (GET_MODE_PRECISION (m2), mclass, 0));
864 }
865 }
866
867 if (code1 == FIXED_POINT_TYPE)
868 {
869 fbit1 = GET_MODE_FBIT (m1);
870 ibit1 = GET_MODE_IBIT (m1);
871 }
872 else
873 {
874 fbit1 = 0;
875 /* Signed integers need to subtract one sign bit. */
876 ibit1 = TYPE_PRECISION (t1) - (!TYPE_UNSIGNED (t1));
877 }
878
879 if (code2 == FIXED_POINT_TYPE)
880 {
881 fbit2 = GET_MODE_FBIT (m2);
882 ibit2 = GET_MODE_IBIT (m2);
883 }
884 else
885 {
886 fbit2 = 0;
887 /* Signed integers need to subtract one sign bit. */
888 ibit2 = TYPE_PRECISION (t2) - (!TYPE_UNSIGNED (t2));
889 }
890
891 max_ibit = ibit1 >= ibit2 ? ibit1 : ibit2;
892 max_fbit = fbit1 >= fbit2 ? fbit1 : fbit2;
893 return c_common_fixed_point_type_for_size (max_ibit, max_fbit, unsignedp,
894 satp);
895 }
896
897 /* Both real or both integers; use the one with greater precision. */
898
899 if (TYPE_PRECISION (t1) > TYPE_PRECISION (t2))
900 return t1;
901 else if (TYPE_PRECISION (t2) > TYPE_PRECISION (t1))
902 return t2;
903
904 /* Same precision. Prefer long longs to longs to ints when the
905 same precision, following the C99 rules on integer type rank
906 (which are equivalent to the C90 rules for C90 types). */
907
908 if (TYPE_MAIN_VARIANT (t1) == long_long_unsigned_type_node
909 || TYPE_MAIN_VARIANT (t2) == long_long_unsigned_type_node)
910 return long_long_unsigned_type_node;
911
912 if (TYPE_MAIN_VARIANT (t1) == long_long_integer_type_node
913 || TYPE_MAIN_VARIANT (t2) == long_long_integer_type_node)
914 {
915 if (TYPE_UNSIGNED (t1) || TYPE_UNSIGNED (t2))
916 return long_long_unsigned_type_node;
917 else
918 return long_long_integer_type_node;
919 }
920
921 if (TYPE_MAIN_VARIANT (t1) == long_unsigned_type_node
922 || TYPE_MAIN_VARIANT (t2) == long_unsigned_type_node)
923 return long_unsigned_type_node;
924
925 if (TYPE_MAIN_VARIANT (t1) == long_integer_type_node
926 || TYPE_MAIN_VARIANT (t2) == long_integer_type_node)
927 {
928 /* But preserve unsignedness from the other type,
929 since long cannot hold all the values of an unsigned int. */
930 if (TYPE_UNSIGNED (t1) || TYPE_UNSIGNED (t2))
931 return long_unsigned_type_node;
932 else
933 return long_integer_type_node;
934 }
935
936 /* For floating types of the same TYPE_PRECISION (which we here
937 assume means either the same set of values, or sets of values
938 neither a subset of the other, with behavior being undefined in
939 the latter case), follow the rules from TS 18661-3: prefer
940 interchange types _FloatN, then standard types long double,
941 double, float, then extended types _FloatNx. For extended types,
942 check them starting with _Float128x as that seems most consistent
943 in spirit with preferring long double to double; for interchange
944 types, also check in that order for consistency although it's not
945 possible for more than one of them to have the same
946 precision. */
947 tree mv1 = TYPE_MAIN_VARIANT (t1);
948 tree mv2 = TYPE_MAIN_VARIANT (t2);
949
950 for (int i = NUM_FLOATN_TYPES - 1; i >= 0; i--)
951 if (mv1 == FLOATN_TYPE_NODE (i) || mv2 == FLOATN_TYPE_NODE (i))
952 return FLOATN_TYPE_NODE (i);
953
954 /* Likewise, prefer long double to double even if same size. */
955 if (mv1 == long_double_type_node || mv2 == long_double_type_node)
956 return long_double_type_node;
957
958 /* Likewise, prefer double to float even if same size.
959 We got a couple of embedded targets with 32 bit doubles, and the
960 pdp11 might have 64 bit floats. */
961 if (mv1 == double_type_node || mv2 == double_type_node)
962 return double_type_node;
963
964 if (mv1 == float_type_node || mv2 == float_type_node)
965 return float_type_node;
966
967 for (int i = NUM_FLOATNX_TYPES - 1; i >= 0; i--)
968 if (mv1 == FLOATNX_TYPE_NODE (i) || mv2 == FLOATNX_TYPE_NODE (i))
969 return FLOATNX_TYPE_NODE (i);
970
971 /* Otherwise prefer the unsigned one. */
972
973 if (TYPE_UNSIGNED (t1))
974 return t1;
975 else
976 return t2;
977 }
978 \f
979 /* Wrapper around c_common_type that is used by c-common.c and other
980 front end optimizations that remove promotions. ENUMERAL_TYPEs
981 are allowed here and are converted to their compatible integer types.
982 BOOLEAN_TYPEs are allowed here and return either boolean_type_node or
983 preferably a non-Boolean type as the common type. */
984 tree
985 common_type (tree t1, tree t2)
986 {
987 if (TREE_CODE (t1) == ENUMERAL_TYPE)
988 t1 = c_common_type_for_size (TYPE_PRECISION (t1), 1);
989 if (TREE_CODE (t2) == ENUMERAL_TYPE)
990 t2 = c_common_type_for_size (TYPE_PRECISION (t2), 1);
991
992 /* If both types are BOOLEAN_TYPE, then return boolean_type_node. */
993 if (TREE_CODE (t1) == BOOLEAN_TYPE
994 && TREE_CODE (t2) == BOOLEAN_TYPE)
995 return boolean_type_node;
996
997 /* If either type is BOOLEAN_TYPE, then return the other. */
998 if (TREE_CODE (t1) == BOOLEAN_TYPE)
999 return t2;
1000 if (TREE_CODE (t2) == BOOLEAN_TYPE)
1001 return t1;
1002
1003 return c_common_type (t1, t2);
1004 }
1005
1006 /* Return 1 if TYPE1 and TYPE2 are compatible types for assignment
1007 or various other operations. Return 2 if they are compatible
1008 but a warning may be needed if you use them together. */
1009
1010 int
1011 comptypes (tree type1, tree type2)
1012 {
1013 const struct tagged_tu_seen_cache * tagged_tu_seen_base1 = tagged_tu_seen_base;
1014 int val;
1015
1016 val = comptypes_internal (type1, type2, NULL, NULL);
1017 free_all_tagged_tu_seen_up_to (tagged_tu_seen_base1);
1018
1019 return val;
1020 }
1021
1022 /* Like comptypes, but if it returns non-zero because enum and int are
1023 compatible, it sets *ENUM_AND_INT_P to true. */
1024
1025 static int
1026 comptypes_check_enum_int (tree type1, tree type2, bool *enum_and_int_p)
1027 {
1028 const struct tagged_tu_seen_cache * tagged_tu_seen_base1 = tagged_tu_seen_base;
1029 int val;
1030
1031 val = comptypes_internal (type1, type2, enum_and_int_p, NULL);
1032 free_all_tagged_tu_seen_up_to (tagged_tu_seen_base1);
1033
1034 return val;
1035 }
1036
1037 /* Like comptypes, but if it returns nonzero for different types, it
1038 sets *DIFFERENT_TYPES_P to true. */
1039
1040 int
1041 comptypes_check_different_types (tree type1, tree type2,
1042 bool *different_types_p)
1043 {
1044 const struct tagged_tu_seen_cache * tagged_tu_seen_base1 = tagged_tu_seen_base;
1045 int val;
1046
1047 val = comptypes_internal (type1, type2, NULL, different_types_p);
1048 free_all_tagged_tu_seen_up_to (tagged_tu_seen_base1);
1049
1050 return val;
1051 }
1052 \f
1053 /* Return 1 if TYPE1 and TYPE2 are compatible types for assignment
1054 or various other operations. Return 2 if they are compatible
1055 but a warning may be needed if you use them together. If
1056 ENUM_AND_INT_P is not NULL, and one type is an enum and the other a
1057 compatible integer type, then this sets *ENUM_AND_INT_P to true;
1058 *ENUM_AND_INT_P is never set to false. If DIFFERENT_TYPES_P is not
1059 NULL, and the types are compatible but different enough not to be
1060 permitted in C11 typedef redeclarations, then this sets
1061 *DIFFERENT_TYPES_P to true; *DIFFERENT_TYPES_P is never set to
1062 false, but may or may not be set if the types are incompatible.
1063 This differs from comptypes, in that we don't free the seen
1064 types. */
1065
1066 static int
1067 comptypes_internal (const_tree type1, const_tree type2, bool *enum_and_int_p,
1068 bool *different_types_p)
1069 {
1070 const_tree t1 = type1;
1071 const_tree t2 = type2;
1072 int attrval, val;
1073
1074 /* Suppress errors caused by previously reported errors. */
1075
1076 if (t1 == t2 || !t1 || !t2
1077 || TREE_CODE (t1) == ERROR_MARK || TREE_CODE (t2) == ERROR_MARK)
1078 return 1;
1079
1080 /* Enumerated types are compatible with integer types, but this is
1081 not transitive: two enumerated types in the same translation unit
1082 are compatible with each other only if they are the same type. */
1083
1084 if (TREE_CODE (t1) == ENUMERAL_TYPE && TREE_CODE (t2) != ENUMERAL_TYPE)
1085 {
1086 t1 = c_common_type_for_size (TYPE_PRECISION (t1), TYPE_UNSIGNED (t1));
1087 if (TREE_CODE (t2) != VOID_TYPE)
1088 {
1089 if (enum_and_int_p != NULL)
1090 *enum_and_int_p = true;
1091 if (different_types_p != NULL)
1092 *different_types_p = true;
1093 }
1094 }
1095 else if (TREE_CODE (t2) == ENUMERAL_TYPE && TREE_CODE (t1) != ENUMERAL_TYPE)
1096 {
1097 t2 = c_common_type_for_size (TYPE_PRECISION (t2), TYPE_UNSIGNED (t2));
1098 if (TREE_CODE (t1) != VOID_TYPE)
1099 {
1100 if (enum_and_int_p != NULL)
1101 *enum_and_int_p = true;
1102 if (different_types_p != NULL)
1103 *different_types_p = true;
1104 }
1105 }
1106
1107 if (t1 == t2)
1108 return 1;
1109
1110 /* Different classes of types can't be compatible. */
1111
1112 if (TREE_CODE (t1) != TREE_CODE (t2))
1113 return 0;
1114
1115 /* Qualifiers must match. C99 6.7.3p9 */
1116
1117 if (TYPE_QUALS (t1) != TYPE_QUALS (t2))
1118 return 0;
1119
1120 /* Allow for two different type nodes which have essentially the same
1121 definition. Note that we already checked for equality of the type
1122 qualifiers (just above). */
1123
1124 if (TREE_CODE (t1) != ARRAY_TYPE
1125 && TYPE_MAIN_VARIANT (t1) == TYPE_MAIN_VARIANT (t2))
1126 return 1;
1127
1128 /* 1 if no need for warning yet, 2 if warning cause has been seen. */
1129 if (!(attrval = comp_type_attributes (t1, t2)))
1130 return 0;
1131
1132 /* 1 if no need for warning yet, 2 if warning cause has been seen. */
1133 val = 0;
1134
1135 switch (TREE_CODE (t1))
1136 {
1137 case INTEGER_TYPE:
1138 case FIXED_POINT_TYPE:
1139 case REAL_TYPE:
1140 /* With these nodes, we can't determine type equivalence by
1141 looking at what is stored in the nodes themselves, because
1142 two nodes might have different TYPE_MAIN_VARIANTs but still
1143 represent the same type. For example, wchar_t and int could
1144 have the same properties (TYPE_PRECISION, TYPE_MIN_VALUE,
1145 TYPE_MAX_VALUE, etc.), but have different TYPE_MAIN_VARIANTs
1146 and are distinct types. On the other hand, int and the
1147 following typedef
1148
1149 typedef int INT __attribute((may_alias));
1150
1151 have identical properties, different TYPE_MAIN_VARIANTs, but
1152 represent the same type. The canonical type system keeps
1153 track of equivalence in this case, so we fall back on it. */
1154 return TYPE_CANONICAL (t1) == TYPE_CANONICAL (t2);
1155
1156 case POINTER_TYPE:
1157 /* Do not remove mode information. */
1158 if (TYPE_MODE (t1) != TYPE_MODE (t2))
1159 break;
1160 val = (TREE_TYPE (t1) == TREE_TYPE (t2)
1161 ? 1 : comptypes_internal (TREE_TYPE (t1), TREE_TYPE (t2),
1162 enum_and_int_p, different_types_p));
1163 break;
1164
1165 case FUNCTION_TYPE:
1166 val = function_types_compatible_p (t1, t2, enum_and_int_p,
1167 different_types_p);
1168 break;
1169
1170 case ARRAY_TYPE:
1171 {
1172 tree d1 = TYPE_DOMAIN (t1);
1173 tree d2 = TYPE_DOMAIN (t2);
1174 bool d1_variable, d2_variable;
1175 bool d1_zero, d2_zero;
1176 val = 1;
1177
1178 /* Target types must match incl. qualifiers. */
1179 if (TREE_TYPE (t1) != TREE_TYPE (t2)
1180 && (val = comptypes_internal (TREE_TYPE (t1), TREE_TYPE (t2),
1181 enum_and_int_p,
1182 different_types_p)) == 0)
1183 return 0;
1184
1185 if (different_types_p != NULL
1186 && (d1 == NULL_TREE) != (d2 == NULL_TREE))
1187 *different_types_p = true;
1188 /* Sizes must match unless one is missing or variable. */
1189 if (d1 == NULL_TREE || d2 == NULL_TREE || d1 == d2)
1190 break;
1191
1192 d1_zero = !TYPE_MAX_VALUE (d1);
1193 d2_zero = !TYPE_MAX_VALUE (d2);
1194
1195 d1_variable = (!d1_zero
1196 && (TREE_CODE (TYPE_MIN_VALUE (d1)) != INTEGER_CST
1197 || TREE_CODE (TYPE_MAX_VALUE (d1)) != INTEGER_CST));
1198 d2_variable = (!d2_zero
1199 && (TREE_CODE (TYPE_MIN_VALUE (d2)) != INTEGER_CST
1200 || TREE_CODE (TYPE_MAX_VALUE (d2)) != INTEGER_CST));
1201 d1_variable = d1_variable || (d1_zero && c_vla_type_p (t1));
1202 d2_variable = d2_variable || (d2_zero && c_vla_type_p (t2));
1203
1204 if (different_types_p != NULL
1205 && d1_variable != d2_variable)
1206 *different_types_p = true;
1207 if (d1_variable || d2_variable)
1208 break;
1209 if (d1_zero && d2_zero)
1210 break;
1211 if (d1_zero || d2_zero
1212 || !tree_int_cst_equal (TYPE_MIN_VALUE (d1), TYPE_MIN_VALUE (d2))
1213 || !tree_int_cst_equal (TYPE_MAX_VALUE (d1), TYPE_MAX_VALUE (d2)))
1214 val = 0;
1215
1216 break;
1217 }
1218
1219 case ENUMERAL_TYPE:
1220 case RECORD_TYPE:
1221 case UNION_TYPE:
1222 if (val != 1 && !same_translation_unit_p (t1, t2))
1223 {
1224 tree a1 = TYPE_ATTRIBUTES (t1);
1225 tree a2 = TYPE_ATTRIBUTES (t2);
1226
1227 if (! attribute_list_contained (a1, a2)
1228 && ! attribute_list_contained (a2, a1))
1229 break;
1230
1231 if (attrval != 2)
1232 return tagged_types_tu_compatible_p (t1, t2, enum_and_int_p,
1233 different_types_p);
1234 val = tagged_types_tu_compatible_p (t1, t2, enum_and_int_p,
1235 different_types_p);
1236 }
1237 break;
1238
1239 case VECTOR_TYPE:
1240 val = (known_eq (TYPE_VECTOR_SUBPARTS (t1), TYPE_VECTOR_SUBPARTS (t2))
1241 && comptypes_internal (TREE_TYPE (t1), TREE_TYPE (t2),
1242 enum_and_int_p, different_types_p));
1243 break;
1244
1245 default:
1246 break;
1247 }
1248 return attrval == 2 && val == 1 ? 2 : val;
1249 }
1250
1251 /* Return 1 if TTL and TTR are pointers to types that are equivalent, ignoring
1252 their qualifiers, except for named address spaces. If the pointers point to
1253 different named addresses, then we must determine if one address space is a
1254 subset of the other. */
1255
1256 static int
1257 comp_target_types (location_t location, tree ttl, tree ttr)
1258 {
1259 int val;
1260 int val_ped;
1261 tree mvl = TREE_TYPE (ttl);
1262 tree mvr = TREE_TYPE (ttr);
1263 addr_space_t asl = TYPE_ADDR_SPACE (mvl);
1264 addr_space_t asr = TYPE_ADDR_SPACE (mvr);
1265 addr_space_t as_common;
1266 bool enum_and_int_p;
1267
1268 /* Fail if pointers point to incompatible address spaces. */
1269 if (!addr_space_superset (asl, asr, &as_common))
1270 return 0;
1271
1272 /* For pedantic record result of comptypes on arrays before losing
1273 qualifiers on the element type below. */
1274 val_ped = 1;
1275
1276 if (TREE_CODE (mvl) == ARRAY_TYPE
1277 && TREE_CODE (mvr) == ARRAY_TYPE)
1278 val_ped = comptypes (mvl, mvr);
1279
1280 /* Qualifiers on element types of array types that are
1281 pointer targets are lost by taking their TYPE_MAIN_VARIANT. */
1282
1283 mvl = (TYPE_ATOMIC (strip_array_types (mvl))
1284 ? c_build_qualified_type (TYPE_MAIN_VARIANT (mvl), TYPE_QUAL_ATOMIC)
1285 : TYPE_MAIN_VARIANT (mvl));
1286
1287 mvr = (TYPE_ATOMIC (strip_array_types (mvr))
1288 ? c_build_qualified_type (TYPE_MAIN_VARIANT (mvr), TYPE_QUAL_ATOMIC)
1289 : TYPE_MAIN_VARIANT (mvr));
1290
1291 enum_and_int_p = false;
1292 val = comptypes_check_enum_int (mvl, mvr, &enum_and_int_p);
1293
1294 if (val == 1 && val_ped != 1)
1295 pedwarn (location, OPT_Wpedantic, "pointers to arrays with different qualifiers "
1296 "are incompatible in ISO C");
1297
1298 if (val == 2)
1299 pedwarn (location, OPT_Wpedantic, "types are not quite compatible");
1300
1301 if (val == 1 && enum_and_int_p && warn_cxx_compat)
1302 warning_at (location, OPT_Wc___compat,
1303 "pointer target types incompatible in C++");
1304
1305 return val;
1306 }
1307 \f
1308 /* Subroutines of `comptypes'. */
1309
1310 /* Determine whether two trees derive from the same translation unit.
1311 If the CONTEXT chain ends in a null, that tree's context is still
1312 being parsed, so if two trees have context chains ending in null,
1313 they're in the same translation unit. */
1314
1315 bool
1316 same_translation_unit_p (const_tree t1, const_tree t2)
1317 {
1318 while (t1 && TREE_CODE (t1) != TRANSLATION_UNIT_DECL)
1319 switch (TREE_CODE_CLASS (TREE_CODE (t1)))
1320 {
1321 case tcc_declaration:
1322 t1 = DECL_CONTEXT (t1); break;
1323 case tcc_type:
1324 t1 = TYPE_CONTEXT (t1); break;
1325 case tcc_exceptional:
1326 t1 = BLOCK_SUPERCONTEXT (t1); break; /* assume block */
1327 default: gcc_unreachable ();
1328 }
1329
1330 while (t2 && TREE_CODE (t2) != TRANSLATION_UNIT_DECL)
1331 switch (TREE_CODE_CLASS (TREE_CODE (t2)))
1332 {
1333 case tcc_declaration:
1334 t2 = DECL_CONTEXT (t2); break;
1335 case tcc_type:
1336 t2 = TYPE_CONTEXT (t2); break;
1337 case tcc_exceptional:
1338 t2 = BLOCK_SUPERCONTEXT (t2); break; /* assume block */
1339 default: gcc_unreachable ();
1340 }
1341
1342 return t1 == t2;
1343 }
1344
1345 /* Allocate the seen two types, assuming that they are compatible. */
1346
1347 static struct tagged_tu_seen_cache *
1348 alloc_tagged_tu_seen_cache (const_tree t1, const_tree t2)
1349 {
1350 struct tagged_tu_seen_cache *tu = XNEW (struct tagged_tu_seen_cache);
1351 tu->next = tagged_tu_seen_base;
1352 tu->t1 = t1;
1353 tu->t2 = t2;
1354
1355 tagged_tu_seen_base = tu;
1356
1357 /* The C standard says that two structures in different translation
1358 units are compatible with each other only if the types of their
1359 fields are compatible (among other things). We assume that they
1360 are compatible until proven otherwise when building the cache.
1361 An example where this can occur is:
1362 struct a
1363 {
1364 struct a *next;
1365 };
1366 If we are comparing this against a similar struct in another TU,
1367 and did not assume they were compatible, we end up with an infinite
1368 loop. */
1369 tu->val = 1;
1370 return tu;
1371 }
1372
1373 /* Free the seen types until we get to TU_TIL. */
1374
1375 static void
1376 free_all_tagged_tu_seen_up_to (const struct tagged_tu_seen_cache *tu_til)
1377 {
1378 const struct tagged_tu_seen_cache *tu = tagged_tu_seen_base;
1379 while (tu != tu_til)
1380 {
1381 const struct tagged_tu_seen_cache *const tu1
1382 = (const struct tagged_tu_seen_cache *) tu;
1383 tu = tu1->next;
1384 free (CONST_CAST (struct tagged_tu_seen_cache *, tu1));
1385 }
1386 tagged_tu_seen_base = tu_til;
1387 }
1388
1389 /* Return 1 if two 'struct', 'union', or 'enum' types T1 and T2 are
1390 compatible. If the two types are not the same (which has been
1391 checked earlier), this can only happen when multiple translation
1392 units are being compiled. See C99 6.2.7 paragraph 1 for the exact
1393 rules. ENUM_AND_INT_P and DIFFERENT_TYPES_P are as in
1394 comptypes_internal. */
1395
1396 static int
1397 tagged_types_tu_compatible_p (const_tree t1, const_tree t2,
1398 bool *enum_and_int_p, bool *different_types_p)
1399 {
1400 tree s1, s2;
1401 bool needs_warning = false;
1402
1403 /* We have to verify that the tags of the types are the same. This
1404 is harder than it looks because this may be a typedef, so we have
1405 to go look at the original type. It may even be a typedef of a
1406 typedef...
1407 In the case of compiler-created builtin structs the TYPE_DECL
1408 may be a dummy, with no DECL_ORIGINAL_TYPE. Don't fault. */
1409 while (TYPE_NAME (t1)
1410 && TREE_CODE (TYPE_NAME (t1)) == TYPE_DECL
1411 && DECL_ORIGINAL_TYPE (TYPE_NAME (t1)))
1412 t1 = DECL_ORIGINAL_TYPE (TYPE_NAME (t1));
1413
1414 while (TYPE_NAME (t2)
1415 && TREE_CODE (TYPE_NAME (t2)) == TYPE_DECL
1416 && DECL_ORIGINAL_TYPE (TYPE_NAME (t2)))
1417 t2 = DECL_ORIGINAL_TYPE (TYPE_NAME (t2));
1418
1419 /* C90 didn't have the requirement that the two tags be the same. */
1420 if (flag_isoc99 && TYPE_NAME (t1) != TYPE_NAME (t2))
1421 return 0;
1422
1423 /* C90 didn't say what happened if one or both of the types were
1424 incomplete; we choose to follow C99 rules here, which is that they
1425 are compatible. */
1426 if (TYPE_SIZE (t1) == NULL
1427 || TYPE_SIZE (t2) == NULL)
1428 return 1;
1429
1430 {
1431 const struct tagged_tu_seen_cache * tts_i;
1432 for (tts_i = tagged_tu_seen_base; tts_i != NULL; tts_i = tts_i->next)
1433 if (tts_i->t1 == t1 && tts_i->t2 == t2)
1434 return tts_i->val;
1435 }
1436
1437 switch (TREE_CODE (t1))
1438 {
1439 case ENUMERAL_TYPE:
1440 {
1441 struct tagged_tu_seen_cache *tu = alloc_tagged_tu_seen_cache (t1, t2);
1442 /* Speed up the case where the type values are in the same order. */
1443 tree tv1 = TYPE_VALUES (t1);
1444 tree tv2 = TYPE_VALUES (t2);
1445
1446 if (tv1 == tv2)
1447 {
1448 return 1;
1449 }
1450
1451 for (;tv1 && tv2; tv1 = TREE_CHAIN (tv1), tv2 = TREE_CHAIN (tv2))
1452 {
1453 if (TREE_PURPOSE (tv1) != TREE_PURPOSE (tv2))
1454 break;
1455 if (simple_cst_equal (TREE_VALUE (tv1), TREE_VALUE (tv2)) != 1)
1456 {
1457 tu->val = 0;
1458 return 0;
1459 }
1460 }
1461
1462 if (tv1 == NULL_TREE && tv2 == NULL_TREE)
1463 {
1464 return 1;
1465 }
1466 if (tv1 == NULL_TREE || tv2 == NULL_TREE)
1467 {
1468 tu->val = 0;
1469 return 0;
1470 }
1471
1472 if (list_length (TYPE_VALUES (t1)) != list_length (TYPE_VALUES (t2)))
1473 {
1474 tu->val = 0;
1475 return 0;
1476 }
1477
1478 for (s1 = TYPE_VALUES (t1); s1; s1 = TREE_CHAIN (s1))
1479 {
1480 s2 = purpose_member (TREE_PURPOSE (s1), TYPE_VALUES (t2));
1481 if (s2 == NULL
1482 || simple_cst_equal (TREE_VALUE (s1), TREE_VALUE (s2)) != 1)
1483 {
1484 tu->val = 0;
1485 return 0;
1486 }
1487 }
1488 return 1;
1489 }
1490
1491 case UNION_TYPE:
1492 {
1493 struct tagged_tu_seen_cache *tu = alloc_tagged_tu_seen_cache (t1, t2);
1494 if (list_length (TYPE_FIELDS (t1)) != list_length (TYPE_FIELDS (t2)))
1495 {
1496 tu->val = 0;
1497 return 0;
1498 }
1499
1500 /* Speed up the common case where the fields are in the same order. */
1501 for (s1 = TYPE_FIELDS (t1), s2 = TYPE_FIELDS (t2); s1 && s2;
1502 s1 = DECL_CHAIN (s1), s2 = DECL_CHAIN (s2))
1503 {
1504 int result;
1505
1506 if (DECL_NAME (s1) != DECL_NAME (s2))
1507 break;
1508 result = comptypes_internal (TREE_TYPE (s1), TREE_TYPE (s2),
1509 enum_and_int_p, different_types_p);
1510
1511 if (result != 1 && !DECL_NAME (s1))
1512 break;
1513 if (result == 0)
1514 {
1515 tu->val = 0;
1516 return 0;
1517 }
1518 if (result == 2)
1519 needs_warning = true;
1520
1521 if (TREE_CODE (s1) == FIELD_DECL
1522 && simple_cst_equal (DECL_FIELD_BIT_OFFSET (s1),
1523 DECL_FIELD_BIT_OFFSET (s2)) != 1)
1524 {
1525 tu->val = 0;
1526 return 0;
1527 }
1528 }
1529 if (!s1 && !s2)
1530 {
1531 tu->val = needs_warning ? 2 : 1;
1532 return tu->val;
1533 }
1534
1535 for (s1 = TYPE_FIELDS (t1); s1; s1 = DECL_CHAIN (s1))
1536 {
1537 bool ok = false;
1538
1539 for (s2 = TYPE_FIELDS (t2); s2; s2 = DECL_CHAIN (s2))
1540 if (DECL_NAME (s1) == DECL_NAME (s2))
1541 {
1542 int result;
1543
1544 result = comptypes_internal (TREE_TYPE (s1), TREE_TYPE (s2),
1545 enum_and_int_p,
1546 different_types_p);
1547
1548 if (result != 1 && !DECL_NAME (s1))
1549 continue;
1550 if (result == 0)
1551 {
1552 tu->val = 0;
1553 return 0;
1554 }
1555 if (result == 2)
1556 needs_warning = true;
1557
1558 if (TREE_CODE (s1) == FIELD_DECL
1559 && simple_cst_equal (DECL_FIELD_BIT_OFFSET (s1),
1560 DECL_FIELD_BIT_OFFSET (s2)) != 1)
1561 break;
1562
1563 ok = true;
1564 break;
1565 }
1566 if (!ok)
1567 {
1568 tu->val = 0;
1569 return 0;
1570 }
1571 }
1572 tu->val = needs_warning ? 2 : 10;
1573 return tu->val;
1574 }
1575
1576 case RECORD_TYPE:
1577 {
1578 struct tagged_tu_seen_cache *tu = alloc_tagged_tu_seen_cache (t1, t2);
1579
1580 for (s1 = TYPE_FIELDS (t1), s2 = TYPE_FIELDS (t2);
1581 s1 && s2;
1582 s1 = DECL_CHAIN (s1), s2 = DECL_CHAIN (s2))
1583 {
1584 int result;
1585 if (TREE_CODE (s1) != TREE_CODE (s2)
1586 || DECL_NAME (s1) != DECL_NAME (s2))
1587 break;
1588 result = comptypes_internal (TREE_TYPE (s1), TREE_TYPE (s2),
1589 enum_and_int_p, different_types_p);
1590 if (result == 0)
1591 break;
1592 if (result == 2)
1593 needs_warning = true;
1594
1595 if (TREE_CODE (s1) == FIELD_DECL
1596 && simple_cst_equal (DECL_FIELD_BIT_OFFSET (s1),
1597 DECL_FIELD_BIT_OFFSET (s2)) != 1)
1598 break;
1599 }
1600 if (s1 && s2)
1601 tu->val = 0;
1602 else
1603 tu->val = needs_warning ? 2 : 1;
1604 return tu->val;
1605 }
1606
1607 default:
1608 gcc_unreachable ();
1609 }
1610 }
1611
1612 /* Return 1 if two function types F1 and F2 are compatible.
1613 If either type specifies no argument types,
1614 the other must specify a fixed number of self-promoting arg types.
1615 Otherwise, if one type specifies only the number of arguments,
1616 the other must specify that number of self-promoting arg types.
1617 Otherwise, the argument types must match.
1618 ENUM_AND_INT_P and DIFFERENT_TYPES_P are as in comptypes_internal. */
1619
1620 static int
1621 function_types_compatible_p (const_tree f1, const_tree f2,
1622 bool *enum_and_int_p, bool *different_types_p)
1623 {
1624 tree args1, args2;
1625 /* 1 if no need for warning yet, 2 if warning cause has been seen. */
1626 int val = 1;
1627 int val1;
1628 tree ret1, ret2;
1629
1630 ret1 = TREE_TYPE (f1);
1631 ret2 = TREE_TYPE (f2);
1632
1633 /* 'volatile' qualifiers on a function's return type used to mean
1634 the function is noreturn. */
1635 if (TYPE_VOLATILE (ret1) != TYPE_VOLATILE (ret2))
1636 pedwarn (input_location, 0, "function return types not compatible due to %<volatile%>");
1637 if (TYPE_VOLATILE (ret1))
1638 ret1 = build_qualified_type (TYPE_MAIN_VARIANT (ret1),
1639 TYPE_QUALS (ret1) & ~TYPE_QUAL_VOLATILE);
1640 if (TYPE_VOLATILE (ret2))
1641 ret2 = build_qualified_type (TYPE_MAIN_VARIANT (ret2),
1642 TYPE_QUALS (ret2) & ~TYPE_QUAL_VOLATILE);
1643 val = comptypes_internal (ret1, ret2, enum_and_int_p, different_types_p);
1644 if (val == 0)
1645 return 0;
1646
1647 args1 = TYPE_ARG_TYPES (f1);
1648 args2 = TYPE_ARG_TYPES (f2);
1649
1650 if (different_types_p != NULL
1651 && (args1 == NULL_TREE) != (args2 == NULL_TREE))
1652 *different_types_p = true;
1653
1654 /* An unspecified parmlist matches any specified parmlist
1655 whose argument types don't need default promotions. */
1656
1657 if (args1 == NULL_TREE)
1658 {
1659 if (!self_promoting_args_p (args2))
1660 return 0;
1661 /* If one of these types comes from a non-prototype fn definition,
1662 compare that with the other type's arglist.
1663 If they don't match, ask for a warning (but no error). */
1664 if (TYPE_ACTUAL_ARG_TYPES (f1)
1665 && type_lists_compatible_p (args2, TYPE_ACTUAL_ARG_TYPES (f1),
1666 enum_and_int_p, different_types_p) != 1)
1667 val = 2;
1668 return val;
1669 }
1670 if (args2 == NULL_TREE)
1671 {
1672 if (!self_promoting_args_p (args1))
1673 return 0;
1674 if (TYPE_ACTUAL_ARG_TYPES (f2)
1675 && type_lists_compatible_p (args1, TYPE_ACTUAL_ARG_TYPES (f2),
1676 enum_and_int_p, different_types_p) != 1)
1677 val = 2;
1678 return val;
1679 }
1680
1681 /* Both types have argument lists: compare them and propagate results. */
1682 val1 = type_lists_compatible_p (args1, args2, enum_and_int_p,
1683 different_types_p);
1684 return val1 != 1 ? val1 : val;
1685 }
1686
1687 /* Check two lists of types for compatibility, returning 0 for
1688 incompatible, 1 for compatible, or 2 for compatible with
1689 warning. ENUM_AND_INT_P and DIFFERENT_TYPES_P are as in
1690 comptypes_internal. */
1691
1692 static int
1693 type_lists_compatible_p (const_tree args1, const_tree args2,
1694 bool *enum_and_int_p, bool *different_types_p)
1695 {
1696 /* 1 if no need for warning yet, 2 if warning cause has been seen. */
1697 int val = 1;
1698 int newval = 0;
1699
1700 while (1)
1701 {
1702 tree a1, mv1, a2, mv2;
1703 if (args1 == NULL_TREE && args2 == NULL_TREE)
1704 return val;
1705 /* If one list is shorter than the other,
1706 they fail to match. */
1707 if (args1 == NULL_TREE || args2 == NULL_TREE)
1708 return 0;
1709 mv1 = a1 = TREE_VALUE (args1);
1710 mv2 = a2 = TREE_VALUE (args2);
1711 if (mv1 && mv1 != error_mark_node && TREE_CODE (mv1) != ARRAY_TYPE)
1712 mv1 = (TYPE_ATOMIC (mv1)
1713 ? c_build_qualified_type (TYPE_MAIN_VARIANT (mv1),
1714 TYPE_QUAL_ATOMIC)
1715 : TYPE_MAIN_VARIANT (mv1));
1716 if (mv2 && mv2 != error_mark_node && TREE_CODE (mv2) != ARRAY_TYPE)
1717 mv2 = (TYPE_ATOMIC (mv2)
1718 ? c_build_qualified_type (TYPE_MAIN_VARIANT (mv2),
1719 TYPE_QUAL_ATOMIC)
1720 : TYPE_MAIN_VARIANT (mv2));
1721 /* A null pointer instead of a type
1722 means there is supposed to be an argument
1723 but nothing is specified about what type it has.
1724 So match anything that self-promotes. */
1725 if (different_types_p != NULL
1726 && (a1 == NULL_TREE) != (a2 == NULL_TREE))
1727 *different_types_p = true;
1728 if (a1 == NULL_TREE)
1729 {
1730 if (c_type_promotes_to (a2) != a2)
1731 return 0;
1732 }
1733 else if (a2 == NULL_TREE)
1734 {
1735 if (c_type_promotes_to (a1) != a1)
1736 return 0;
1737 }
1738 /* If one of the lists has an error marker, ignore this arg. */
1739 else if (TREE_CODE (a1) == ERROR_MARK
1740 || TREE_CODE (a2) == ERROR_MARK)
1741 ;
1742 else if (!(newval = comptypes_internal (mv1, mv2, enum_and_int_p,
1743 different_types_p)))
1744 {
1745 if (different_types_p != NULL)
1746 *different_types_p = true;
1747 /* Allow wait (union {union wait *u; int *i} *)
1748 and wait (union wait *) to be compatible. */
1749 if (TREE_CODE (a1) == UNION_TYPE
1750 && (TYPE_NAME (a1) == NULL_TREE
1751 || TYPE_TRANSPARENT_AGGR (a1))
1752 && TREE_CODE (TYPE_SIZE (a1)) == INTEGER_CST
1753 && tree_int_cst_equal (TYPE_SIZE (a1),
1754 TYPE_SIZE (a2)))
1755 {
1756 tree memb;
1757 for (memb = TYPE_FIELDS (a1);
1758 memb; memb = DECL_CHAIN (memb))
1759 {
1760 tree mv3 = TREE_TYPE (memb);
1761 if (mv3 && mv3 != error_mark_node
1762 && TREE_CODE (mv3) != ARRAY_TYPE)
1763 mv3 = (TYPE_ATOMIC (mv3)
1764 ? c_build_qualified_type (TYPE_MAIN_VARIANT (mv3),
1765 TYPE_QUAL_ATOMIC)
1766 : TYPE_MAIN_VARIANT (mv3));
1767 if (comptypes_internal (mv3, mv2, enum_and_int_p,
1768 different_types_p))
1769 break;
1770 }
1771 if (memb == NULL_TREE)
1772 return 0;
1773 }
1774 else if (TREE_CODE (a2) == UNION_TYPE
1775 && (TYPE_NAME (a2) == NULL_TREE
1776 || TYPE_TRANSPARENT_AGGR (a2))
1777 && TREE_CODE (TYPE_SIZE (a2)) == INTEGER_CST
1778 && tree_int_cst_equal (TYPE_SIZE (a2),
1779 TYPE_SIZE (a1)))
1780 {
1781 tree memb;
1782 for (memb = TYPE_FIELDS (a2);
1783 memb; memb = DECL_CHAIN (memb))
1784 {
1785 tree mv3 = TREE_TYPE (memb);
1786 if (mv3 && mv3 != error_mark_node
1787 && TREE_CODE (mv3) != ARRAY_TYPE)
1788 mv3 = (TYPE_ATOMIC (mv3)
1789 ? c_build_qualified_type (TYPE_MAIN_VARIANT (mv3),
1790 TYPE_QUAL_ATOMIC)
1791 : TYPE_MAIN_VARIANT (mv3));
1792 if (comptypes_internal (mv3, mv1, enum_and_int_p,
1793 different_types_p))
1794 break;
1795 }
1796 if (memb == NULL_TREE)
1797 return 0;
1798 }
1799 else
1800 return 0;
1801 }
1802
1803 /* comptypes said ok, but record if it said to warn. */
1804 if (newval > val)
1805 val = newval;
1806
1807 args1 = TREE_CHAIN (args1);
1808 args2 = TREE_CHAIN (args2);
1809 }
1810 }
1811 \f
1812 /* Compute the size to increment a pointer by. When a function type or void
1813 type or incomplete type is passed, size_one_node is returned.
1814 This function does not emit any diagnostics; the caller is responsible
1815 for that. */
1816
1817 static tree
1818 c_size_in_bytes (const_tree type)
1819 {
1820 enum tree_code code = TREE_CODE (type);
1821
1822 if (code == FUNCTION_TYPE || code == VOID_TYPE || code == ERROR_MARK
1823 || !COMPLETE_TYPE_P (type))
1824 return size_one_node;
1825
1826 /* Convert in case a char is more than one unit. */
1827 return size_binop_loc (input_location, CEIL_DIV_EXPR, TYPE_SIZE_UNIT (type),
1828 size_int (TYPE_PRECISION (char_type_node)
1829 / BITS_PER_UNIT));
1830 }
1831 \f
1832 /* Return either DECL or its known constant value (if it has one). */
1833
1834 tree
1835 decl_constant_value_1 (tree decl, bool in_init)
1836 {
1837 if (/* Note that DECL_INITIAL isn't valid for a PARM_DECL. */
1838 TREE_CODE (decl) != PARM_DECL
1839 && !TREE_THIS_VOLATILE (decl)
1840 && TREE_READONLY (decl)
1841 && DECL_INITIAL (decl) != NULL_TREE
1842 && !error_operand_p (DECL_INITIAL (decl))
1843 /* This is invalid if initial value is not constant.
1844 If it has either a function call, a memory reference,
1845 or a variable, then re-evaluating it could give different results. */
1846 && TREE_CONSTANT (DECL_INITIAL (decl))
1847 /* Check for cases where this is sub-optimal, even though valid. */
1848 && (in_init || TREE_CODE (DECL_INITIAL (decl)) != CONSTRUCTOR))
1849 return DECL_INITIAL (decl);
1850 return decl;
1851 }
1852
1853 /* Return either DECL or its known constant value (if it has one).
1854 Like the above, but always return decl outside of functions. */
1855
1856 tree
1857 decl_constant_value (tree decl)
1858 {
1859 /* Don't change a variable array bound or initial value to a constant
1860 in a place where a variable is invalid. */
1861 return current_function_decl ? decl_constant_value_1 (decl, false) : decl;
1862 }
1863
1864 /* Convert the array expression EXP to a pointer. */
1865 static tree
1866 array_to_pointer_conversion (location_t loc, tree exp)
1867 {
1868 tree orig_exp = exp;
1869 tree type = TREE_TYPE (exp);
1870 tree adr;
1871 tree restype = TREE_TYPE (type);
1872 tree ptrtype;
1873
1874 gcc_assert (TREE_CODE (type) == ARRAY_TYPE);
1875
1876 STRIP_TYPE_NOPS (exp);
1877
1878 if (TREE_NO_WARNING (orig_exp))
1879 TREE_NO_WARNING (exp) = 1;
1880
1881 ptrtype = build_pointer_type (restype);
1882
1883 if (INDIRECT_REF_P (exp))
1884 return convert (ptrtype, TREE_OPERAND (exp, 0));
1885
1886 /* In C++ array compound literals are temporary objects unless they are
1887 const or appear in namespace scope, so they are destroyed too soon
1888 to use them for much of anything (c++/53220). */
1889 if (warn_cxx_compat && TREE_CODE (exp) == COMPOUND_LITERAL_EXPR)
1890 {
1891 tree decl = TREE_OPERAND (TREE_OPERAND (exp, 0), 0);
1892 if (!TREE_READONLY (decl) && !TREE_STATIC (decl))
1893 warning_at (DECL_SOURCE_LOCATION (decl), OPT_Wc___compat,
1894 "converting an array compound literal to a pointer "
1895 "is ill-formed in C++");
1896 }
1897
1898 adr = build_unary_op (loc, ADDR_EXPR, exp, true);
1899 return convert (ptrtype, adr);
1900 }
1901
1902 /* Convert the function expression EXP to a pointer. */
1903 static tree
1904 function_to_pointer_conversion (location_t loc, tree exp)
1905 {
1906 tree orig_exp = exp;
1907
1908 gcc_assert (TREE_CODE (TREE_TYPE (exp)) == FUNCTION_TYPE);
1909
1910 STRIP_TYPE_NOPS (exp);
1911
1912 if (TREE_NO_WARNING (orig_exp))
1913 TREE_NO_WARNING (exp) = 1;
1914
1915 return build_unary_op (loc, ADDR_EXPR, exp, false);
1916 }
1917
1918 /* Mark EXP as read, not just set, for set but not used -Wunused
1919 warning purposes. */
1920
1921 void
1922 mark_exp_read (tree exp)
1923 {
1924 switch (TREE_CODE (exp))
1925 {
1926 case VAR_DECL:
1927 case PARM_DECL:
1928 DECL_READ_P (exp) = 1;
1929 break;
1930 case ARRAY_REF:
1931 case COMPONENT_REF:
1932 case MODIFY_EXPR:
1933 case REALPART_EXPR:
1934 case IMAGPART_EXPR:
1935 CASE_CONVERT:
1936 case ADDR_EXPR:
1937 case VIEW_CONVERT_EXPR:
1938 mark_exp_read (TREE_OPERAND (exp, 0));
1939 break;
1940 case COMPOUND_EXPR:
1941 case C_MAYBE_CONST_EXPR:
1942 mark_exp_read (TREE_OPERAND (exp, 1));
1943 break;
1944 default:
1945 break;
1946 }
1947 }
1948
1949 /* Perform the default conversion of arrays and functions to pointers.
1950 Return the result of converting EXP. For any other expression, just
1951 return EXP.
1952
1953 LOC is the location of the expression. */
1954
1955 struct c_expr
1956 default_function_array_conversion (location_t loc, struct c_expr exp)
1957 {
1958 tree orig_exp = exp.value;
1959 tree type = TREE_TYPE (exp.value);
1960 enum tree_code code = TREE_CODE (type);
1961
1962 switch (code)
1963 {
1964 case ARRAY_TYPE:
1965 {
1966 bool not_lvalue = false;
1967 bool lvalue_array_p;
1968
1969 while ((TREE_CODE (exp.value) == NON_LVALUE_EXPR
1970 || CONVERT_EXPR_P (exp.value))
1971 && TREE_TYPE (TREE_OPERAND (exp.value, 0)) == type)
1972 {
1973 if (TREE_CODE (exp.value) == NON_LVALUE_EXPR)
1974 not_lvalue = true;
1975 exp.value = TREE_OPERAND (exp.value, 0);
1976 }
1977
1978 if (TREE_NO_WARNING (orig_exp))
1979 TREE_NO_WARNING (exp.value) = 1;
1980
1981 lvalue_array_p = !not_lvalue && lvalue_p (exp.value);
1982 if (!flag_isoc99 && !lvalue_array_p)
1983 {
1984 /* Before C99, non-lvalue arrays do not decay to pointers.
1985 Normally, using such an array would be invalid; but it can
1986 be used correctly inside sizeof or as a statement expression.
1987 Thus, do not give an error here; an error will result later. */
1988 return exp;
1989 }
1990
1991 exp.value = array_to_pointer_conversion (loc, exp.value);
1992 }
1993 break;
1994 case FUNCTION_TYPE:
1995 exp.value = function_to_pointer_conversion (loc, exp.value);
1996 break;
1997 default:
1998 break;
1999 }
2000
2001 return exp;
2002 }
2003
2004 struct c_expr
2005 default_function_array_read_conversion (location_t loc, struct c_expr exp)
2006 {
2007 mark_exp_read (exp.value);
2008 return default_function_array_conversion (loc, exp);
2009 }
2010
2011 /* Return whether EXPR should be treated as an atomic lvalue for the
2012 purposes of load and store handling. */
2013
2014 static bool
2015 really_atomic_lvalue (tree expr)
2016 {
2017 if (error_operand_p (expr))
2018 return false;
2019 if (!TYPE_ATOMIC (TREE_TYPE (expr)))
2020 return false;
2021 if (!lvalue_p (expr))
2022 return false;
2023
2024 /* Ignore _Atomic on register variables, since their addresses can't
2025 be taken so (a) atomicity is irrelevant and (b) the normal atomic
2026 sequences wouldn't work. Ignore _Atomic on structures containing
2027 bit-fields, since accessing elements of atomic structures or
2028 unions is undefined behavior (C11 6.5.2.3#5), but it's unclear if
2029 it's undefined at translation time or execution time, and the
2030 normal atomic sequences again wouldn't work. */
2031 while (handled_component_p (expr))
2032 {
2033 if (TREE_CODE (expr) == COMPONENT_REF
2034 && DECL_C_BIT_FIELD (TREE_OPERAND (expr, 1)))
2035 return false;
2036 expr = TREE_OPERAND (expr, 0);
2037 }
2038 if (DECL_P (expr) && C_DECL_REGISTER (expr))
2039 return false;
2040 return true;
2041 }
2042
2043 /* Convert expression EXP (location LOC) from lvalue to rvalue,
2044 including converting functions and arrays to pointers if CONVERT_P.
2045 If READ_P, also mark the expression as having been read. */
2046
2047 struct c_expr
2048 convert_lvalue_to_rvalue (location_t loc, struct c_expr exp,
2049 bool convert_p, bool read_p)
2050 {
2051 if (read_p)
2052 mark_exp_read (exp.value);
2053 if (convert_p)
2054 exp = default_function_array_conversion (loc, exp);
2055 if (really_atomic_lvalue (exp.value))
2056 {
2057 vec<tree, va_gc> *params;
2058 tree nonatomic_type, tmp, tmp_addr, fndecl, func_call;
2059 tree expr_type = TREE_TYPE (exp.value);
2060 tree expr_addr = build_unary_op (loc, ADDR_EXPR, exp.value, false);
2061 tree seq_cst = build_int_cst (integer_type_node, MEMMODEL_SEQ_CST);
2062
2063 gcc_assert (TYPE_ATOMIC (expr_type));
2064
2065 /* Expansion of a generic atomic load may require an addition
2066 element, so allocate enough to prevent a resize. */
2067 vec_alloc (params, 4);
2068
2069 /* Remove the qualifiers for the rest of the expressions and
2070 create the VAL temp variable to hold the RHS. */
2071 nonatomic_type = build_qualified_type (expr_type, TYPE_UNQUALIFIED);
2072 tmp = create_tmp_var_raw (nonatomic_type);
2073 tmp_addr = build_unary_op (loc, ADDR_EXPR, tmp, false);
2074 TREE_ADDRESSABLE (tmp) = 1;
2075 TREE_NO_WARNING (tmp) = 1;
2076
2077 /* Issue __atomic_load (&expr, &tmp, SEQ_CST); */
2078 fndecl = builtin_decl_explicit (BUILT_IN_ATOMIC_LOAD);
2079 params->quick_push (expr_addr);
2080 params->quick_push (tmp_addr);
2081 params->quick_push (seq_cst);
2082 func_call = c_build_function_call_vec (loc, vNULL, fndecl, params, NULL);
2083
2084 /* EXPR is always read. */
2085 mark_exp_read (exp.value);
2086
2087 /* Return tmp which contains the value loaded. */
2088 exp.value = build4 (TARGET_EXPR, nonatomic_type, tmp, func_call,
2089 NULL_TREE, NULL_TREE);
2090 }
2091 return exp;
2092 }
2093
2094 /* EXP is an expression of integer type. Apply the integer promotions
2095 to it and return the promoted value. */
2096
2097 tree
2098 perform_integral_promotions (tree exp)
2099 {
2100 tree type = TREE_TYPE (exp);
2101 enum tree_code code = TREE_CODE (type);
2102
2103 gcc_assert (INTEGRAL_TYPE_P (type));
2104
2105 /* Normally convert enums to int,
2106 but convert wide enums to something wider. */
2107 if (code == ENUMERAL_TYPE)
2108 {
2109 type = c_common_type_for_size (MAX (TYPE_PRECISION (type),
2110 TYPE_PRECISION (integer_type_node)),
2111 ((TYPE_PRECISION (type)
2112 >= TYPE_PRECISION (integer_type_node))
2113 && TYPE_UNSIGNED (type)));
2114
2115 return convert (type, exp);
2116 }
2117
2118 /* ??? This should no longer be needed now bit-fields have their
2119 proper types. */
2120 if (TREE_CODE (exp) == COMPONENT_REF
2121 && DECL_C_BIT_FIELD (TREE_OPERAND (exp, 1))
2122 /* If it's thinner than an int, promote it like a
2123 c_promoting_integer_type_p, otherwise leave it alone. */
2124 && compare_tree_int (DECL_SIZE (TREE_OPERAND (exp, 1)),
2125 TYPE_PRECISION (integer_type_node)) < 0)
2126 return convert (integer_type_node, exp);
2127
2128 if (c_promoting_integer_type_p (type))
2129 {
2130 /* Preserve unsignedness if not really getting any wider. */
2131 if (TYPE_UNSIGNED (type)
2132 && TYPE_PRECISION (type) == TYPE_PRECISION (integer_type_node))
2133 return convert (unsigned_type_node, exp);
2134
2135 return convert (integer_type_node, exp);
2136 }
2137
2138 return exp;
2139 }
2140
2141
2142 /* Perform default promotions for C data used in expressions.
2143 Enumeral types or short or char are converted to int.
2144 In addition, manifest constants symbols are replaced by their values. */
2145
2146 tree
2147 default_conversion (tree exp)
2148 {
2149 tree orig_exp;
2150 tree type = TREE_TYPE (exp);
2151 enum tree_code code = TREE_CODE (type);
2152 tree promoted_type;
2153
2154 mark_exp_read (exp);
2155
2156 /* Functions and arrays have been converted during parsing. */
2157 gcc_assert (code != FUNCTION_TYPE);
2158 if (code == ARRAY_TYPE)
2159 return exp;
2160
2161 /* Constants can be used directly unless they're not loadable. */
2162 if (TREE_CODE (exp) == CONST_DECL)
2163 exp = DECL_INITIAL (exp);
2164
2165 /* Strip no-op conversions. */
2166 orig_exp = exp;
2167 STRIP_TYPE_NOPS (exp);
2168
2169 if (TREE_NO_WARNING (orig_exp))
2170 TREE_NO_WARNING (exp) = 1;
2171
2172 if (code == VOID_TYPE)
2173 {
2174 error_at (EXPR_LOC_OR_LOC (exp, input_location),
2175 "void value not ignored as it ought to be");
2176 return error_mark_node;
2177 }
2178
2179 exp = require_complete_type (EXPR_LOC_OR_LOC (exp, input_location), exp);
2180 if (exp == error_mark_node)
2181 return error_mark_node;
2182
2183 promoted_type = targetm.promoted_type (type);
2184 if (promoted_type)
2185 return convert (promoted_type, exp);
2186
2187 if (INTEGRAL_TYPE_P (type))
2188 return perform_integral_promotions (exp);
2189
2190 return exp;
2191 }
2192 \f
2193 /* Look up COMPONENT in a structure or union TYPE.
2194
2195 If the component name is not found, returns NULL_TREE. Otherwise,
2196 the return value is a TREE_LIST, with each TREE_VALUE a FIELD_DECL
2197 stepping down the chain to the component, which is in the last
2198 TREE_VALUE of the list. Normally the list is of length one, but if
2199 the component is embedded within (nested) anonymous structures or
2200 unions, the list steps down the chain to the component. */
2201
2202 static tree
2203 lookup_field (tree type, tree component)
2204 {
2205 tree field;
2206
2207 /* If TYPE_LANG_SPECIFIC is set, then it is a sorted array of pointers
2208 to the field elements. Use a binary search on this array to quickly
2209 find the element. Otherwise, do a linear search. TYPE_LANG_SPECIFIC
2210 will always be set for structures which have many elements. */
2211
2212 if (TYPE_LANG_SPECIFIC (type) && TYPE_LANG_SPECIFIC (type)->s)
2213 {
2214 int bot, top, half;
2215 tree *field_array = &TYPE_LANG_SPECIFIC (type)->s->elts[0];
2216
2217 field = TYPE_FIELDS (type);
2218 bot = 0;
2219 top = TYPE_LANG_SPECIFIC (type)->s->len;
2220 while (top - bot > 1)
2221 {
2222 half = (top - bot + 1) >> 1;
2223 field = field_array[bot+half];
2224
2225 if (DECL_NAME (field) == NULL_TREE)
2226 {
2227 /* Step through all anon unions in linear fashion. */
2228 while (DECL_NAME (field_array[bot]) == NULL_TREE)
2229 {
2230 field = field_array[bot++];
2231 if (RECORD_OR_UNION_TYPE_P (TREE_TYPE (field)))
2232 {
2233 tree anon = lookup_field (TREE_TYPE (field), component);
2234
2235 if (anon)
2236 return tree_cons (NULL_TREE, field, anon);
2237
2238 /* The Plan 9 compiler permits referring
2239 directly to an anonymous struct/union field
2240 using a typedef name. */
2241 if (flag_plan9_extensions
2242 && TYPE_NAME (TREE_TYPE (field)) != NULL_TREE
2243 && (TREE_CODE (TYPE_NAME (TREE_TYPE (field)))
2244 == TYPE_DECL)
2245 && (DECL_NAME (TYPE_NAME (TREE_TYPE (field)))
2246 == component))
2247 break;
2248 }
2249 }
2250
2251 /* Entire record is only anon unions. */
2252 if (bot > top)
2253 return NULL_TREE;
2254
2255 /* Restart the binary search, with new lower bound. */
2256 continue;
2257 }
2258
2259 if (DECL_NAME (field) == component)
2260 break;
2261 if (DECL_NAME (field) < component)
2262 bot += half;
2263 else
2264 top = bot + half;
2265 }
2266
2267 if (DECL_NAME (field_array[bot]) == component)
2268 field = field_array[bot];
2269 else if (DECL_NAME (field) != component)
2270 return NULL_TREE;
2271 }
2272 else
2273 {
2274 for (field = TYPE_FIELDS (type); field; field = DECL_CHAIN (field))
2275 {
2276 if (DECL_NAME (field) == NULL_TREE
2277 && RECORD_OR_UNION_TYPE_P (TREE_TYPE (field)))
2278 {
2279 tree anon = lookup_field (TREE_TYPE (field), component);
2280
2281 if (anon)
2282 return tree_cons (NULL_TREE, field, anon);
2283
2284 /* The Plan 9 compiler permits referring directly to an
2285 anonymous struct/union field using a typedef
2286 name. */
2287 if (flag_plan9_extensions
2288 && TYPE_NAME (TREE_TYPE (field)) != NULL_TREE
2289 && TREE_CODE (TYPE_NAME (TREE_TYPE (field))) == TYPE_DECL
2290 && (DECL_NAME (TYPE_NAME (TREE_TYPE (field)))
2291 == component))
2292 break;
2293 }
2294
2295 if (DECL_NAME (field) == component)
2296 break;
2297 }
2298
2299 if (field == NULL_TREE)
2300 return NULL_TREE;
2301 }
2302
2303 return tree_cons (NULL_TREE, field, NULL_TREE);
2304 }
2305
2306 /* Recursively append candidate IDENTIFIER_NODEs to CANDIDATES. */
2307
2308 static void
2309 lookup_field_fuzzy_find_candidates (tree type, tree component,
2310 vec<tree> *candidates)
2311 {
2312 tree field;
2313 for (field = TYPE_FIELDS (type); field; field = DECL_CHAIN (field))
2314 {
2315 if (DECL_NAME (field) == NULL_TREE
2316 && RECORD_OR_UNION_TYPE_P (TREE_TYPE (field)))
2317 lookup_field_fuzzy_find_candidates (TREE_TYPE (field), component,
2318 candidates);
2319
2320 if (DECL_NAME (field))
2321 candidates->safe_push (DECL_NAME (field));
2322 }
2323 }
2324
2325 /* Like "lookup_field", but find the closest matching IDENTIFIER_NODE,
2326 rather than returning a TREE_LIST for an exact match. */
2327
2328 static tree
2329 lookup_field_fuzzy (tree type, tree component)
2330 {
2331 gcc_assert (TREE_CODE (component) == IDENTIFIER_NODE);
2332
2333 /* First, gather a list of candidates. */
2334 auto_vec <tree> candidates;
2335
2336 lookup_field_fuzzy_find_candidates (type, component,
2337 &candidates);
2338
2339 return find_closest_identifier (component, &candidates);
2340 }
2341
2342 /* Support function for build_component_ref's error-handling.
2343
2344 Given DATUM_TYPE, and "DATUM.COMPONENT", where DATUM is *not* a
2345 struct or union, should we suggest "DATUM->COMPONENT" as a hint? */
2346
2347 static bool
2348 should_suggest_deref_p (tree datum_type)
2349 {
2350 /* We don't do it for Objective-C, since Objective-C 2.0 dot-syntax
2351 allows "." for ptrs; we could be handling a failed attempt
2352 to access a property. */
2353 if (c_dialect_objc ())
2354 return false;
2355
2356 /* Only suggest it for pointers... */
2357 if (TREE_CODE (datum_type) != POINTER_TYPE)
2358 return false;
2359
2360 /* ...to structs/unions. */
2361 tree underlying_type = TREE_TYPE (datum_type);
2362 enum tree_code code = TREE_CODE (underlying_type);
2363 if (code == RECORD_TYPE || code == UNION_TYPE)
2364 return true;
2365 else
2366 return false;
2367 }
2368
2369 /* Make an expression to refer to the COMPONENT field of structure or
2370 union value DATUM. COMPONENT is an IDENTIFIER_NODE. LOC is the
2371 location of the COMPONENT_REF. COMPONENT_LOC is the location
2372 of COMPONENT. */
2373
2374 tree
2375 build_component_ref (location_t loc, tree datum, tree component,
2376 location_t component_loc)
2377 {
2378 tree type = TREE_TYPE (datum);
2379 enum tree_code code = TREE_CODE (type);
2380 tree field = NULL;
2381 tree ref;
2382 bool datum_lvalue = lvalue_p (datum);
2383
2384 if (!objc_is_public (datum, component))
2385 return error_mark_node;
2386
2387 /* Detect Objective-C property syntax object.property. */
2388 if (c_dialect_objc ()
2389 && (ref = objc_maybe_build_component_ref (datum, component)))
2390 return ref;
2391
2392 /* See if there is a field or component with name COMPONENT. */
2393
2394 if (code == RECORD_TYPE || code == UNION_TYPE)
2395 {
2396 if (!COMPLETE_TYPE_P (type))
2397 {
2398 c_incomplete_type_error (loc, NULL_TREE, type);
2399 return error_mark_node;
2400 }
2401
2402 field = lookup_field (type, component);
2403
2404 if (!field)
2405 {
2406 tree guessed_id = lookup_field_fuzzy (type, component);
2407 if (guessed_id)
2408 {
2409 /* Attempt to provide a fixit replacement hint, if
2410 we have a valid range for the component. */
2411 location_t reported_loc
2412 = (component_loc != UNKNOWN_LOCATION) ? component_loc : loc;
2413 gcc_rich_location rich_loc (reported_loc);
2414 if (component_loc != UNKNOWN_LOCATION)
2415 rich_loc.add_fixit_misspelled_id (component_loc, guessed_id);
2416 error_at (&rich_loc,
2417 "%qT has no member named %qE; did you mean %qE?",
2418 type, component, guessed_id);
2419 }
2420 else
2421 error_at (loc, "%qT has no member named %qE", type, component);
2422 return error_mark_node;
2423 }
2424
2425 /* Accessing elements of atomic structures or unions is undefined
2426 behavior (C11 6.5.2.3#5). */
2427 if (TYPE_ATOMIC (type) && c_inhibit_evaluation_warnings == 0)
2428 {
2429 if (code == RECORD_TYPE)
2430 warning_at (loc, 0, "accessing a member %qE of an atomic "
2431 "structure %qE", component, datum);
2432 else
2433 warning_at (loc, 0, "accessing a member %qE of an atomic "
2434 "union %qE", component, datum);
2435 }
2436
2437 /* Chain the COMPONENT_REFs if necessary down to the FIELD.
2438 This might be better solved in future the way the C++ front
2439 end does it - by giving the anonymous entities each a
2440 separate name and type, and then have build_component_ref
2441 recursively call itself. We can't do that here. */
2442 do
2443 {
2444 tree subdatum = TREE_VALUE (field);
2445 int quals;
2446 tree subtype;
2447 bool use_datum_quals;
2448
2449 if (TREE_TYPE (subdatum) == error_mark_node)
2450 return error_mark_node;
2451
2452 /* If this is an rvalue, it does not have qualifiers in C
2453 standard terms and we must avoid propagating such
2454 qualifiers down to a non-lvalue array that is then
2455 converted to a pointer. */
2456 use_datum_quals = (datum_lvalue
2457 || TREE_CODE (TREE_TYPE (subdatum)) != ARRAY_TYPE);
2458
2459 quals = TYPE_QUALS (strip_array_types (TREE_TYPE (subdatum)));
2460 if (use_datum_quals)
2461 quals |= TYPE_QUALS (TREE_TYPE (datum));
2462 subtype = c_build_qualified_type (TREE_TYPE (subdatum), quals);
2463
2464 ref = build3 (COMPONENT_REF, subtype, datum, subdatum,
2465 NULL_TREE);
2466 SET_EXPR_LOCATION (ref, loc);
2467 if (TREE_READONLY (subdatum)
2468 || (use_datum_quals && TREE_READONLY (datum)))
2469 TREE_READONLY (ref) = 1;
2470 if (TREE_THIS_VOLATILE (subdatum)
2471 || (use_datum_quals && TREE_THIS_VOLATILE (datum)))
2472 TREE_THIS_VOLATILE (ref) = 1;
2473
2474 if (TREE_DEPRECATED (subdatum))
2475 warn_deprecated_use (subdatum, NULL_TREE);
2476
2477 datum = ref;
2478
2479 field = TREE_CHAIN (field);
2480 }
2481 while (field);
2482
2483 return ref;
2484 }
2485 else if (should_suggest_deref_p (type))
2486 {
2487 /* Special-case the error message for "ptr.field" for the case
2488 where the user has confused "." vs "->". */
2489 rich_location richloc (line_table, loc);
2490 /* "loc" should be the "." token. */
2491 richloc.add_fixit_replace ("->");
2492 error_at (&richloc,
2493 "%qE is a pointer; did you mean to use %<->%>?",
2494 datum);
2495 return error_mark_node;
2496 }
2497 else if (code != ERROR_MARK)
2498 error_at (loc,
2499 "request for member %qE in something not a structure or union",
2500 component);
2501
2502 return error_mark_node;
2503 }
2504 \f
2505 /* Given an expression PTR for a pointer, return an expression
2506 for the value pointed to.
2507 ERRORSTRING is the name of the operator to appear in error messages.
2508
2509 LOC is the location to use for the generated tree. */
2510
2511 tree
2512 build_indirect_ref (location_t loc, tree ptr, ref_operator errstring)
2513 {
2514 tree pointer = default_conversion (ptr);
2515 tree type = TREE_TYPE (pointer);
2516 tree ref;
2517
2518 if (TREE_CODE (type) == POINTER_TYPE)
2519 {
2520 if (CONVERT_EXPR_P (pointer)
2521 || TREE_CODE (pointer) == VIEW_CONVERT_EXPR)
2522 {
2523 /* If a warning is issued, mark it to avoid duplicates from
2524 the backend. This only needs to be done at
2525 warn_strict_aliasing > 2. */
2526 if (warn_strict_aliasing > 2)
2527 if (strict_aliasing_warning (EXPR_LOCATION (pointer),
2528 type, TREE_OPERAND (pointer, 0)))
2529 TREE_NO_WARNING (pointer) = 1;
2530 }
2531
2532 if (TREE_CODE (pointer) == ADDR_EXPR
2533 && (TREE_TYPE (TREE_OPERAND (pointer, 0))
2534 == TREE_TYPE (type)))
2535 {
2536 ref = TREE_OPERAND (pointer, 0);
2537 protected_set_expr_location (ref, loc);
2538 return ref;
2539 }
2540 else
2541 {
2542 tree t = TREE_TYPE (type);
2543
2544 ref = build1 (INDIRECT_REF, t, pointer);
2545
2546 if (!COMPLETE_OR_VOID_TYPE_P (t) && TREE_CODE (t) != ARRAY_TYPE)
2547 {
2548 if (!C_TYPE_ERROR_REPORTED (TREE_TYPE (ptr)))
2549 {
2550 error_at (loc, "dereferencing pointer to incomplete type "
2551 "%qT", t);
2552 C_TYPE_ERROR_REPORTED (TREE_TYPE (ptr)) = 1;
2553 }
2554 return error_mark_node;
2555 }
2556 if (VOID_TYPE_P (t) && c_inhibit_evaluation_warnings == 0)
2557 warning_at (loc, 0, "dereferencing %<void *%> pointer");
2558
2559 /* We *must* set TREE_READONLY when dereferencing a pointer to const,
2560 so that we get the proper error message if the result is used
2561 to assign to. Also, &* is supposed to be a no-op.
2562 And ANSI C seems to specify that the type of the result
2563 should be the const type. */
2564 /* A de-reference of a pointer to const is not a const. It is valid
2565 to change it via some other pointer. */
2566 TREE_READONLY (ref) = TYPE_READONLY (t);
2567 TREE_SIDE_EFFECTS (ref)
2568 = TYPE_VOLATILE (t) || TREE_SIDE_EFFECTS (pointer);
2569 TREE_THIS_VOLATILE (ref) = TYPE_VOLATILE (t);
2570 protected_set_expr_location (ref, loc);
2571 return ref;
2572 }
2573 }
2574 else if (TREE_CODE (pointer) != ERROR_MARK)
2575 invalid_indirection_error (loc, type, errstring);
2576
2577 return error_mark_node;
2578 }
2579
2580 /* This handles expressions of the form "a[i]", which denotes
2581 an array reference.
2582
2583 This is logically equivalent in C to *(a+i), but we may do it differently.
2584 If A is a variable or a member, we generate a primitive ARRAY_REF.
2585 This avoids forcing the array out of registers, and can work on
2586 arrays that are not lvalues (for example, members of structures returned
2587 by functions).
2588
2589 For vector types, allow vector[i] but not i[vector], and create
2590 *(((type*)&vectortype) + i) for the expression.
2591
2592 LOC is the location to use for the returned expression. */
2593
2594 tree
2595 build_array_ref (location_t loc, tree array, tree index)
2596 {
2597 tree ret;
2598 bool swapped = false;
2599 if (TREE_TYPE (array) == error_mark_node
2600 || TREE_TYPE (index) == error_mark_node)
2601 return error_mark_node;
2602
2603 if (TREE_CODE (TREE_TYPE (array)) != ARRAY_TYPE
2604 && TREE_CODE (TREE_TYPE (array)) != POINTER_TYPE
2605 /* Allow vector[index] but not index[vector]. */
2606 && !VECTOR_TYPE_P (TREE_TYPE (array)))
2607 {
2608 if (TREE_CODE (TREE_TYPE (index)) != ARRAY_TYPE
2609 && TREE_CODE (TREE_TYPE (index)) != POINTER_TYPE)
2610 {
2611 error_at (loc,
2612 "subscripted value is neither array nor pointer nor vector");
2613
2614 return error_mark_node;
2615 }
2616 std::swap (array, index);
2617 swapped = true;
2618 }
2619
2620 if (!INTEGRAL_TYPE_P (TREE_TYPE (index)))
2621 {
2622 error_at (loc, "array subscript is not an integer");
2623 return error_mark_node;
2624 }
2625
2626 if (TREE_CODE (TREE_TYPE (TREE_TYPE (array))) == FUNCTION_TYPE)
2627 {
2628 error_at (loc, "subscripted value is pointer to function");
2629 return error_mark_node;
2630 }
2631
2632 /* ??? Existing practice has been to warn only when the char
2633 index is syntactically the index, not for char[array]. */
2634 if (!swapped)
2635 warn_array_subscript_with_type_char (loc, index);
2636
2637 /* Apply default promotions *after* noticing character types. */
2638 index = default_conversion (index);
2639 if (index == error_mark_node)
2640 return error_mark_node;
2641
2642 gcc_assert (TREE_CODE (TREE_TYPE (index)) == INTEGER_TYPE);
2643
2644 bool was_vector = VECTOR_TYPE_P (TREE_TYPE (array));
2645 bool non_lvalue = convert_vector_to_array_for_subscript (loc, &array, index);
2646
2647 if (TREE_CODE (TREE_TYPE (array)) == ARRAY_TYPE)
2648 {
2649 tree rval, type;
2650
2651 /* An array that is indexed by a non-constant
2652 cannot be stored in a register; we must be able to do
2653 address arithmetic on its address.
2654 Likewise an array of elements of variable size. */
2655 if (TREE_CODE (index) != INTEGER_CST
2656 || (COMPLETE_TYPE_P (TREE_TYPE (TREE_TYPE (array)))
2657 && TREE_CODE (TYPE_SIZE (TREE_TYPE (TREE_TYPE (array)))) != INTEGER_CST))
2658 {
2659 if (!c_mark_addressable (array, true))
2660 return error_mark_node;
2661 }
2662 /* An array that is indexed by a constant value which is not within
2663 the array bounds cannot be stored in a register either; because we
2664 would get a crash in store_bit_field/extract_bit_field when trying
2665 to access a non-existent part of the register. */
2666 if (TREE_CODE (index) == INTEGER_CST
2667 && TYPE_DOMAIN (TREE_TYPE (array))
2668 && !int_fits_type_p (index, TYPE_DOMAIN (TREE_TYPE (array))))
2669 {
2670 if (!c_mark_addressable (array))
2671 return error_mark_node;
2672 }
2673
2674 if ((pedantic || warn_c90_c99_compat)
2675 && ! was_vector)
2676 {
2677 tree foo = array;
2678 while (TREE_CODE (foo) == COMPONENT_REF)
2679 foo = TREE_OPERAND (foo, 0);
2680 if (VAR_P (foo) && C_DECL_REGISTER (foo))
2681 pedwarn (loc, OPT_Wpedantic,
2682 "ISO C forbids subscripting %<register%> array");
2683 else if (!lvalue_p (foo))
2684 pedwarn_c90 (loc, OPT_Wpedantic,
2685 "ISO C90 forbids subscripting non-lvalue "
2686 "array");
2687 }
2688
2689 type = TREE_TYPE (TREE_TYPE (array));
2690 rval = build4 (ARRAY_REF, type, array, index, NULL_TREE, NULL_TREE);
2691 /* Array ref is const/volatile if the array elements are
2692 or if the array is. */
2693 TREE_READONLY (rval)
2694 |= (TYPE_READONLY (TREE_TYPE (TREE_TYPE (array)))
2695 | TREE_READONLY (array));
2696 TREE_SIDE_EFFECTS (rval)
2697 |= (TYPE_VOLATILE (TREE_TYPE (TREE_TYPE (array)))
2698 | TREE_SIDE_EFFECTS (array));
2699 TREE_THIS_VOLATILE (rval)
2700 |= (TYPE_VOLATILE (TREE_TYPE (TREE_TYPE (array)))
2701 /* This was added by rms on 16 Nov 91.
2702 It fixes vol struct foo *a; a->elts[1]
2703 in an inline function.
2704 Hope it doesn't break something else. */
2705 | TREE_THIS_VOLATILE (array));
2706 ret = require_complete_type (loc, rval);
2707 protected_set_expr_location (ret, loc);
2708 if (non_lvalue)
2709 ret = non_lvalue_loc (loc, ret);
2710 return ret;
2711 }
2712 else
2713 {
2714 tree ar = default_conversion (array);
2715
2716 if (ar == error_mark_node)
2717 return ar;
2718
2719 gcc_assert (TREE_CODE (TREE_TYPE (ar)) == POINTER_TYPE);
2720 gcc_assert (TREE_CODE (TREE_TYPE (TREE_TYPE (ar))) != FUNCTION_TYPE);
2721
2722 ret = build_indirect_ref (loc, build_binary_op (loc, PLUS_EXPR, ar,
2723 index, false),
2724 RO_ARRAY_INDEXING);
2725 if (non_lvalue)
2726 ret = non_lvalue_loc (loc, ret);
2727 return ret;
2728 }
2729 }
2730 \f
2731 /* Build an external reference to identifier ID. FUN indicates
2732 whether this will be used for a function call. LOC is the source
2733 location of the identifier. This sets *TYPE to the type of the
2734 identifier, which is not the same as the type of the returned value
2735 for CONST_DECLs defined as enum constants. If the type of the
2736 identifier is not available, *TYPE is set to NULL. */
2737 tree
2738 build_external_ref (location_t loc, tree id, bool fun, tree *type)
2739 {
2740 tree ref;
2741 tree decl = lookup_name (id);
2742
2743 /* In Objective-C, an instance variable (ivar) may be preferred to
2744 whatever lookup_name() found. */
2745 decl = objc_lookup_ivar (decl, id);
2746
2747 *type = NULL;
2748 if (decl && decl != error_mark_node)
2749 {
2750 ref = decl;
2751 *type = TREE_TYPE (ref);
2752 }
2753 else if (fun)
2754 /* Implicit function declaration. */
2755 ref = implicitly_declare (loc, id);
2756 else if (decl == error_mark_node)
2757 /* Don't complain about something that's already been
2758 complained about. */
2759 return error_mark_node;
2760 else
2761 {
2762 undeclared_variable (loc, id);
2763 return error_mark_node;
2764 }
2765
2766 if (TREE_TYPE (ref) == error_mark_node)
2767 return error_mark_node;
2768
2769 if (TREE_DEPRECATED (ref))
2770 warn_deprecated_use (ref, NULL_TREE);
2771
2772 /* Recursive call does not count as usage. */
2773 if (ref != current_function_decl)
2774 {
2775 TREE_USED (ref) = 1;
2776 }
2777
2778 if (TREE_CODE (ref) == FUNCTION_DECL && !in_alignof)
2779 {
2780 if (!in_sizeof && !in_typeof)
2781 C_DECL_USED (ref) = 1;
2782 else if (DECL_INITIAL (ref) == NULL_TREE
2783 && DECL_EXTERNAL (ref)
2784 && !TREE_PUBLIC (ref))
2785 record_maybe_used_decl (ref);
2786 }
2787
2788 if (TREE_CODE (ref) == CONST_DECL)
2789 {
2790 used_types_insert (TREE_TYPE (ref));
2791
2792 if (warn_cxx_compat
2793 && TREE_CODE (TREE_TYPE (ref)) == ENUMERAL_TYPE
2794 && C_TYPE_DEFINED_IN_STRUCT (TREE_TYPE (ref)))
2795 {
2796 warning_at (loc, OPT_Wc___compat,
2797 ("enum constant defined in struct or union "
2798 "is not visible in C++"));
2799 inform (DECL_SOURCE_LOCATION (ref), "enum constant defined here");
2800 }
2801
2802 ref = DECL_INITIAL (ref);
2803 TREE_CONSTANT (ref) = 1;
2804 }
2805 else if (current_function_decl != NULL_TREE
2806 && !DECL_FILE_SCOPE_P (current_function_decl)
2807 && (VAR_OR_FUNCTION_DECL_P (ref)
2808 || TREE_CODE (ref) == PARM_DECL))
2809 {
2810 tree context = decl_function_context (ref);
2811
2812 if (context != NULL_TREE && context != current_function_decl)
2813 DECL_NONLOCAL (ref) = 1;
2814 }
2815 /* C99 6.7.4p3: An inline definition of a function with external
2816 linkage ... shall not contain a reference to an identifier with
2817 internal linkage. */
2818 else if (current_function_decl != NULL_TREE
2819 && DECL_DECLARED_INLINE_P (current_function_decl)
2820 && DECL_EXTERNAL (current_function_decl)
2821 && VAR_OR_FUNCTION_DECL_P (ref)
2822 && (!VAR_P (ref) || TREE_STATIC (ref))
2823 && ! TREE_PUBLIC (ref)
2824 && DECL_CONTEXT (ref) != current_function_decl)
2825 record_inline_static (loc, current_function_decl, ref,
2826 csi_internal);
2827
2828 return ref;
2829 }
2830
2831 /* Record details of decls possibly used inside sizeof or typeof. */
2832 struct maybe_used_decl
2833 {
2834 /* The decl. */
2835 tree decl;
2836 /* The level seen at (in_sizeof + in_typeof). */
2837 int level;
2838 /* The next one at this level or above, or NULL. */
2839 struct maybe_used_decl *next;
2840 };
2841
2842 static struct maybe_used_decl *maybe_used_decls;
2843
2844 /* Record that DECL, an undefined static function reference seen
2845 inside sizeof or typeof, might be used if the operand of sizeof is
2846 a VLA type or the operand of typeof is a variably modified
2847 type. */
2848
2849 static void
2850 record_maybe_used_decl (tree decl)
2851 {
2852 struct maybe_used_decl *t = XOBNEW (&parser_obstack, struct maybe_used_decl);
2853 t->decl = decl;
2854 t->level = in_sizeof + in_typeof;
2855 t->next = maybe_used_decls;
2856 maybe_used_decls = t;
2857 }
2858
2859 /* Pop the stack of decls possibly used inside sizeof or typeof. If
2860 USED is false, just discard them. If it is true, mark them used
2861 (if no longer inside sizeof or typeof) or move them to the next
2862 level up (if still inside sizeof or typeof). */
2863
2864 void
2865 pop_maybe_used (bool used)
2866 {
2867 struct maybe_used_decl *p = maybe_used_decls;
2868 int cur_level = in_sizeof + in_typeof;
2869 while (p && p->level > cur_level)
2870 {
2871 if (used)
2872 {
2873 if (cur_level == 0)
2874 C_DECL_USED (p->decl) = 1;
2875 else
2876 p->level = cur_level;
2877 }
2878 p = p->next;
2879 }
2880 if (!used || cur_level == 0)
2881 maybe_used_decls = p;
2882 }
2883
2884 /* Return the result of sizeof applied to EXPR. */
2885
2886 struct c_expr
2887 c_expr_sizeof_expr (location_t loc, struct c_expr expr)
2888 {
2889 struct c_expr ret;
2890 if (expr.value == error_mark_node)
2891 {
2892 ret.value = error_mark_node;
2893 ret.original_code = ERROR_MARK;
2894 ret.original_type = NULL;
2895 pop_maybe_used (false);
2896 }
2897 else
2898 {
2899 bool expr_const_operands = true;
2900
2901 if (TREE_CODE (expr.value) == PARM_DECL
2902 && C_ARRAY_PARAMETER (expr.value))
2903 {
2904 if (warning_at (loc, OPT_Wsizeof_array_argument,
2905 "%<sizeof%> on array function parameter %qE will "
2906 "return size of %qT", expr.value,
2907 TREE_TYPE (expr.value)))
2908 inform (DECL_SOURCE_LOCATION (expr.value), "declared here");
2909 }
2910 tree folded_expr = c_fully_fold (expr.value, require_constant_value,
2911 &expr_const_operands);
2912 ret.value = c_sizeof (loc, TREE_TYPE (folded_expr));
2913 c_last_sizeof_arg = expr.value;
2914 c_last_sizeof_loc = loc;
2915 ret.original_code = SIZEOF_EXPR;
2916 ret.original_type = NULL;
2917 if (c_vla_type_p (TREE_TYPE (folded_expr)))
2918 {
2919 /* sizeof is evaluated when given a vla (C99 6.5.3.4p2). */
2920 ret.value = build2 (C_MAYBE_CONST_EXPR, TREE_TYPE (ret.value),
2921 folded_expr, ret.value);
2922 C_MAYBE_CONST_EXPR_NON_CONST (ret.value) = !expr_const_operands;
2923 SET_EXPR_LOCATION (ret.value, loc);
2924 }
2925 pop_maybe_used (C_TYPE_VARIABLE_SIZE (TREE_TYPE (folded_expr)));
2926 }
2927 return ret;
2928 }
2929
2930 /* Return the result of sizeof applied to T, a structure for the type
2931 name passed to sizeof (rather than the type itself). LOC is the
2932 location of the original expression. */
2933
2934 struct c_expr
2935 c_expr_sizeof_type (location_t loc, struct c_type_name *t)
2936 {
2937 tree type;
2938 struct c_expr ret;
2939 tree type_expr = NULL_TREE;
2940 bool type_expr_const = true;
2941 type = groktypename (t, &type_expr, &type_expr_const);
2942 ret.value = c_sizeof (loc, type);
2943 c_last_sizeof_arg = type;
2944 c_last_sizeof_loc = loc;
2945 ret.original_code = SIZEOF_EXPR;
2946 ret.original_type = NULL;
2947 if ((type_expr || TREE_CODE (ret.value) == INTEGER_CST)
2948 && c_vla_type_p (type))
2949 {
2950 /* If the type is a [*] array, it is a VLA but is represented as
2951 having a size of zero. In such a case we must ensure that
2952 the result of sizeof does not get folded to a constant by
2953 c_fully_fold, because if the size is evaluated the result is
2954 not constant and so constraints on zero or negative size
2955 arrays must not be applied when this sizeof call is inside
2956 another array declarator. */
2957 if (!type_expr)
2958 type_expr = integer_zero_node;
2959 ret.value = build2 (C_MAYBE_CONST_EXPR, TREE_TYPE (ret.value),
2960 type_expr, ret.value);
2961 C_MAYBE_CONST_EXPR_NON_CONST (ret.value) = !type_expr_const;
2962 }
2963 pop_maybe_used (type != error_mark_node
2964 ? C_TYPE_VARIABLE_SIZE (type) : false);
2965 return ret;
2966 }
2967
2968 /* Build a function call to function FUNCTION with parameters PARAMS.
2969 The function call is at LOC.
2970 PARAMS is a list--a chain of TREE_LIST nodes--in which the
2971 TREE_VALUE of each node is a parameter-expression.
2972 FUNCTION's data type may be a function type or a pointer-to-function. */
2973
2974 tree
2975 build_function_call (location_t loc, tree function, tree params)
2976 {
2977 vec<tree, va_gc> *v;
2978 tree ret;
2979
2980 vec_alloc (v, list_length (params));
2981 for (; params; params = TREE_CHAIN (params))
2982 v->quick_push (TREE_VALUE (params));
2983 ret = c_build_function_call_vec (loc, vNULL, function, v, NULL);
2984 vec_free (v);
2985 return ret;
2986 }
2987
2988 /* Give a note about the location of the declaration of DECL. */
2989
2990 static void
2991 inform_declaration (tree decl)
2992 {
2993 if (decl && (TREE_CODE (decl) != FUNCTION_DECL || !DECL_IS_BUILTIN (decl)))
2994 inform (DECL_SOURCE_LOCATION (decl), "declared here");
2995 }
2996
2997 /* Build a function call to function FUNCTION with parameters PARAMS.
2998 ORIGTYPES, if not NULL, is a vector of types; each element is
2999 either NULL or the original type of the corresponding element in
3000 PARAMS. The original type may differ from TREE_TYPE of the
3001 parameter for enums. FUNCTION's data type may be a function type
3002 or pointer-to-function. This function changes the elements of
3003 PARAMS. */
3004
3005 tree
3006 build_function_call_vec (location_t loc, vec<location_t> arg_loc,
3007 tree function, vec<tree, va_gc> *params,
3008 vec<tree, va_gc> *origtypes)
3009 {
3010 tree fntype, fundecl = NULL_TREE;
3011 tree name = NULL_TREE, result;
3012 tree tem;
3013 int nargs;
3014 tree *argarray;
3015
3016
3017 /* Strip NON_LVALUE_EXPRs, etc., since we aren't using as an lvalue. */
3018 STRIP_TYPE_NOPS (function);
3019
3020 /* Convert anything with function type to a pointer-to-function. */
3021 if (TREE_CODE (function) == FUNCTION_DECL)
3022 {
3023 name = DECL_NAME (function);
3024
3025 if (flag_tm)
3026 tm_malloc_replacement (function);
3027 fundecl = function;
3028 /* Atomic functions have type checking/casting already done. They are
3029 often rewritten and don't match the original parameter list. */
3030 if (name && !strncmp (IDENTIFIER_POINTER (name), "__atomic_", 9))
3031 origtypes = NULL;
3032 }
3033 if (TREE_CODE (TREE_TYPE (function)) == FUNCTION_TYPE)
3034 function = function_to_pointer_conversion (loc, function);
3035
3036 /* For Objective-C, convert any calls via a cast to OBJC_TYPE_REF
3037 expressions, like those used for ObjC messenger dispatches. */
3038 if (params && !params->is_empty ())
3039 function = objc_rewrite_function_call (function, (*params)[0]);
3040
3041 function = c_fully_fold (function, false, NULL);
3042
3043 fntype = TREE_TYPE (function);
3044
3045 if (TREE_CODE (fntype) == ERROR_MARK)
3046 return error_mark_node;
3047
3048 if (!(TREE_CODE (fntype) == POINTER_TYPE
3049 && TREE_CODE (TREE_TYPE (fntype)) == FUNCTION_TYPE))
3050 {
3051 if (!flag_diagnostics_show_caret)
3052 error_at (loc,
3053 "called object %qE is not a function or function pointer",
3054 function);
3055 else if (DECL_P (function))
3056 {
3057 error_at (loc,
3058 "called object %qD is not a function or function pointer",
3059 function);
3060 inform_declaration (function);
3061 }
3062 else
3063 error_at (loc,
3064 "called object is not a function or function pointer");
3065 return error_mark_node;
3066 }
3067
3068 if (fundecl && TREE_THIS_VOLATILE (fundecl))
3069 current_function_returns_abnormally = 1;
3070
3071 /* fntype now gets the type of function pointed to. */
3072 fntype = TREE_TYPE (fntype);
3073
3074 /* Convert the parameters to the types declared in the
3075 function prototype, or apply default promotions. */
3076
3077 nargs = convert_arguments (loc, arg_loc, TYPE_ARG_TYPES (fntype), params,
3078 origtypes, function, fundecl);
3079 if (nargs < 0)
3080 return error_mark_node;
3081
3082 /* Check that the function is called through a compatible prototype.
3083 If it is not, warn. */
3084 if (CONVERT_EXPR_P (function)
3085 && TREE_CODE (tem = TREE_OPERAND (function, 0)) == ADDR_EXPR
3086 && TREE_CODE (tem = TREE_OPERAND (tem, 0)) == FUNCTION_DECL
3087 && !comptypes (fntype, TREE_TYPE (tem)))
3088 {
3089 tree return_type = TREE_TYPE (fntype);
3090
3091 /* This situation leads to run-time undefined behavior. We can't,
3092 therefore, simply error unless we can prove that all possible
3093 executions of the program must execute the code. */
3094 warning_at (loc, 0, "function called through a non-compatible type");
3095
3096 if (VOID_TYPE_P (return_type)
3097 && TYPE_QUALS (return_type) != TYPE_UNQUALIFIED)
3098 pedwarn (loc, 0,
3099 "function with qualified void return type called");
3100 }
3101
3102 argarray = vec_safe_address (params);
3103
3104 /* Check that arguments to builtin functions match the expectations. */
3105 if (fundecl
3106 && DECL_BUILT_IN (fundecl)
3107 && DECL_BUILT_IN_CLASS (fundecl) == BUILT_IN_NORMAL
3108 && !check_builtin_function_arguments (loc, arg_loc, fundecl, nargs,
3109 argarray))
3110 return error_mark_node;
3111
3112 /* Check that the arguments to the function are valid. */
3113 bool warned_p = check_function_arguments (loc, fundecl, fntype,
3114 nargs, argarray, &arg_loc);
3115
3116 if (name != NULL_TREE
3117 && !strncmp (IDENTIFIER_POINTER (name), "__builtin_", 10))
3118 {
3119 if (require_constant_value)
3120 result
3121 = fold_build_call_array_initializer_loc (loc, TREE_TYPE (fntype),
3122 function, nargs, argarray);
3123 else
3124 result = fold_build_call_array_loc (loc, TREE_TYPE (fntype),
3125 function, nargs, argarray);
3126 if (TREE_CODE (result) == NOP_EXPR
3127 && TREE_CODE (TREE_OPERAND (result, 0)) == INTEGER_CST)
3128 STRIP_TYPE_NOPS (result);
3129 }
3130 else
3131 result = build_call_array_loc (loc, TREE_TYPE (fntype),
3132 function, nargs, argarray);
3133 /* If -Wnonnull warning has been diagnosed, avoid diagnosing it again
3134 later. */
3135 if (warned_p && TREE_CODE (result) == CALL_EXPR)
3136 TREE_NO_WARNING (result) = 1;
3137
3138 /* In this improbable scenario, a nested function returns a VM type.
3139 Create a TARGET_EXPR so that the call always has a LHS, much as
3140 what the C++ FE does for functions returning non-PODs. */
3141 if (variably_modified_type_p (TREE_TYPE (fntype), NULL_TREE))
3142 {
3143 tree tmp = create_tmp_var_raw (TREE_TYPE (fntype));
3144 result = build4 (TARGET_EXPR, TREE_TYPE (fntype), tmp, result,
3145 NULL_TREE, NULL_TREE);
3146 }
3147
3148 if (VOID_TYPE_P (TREE_TYPE (result)))
3149 {
3150 if (TYPE_QUALS (TREE_TYPE (result)) != TYPE_UNQUALIFIED)
3151 pedwarn (loc, 0,
3152 "function with qualified void return type called");
3153 return result;
3154 }
3155 return require_complete_type (loc, result);
3156 }
3157
3158 /* Like build_function_call_vec, but call also resolve_overloaded_builtin. */
3159
3160 tree
3161 c_build_function_call_vec (location_t loc, vec<location_t> arg_loc,
3162 tree function, vec<tree, va_gc> *params,
3163 vec<tree, va_gc> *origtypes)
3164 {
3165 /* Strip NON_LVALUE_EXPRs, etc., since we aren't using as an lvalue. */
3166 STRIP_TYPE_NOPS (function);
3167
3168 /* Convert anything with function type to a pointer-to-function. */
3169 if (TREE_CODE (function) == FUNCTION_DECL)
3170 {
3171 /* Implement type-directed function overloading for builtins.
3172 resolve_overloaded_builtin and targetm.resolve_overloaded_builtin
3173 handle all the type checking. The result is a complete expression
3174 that implements this function call. */
3175 tree tem = resolve_overloaded_builtin (loc, function, params);
3176 if (tem)
3177 return tem;
3178 }
3179 return build_function_call_vec (loc, arg_loc, function, params, origtypes);
3180 }
3181 \f
3182 /* Convert the argument expressions in the vector VALUES
3183 to the types in the list TYPELIST.
3184
3185 If TYPELIST is exhausted, or when an element has NULL as its type,
3186 perform the default conversions.
3187
3188 ORIGTYPES is the original types of the expressions in VALUES. This
3189 holds the type of enum values which have been converted to integral
3190 types. It may be NULL.
3191
3192 FUNCTION is a tree for the called function. It is used only for
3193 error messages, where it is formatted with %qE.
3194
3195 This is also where warnings about wrong number of args are generated.
3196
3197 ARG_LOC are locations of function arguments (if any).
3198
3199 Returns the actual number of arguments processed (which may be less
3200 than the length of VALUES in some error situations), or -1 on
3201 failure. */
3202
3203 static int
3204 convert_arguments (location_t loc, vec<location_t> arg_loc, tree typelist,
3205 vec<tree, va_gc> *values, vec<tree, va_gc> *origtypes,
3206 tree function, tree fundecl)
3207 {
3208 tree typetail, val;
3209 unsigned int parmnum;
3210 bool error_args = false;
3211 const bool type_generic = fundecl
3212 && lookup_attribute ("type generic", TYPE_ATTRIBUTES (TREE_TYPE (fundecl)));
3213 bool type_generic_remove_excess_precision = false;
3214 bool type_generic_overflow_p = false;
3215 tree selector;
3216
3217 /* Change pointer to function to the function itself for
3218 diagnostics. */
3219 if (TREE_CODE (function) == ADDR_EXPR
3220 && TREE_CODE (TREE_OPERAND (function, 0)) == FUNCTION_DECL)
3221 function = TREE_OPERAND (function, 0);
3222
3223 /* Handle an ObjC selector specially for diagnostics. */
3224 selector = objc_message_selector ();
3225
3226 /* For type-generic built-in functions, determine whether excess
3227 precision should be removed (classification) or not
3228 (comparison). */
3229 if (type_generic
3230 && DECL_BUILT_IN (fundecl)
3231 && DECL_BUILT_IN_CLASS (fundecl) == BUILT_IN_NORMAL)
3232 {
3233 switch (DECL_FUNCTION_CODE (fundecl))
3234 {
3235 case BUILT_IN_ISFINITE:
3236 case BUILT_IN_ISINF:
3237 case BUILT_IN_ISINF_SIGN:
3238 case BUILT_IN_ISNAN:
3239 case BUILT_IN_ISNORMAL:
3240 case BUILT_IN_FPCLASSIFY:
3241 type_generic_remove_excess_precision = true;
3242 break;
3243
3244 case BUILT_IN_ADD_OVERFLOW_P:
3245 case BUILT_IN_SUB_OVERFLOW_P:
3246 case BUILT_IN_MUL_OVERFLOW_P:
3247 /* The last argument of these type-generic builtins
3248 should not be promoted. */
3249 type_generic_overflow_p = true;
3250 break;
3251
3252 default:
3253 break;
3254 }
3255 }
3256
3257 /* Scan the given expressions and types, producing individual
3258 converted arguments. */
3259
3260 for (typetail = typelist, parmnum = 0;
3261 values && values->iterate (parmnum, &val);
3262 ++parmnum)
3263 {
3264 tree type = typetail ? TREE_VALUE (typetail) : 0;
3265 tree valtype = TREE_TYPE (val);
3266 tree rname = function;
3267 int argnum = parmnum + 1;
3268 const char *invalid_func_diag;
3269 bool excess_precision = false;
3270 bool npc;
3271 tree parmval;
3272 /* Some __atomic_* builtins have additional hidden argument at
3273 position 0. */
3274 location_t ploc
3275 = !arg_loc.is_empty () && values->length () == arg_loc.length ()
3276 ? expansion_point_location_if_in_system_header (arg_loc[parmnum])
3277 : input_location;
3278
3279 if (type == void_type_node)
3280 {
3281 if (selector)
3282 error_at (loc, "too many arguments to method %qE", selector);
3283 else
3284 error_at (loc, "too many arguments to function %qE", function);
3285 inform_declaration (fundecl);
3286 return error_args ? -1 : (int) parmnum;
3287 }
3288
3289 if (selector && argnum > 2)
3290 {
3291 rname = selector;
3292 argnum -= 2;
3293 }
3294
3295 npc = null_pointer_constant_p (val);
3296
3297 /* If there is excess precision and a prototype, convert once to
3298 the required type rather than converting via the semantic
3299 type. Likewise without a prototype a float value represented
3300 as long double should be converted once to double. But for
3301 type-generic classification functions excess precision must
3302 be removed here. */
3303 if (TREE_CODE (val) == EXCESS_PRECISION_EXPR
3304 && (type || !type_generic || !type_generic_remove_excess_precision))
3305 {
3306 val = TREE_OPERAND (val, 0);
3307 excess_precision = true;
3308 }
3309 val = c_fully_fold (val, false, NULL);
3310 STRIP_TYPE_NOPS (val);
3311
3312 val = require_complete_type (ploc, val);
3313
3314 /* Some floating-point arguments must be promoted to double when
3315 no type is specified by a prototype. This applies to
3316 arguments of type float, and to architecture-specific types
3317 (ARM __fp16), but not to _FloatN or _FloatNx types. */
3318 bool promote_float_arg = false;
3319 if (type == NULL_TREE
3320 && TREE_CODE (valtype) == REAL_TYPE
3321 && (TYPE_PRECISION (valtype)
3322 <= TYPE_PRECISION (double_type_node))
3323 && TYPE_MAIN_VARIANT (valtype) != double_type_node
3324 && TYPE_MAIN_VARIANT (valtype) != long_double_type_node
3325 && !DECIMAL_FLOAT_MODE_P (TYPE_MODE (valtype)))
3326 {
3327 /* Promote this argument, unless it has a _FloatN or
3328 _FloatNx type. */
3329 promote_float_arg = true;
3330 for (int i = 0; i < NUM_FLOATN_NX_TYPES; i++)
3331 if (TYPE_MAIN_VARIANT (valtype) == FLOATN_NX_TYPE_NODE (i))
3332 {
3333 promote_float_arg = false;
3334 break;
3335 }
3336 }
3337
3338 if (type != NULL_TREE)
3339 {
3340 /* Formal parm type is specified by a function prototype. */
3341
3342 if (type == error_mark_node || !COMPLETE_TYPE_P (type))
3343 {
3344 error_at (ploc, "type of formal parameter %d is incomplete",
3345 parmnum + 1);
3346 parmval = val;
3347 }
3348 else
3349 {
3350 tree origtype;
3351
3352 /* Optionally warn about conversions that
3353 differ from the default conversions. */
3354 if (warn_traditional_conversion || warn_traditional)
3355 {
3356 unsigned int formal_prec = TYPE_PRECISION (type);
3357
3358 if (INTEGRAL_TYPE_P (type)
3359 && TREE_CODE (valtype) == REAL_TYPE)
3360 warning_at (ploc, OPT_Wtraditional_conversion,
3361 "passing argument %d of %qE as integer rather "
3362 "than floating due to prototype",
3363 argnum, rname);
3364 if (INTEGRAL_TYPE_P (type)
3365 && TREE_CODE (valtype) == COMPLEX_TYPE)
3366 warning_at (ploc, OPT_Wtraditional_conversion,
3367 "passing argument %d of %qE as integer rather "
3368 "than complex due to prototype",
3369 argnum, rname);
3370 else if (TREE_CODE (type) == COMPLEX_TYPE
3371 && TREE_CODE (valtype) == REAL_TYPE)
3372 warning_at (ploc, OPT_Wtraditional_conversion,
3373 "passing argument %d of %qE as complex rather "
3374 "than floating due to prototype",
3375 argnum, rname);
3376 else if (TREE_CODE (type) == REAL_TYPE
3377 && INTEGRAL_TYPE_P (valtype))
3378 warning_at (ploc, OPT_Wtraditional_conversion,
3379 "passing argument %d of %qE as floating rather "
3380 "than integer due to prototype",
3381 argnum, rname);
3382 else if (TREE_CODE (type) == COMPLEX_TYPE
3383 && INTEGRAL_TYPE_P (valtype))
3384 warning_at (ploc, OPT_Wtraditional_conversion,
3385 "passing argument %d of %qE as complex rather "
3386 "than integer due to prototype",
3387 argnum, rname);
3388 else if (TREE_CODE (type) == REAL_TYPE
3389 && TREE_CODE (valtype) == COMPLEX_TYPE)
3390 warning_at (ploc, OPT_Wtraditional_conversion,
3391 "passing argument %d of %qE as floating rather "
3392 "than complex due to prototype",
3393 argnum, rname);
3394 /* ??? At some point, messages should be written about
3395 conversions between complex types, but that's too messy
3396 to do now. */
3397 else if (TREE_CODE (type) == REAL_TYPE
3398 && TREE_CODE (valtype) == REAL_TYPE)
3399 {
3400 /* Warn if any argument is passed as `float',
3401 since without a prototype it would be `double'. */
3402 if (formal_prec == TYPE_PRECISION (float_type_node)
3403 && type != dfloat32_type_node)
3404 warning_at (ploc, 0,
3405 "passing argument %d of %qE as %<float%> "
3406 "rather than %<double%> due to prototype",
3407 argnum, rname);
3408
3409 /* Warn if mismatch between argument and prototype
3410 for decimal float types. Warn of conversions with
3411 binary float types and of precision narrowing due to
3412 prototype. */
3413 else if (type != valtype
3414 && (type == dfloat32_type_node
3415 || type == dfloat64_type_node
3416 || type == dfloat128_type_node
3417 || valtype == dfloat32_type_node
3418 || valtype == dfloat64_type_node
3419 || valtype == dfloat128_type_node)
3420 && (formal_prec
3421 <= TYPE_PRECISION (valtype)
3422 || (type == dfloat128_type_node
3423 && (valtype
3424 != dfloat64_type_node
3425 && (valtype
3426 != dfloat32_type_node)))
3427 || (type == dfloat64_type_node
3428 && (valtype
3429 != dfloat32_type_node))))
3430 warning_at (ploc, 0,
3431 "passing argument %d of %qE as %qT "
3432 "rather than %qT due to prototype",
3433 argnum, rname, type, valtype);
3434
3435 }
3436 /* Detect integer changing in width or signedness.
3437 These warnings are only activated with
3438 -Wtraditional-conversion, not with -Wtraditional. */
3439 else if (warn_traditional_conversion
3440 && INTEGRAL_TYPE_P (type)
3441 && INTEGRAL_TYPE_P (valtype))
3442 {
3443 tree would_have_been = default_conversion (val);
3444 tree type1 = TREE_TYPE (would_have_been);
3445
3446 if (val == error_mark_node)
3447 /* VAL could have been of incomplete type. */;
3448 else if (TREE_CODE (type) == ENUMERAL_TYPE
3449 && (TYPE_MAIN_VARIANT (type)
3450 == TYPE_MAIN_VARIANT (valtype)))
3451 /* No warning if function asks for enum
3452 and the actual arg is that enum type. */
3453 ;
3454 else if (formal_prec != TYPE_PRECISION (type1))
3455 warning_at (ploc, OPT_Wtraditional_conversion,
3456 "passing argument %d of %qE "
3457 "with different width due to prototype",
3458 argnum, rname);
3459 else if (TYPE_UNSIGNED (type) == TYPE_UNSIGNED (type1))
3460 ;
3461 /* Don't complain if the formal parameter type
3462 is an enum, because we can't tell now whether
3463 the value was an enum--even the same enum. */
3464 else if (TREE_CODE (type) == ENUMERAL_TYPE)
3465 ;
3466 else if (TREE_CODE (val) == INTEGER_CST
3467 && int_fits_type_p (val, type))
3468 /* Change in signedness doesn't matter
3469 if a constant value is unaffected. */
3470 ;
3471 /* If the value is extended from a narrower
3472 unsigned type, it doesn't matter whether we
3473 pass it as signed or unsigned; the value
3474 certainly is the same either way. */
3475 else if (TYPE_PRECISION (valtype) < TYPE_PRECISION (type)
3476 && TYPE_UNSIGNED (valtype))
3477 ;
3478 else if (TYPE_UNSIGNED (type))
3479 warning_at (ploc, OPT_Wtraditional_conversion,
3480 "passing argument %d of %qE "
3481 "as unsigned due to prototype",
3482 argnum, rname);
3483 else
3484 warning_at (ploc, OPT_Wtraditional_conversion,
3485 "passing argument %d of %qE "
3486 "as signed due to prototype",
3487 argnum, rname);
3488 }
3489 }
3490
3491 /* Possibly restore an EXCESS_PRECISION_EXPR for the
3492 sake of better warnings from convert_and_check. */
3493 if (excess_precision)
3494 val = build1 (EXCESS_PRECISION_EXPR, valtype, val);
3495 origtype = (!origtypes) ? NULL_TREE : (*origtypes)[parmnum];
3496 parmval = convert_for_assignment (loc, ploc, type,
3497 val, origtype, ic_argpass,
3498 npc, fundecl, function,
3499 parmnum + 1);
3500
3501 if (targetm.calls.promote_prototypes (fundecl ? TREE_TYPE (fundecl) : 0)
3502 && INTEGRAL_TYPE_P (type)
3503 && (TYPE_PRECISION (type) < TYPE_PRECISION (integer_type_node)))
3504 parmval = default_conversion (parmval);
3505 }
3506 }
3507 else if (promote_float_arg)
3508 {
3509 if (type_generic)
3510 parmval = val;
3511 else
3512 {
3513 /* Convert `float' to `double'. */
3514 if (warn_double_promotion && !c_inhibit_evaluation_warnings)
3515 warning_at (ploc, OPT_Wdouble_promotion,
3516 "implicit conversion from %qT to %qT when passing "
3517 "argument to function",
3518 valtype, double_type_node);
3519 parmval = convert (double_type_node, val);
3520 }
3521 }
3522 else if ((excess_precision && !type_generic)
3523 || (type_generic_overflow_p && parmnum == 2))
3524 /* A "double" argument with excess precision being passed
3525 without a prototype or in variable arguments.
3526 The last argument of __builtin_*_overflow_p should not be
3527 promoted. */
3528 parmval = convert (valtype, val);
3529 else if ((invalid_func_diag =
3530 targetm.calls.invalid_arg_for_unprototyped_fn (typelist, fundecl, val)))
3531 {
3532 error (invalid_func_diag);
3533 return -1;
3534 }
3535 else if (TREE_CODE (val) == ADDR_EXPR && reject_gcc_builtin (val))
3536 {
3537 return -1;
3538 }
3539 else
3540 /* Convert `short' and `char' to full-size `int'. */
3541 parmval = default_conversion (val);
3542
3543 (*values)[parmnum] = parmval;
3544 if (parmval == error_mark_node)
3545 error_args = true;
3546
3547 if (typetail)
3548 typetail = TREE_CHAIN (typetail);
3549 }
3550
3551 gcc_assert (parmnum == vec_safe_length (values));
3552
3553 if (typetail != NULL_TREE && TREE_VALUE (typetail) != void_type_node)
3554 {
3555 error_at (loc, "too few arguments to function %qE", function);
3556 inform_declaration (fundecl);
3557 return -1;
3558 }
3559
3560 return error_args ? -1 : (int) parmnum;
3561 }
3562 \f
3563 /* This is the entry point used by the parser to build unary operators
3564 in the input. CODE, a tree_code, specifies the unary operator, and
3565 ARG is the operand. For unary plus, the C parser currently uses
3566 CONVERT_EXPR for code.
3567
3568 LOC is the location to use for the tree generated.
3569 */
3570
3571 struct c_expr
3572 parser_build_unary_op (location_t loc, enum tree_code code, struct c_expr arg)
3573 {
3574 struct c_expr result;
3575
3576 result.original_code = code;
3577 result.original_type = NULL;
3578
3579 if (reject_gcc_builtin (arg.value))
3580 {
3581 result.value = error_mark_node;
3582 }
3583 else
3584 {
3585 result.value = build_unary_op (loc, code, arg.value, false);
3586
3587 if (TREE_OVERFLOW_P (result.value) && !TREE_OVERFLOW_P (arg.value))
3588 overflow_warning (loc, result.value, arg.value);
3589 }
3590
3591 /* We are typically called when parsing a prefix token at LOC acting on
3592 ARG. Reflect this by updating the source range of the result to
3593 start at LOC and end at the end of ARG. */
3594 set_c_expr_source_range (&result,
3595 loc, arg.get_finish ());
3596
3597 return result;
3598 }
3599
3600 /* Returns true if TYPE is a character type, *not* including wchar_t. */
3601
3602 static bool
3603 char_type_p (tree type)
3604 {
3605 return (type == char_type_node
3606 || type == unsigned_char_type_node
3607 || type == signed_char_type_node
3608 || type == char16_type_node
3609 || type == char32_type_node);
3610 }
3611
3612 /* This is the entry point used by the parser to build binary operators
3613 in the input. CODE, a tree_code, specifies the binary operator, and
3614 ARG1 and ARG2 are the operands. In addition to constructing the
3615 expression, we check for operands that were written with other binary
3616 operators in a way that is likely to confuse the user.
3617
3618 LOCATION is the location of the binary operator. */
3619
3620 struct c_expr
3621 parser_build_binary_op (location_t location, enum tree_code code,
3622 struct c_expr arg1, struct c_expr arg2)
3623 {
3624 struct c_expr result;
3625
3626 enum tree_code code1 = arg1.original_code;
3627 enum tree_code code2 = arg2.original_code;
3628 tree type1 = (arg1.original_type
3629 ? arg1.original_type
3630 : TREE_TYPE (arg1.value));
3631 tree type2 = (arg2.original_type
3632 ? arg2.original_type
3633 : TREE_TYPE (arg2.value));
3634
3635 result.value = build_binary_op (location, code,
3636 arg1.value, arg2.value, true);
3637 result.original_code = code;
3638 result.original_type = NULL;
3639
3640 if (TREE_CODE (result.value) == ERROR_MARK)
3641 {
3642 set_c_expr_source_range (&result,
3643 arg1.get_start (),
3644 arg2.get_finish ());
3645 return result;
3646 }
3647
3648 if (location != UNKNOWN_LOCATION)
3649 protected_set_expr_location (result.value, location);
3650
3651 set_c_expr_source_range (&result,
3652 arg1.get_start (),
3653 arg2.get_finish ());
3654
3655 /* Check for cases such as x+y<<z which users are likely
3656 to misinterpret. */
3657 if (warn_parentheses)
3658 warn_about_parentheses (location, code, code1, arg1.value, code2,
3659 arg2.value);
3660
3661 if (warn_logical_op)
3662 warn_logical_operator (location, code, TREE_TYPE (result.value),
3663 code1, arg1.value, code2, arg2.value);
3664
3665 if (warn_tautological_compare)
3666 {
3667 tree lhs = arg1.value;
3668 tree rhs = arg2.value;
3669 if (TREE_CODE (lhs) == C_MAYBE_CONST_EXPR)
3670 {
3671 if (C_MAYBE_CONST_EXPR_PRE (lhs) != NULL_TREE
3672 && TREE_SIDE_EFFECTS (C_MAYBE_CONST_EXPR_PRE (lhs)))
3673 lhs = NULL_TREE;
3674 else
3675 lhs = C_MAYBE_CONST_EXPR_EXPR (lhs);
3676 }
3677 if (TREE_CODE (rhs) == C_MAYBE_CONST_EXPR)
3678 {
3679 if (C_MAYBE_CONST_EXPR_PRE (rhs) != NULL_TREE
3680 && TREE_SIDE_EFFECTS (C_MAYBE_CONST_EXPR_PRE (rhs)))
3681 rhs = NULL_TREE;
3682 else
3683 rhs = C_MAYBE_CONST_EXPR_EXPR (rhs);
3684 }
3685 if (lhs != NULL_TREE && rhs != NULL_TREE)
3686 warn_tautological_cmp (location, code, lhs, rhs);
3687 }
3688
3689 if (warn_logical_not_paren
3690 && TREE_CODE_CLASS (code) == tcc_comparison
3691 && code1 == TRUTH_NOT_EXPR
3692 && code2 != TRUTH_NOT_EXPR
3693 /* Avoid warning for !!x == y. */
3694 && (TREE_CODE (arg1.value) != NE_EXPR
3695 || !integer_zerop (TREE_OPERAND (arg1.value, 1))))
3696 {
3697 /* Avoid warning for !b == y where b has _Bool type. */
3698 tree t = integer_zero_node;
3699 if (TREE_CODE (arg1.value) == EQ_EXPR
3700 && integer_zerop (TREE_OPERAND (arg1.value, 1))
3701 && TREE_TYPE (TREE_OPERAND (arg1.value, 0)) == integer_type_node)
3702 {
3703 t = TREE_OPERAND (arg1.value, 0);
3704 do
3705 {
3706 if (TREE_TYPE (t) != integer_type_node)
3707 break;
3708 if (TREE_CODE (t) == C_MAYBE_CONST_EXPR)
3709 t = C_MAYBE_CONST_EXPR_EXPR (t);
3710 else if (CONVERT_EXPR_P (t))
3711 t = TREE_OPERAND (t, 0);
3712 else
3713 break;
3714 }
3715 while (1);
3716 }
3717 if (TREE_CODE (TREE_TYPE (t)) != BOOLEAN_TYPE)
3718 warn_logical_not_parentheses (location, code, arg1.value, arg2.value);
3719 }
3720
3721 /* Warn about comparisons against string literals, with the exception
3722 of testing for equality or inequality of a string literal with NULL. */
3723 if (code == EQ_EXPR || code == NE_EXPR)
3724 {
3725 if ((code1 == STRING_CST
3726 && !integer_zerop (tree_strip_nop_conversions (arg2.value)))
3727 || (code2 == STRING_CST
3728 && !integer_zerop (tree_strip_nop_conversions (arg1.value))))
3729 warning_at (location, OPT_Waddress,
3730 "comparison with string literal results in unspecified behavior");
3731 /* Warn for ptr == '\0', it's likely that it should've been ptr[0]. */
3732 if (POINTER_TYPE_P (type1)
3733 && null_pointer_constant_p (arg2.value)
3734 && char_type_p (type2)
3735 && warning_at (location, OPT_Wpointer_compare,
3736 "comparison between pointer and zero character "
3737 "constant"))
3738 inform (arg1.get_start (), "did you mean to dereference the pointer?");
3739 else if (POINTER_TYPE_P (type2)
3740 && null_pointer_constant_p (arg1.value)
3741 && char_type_p (type1)
3742 && warning_at (location, OPT_Wpointer_compare,
3743 "comparison between pointer and zero character "
3744 "constant"))
3745 inform (arg2.get_start (), "did you mean to dereference the pointer?");
3746 }
3747 else if (TREE_CODE_CLASS (code) == tcc_comparison
3748 && (code1 == STRING_CST || code2 == STRING_CST))
3749 warning_at (location, OPT_Waddress,
3750 "comparison with string literal results in unspecified behavior");
3751
3752 if (TREE_OVERFLOW_P (result.value)
3753 && !TREE_OVERFLOW_P (arg1.value)
3754 && !TREE_OVERFLOW_P (arg2.value))
3755 overflow_warning (location, result.value);
3756
3757 /* Warn about comparisons of different enum types. */
3758 if (warn_enum_compare
3759 && TREE_CODE_CLASS (code) == tcc_comparison
3760 && TREE_CODE (type1) == ENUMERAL_TYPE
3761 && TREE_CODE (type2) == ENUMERAL_TYPE
3762 && TYPE_MAIN_VARIANT (type1) != TYPE_MAIN_VARIANT (type2))
3763 warning_at (location, OPT_Wenum_compare,
3764 "comparison between %qT and %qT",
3765 type1, type2);
3766
3767 return result;
3768 }
3769 \f
3770 /* Return a tree for the difference of pointers OP0 and OP1.
3771 The resulting tree has type ptrdiff_t. If POINTER_SUBTRACT sanitization is
3772 enabled, assign to INSTRUMENT_EXPR call to libsanitizer. */
3773
3774 static tree
3775 pointer_diff (location_t loc, tree op0, tree op1, tree *instrument_expr)
3776 {
3777 tree restype = ptrdiff_type_node;
3778 tree result, inttype;
3779
3780 addr_space_t as0 = TYPE_ADDR_SPACE (TREE_TYPE (TREE_TYPE (op0)));
3781 addr_space_t as1 = TYPE_ADDR_SPACE (TREE_TYPE (TREE_TYPE (op1)));
3782 tree target_type = TREE_TYPE (TREE_TYPE (op0));
3783 tree orig_op1 = op1;
3784
3785 /* If the operands point into different address spaces, we need to
3786 explicitly convert them to pointers into the common address space
3787 before we can subtract the numerical address values. */
3788 if (as0 != as1)
3789 {
3790 addr_space_t as_common;
3791 tree common_type;
3792
3793 /* Determine the common superset address space. This is guaranteed
3794 to exist because the caller verified that comp_target_types
3795 returned non-zero. */
3796 if (!addr_space_superset (as0, as1, &as_common))
3797 gcc_unreachable ();
3798
3799 common_type = common_pointer_type (TREE_TYPE (op0), TREE_TYPE (op1));
3800 op0 = convert (common_type, op0);
3801 op1 = convert (common_type, op1);
3802 }
3803
3804 /* Determine integer type result of the subtraction. This will usually
3805 be the same as the result type (ptrdiff_t), but may need to be a wider
3806 type if pointers for the address space are wider than ptrdiff_t. */
3807 if (TYPE_PRECISION (restype) < TYPE_PRECISION (TREE_TYPE (op0)))
3808 inttype = c_common_type_for_size (TYPE_PRECISION (TREE_TYPE (op0)), 0);
3809 else
3810 inttype = restype;
3811
3812 if (TREE_CODE (target_type) == VOID_TYPE)
3813 pedwarn (loc, OPT_Wpointer_arith,
3814 "pointer of type %<void *%> used in subtraction");
3815 if (TREE_CODE (target_type) == FUNCTION_TYPE)
3816 pedwarn (loc, OPT_Wpointer_arith,
3817 "pointer to a function used in subtraction");
3818
3819 if (sanitize_flags_p (SANITIZE_POINTER_SUBTRACT))
3820 {
3821 gcc_assert (current_function_decl != NULL_TREE);
3822
3823 op0 = save_expr (op0);
3824 op1 = save_expr (op1);
3825
3826 tree tt = builtin_decl_explicit (BUILT_IN_ASAN_POINTER_SUBTRACT);
3827 *instrument_expr = build_call_expr_loc (loc, tt, 2, op0, op1);
3828 }
3829
3830 /* First do the subtraction, then build the divide operator
3831 and only convert at the very end.
3832 Do not do default conversions in case restype is a short type. */
3833
3834 /* POINTER_DIFF_EXPR requires a signed integer type of the same size as
3835 pointers. If some platform cannot provide that, or has a larger
3836 ptrdiff_type to support differences larger than half the address
3837 space, cast the pointers to some larger integer type and do the
3838 computations in that type. */
3839 if (TYPE_PRECISION (inttype) > TYPE_PRECISION (TREE_TYPE (op0)))
3840 op0 = build_binary_op (loc, MINUS_EXPR, convert (inttype, op0),
3841 convert (inttype, op1), false);
3842 else
3843 {
3844 /* Cast away qualifiers. */
3845 op0 = convert (c_common_type (TREE_TYPE (op0), TREE_TYPE (op0)), op0);
3846 op1 = convert (c_common_type (TREE_TYPE (op1), TREE_TYPE (op1)), op1);
3847 op0 = build2_loc (loc, POINTER_DIFF_EXPR, inttype, op0, op1);
3848 }
3849
3850 /* This generates an error if op1 is pointer to incomplete type. */
3851 if (!COMPLETE_OR_VOID_TYPE_P (TREE_TYPE (TREE_TYPE (orig_op1))))
3852 error_at (loc, "arithmetic on pointer to an incomplete type");
3853
3854 op1 = c_size_in_bytes (target_type);
3855
3856 if (pointer_to_zero_sized_aggr_p (TREE_TYPE (orig_op1)))
3857 error_at (loc, "arithmetic on pointer to an empty aggregate");
3858
3859 /* Divide by the size, in easiest possible way. */
3860 result = fold_build2_loc (loc, EXACT_DIV_EXPR, inttype,
3861 op0, convert (inttype, op1));
3862
3863 /* Convert to final result type if necessary. */
3864 return convert (restype, result);
3865 }
3866 \f
3867 /* Expand atomic compound assignments into an appropriate sequence as
3868 specified by the C11 standard section 6.5.16.2.
3869
3870 _Atomic T1 E1
3871 T2 E2
3872 E1 op= E2
3873
3874 This sequence is used for all types for which these operations are
3875 supported.
3876
3877 In addition, built-in versions of the 'fe' prefixed routines may
3878 need to be invoked for floating point (real, complex or vector) when
3879 floating-point exceptions are supported. See 6.5.16.2 footnote 113.
3880
3881 T1 newval;
3882 T1 old;
3883 T1 *addr
3884 T2 val
3885 fenv_t fenv
3886
3887 addr = &E1;
3888 val = (E2);
3889 __atomic_load (addr, &old, SEQ_CST);
3890 feholdexcept (&fenv);
3891 loop:
3892 newval = old op val;
3893 if (__atomic_compare_exchange_strong (addr, &old, &newval, SEQ_CST,
3894 SEQ_CST))
3895 goto done;
3896 feclearexcept (FE_ALL_EXCEPT);
3897 goto loop:
3898 done:
3899 feupdateenv (&fenv);
3900
3901 The compiler will issue the __atomic_fetch_* built-in when possible,
3902 otherwise it will generate the generic form of the atomic operations.
3903 This requires temp(s) and has their address taken. The atomic processing
3904 is smart enough to figure out when the size of an object can utilize
3905 a lock-free version, and convert the built-in call to the appropriate
3906 lock-free routine. The optimizers will then dispose of any temps that
3907 are no longer required, and lock-free implementations are utilized as
3908 long as there is target support for the required size.
3909
3910 If the operator is NOP_EXPR, then this is a simple assignment, and
3911 an __atomic_store is issued to perform the assignment rather than
3912 the above loop. */
3913
3914 /* Build an atomic assignment at LOC, expanding into the proper
3915 sequence to store LHS MODIFYCODE= RHS. Return a value representing
3916 the result of the operation, unless RETURN_OLD_P, in which case
3917 return the old value of LHS (this is only for postincrement and
3918 postdecrement). */
3919
3920 static tree
3921 build_atomic_assign (location_t loc, tree lhs, enum tree_code modifycode,
3922 tree rhs, bool return_old_p)
3923 {
3924 tree fndecl, func_call;
3925 vec<tree, va_gc> *params;
3926 tree val, nonatomic_lhs_type, nonatomic_rhs_type, newval, newval_addr;
3927 tree old, old_addr;
3928 tree compound_stmt;
3929 tree stmt, goto_stmt;
3930 tree loop_label, loop_decl, done_label, done_decl;
3931
3932 tree lhs_type = TREE_TYPE (lhs);
3933 tree lhs_addr = build_unary_op (loc, ADDR_EXPR, lhs, false);
3934 tree seq_cst = build_int_cst (integer_type_node, MEMMODEL_SEQ_CST);
3935 tree rhs_semantic_type = TREE_TYPE (rhs);
3936 tree nonatomic_rhs_semantic_type;
3937 tree rhs_type;
3938
3939 gcc_assert (TYPE_ATOMIC (lhs_type));
3940
3941 if (return_old_p)
3942 gcc_assert (modifycode == PLUS_EXPR || modifycode == MINUS_EXPR);
3943
3944 /* Allocate enough vector items for a compare_exchange. */
3945 vec_alloc (params, 6);
3946
3947 /* Create a compound statement to hold the sequence of statements
3948 with a loop. */
3949 compound_stmt = c_begin_compound_stmt (false);
3950
3951 /* Remove any excess precision (which is only present here in the
3952 case of compound assignments). */
3953 if (TREE_CODE (rhs) == EXCESS_PRECISION_EXPR)
3954 {
3955 gcc_assert (modifycode != NOP_EXPR);
3956 rhs = TREE_OPERAND (rhs, 0);
3957 }
3958 rhs_type = TREE_TYPE (rhs);
3959
3960 /* Fold the RHS if it hasn't already been folded. */
3961 if (modifycode != NOP_EXPR)
3962 rhs = c_fully_fold (rhs, false, NULL);
3963
3964 /* Remove the qualifiers for the rest of the expressions and create
3965 the VAL temp variable to hold the RHS. */
3966 nonatomic_lhs_type = build_qualified_type (lhs_type, TYPE_UNQUALIFIED);
3967 nonatomic_rhs_type = build_qualified_type (rhs_type, TYPE_UNQUALIFIED);
3968 nonatomic_rhs_semantic_type = build_qualified_type (rhs_semantic_type,
3969 TYPE_UNQUALIFIED);
3970 val = create_tmp_var_raw (nonatomic_rhs_type);
3971 TREE_ADDRESSABLE (val) = 1;
3972 TREE_NO_WARNING (val) = 1;
3973 rhs = build4 (TARGET_EXPR, nonatomic_rhs_type, val, rhs, NULL_TREE,
3974 NULL_TREE);
3975 SET_EXPR_LOCATION (rhs, loc);
3976 add_stmt (rhs);
3977
3978 /* NOP_EXPR indicates it's a straight store of the RHS. Simply issue
3979 an atomic_store. */
3980 if (modifycode == NOP_EXPR)
3981 {
3982 /* Build __atomic_store (&lhs, &val, SEQ_CST) */
3983 rhs = build_unary_op (loc, ADDR_EXPR, val, false);
3984 fndecl = builtin_decl_explicit (BUILT_IN_ATOMIC_STORE);
3985 params->quick_push (lhs_addr);
3986 params->quick_push (rhs);
3987 params->quick_push (seq_cst);
3988 func_call = c_build_function_call_vec (loc, vNULL, fndecl, params, NULL);
3989 add_stmt (func_call);
3990
3991 /* Finish the compound statement. */
3992 compound_stmt = c_end_compound_stmt (loc, compound_stmt, false);
3993
3994 /* VAL is the value which was stored, return a COMPOUND_STMT of
3995 the statement and that value. */
3996 return build2 (COMPOUND_EXPR, nonatomic_lhs_type, compound_stmt, val);
3997 }
3998
3999 /* Attempt to implement the atomic operation as an __atomic_fetch_* or
4000 __atomic_*_fetch built-in rather than a CAS loop. atomic_bool type
4001 isn't applicable for such builtins. ??? Do we want to handle enums? */
4002 if ((TREE_CODE (lhs_type) == INTEGER_TYPE || POINTER_TYPE_P (lhs_type))
4003 && TREE_CODE (rhs_type) == INTEGER_TYPE)
4004 {
4005 built_in_function fncode;
4006 switch (modifycode)
4007 {
4008 case PLUS_EXPR:
4009 case POINTER_PLUS_EXPR:
4010 fncode = (return_old_p
4011 ? BUILT_IN_ATOMIC_FETCH_ADD_N
4012 : BUILT_IN_ATOMIC_ADD_FETCH_N);
4013 break;
4014 case MINUS_EXPR:
4015 fncode = (return_old_p
4016 ? BUILT_IN_ATOMIC_FETCH_SUB_N
4017 : BUILT_IN_ATOMIC_SUB_FETCH_N);
4018 break;
4019 case BIT_AND_EXPR:
4020 fncode = (return_old_p
4021 ? BUILT_IN_ATOMIC_FETCH_AND_N
4022 : BUILT_IN_ATOMIC_AND_FETCH_N);
4023 break;
4024 case BIT_IOR_EXPR:
4025 fncode = (return_old_p
4026 ? BUILT_IN_ATOMIC_FETCH_OR_N
4027 : BUILT_IN_ATOMIC_OR_FETCH_N);
4028 break;
4029 case BIT_XOR_EXPR:
4030 fncode = (return_old_p
4031 ? BUILT_IN_ATOMIC_FETCH_XOR_N
4032 : BUILT_IN_ATOMIC_XOR_FETCH_N);
4033 break;
4034 default:
4035 goto cas_loop;
4036 }
4037
4038 /* We can only use "_1" through "_16" variants of the atomic fetch
4039 built-ins. */
4040 unsigned HOST_WIDE_INT size = tree_to_uhwi (TYPE_SIZE_UNIT (lhs_type));
4041 if (size != 1 && size != 2 && size != 4 && size != 8 && size != 16)
4042 goto cas_loop;
4043
4044 /* If this is a pointer type, we need to multiply by the size of
4045 the pointer target type. */
4046 if (POINTER_TYPE_P (lhs_type))
4047 {
4048 if (!COMPLETE_TYPE_P (TREE_TYPE (lhs_type))
4049 /* ??? This would introduce -Wdiscarded-qualifiers
4050 warning: __atomic_fetch_* expect volatile void *
4051 type as the first argument. (Assignments between
4052 atomic and non-atomic objects are OK.) */
4053 || TYPE_RESTRICT (lhs_type))
4054 goto cas_loop;
4055 tree sz = TYPE_SIZE_UNIT (TREE_TYPE (lhs_type));
4056 rhs = fold_build2_loc (loc, MULT_EXPR, ptrdiff_type_node,
4057 convert (ptrdiff_type_node, rhs),
4058 convert (ptrdiff_type_node, sz));
4059 }
4060
4061 /* Build __atomic_fetch_* (&lhs, &val, SEQ_CST), or
4062 __atomic_*_fetch (&lhs, &val, SEQ_CST). */
4063 fndecl = builtin_decl_explicit (fncode);
4064 params->quick_push (lhs_addr);
4065 params->quick_push (rhs);
4066 params->quick_push (seq_cst);
4067 func_call = c_build_function_call_vec (loc, vNULL, fndecl, params, NULL);
4068
4069 newval = create_tmp_var_raw (nonatomic_lhs_type);
4070 TREE_ADDRESSABLE (newval) = 1;
4071 TREE_NO_WARNING (newval) = 1;
4072 rhs = build4 (TARGET_EXPR, nonatomic_lhs_type, newval, func_call,
4073 NULL_TREE, NULL_TREE);
4074 SET_EXPR_LOCATION (rhs, loc);
4075 add_stmt (rhs);
4076
4077 /* Finish the compound statement. */
4078 compound_stmt = c_end_compound_stmt (loc, compound_stmt, false);
4079
4080 /* NEWVAL is the value which was stored, return a COMPOUND_STMT of
4081 the statement and that value. */
4082 return build2 (COMPOUND_EXPR, nonatomic_lhs_type, compound_stmt, newval);
4083 }
4084
4085 cas_loop:
4086 /* Create the variables and labels required for the op= form. */
4087 old = create_tmp_var_raw (nonatomic_lhs_type);
4088 old_addr = build_unary_op (loc, ADDR_EXPR, old, false);
4089 TREE_ADDRESSABLE (old) = 1;
4090 TREE_NO_WARNING (old) = 1;
4091
4092 newval = create_tmp_var_raw (nonatomic_lhs_type);
4093 newval_addr = build_unary_op (loc, ADDR_EXPR, newval, false);
4094 TREE_ADDRESSABLE (newval) = 1;
4095 TREE_NO_WARNING (newval) = 1;
4096
4097 loop_decl = create_artificial_label (loc);
4098 loop_label = build1 (LABEL_EXPR, void_type_node, loop_decl);
4099
4100 done_decl = create_artificial_label (loc);
4101 done_label = build1 (LABEL_EXPR, void_type_node, done_decl);
4102
4103 /* __atomic_load (addr, &old, SEQ_CST). */
4104 fndecl = builtin_decl_explicit (BUILT_IN_ATOMIC_LOAD);
4105 params->quick_push (lhs_addr);
4106 params->quick_push (old_addr);
4107 params->quick_push (seq_cst);
4108 func_call = c_build_function_call_vec (loc, vNULL, fndecl, params, NULL);
4109 old = build4 (TARGET_EXPR, nonatomic_lhs_type, old, func_call, NULL_TREE,
4110 NULL_TREE);
4111 add_stmt (old);
4112 params->truncate (0);
4113
4114 /* Create the expressions for floating-point environment
4115 manipulation, if required. */
4116 bool need_fenv = (flag_trapping_math
4117 && (FLOAT_TYPE_P (lhs_type) || FLOAT_TYPE_P (rhs_type)));
4118 tree hold_call = NULL_TREE, clear_call = NULL_TREE, update_call = NULL_TREE;
4119 if (need_fenv)
4120 targetm.atomic_assign_expand_fenv (&hold_call, &clear_call, &update_call);
4121
4122 if (hold_call)
4123 add_stmt (hold_call);
4124
4125 /* loop: */
4126 add_stmt (loop_label);
4127
4128 /* newval = old + val; */
4129 if (rhs_type != rhs_semantic_type)
4130 val = build1 (EXCESS_PRECISION_EXPR, nonatomic_rhs_semantic_type, val);
4131 rhs = build_binary_op (loc, modifycode, old, val, true);
4132 if (TREE_CODE (rhs) == EXCESS_PRECISION_EXPR)
4133 {
4134 tree eptype = TREE_TYPE (rhs);
4135 rhs = c_fully_fold (TREE_OPERAND (rhs, 0), false, NULL);
4136 rhs = build1 (EXCESS_PRECISION_EXPR, eptype, rhs);
4137 }
4138 else
4139 rhs = c_fully_fold (rhs, false, NULL);
4140 rhs = convert_for_assignment (loc, UNKNOWN_LOCATION, nonatomic_lhs_type,
4141 rhs, NULL_TREE, ic_assign, false, NULL_TREE,
4142 NULL_TREE, 0);
4143 if (rhs != error_mark_node)
4144 {
4145 rhs = build4 (TARGET_EXPR, nonatomic_lhs_type, newval, rhs, NULL_TREE,
4146 NULL_TREE);
4147 SET_EXPR_LOCATION (rhs, loc);
4148 add_stmt (rhs);
4149 }
4150
4151 /* if (__atomic_compare_exchange (addr, &old, &new, false, SEQ_CST, SEQ_CST))
4152 goto done; */
4153 fndecl = builtin_decl_explicit (BUILT_IN_ATOMIC_COMPARE_EXCHANGE);
4154 params->quick_push (lhs_addr);
4155 params->quick_push (old_addr);
4156 params->quick_push (newval_addr);
4157 params->quick_push (integer_zero_node);
4158 params->quick_push (seq_cst);
4159 params->quick_push (seq_cst);
4160 func_call = c_build_function_call_vec (loc, vNULL, fndecl, params, NULL);
4161
4162 goto_stmt = build1 (GOTO_EXPR, void_type_node, done_decl);
4163 SET_EXPR_LOCATION (goto_stmt, loc);
4164
4165 stmt = build3 (COND_EXPR, void_type_node, func_call, goto_stmt, NULL_TREE);
4166 SET_EXPR_LOCATION (stmt, loc);
4167 add_stmt (stmt);
4168
4169 if (clear_call)
4170 add_stmt (clear_call);
4171
4172 /* goto loop; */
4173 goto_stmt = build1 (GOTO_EXPR, void_type_node, loop_decl);
4174 SET_EXPR_LOCATION (goto_stmt, loc);
4175 add_stmt (goto_stmt);
4176
4177 /* done: */
4178 add_stmt (done_label);
4179
4180 if (update_call)
4181 add_stmt (update_call);
4182
4183 /* Finish the compound statement. */
4184 compound_stmt = c_end_compound_stmt (loc, compound_stmt, false);
4185
4186 /* NEWVAL is the value that was successfully stored, return a
4187 COMPOUND_EXPR of the statement and the appropriate value. */
4188 return build2 (COMPOUND_EXPR, nonatomic_lhs_type, compound_stmt,
4189 return_old_p ? old : newval);
4190 }
4191
4192 /* Construct and perhaps optimize a tree representation
4193 for a unary operation. CODE, a tree_code, specifies the operation
4194 and XARG is the operand.
4195 For any CODE other than ADDR_EXPR, NOCONVERT suppresses the default
4196 promotions (such as from short to int).
4197 For ADDR_EXPR, the default promotions are not applied; NOCONVERT allows
4198 non-lvalues; this is only used to handle conversion of non-lvalue arrays
4199 to pointers in C99.
4200
4201 LOCATION is the location of the operator. */
4202
4203 tree
4204 build_unary_op (location_t location, enum tree_code code, tree xarg,
4205 bool noconvert)
4206 {
4207 /* No default_conversion here. It causes trouble for ADDR_EXPR. */
4208 tree arg = xarg;
4209 tree argtype = NULL_TREE;
4210 enum tree_code typecode;
4211 tree val;
4212 tree ret = error_mark_node;
4213 tree eptype = NULL_TREE;
4214 const char *invalid_op_diag;
4215 bool int_operands;
4216
4217 int_operands = EXPR_INT_CONST_OPERANDS (xarg);
4218 if (int_operands)
4219 arg = remove_c_maybe_const_expr (arg);
4220
4221 if (code != ADDR_EXPR)
4222 arg = require_complete_type (location, arg);
4223
4224 typecode = TREE_CODE (TREE_TYPE (arg));
4225 if (typecode == ERROR_MARK)
4226 return error_mark_node;
4227 if (typecode == ENUMERAL_TYPE || typecode == BOOLEAN_TYPE)
4228 typecode = INTEGER_TYPE;
4229
4230 if ((invalid_op_diag
4231 = targetm.invalid_unary_op (code, TREE_TYPE (xarg))))
4232 {
4233 error_at (location, invalid_op_diag);
4234 return error_mark_node;
4235 }
4236
4237 if (TREE_CODE (arg) == EXCESS_PRECISION_EXPR)
4238 {
4239 eptype = TREE_TYPE (arg);
4240 arg = TREE_OPERAND (arg, 0);
4241 }
4242
4243 switch (code)
4244 {
4245 case CONVERT_EXPR:
4246 /* This is used for unary plus, because a CONVERT_EXPR
4247 is enough to prevent anybody from looking inside for
4248 associativity, but won't generate any code. */
4249 if (!(typecode == INTEGER_TYPE || typecode == REAL_TYPE
4250 || typecode == FIXED_POINT_TYPE || typecode == COMPLEX_TYPE
4251 || typecode == VECTOR_TYPE))
4252 {
4253 error_at (location, "wrong type argument to unary plus");
4254 return error_mark_node;
4255 }
4256 else if (!noconvert)
4257 arg = default_conversion (arg);
4258 arg = non_lvalue_loc (location, arg);
4259 break;
4260
4261 case NEGATE_EXPR:
4262 if (!(typecode == INTEGER_TYPE || typecode == REAL_TYPE
4263 || typecode == FIXED_POINT_TYPE || typecode == COMPLEX_TYPE
4264 || typecode == VECTOR_TYPE))
4265 {
4266 error_at (location, "wrong type argument to unary minus");
4267 return error_mark_node;
4268 }
4269 else if (!noconvert)
4270 arg = default_conversion (arg);
4271 break;
4272
4273 case BIT_NOT_EXPR:
4274 /* ~ works on integer types and non float vectors. */
4275 if (typecode == INTEGER_TYPE
4276 || (typecode == VECTOR_TYPE
4277 && !VECTOR_FLOAT_TYPE_P (TREE_TYPE (arg))))
4278 {
4279 tree e = arg;
4280
4281 /* Warn if the expression has boolean value. */
4282 while (TREE_CODE (e) == COMPOUND_EXPR)
4283 e = TREE_OPERAND (e, 1);
4284
4285 if ((TREE_CODE (TREE_TYPE (arg)) == BOOLEAN_TYPE
4286 || truth_value_p (TREE_CODE (e)))
4287 && warning_at (location, OPT_Wbool_operation,
4288 "%<~%> on a boolean expression"))
4289 {
4290 gcc_rich_location richloc (location);
4291 richloc.add_fixit_insert_before (location, "!");
4292 inform (&richloc, "did you mean to use logical not?");
4293 }
4294 if (!noconvert)
4295 arg = default_conversion (arg);
4296 }
4297 else if (typecode == COMPLEX_TYPE)
4298 {
4299 code = CONJ_EXPR;
4300 pedwarn (location, OPT_Wpedantic,
4301 "ISO C does not support %<~%> for complex conjugation");
4302 if (!noconvert)
4303 arg = default_conversion (arg);
4304 }
4305 else
4306 {
4307 error_at (location, "wrong type argument to bit-complement");
4308 return error_mark_node;
4309 }
4310 break;
4311
4312 case ABS_EXPR:
4313 if (!(typecode == INTEGER_TYPE || typecode == REAL_TYPE))
4314 {
4315 error_at (location, "wrong type argument to abs");
4316 return error_mark_node;
4317 }
4318 else if (!noconvert)
4319 arg = default_conversion (arg);
4320 break;
4321
4322 case ABSU_EXPR:
4323 if (!(typecode == INTEGER_TYPE))
4324 {
4325 error_at (location, "wrong type argument to absu");
4326 return error_mark_node;
4327 }
4328 else if (!noconvert)
4329 arg = default_conversion (arg);
4330 break;
4331
4332 case CONJ_EXPR:
4333 /* Conjugating a real value is a no-op, but allow it anyway. */
4334 if (!(typecode == INTEGER_TYPE || typecode == REAL_TYPE
4335 || typecode == COMPLEX_TYPE))
4336 {
4337 error_at (location, "wrong type argument to conjugation");
4338 return error_mark_node;
4339 }
4340 else if (!noconvert)
4341 arg = default_conversion (arg);
4342 break;
4343
4344 case TRUTH_NOT_EXPR:
4345 if (typecode != INTEGER_TYPE && typecode != FIXED_POINT_TYPE
4346 && typecode != REAL_TYPE && typecode != POINTER_TYPE
4347 && typecode != COMPLEX_TYPE)
4348 {
4349 error_at (location,
4350 "wrong type argument to unary exclamation mark");
4351 return error_mark_node;
4352 }
4353 if (int_operands)
4354 {
4355 arg = c_objc_common_truthvalue_conversion (location, xarg);
4356 arg = remove_c_maybe_const_expr (arg);
4357 }
4358 else
4359 arg = c_objc_common_truthvalue_conversion (location, arg);
4360 ret = invert_truthvalue_loc (location, arg);
4361 /* If the TRUTH_NOT_EXPR has been folded, reset the location. */
4362 if (EXPR_P (ret) && EXPR_HAS_LOCATION (ret))
4363 location = EXPR_LOCATION (ret);
4364 goto return_build_unary_op;
4365
4366 case REALPART_EXPR:
4367 case IMAGPART_EXPR:
4368 ret = build_real_imag_expr (location, code, arg);
4369 if (ret == error_mark_node)
4370 return error_mark_node;
4371 if (eptype && TREE_CODE (eptype) == COMPLEX_TYPE)
4372 eptype = TREE_TYPE (eptype);
4373 goto return_build_unary_op;
4374
4375 case PREINCREMENT_EXPR:
4376 case POSTINCREMENT_EXPR:
4377 case PREDECREMENT_EXPR:
4378 case POSTDECREMENT_EXPR:
4379
4380 if (TREE_CODE (arg) == C_MAYBE_CONST_EXPR)
4381 {
4382 tree inner = build_unary_op (location, code,
4383 C_MAYBE_CONST_EXPR_EXPR (arg),
4384 noconvert);
4385 if (inner == error_mark_node)
4386 return error_mark_node;
4387 ret = build2 (C_MAYBE_CONST_EXPR, TREE_TYPE (inner),
4388 C_MAYBE_CONST_EXPR_PRE (arg), inner);
4389 gcc_assert (!C_MAYBE_CONST_EXPR_INT_OPERANDS (arg));
4390 C_MAYBE_CONST_EXPR_NON_CONST (ret) = 1;
4391 goto return_build_unary_op;
4392 }
4393
4394 /* Complain about anything that is not a true lvalue. In
4395 Objective-C, skip this check for property_refs. */
4396 if (!objc_is_property_ref (arg)
4397 && !lvalue_or_else (location,
4398 arg, ((code == PREINCREMENT_EXPR
4399 || code == POSTINCREMENT_EXPR)
4400 ? lv_increment
4401 : lv_decrement)))
4402 return error_mark_node;
4403
4404 if (warn_cxx_compat && TREE_CODE (TREE_TYPE (arg)) == ENUMERAL_TYPE)
4405 {
4406 if (code == PREINCREMENT_EXPR || code == POSTINCREMENT_EXPR)
4407 warning_at (location, OPT_Wc___compat,
4408 "increment of enumeration value is invalid in C++");
4409 else
4410 warning_at (location, OPT_Wc___compat,
4411 "decrement of enumeration value is invalid in C++");
4412 }
4413
4414 if (TREE_CODE (TREE_TYPE (arg)) == BOOLEAN_TYPE)
4415 {
4416 if (code == PREINCREMENT_EXPR || code == POSTINCREMENT_EXPR)
4417 warning_at (location, OPT_Wbool_operation,
4418 "increment of a boolean expression");
4419 else
4420 warning_at (location, OPT_Wbool_operation,
4421 "decrement of a boolean expression");
4422 }
4423
4424 /* Ensure the argument is fully folded inside any SAVE_EXPR. */
4425 arg = c_fully_fold (arg, false, NULL, true);
4426
4427 bool atomic_op;
4428 atomic_op = really_atomic_lvalue (arg);
4429
4430 /* Increment or decrement the real part of the value,
4431 and don't change the imaginary part. */
4432 if (typecode == COMPLEX_TYPE)
4433 {
4434 tree real, imag;
4435
4436 pedwarn (location, OPT_Wpedantic,
4437 "ISO C does not support %<++%> and %<--%> on complex types");
4438
4439 if (!atomic_op)
4440 {
4441 arg = stabilize_reference (arg);
4442 real = build_unary_op (EXPR_LOCATION (arg), REALPART_EXPR, arg,
4443 true);
4444 imag = build_unary_op (EXPR_LOCATION (arg), IMAGPART_EXPR, arg,
4445 true);
4446 real = build_unary_op (EXPR_LOCATION (arg), code, real, true);
4447 if (real == error_mark_node || imag == error_mark_node)
4448 return error_mark_node;
4449 ret = build2 (COMPLEX_EXPR, TREE_TYPE (arg),
4450 real, imag);
4451 goto return_build_unary_op;
4452 }
4453 }
4454
4455 /* Report invalid types. */
4456
4457 if (typecode != POINTER_TYPE && typecode != FIXED_POINT_TYPE
4458 && typecode != INTEGER_TYPE && typecode != REAL_TYPE
4459 && typecode != COMPLEX_TYPE && typecode != VECTOR_TYPE)
4460 {
4461 if (code == PREINCREMENT_EXPR || code == POSTINCREMENT_EXPR)
4462 error_at (location, "wrong type argument to increment");
4463 else
4464 error_at (location, "wrong type argument to decrement");
4465
4466 return error_mark_node;
4467 }
4468
4469 {
4470 tree inc;
4471
4472 argtype = TREE_TYPE (arg);
4473
4474 /* Compute the increment. */
4475
4476 if (typecode == POINTER_TYPE)
4477 {
4478 /* If pointer target is an incomplete type,
4479 we just cannot know how to do the arithmetic. */
4480 if (!COMPLETE_OR_VOID_TYPE_P (TREE_TYPE (argtype)))
4481 {
4482 if (code == PREINCREMENT_EXPR || code == POSTINCREMENT_EXPR)
4483 error_at (location,
4484 "increment of pointer to an incomplete type %qT",
4485 TREE_TYPE (argtype));
4486 else
4487 error_at (location,
4488 "decrement of pointer to an incomplete type %qT",
4489 TREE_TYPE (argtype));
4490 }
4491 else if (TREE_CODE (TREE_TYPE (argtype)) == FUNCTION_TYPE
4492 || TREE_CODE (TREE_TYPE (argtype)) == VOID_TYPE)
4493 {
4494 if (code == PREINCREMENT_EXPR || code == POSTINCREMENT_EXPR)
4495 pedwarn (location, OPT_Wpointer_arith,
4496 "wrong type argument to increment");
4497 else
4498 pedwarn (location, OPT_Wpointer_arith,
4499 "wrong type argument to decrement");
4500 }
4501
4502 inc = c_size_in_bytes (TREE_TYPE (argtype));
4503 inc = convert_to_ptrofftype_loc (location, inc);
4504 }
4505 else if (FRACT_MODE_P (TYPE_MODE (argtype)))
4506 {
4507 /* For signed fract types, we invert ++ to -- or
4508 -- to ++, and change inc from 1 to -1, because
4509 it is not possible to represent 1 in signed fract constants.
4510 For unsigned fract types, the result always overflows and
4511 we get an undefined (original) or the maximum value. */
4512 if (code == PREINCREMENT_EXPR)
4513 code = PREDECREMENT_EXPR;
4514 else if (code == PREDECREMENT_EXPR)
4515 code = PREINCREMENT_EXPR;
4516 else if (code == POSTINCREMENT_EXPR)
4517 code = POSTDECREMENT_EXPR;
4518 else /* code == POSTDECREMENT_EXPR */
4519 code = POSTINCREMENT_EXPR;
4520
4521 inc = integer_minus_one_node;
4522 inc = convert (argtype, inc);
4523 }
4524 else
4525 {
4526 inc = VECTOR_TYPE_P (argtype)
4527 ? build_one_cst (argtype)
4528 : integer_one_node;
4529 inc = convert (argtype, inc);
4530 }
4531
4532 /* If 'arg' is an Objective-C PROPERTY_REF expression, then we
4533 need to ask Objective-C to build the increment or decrement
4534 expression for it. */
4535 if (objc_is_property_ref (arg))
4536 return objc_build_incr_expr_for_property_ref (location, code,
4537 arg, inc);
4538
4539 /* Report a read-only lvalue. */
4540 if (TYPE_READONLY (argtype))
4541 {
4542 readonly_error (location, arg,
4543 ((code == PREINCREMENT_EXPR
4544 || code == POSTINCREMENT_EXPR)
4545 ? lv_increment : lv_decrement));
4546 return error_mark_node;
4547 }
4548 else if (TREE_READONLY (arg))
4549 readonly_warning (arg,
4550 ((code == PREINCREMENT_EXPR
4551 || code == POSTINCREMENT_EXPR)
4552 ? lv_increment : lv_decrement));
4553
4554 /* If the argument is atomic, use the special code sequences for
4555 atomic compound assignment. */
4556 if (atomic_op)
4557 {
4558 arg = stabilize_reference (arg);
4559 ret = build_atomic_assign (location, arg,
4560 ((code == PREINCREMENT_EXPR
4561 || code == POSTINCREMENT_EXPR)
4562 ? PLUS_EXPR
4563 : MINUS_EXPR),
4564 (FRACT_MODE_P (TYPE_MODE (argtype))
4565 ? inc
4566 : integer_one_node),
4567 (code == POSTINCREMENT_EXPR
4568 || code == POSTDECREMENT_EXPR));
4569 goto return_build_unary_op;
4570 }
4571
4572 if (TREE_CODE (TREE_TYPE (arg)) == BOOLEAN_TYPE)
4573 val = boolean_increment (code, arg);
4574 else
4575 val = build2 (code, TREE_TYPE (arg), arg, inc);
4576 TREE_SIDE_EFFECTS (val) = 1;
4577 if (TREE_CODE (val) != code)
4578 TREE_NO_WARNING (val) = 1;
4579 ret = val;
4580 goto return_build_unary_op;
4581 }
4582
4583 case ADDR_EXPR:
4584 /* Note that this operation never does default_conversion. */
4585
4586 /* The operand of unary '&' must be an lvalue (which excludes
4587 expressions of type void), or, in C99, the result of a [] or
4588 unary '*' operator. */
4589 if (VOID_TYPE_P (TREE_TYPE (arg))
4590 && TYPE_QUALS (TREE_TYPE (arg)) == TYPE_UNQUALIFIED
4591 && (!INDIRECT_REF_P (arg) || !flag_isoc99))
4592 pedwarn (location, 0, "taking address of expression of type %<void%>");
4593
4594 /* Let &* cancel out to simplify resulting code. */
4595 if (INDIRECT_REF_P (arg))
4596 {
4597 /* Don't let this be an lvalue. */
4598 if (lvalue_p (TREE_OPERAND (arg, 0)))
4599 return non_lvalue_loc (location, TREE_OPERAND (arg, 0));
4600 ret = TREE_OPERAND (arg, 0);
4601 goto return_build_unary_op;
4602 }
4603
4604 /* Anything not already handled and not a true memory reference
4605 or a non-lvalue array is an error. */
4606 if (typecode != FUNCTION_TYPE && !noconvert
4607 && !lvalue_or_else (location, arg, lv_addressof))
4608 return error_mark_node;
4609
4610 /* Move address operations inside C_MAYBE_CONST_EXPR to simplify
4611 folding later. */
4612 if (TREE_CODE (arg) == C_MAYBE_CONST_EXPR)
4613 {
4614 tree inner = build_unary_op (location, code,
4615 C_MAYBE_CONST_EXPR_EXPR (arg),
4616 noconvert);
4617 ret = build2 (C_MAYBE_CONST_EXPR, TREE_TYPE (inner),
4618 C_MAYBE_CONST_EXPR_PRE (arg), inner);
4619 gcc_assert (!C_MAYBE_CONST_EXPR_INT_OPERANDS (arg));
4620 C_MAYBE_CONST_EXPR_NON_CONST (ret)
4621 = C_MAYBE_CONST_EXPR_NON_CONST (arg);
4622 goto return_build_unary_op;
4623 }
4624
4625 /* Ordinary case; arg is a COMPONENT_REF or a decl. */
4626 argtype = TREE_TYPE (arg);
4627
4628 /* If the lvalue is const or volatile, merge that into the type
4629 to which the address will point. This is only needed
4630 for function types. */
4631 if ((DECL_P (arg) || REFERENCE_CLASS_P (arg))
4632 && (TREE_READONLY (arg) || TREE_THIS_VOLATILE (arg))
4633 && TREE_CODE (argtype) == FUNCTION_TYPE)
4634 {
4635 int orig_quals = TYPE_QUALS (strip_array_types (argtype));
4636 int quals = orig_quals;
4637
4638 if (TREE_READONLY (arg))
4639 quals |= TYPE_QUAL_CONST;
4640 if (TREE_THIS_VOLATILE (arg))
4641 quals |= TYPE_QUAL_VOLATILE;
4642
4643 argtype = c_build_qualified_type (argtype, quals);
4644 }
4645
4646 switch (TREE_CODE (arg))
4647 {
4648 case COMPONENT_REF:
4649 if (DECL_C_BIT_FIELD (TREE_OPERAND (arg, 1)))
4650 {
4651 error_at (location, "cannot take address of bit-field %qD",
4652 TREE_OPERAND (arg, 1));
4653 return error_mark_node;
4654 }
4655
4656 /* fall through */
4657
4658 case ARRAY_REF:
4659 if (TYPE_REVERSE_STORAGE_ORDER (TREE_TYPE (TREE_OPERAND (arg, 0))))
4660 {
4661 if (!AGGREGATE_TYPE_P (TREE_TYPE (arg))
4662 && !VECTOR_TYPE_P (TREE_TYPE (arg)))
4663 {
4664 error_at (location, "cannot take address of scalar with "
4665 "reverse storage order");
4666 return error_mark_node;
4667 }
4668
4669 if (TREE_CODE (TREE_TYPE (arg)) == ARRAY_TYPE
4670 && TYPE_REVERSE_STORAGE_ORDER (TREE_TYPE (arg)))
4671 warning_at (location, OPT_Wscalar_storage_order,
4672 "address of array with reverse scalar storage "
4673 "order requested");
4674 }
4675
4676 default:
4677 break;
4678 }
4679
4680 if (!c_mark_addressable (arg))
4681 return error_mark_node;
4682
4683 gcc_assert (TREE_CODE (arg) != COMPONENT_REF
4684 || !DECL_C_BIT_FIELD (TREE_OPERAND (arg, 1)));
4685
4686 argtype = build_pointer_type (argtype);
4687
4688 /* ??? Cope with user tricks that amount to offsetof. Delete this
4689 when we have proper support for integer constant expressions. */
4690 val = get_base_address (arg);
4691 if (val && INDIRECT_REF_P (val)
4692 && TREE_CONSTANT (TREE_OPERAND (val, 0)))
4693 {
4694 ret = fold_offsetof (arg, argtype);
4695 goto return_build_unary_op;
4696 }
4697
4698 val = build1 (ADDR_EXPR, argtype, arg);
4699
4700 ret = val;
4701 goto return_build_unary_op;
4702
4703 default:
4704 gcc_unreachable ();
4705 }
4706
4707 if (argtype == NULL_TREE)
4708 argtype = TREE_TYPE (arg);
4709 if (TREE_CODE (arg) == INTEGER_CST)
4710 ret = (require_constant_value
4711 ? fold_build1_initializer_loc (location, code, argtype, arg)
4712 : fold_build1_loc (location, code, argtype, arg));
4713 else
4714 ret = build1 (code, argtype, arg);
4715 return_build_unary_op:
4716 gcc_assert (ret != error_mark_node);
4717 if (TREE_CODE (ret) == INTEGER_CST && !TREE_OVERFLOW (ret)
4718 && !(TREE_CODE (xarg) == INTEGER_CST && !TREE_OVERFLOW (xarg)))
4719 ret = build1 (NOP_EXPR, TREE_TYPE (ret), ret);
4720 else if (TREE_CODE (ret) != INTEGER_CST && int_operands)
4721 ret = note_integer_operands (ret);
4722 if (eptype)
4723 ret = build1 (EXCESS_PRECISION_EXPR, eptype, ret);
4724 protected_set_expr_location (ret, location);
4725 return ret;
4726 }
4727
4728 /* Return nonzero if REF is an lvalue valid for this language.
4729 Lvalues can be assigned, unless their type has TYPE_READONLY.
4730 Lvalues can have their address taken, unless they have C_DECL_REGISTER. */
4731
4732 bool
4733 lvalue_p (const_tree ref)
4734 {
4735 const enum tree_code code = TREE_CODE (ref);
4736
4737 switch (code)
4738 {
4739 case REALPART_EXPR:
4740 case IMAGPART_EXPR:
4741 case COMPONENT_REF:
4742 return lvalue_p (TREE_OPERAND (ref, 0));
4743
4744 case C_MAYBE_CONST_EXPR:
4745 return lvalue_p (TREE_OPERAND (ref, 1));
4746
4747 case COMPOUND_LITERAL_EXPR:
4748 case STRING_CST:
4749 return true;
4750
4751 case INDIRECT_REF:
4752 case ARRAY_REF:
4753 case VAR_DECL:
4754 case PARM_DECL:
4755 case RESULT_DECL:
4756 case ERROR_MARK:
4757 return (TREE_CODE (TREE_TYPE (ref)) != FUNCTION_TYPE
4758 && TREE_CODE (TREE_TYPE (ref)) != METHOD_TYPE);
4759
4760 case BIND_EXPR:
4761 return TREE_CODE (TREE_TYPE (ref)) == ARRAY_TYPE;
4762
4763 default:
4764 return false;
4765 }
4766 }
4767 \f
4768 /* Give a warning for storing in something that is read-only in GCC
4769 terms but not const in ISO C terms. */
4770
4771 static void
4772 readonly_warning (tree arg, enum lvalue_use use)
4773 {
4774 switch (use)
4775 {
4776 case lv_assign:
4777 warning (0, "assignment of read-only location %qE", arg);
4778 break;
4779 case lv_increment:
4780 warning (0, "increment of read-only location %qE", arg);
4781 break;
4782 case lv_decrement:
4783 warning (0, "decrement of read-only location %qE", arg);
4784 break;
4785 default:
4786 gcc_unreachable ();
4787 }
4788 return;
4789 }
4790
4791
4792 /* Return nonzero if REF is an lvalue valid for this language;
4793 otherwise, print an error message and return zero. USE says
4794 how the lvalue is being used and so selects the error message.
4795 LOCATION is the location at which any error should be reported. */
4796
4797 static int
4798 lvalue_or_else (location_t loc, const_tree ref, enum lvalue_use use)
4799 {
4800 int win = lvalue_p (ref);
4801
4802 if (!win)
4803 lvalue_error (loc, use);
4804
4805 return win;
4806 }
4807 \f
4808 /* Mark EXP saying that we need to be able to take the
4809 address of it; it should not be allocated in a register.
4810 Returns true if successful. ARRAY_REF_P is true if this
4811 is for ARRAY_REF construction - in that case we don't want
4812 to look through VIEW_CONVERT_EXPR from VECTOR_TYPE to ARRAY_TYPE,
4813 it is fine to use ARRAY_REFs for vector subscripts on vector
4814 register variables. */
4815
4816 bool
4817 c_mark_addressable (tree exp, bool array_ref_p)
4818 {
4819 tree x = exp;
4820
4821 while (1)
4822 switch (TREE_CODE (x))
4823 {
4824 case VIEW_CONVERT_EXPR:
4825 if (array_ref_p
4826 && TREE_CODE (TREE_TYPE (x)) == ARRAY_TYPE
4827 && VECTOR_TYPE_P (TREE_TYPE (TREE_OPERAND (x, 0))))
4828 return true;
4829 /* FALLTHRU */
4830 case COMPONENT_REF:
4831 case ADDR_EXPR:
4832 case ARRAY_REF:
4833 case REALPART_EXPR:
4834 case IMAGPART_EXPR:
4835 x = TREE_OPERAND (x, 0);
4836 break;
4837
4838 case COMPOUND_LITERAL_EXPR:
4839 TREE_ADDRESSABLE (x) = 1;
4840 TREE_ADDRESSABLE (COMPOUND_LITERAL_EXPR_DECL (x)) = 1;
4841 return true;
4842
4843 case CONSTRUCTOR:
4844 TREE_ADDRESSABLE (x) = 1;
4845 return true;
4846
4847 case VAR_DECL:
4848 case CONST_DECL:
4849 case PARM_DECL:
4850 case RESULT_DECL:
4851 if (C_DECL_REGISTER (x)
4852 && DECL_NONLOCAL (x))
4853 {
4854 if (TREE_PUBLIC (x) || is_global_var (x))
4855 {
4856 error
4857 ("global register variable %qD used in nested function", x);
4858 return false;
4859 }
4860 pedwarn (input_location, 0, "register variable %qD used in nested function", x);
4861 }
4862 else if (C_DECL_REGISTER (x))
4863 {
4864 if (TREE_PUBLIC (x) || is_global_var (x))
4865 error ("address of global register variable %qD requested", x);
4866 else
4867 error ("address of register variable %qD requested", x);
4868 return false;
4869 }
4870
4871 /* FALLTHRU */
4872 case FUNCTION_DECL:
4873 TREE_ADDRESSABLE (x) = 1;
4874 /* FALLTHRU */
4875 default:
4876 return true;
4877 }
4878 }
4879 \f
4880 /* Convert EXPR to TYPE, warning about conversion problems with
4881 constants. SEMANTIC_TYPE is the type this conversion would use
4882 without excess precision. If SEMANTIC_TYPE is NULL, this function
4883 is equivalent to convert_and_check. This function is a wrapper that
4884 handles conversions that may be different than
4885 the usual ones because of excess precision. */
4886
4887 static tree
4888 ep_convert_and_check (location_t loc, tree type, tree expr,
4889 tree semantic_type)
4890 {
4891 if (TREE_TYPE (expr) == type)
4892 return expr;
4893
4894 /* For C11, integer conversions may have results with excess
4895 precision. */
4896 if (flag_isoc11 || !semantic_type)
4897 return convert_and_check (loc, type, expr);
4898
4899 if (TREE_CODE (TREE_TYPE (expr)) == INTEGER_TYPE
4900 && TREE_TYPE (expr) != semantic_type)
4901 {
4902 /* For integers, we need to check the real conversion, not
4903 the conversion to the excess precision type. */
4904 expr = convert_and_check (loc, semantic_type, expr);
4905 }
4906 /* Result type is the excess precision type, which should be
4907 large enough, so do not check. */
4908 return convert (type, expr);
4909 }
4910
4911 /* Build and return a conditional expression IFEXP ? OP1 : OP2. If
4912 IFEXP_BCP then the condition is a call to __builtin_constant_p, and
4913 if folded to an integer constant then the unselected half may
4914 contain arbitrary operations not normally permitted in constant
4915 expressions. Set the location of the expression to LOC. */
4916
4917 tree
4918 build_conditional_expr (location_t colon_loc, tree ifexp, bool ifexp_bcp,
4919 tree op1, tree op1_original_type, location_t op1_loc,
4920 tree op2, tree op2_original_type, location_t op2_loc)
4921 {
4922 tree type1;
4923 tree type2;
4924 enum tree_code code1;
4925 enum tree_code code2;
4926 tree result_type = NULL;
4927 tree semantic_result_type = NULL;
4928 tree orig_op1 = op1, orig_op2 = op2;
4929 bool int_const, op1_int_operands, op2_int_operands, int_operands;
4930 bool ifexp_int_operands;
4931 tree ret;
4932
4933 op1_int_operands = EXPR_INT_CONST_OPERANDS (orig_op1);
4934 if (op1_int_operands)
4935 op1 = remove_c_maybe_const_expr (op1);
4936 op2_int_operands = EXPR_INT_CONST_OPERANDS (orig_op2);
4937 if (op2_int_operands)
4938 op2 = remove_c_maybe_const_expr (op2);
4939 ifexp_int_operands = EXPR_INT_CONST_OPERANDS (ifexp);
4940 if (ifexp_int_operands)
4941 ifexp = remove_c_maybe_const_expr (ifexp);
4942
4943 /* Promote both alternatives. */
4944
4945 if (TREE_CODE (TREE_TYPE (op1)) != VOID_TYPE)
4946 op1 = default_conversion (op1);
4947 if (TREE_CODE (TREE_TYPE (op2)) != VOID_TYPE)
4948 op2 = default_conversion (op2);
4949
4950 if (TREE_CODE (ifexp) == ERROR_MARK
4951 || TREE_CODE (TREE_TYPE (op1)) == ERROR_MARK
4952 || TREE_CODE (TREE_TYPE (op2)) == ERROR_MARK)
4953 return error_mark_node;
4954
4955 type1 = TREE_TYPE (op1);
4956 code1 = TREE_CODE (type1);
4957 type2 = TREE_TYPE (op2);
4958 code2 = TREE_CODE (type2);
4959
4960 if (code1 == POINTER_TYPE && reject_gcc_builtin (op1))
4961 return error_mark_node;
4962
4963 if (code2 == POINTER_TYPE && reject_gcc_builtin (op2))
4964 return error_mark_node;
4965
4966 /* C90 does not permit non-lvalue arrays in conditional expressions.
4967 In C99 they will be pointers by now. */
4968 if (code1 == ARRAY_TYPE || code2 == ARRAY_TYPE)
4969 {
4970 error_at (colon_loc, "non-lvalue array in conditional expression");
4971 return error_mark_node;
4972 }
4973
4974 if ((TREE_CODE (op1) == EXCESS_PRECISION_EXPR
4975 || TREE_CODE (op2) == EXCESS_PRECISION_EXPR)
4976 && (code1 == INTEGER_TYPE || code1 == REAL_TYPE
4977 || code1 == COMPLEX_TYPE)
4978 && (code2 == INTEGER_TYPE || code2 == REAL_TYPE
4979 || code2 == COMPLEX_TYPE))
4980 {
4981 semantic_result_type = c_common_type (type1, type2);
4982 if (TREE_CODE (op1) == EXCESS_PRECISION_EXPR)
4983 {
4984 op1 = TREE_OPERAND (op1, 0);
4985 type1 = TREE_TYPE (op1);
4986 gcc_assert (TREE_CODE (type1) == code1);
4987 }
4988 if (TREE_CODE (op2) == EXCESS_PRECISION_EXPR)
4989 {
4990 op2 = TREE_OPERAND (op2, 0);
4991 type2 = TREE_TYPE (op2);
4992 gcc_assert (TREE_CODE (type2) == code2);
4993 }
4994 }
4995
4996 if (warn_cxx_compat)
4997 {
4998 tree t1 = op1_original_type ? op1_original_type : TREE_TYPE (orig_op1);
4999 tree t2 = op2_original_type ? op2_original_type : TREE_TYPE (orig_op2);
5000
5001 if (TREE_CODE (t1) == ENUMERAL_TYPE
5002 && TREE_CODE (t2) == ENUMERAL_TYPE
5003 && TYPE_MAIN_VARIANT (t1) != TYPE_MAIN_VARIANT (t2))
5004 warning_at (colon_loc, OPT_Wc___compat,
5005 ("different enum types in conditional is "
5006 "invalid in C++: %qT vs %qT"),
5007 t1, t2);
5008 }
5009
5010 /* Quickly detect the usual case where op1 and op2 have the same type
5011 after promotion. */
5012 if (TYPE_MAIN_VARIANT (type1) == TYPE_MAIN_VARIANT (type2))
5013 {
5014 if (type1 == type2)
5015 result_type = type1;
5016 else
5017 result_type = TYPE_MAIN_VARIANT (type1);
5018 }
5019 else if ((code1 == INTEGER_TYPE || code1 == REAL_TYPE
5020 || code1 == COMPLEX_TYPE)
5021 && (code2 == INTEGER_TYPE || code2 == REAL_TYPE
5022 || code2 == COMPLEX_TYPE))
5023 {
5024 /* In C11, a conditional expression between a floating-point
5025 type and an integer type should convert the integer type to
5026 the evaluation format of the floating-point type, with
5027 possible excess precision. */
5028 tree eptype1 = type1;
5029 tree eptype2 = type2;
5030 if (flag_isoc11)
5031 {
5032 tree eptype;
5033 if (ANY_INTEGRAL_TYPE_P (type1)
5034 && (eptype = excess_precision_type (type2)) != NULL_TREE)
5035 {
5036 eptype2 = eptype;
5037 if (!semantic_result_type)
5038 semantic_result_type = c_common_type (type1, type2);
5039 }
5040 else if (ANY_INTEGRAL_TYPE_P (type2)
5041 && (eptype = excess_precision_type (type1)) != NULL_TREE)
5042 {
5043 eptype1 = eptype;
5044 if (!semantic_result_type)
5045 semantic_result_type = c_common_type (type1, type2);
5046 }
5047 }
5048 result_type = c_common_type (eptype1, eptype2);
5049 if (result_type == error_mark_node)
5050 return error_mark_node;
5051 do_warn_double_promotion (result_type, type1, type2,
5052 "implicit conversion from %qT to %qT to "
5053 "match other result of conditional",
5054 colon_loc);
5055
5056 /* If -Wsign-compare, warn here if type1 and type2 have
5057 different signedness. We'll promote the signed to unsigned
5058 and later code won't know it used to be different.
5059 Do this check on the original types, so that explicit casts
5060 will be considered, but default promotions won't. */
5061 if (c_inhibit_evaluation_warnings == 0)
5062 {
5063 int unsigned_op1 = TYPE_UNSIGNED (TREE_TYPE (orig_op1));
5064 int unsigned_op2 = TYPE_UNSIGNED (TREE_TYPE (orig_op2));
5065
5066 if (unsigned_op1 ^ unsigned_op2)
5067 {
5068 bool ovf;
5069
5070 /* Do not warn if the result type is signed, since the
5071 signed type will only be chosen if it can represent
5072 all the values of the unsigned type. */
5073 if (!TYPE_UNSIGNED (result_type))
5074 /* OK */;
5075 else
5076 {
5077 bool op1_maybe_const = true;
5078 bool op2_maybe_const = true;
5079
5080 /* Do not warn if the signed quantity is an
5081 unsuffixed integer literal (or some static
5082 constant expression involving such literals) and
5083 it is non-negative. This warning requires the
5084 operands to be folded for best results, so do
5085 that folding in this case even without
5086 warn_sign_compare to avoid warning options
5087 possibly affecting code generation. */
5088 c_inhibit_evaluation_warnings
5089 += (ifexp == truthvalue_false_node);
5090 op1 = c_fully_fold (op1, require_constant_value,
5091 &op1_maybe_const);
5092 c_inhibit_evaluation_warnings
5093 -= (ifexp == truthvalue_false_node);
5094
5095 c_inhibit_evaluation_warnings
5096 += (ifexp == truthvalue_true_node);
5097 op2 = c_fully_fold (op2, require_constant_value,
5098 &op2_maybe_const);
5099 c_inhibit_evaluation_warnings
5100 -= (ifexp == truthvalue_true_node);
5101
5102 if (warn_sign_compare)
5103 {
5104 if ((unsigned_op2
5105 && tree_expr_nonnegative_warnv_p (op1, &ovf))
5106 || (unsigned_op1
5107 && tree_expr_nonnegative_warnv_p (op2, &ovf)))
5108 /* OK */;
5109 else if (unsigned_op2)
5110 warning_at (op1_loc, OPT_Wsign_compare,
5111 "operand of ?: changes signedness from "
5112 "%qT to %qT due to unsignedness of other "
5113 "operand", TREE_TYPE (orig_op1),
5114 TREE_TYPE (orig_op2));
5115 else
5116 warning_at (op2_loc, OPT_Wsign_compare,
5117 "operand of ?: changes signedness from "
5118 "%qT to %qT due to unsignedness of other "
5119 "operand", TREE_TYPE (orig_op2),
5120 TREE_TYPE (orig_op1));
5121 }
5122 if (!op1_maybe_const || TREE_CODE (op1) != INTEGER_CST)
5123 op1 = c_wrap_maybe_const (op1, !op1_maybe_const);
5124 if (!op2_maybe_const || TREE_CODE (op2) != INTEGER_CST)
5125 op2 = c_wrap_maybe_const (op2, !op2_maybe_const);
5126 }
5127 }
5128 }
5129 }
5130 else if (code1 == VOID_TYPE || code2 == VOID_TYPE)
5131 {
5132 if (code1 != VOID_TYPE || code2 != VOID_TYPE)
5133 pedwarn (colon_loc, OPT_Wpedantic,
5134 "ISO C forbids conditional expr with only one void side");
5135 result_type = void_type_node;
5136 }
5137 else if (code1 == POINTER_TYPE && code2 == POINTER_TYPE)
5138 {
5139 addr_space_t as1 = TYPE_ADDR_SPACE (TREE_TYPE (type1));
5140 addr_space_t as2 = TYPE_ADDR_SPACE (TREE_TYPE (type2));
5141 addr_space_t as_common;
5142
5143 if (comp_target_types (colon_loc, type1, type2))
5144 result_type = common_pointer_type (type1, type2);
5145 else if (null_pointer_constant_p (orig_op1))
5146 result_type = type2;
5147 else if (null_pointer_constant_p (orig_op2))
5148 result_type = type1;
5149 else if (!addr_space_superset (as1, as2, &as_common))
5150 {
5151 error_at (colon_loc, "pointers to disjoint address spaces "
5152 "used in conditional expression");
5153 return error_mark_node;
5154 }
5155 else if (VOID_TYPE_P (TREE_TYPE (type1))
5156 && !TYPE_ATOMIC (TREE_TYPE (type1)))
5157 {
5158 if ((TREE_CODE (TREE_TYPE (type2)) == ARRAY_TYPE)
5159 && (TYPE_QUALS (strip_array_types (TREE_TYPE (type2)))
5160 & ~TYPE_QUALS (TREE_TYPE (type1))))
5161 warning_at (colon_loc, OPT_Wdiscarded_array_qualifiers,
5162 "pointer to array loses qualifier "
5163 "in conditional expression");
5164
5165 if (TREE_CODE (TREE_TYPE (type2)) == FUNCTION_TYPE)
5166 pedwarn (colon_loc, OPT_Wpedantic,
5167 "ISO C forbids conditional expr between "
5168 "%<void *%> and function pointer");
5169 result_type = build_pointer_type (qualify_type (TREE_TYPE (type1),
5170 TREE_TYPE (type2)));
5171 }
5172 else if (VOID_TYPE_P (TREE_TYPE (type2))
5173 && !TYPE_ATOMIC (TREE_TYPE (type2)))
5174 {
5175 if ((TREE_CODE (TREE_TYPE (type1)) == ARRAY_TYPE)
5176 && (TYPE_QUALS (strip_array_types (TREE_TYPE (type1)))
5177 & ~TYPE_QUALS (TREE_TYPE (type2))))
5178 warning_at (colon_loc, OPT_Wdiscarded_array_qualifiers,
5179 "pointer to array loses qualifier "
5180 "in conditional expression");
5181
5182 if (TREE_CODE (TREE_TYPE (type1)) == FUNCTION_TYPE)
5183 pedwarn (colon_loc, OPT_Wpedantic,
5184 "ISO C forbids conditional expr between "
5185 "%<void *%> and function pointer");
5186 result_type = build_pointer_type (qualify_type (TREE_TYPE (type2),
5187 TREE_TYPE (type1)));
5188 }
5189 /* Objective-C pointer comparisons are a bit more lenient. */
5190 else if (objc_have_common_type (type1, type2, -3, NULL_TREE))
5191 result_type = objc_common_type (type1, type2);
5192 else
5193 {
5194 int qual = ENCODE_QUAL_ADDR_SPACE (as_common);
5195
5196 pedwarn (colon_loc, 0,
5197 "pointer type mismatch in conditional expression");
5198 result_type = build_pointer_type
5199 (build_qualified_type (void_type_node, qual));
5200 }
5201 }
5202 else if (code1 == POINTER_TYPE && code2 == INTEGER_TYPE)
5203 {
5204 if (!null_pointer_constant_p (orig_op2))
5205 pedwarn (colon_loc, 0,
5206 "pointer/integer type mismatch in conditional expression");
5207 else
5208 {
5209 op2 = null_pointer_node;
5210 }
5211 result_type = type1;
5212 }
5213 else if (code2 == POINTER_TYPE && code1 == INTEGER_TYPE)
5214 {
5215 if (!null_pointer_constant_p (orig_op1))
5216 pedwarn (colon_loc, 0,
5217 "pointer/integer type mismatch in conditional expression");
5218 else
5219 {
5220 op1 = null_pointer_node;
5221 }
5222 result_type = type2;
5223 }
5224
5225 if (!result_type)
5226 {
5227 if (flag_cond_mismatch)
5228 result_type = void_type_node;
5229 else
5230 {
5231 error_at (colon_loc, "type mismatch in conditional expression");
5232 return error_mark_node;
5233 }
5234 }
5235
5236 /* Merge const and volatile flags of the incoming types. */
5237 result_type
5238 = build_type_variant (result_type,
5239 TYPE_READONLY (type1) || TYPE_READONLY (type2),
5240 TYPE_VOLATILE (type1) || TYPE_VOLATILE (type2));
5241
5242 op1 = ep_convert_and_check (colon_loc, result_type, op1,
5243 semantic_result_type);
5244 op2 = ep_convert_and_check (colon_loc, result_type, op2,
5245 semantic_result_type);
5246
5247 if (ifexp_bcp && ifexp == truthvalue_true_node)
5248 {
5249 op2_int_operands = true;
5250 op1 = c_fully_fold (op1, require_constant_value, NULL);
5251 }
5252 if (ifexp_bcp && ifexp == truthvalue_false_node)
5253 {
5254 op1_int_operands = true;
5255 op2 = c_fully_fold (op2, require_constant_value, NULL);
5256 }
5257 int_const = int_operands = (ifexp_int_operands
5258 && op1_int_operands
5259 && op2_int_operands);
5260 if (int_operands)
5261 {
5262 int_const = ((ifexp == truthvalue_true_node
5263 && TREE_CODE (orig_op1) == INTEGER_CST
5264 && !TREE_OVERFLOW (orig_op1))
5265 || (ifexp == truthvalue_false_node
5266 && TREE_CODE (orig_op2) == INTEGER_CST
5267 && !TREE_OVERFLOW (orig_op2)));
5268 }
5269
5270 /* Need to convert condition operand into a vector mask. */
5271 if (VECTOR_TYPE_P (TREE_TYPE (ifexp)))
5272 {
5273 tree vectype = TREE_TYPE (ifexp);
5274 tree elem_type = TREE_TYPE (vectype);
5275 tree zero = build_int_cst (elem_type, 0);
5276 tree zero_vec = build_vector_from_val (vectype, zero);
5277 tree cmp_type = build_same_sized_truth_vector_type (vectype);
5278 ifexp = build2 (NE_EXPR, cmp_type, ifexp, zero_vec);
5279 }
5280
5281 if (int_const || (ifexp_bcp && TREE_CODE (ifexp) == INTEGER_CST))
5282 ret = fold_build3_loc (colon_loc, COND_EXPR, result_type, ifexp, op1, op2);
5283 else
5284 {
5285 if (int_operands)
5286 {
5287 /* Use c_fully_fold here, since C_MAYBE_CONST_EXPR might be
5288 nested inside of the expression. */
5289 op1 = c_fully_fold (op1, false, NULL);
5290 op2 = c_fully_fold (op2, false, NULL);
5291 }
5292 ret = build3 (COND_EXPR, result_type, ifexp, op1, op2);
5293 if (int_operands)
5294 ret = note_integer_operands (ret);
5295 }
5296 if (semantic_result_type)
5297 ret = build1 (EXCESS_PRECISION_EXPR, semantic_result_type, ret);
5298
5299 protected_set_expr_location (ret, colon_loc);
5300
5301 /* If the OP1 and OP2 are the same and don't have side-effects,
5302 warn here, because the COND_EXPR will be turned into OP1. */
5303 if (warn_duplicated_branches
5304 && TREE_CODE (ret) == COND_EXPR
5305 && (op1 == op2 || operand_equal_p (op1, op2, 0)))
5306 warning_at (EXPR_LOCATION (ret), OPT_Wduplicated_branches,
5307 "this condition has identical branches");
5308
5309 return ret;
5310 }
5311 \f
5312 /* Return a compound expression that performs two expressions and
5313 returns the value of the second of them.
5314
5315 LOC is the location of the COMPOUND_EXPR. */
5316
5317 tree
5318 build_compound_expr (location_t loc, tree expr1, tree expr2)
5319 {
5320 bool expr1_int_operands, expr2_int_operands;
5321 tree eptype = NULL_TREE;
5322 tree ret;
5323
5324 expr1_int_operands = EXPR_INT_CONST_OPERANDS (expr1);
5325 if (expr1_int_operands)
5326 expr1 = remove_c_maybe_const_expr (expr1);
5327 expr2_int_operands = EXPR_INT_CONST_OPERANDS (expr2);
5328 if (expr2_int_operands)
5329 expr2 = remove_c_maybe_const_expr (expr2);
5330
5331 if (TREE_CODE (expr1) == EXCESS_PRECISION_EXPR)
5332 expr1 = TREE_OPERAND (expr1, 0);
5333 if (TREE_CODE (expr2) == EXCESS_PRECISION_EXPR)
5334 {
5335 eptype = TREE_TYPE (expr2);
5336 expr2 = TREE_OPERAND (expr2, 0);
5337 }
5338
5339 if (!TREE_SIDE_EFFECTS (expr1))
5340 {
5341 /* The left-hand operand of a comma expression is like an expression
5342 statement: with -Wunused, we should warn if it doesn't have
5343 any side-effects, unless it was explicitly cast to (void). */
5344 if (warn_unused_value)
5345 {
5346 if (VOID_TYPE_P (TREE_TYPE (expr1))
5347 && CONVERT_EXPR_P (expr1))
5348 ; /* (void) a, b */
5349 else if (VOID_TYPE_P (TREE_TYPE (expr1))
5350 && TREE_CODE (expr1) == COMPOUND_EXPR
5351 && CONVERT_EXPR_P (TREE_OPERAND (expr1, 1)))
5352 ; /* (void) a, (void) b, c */
5353 else
5354 warning_at (loc, OPT_Wunused_value,
5355 "left-hand operand of comma expression has no effect");
5356 }
5357 }
5358 else if (TREE_CODE (expr1) == COMPOUND_EXPR
5359 && warn_unused_value)
5360 {
5361 tree r = expr1;
5362 location_t cloc = loc;
5363 while (TREE_CODE (r) == COMPOUND_EXPR)
5364 {
5365 if (EXPR_HAS_LOCATION (r))
5366 cloc = EXPR_LOCATION (r);
5367 r = TREE_OPERAND (r, 1);
5368 }
5369 if (!TREE_SIDE_EFFECTS (r)
5370 && !VOID_TYPE_P (TREE_TYPE (r))
5371 && !CONVERT_EXPR_P (r))
5372 warning_at (cloc, OPT_Wunused_value,
5373 "right-hand operand of comma expression has no effect");
5374 }
5375
5376 /* With -Wunused, we should also warn if the left-hand operand does have
5377 side-effects, but computes a value which is not used. For example, in
5378 `foo() + bar(), baz()' the result of the `+' operator is not used,
5379 so we should issue a warning. */
5380 else if (warn_unused_value)
5381 warn_if_unused_value (expr1, loc);
5382
5383 if (expr2 == error_mark_node)
5384 return error_mark_node;
5385
5386 ret = build2 (COMPOUND_EXPR, TREE_TYPE (expr2), expr1, expr2);
5387
5388 if (flag_isoc99
5389 && expr1_int_operands
5390 && expr2_int_operands)
5391 ret = note_integer_operands (ret);
5392
5393 if (eptype)
5394 ret = build1 (EXCESS_PRECISION_EXPR, eptype, ret);
5395
5396 protected_set_expr_location (ret, loc);
5397 return ret;
5398 }
5399
5400 /* Issue -Wcast-qual warnings when appropriate. TYPE is the type to
5401 which we are casting. OTYPE is the type of the expression being
5402 cast. Both TYPE and OTYPE are pointer types. LOC is the location
5403 of the cast. -Wcast-qual appeared on the command line. Named
5404 address space qualifiers are not handled here, because they result
5405 in different warnings. */
5406
5407 static void
5408 handle_warn_cast_qual (location_t loc, tree type, tree otype)
5409 {
5410 tree in_type = type;
5411 tree in_otype = otype;
5412 int added = 0;
5413 int discarded = 0;
5414 bool is_const;
5415
5416 /* Check that the qualifiers on IN_TYPE are a superset of the
5417 qualifiers of IN_OTYPE. The outermost level of POINTER_TYPE
5418 nodes is uninteresting and we stop as soon as we hit a
5419 non-POINTER_TYPE node on either type. */
5420 do
5421 {
5422 in_otype = TREE_TYPE (in_otype);
5423 in_type = TREE_TYPE (in_type);
5424
5425 /* GNU C allows cv-qualified function types. 'const' means the
5426 function is very pure, 'volatile' means it can't return. We
5427 need to warn when such qualifiers are added, not when they're
5428 taken away. */
5429 if (TREE_CODE (in_otype) == FUNCTION_TYPE
5430 && TREE_CODE (in_type) == FUNCTION_TYPE)
5431 added |= (TYPE_QUALS_NO_ADDR_SPACE (in_type)
5432 & ~TYPE_QUALS_NO_ADDR_SPACE (in_otype));
5433 else
5434 discarded |= (TYPE_QUALS_NO_ADDR_SPACE (in_otype)
5435 & ~TYPE_QUALS_NO_ADDR_SPACE (in_type));
5436 }
5437 while (TREE_CODE (in_type) == POINTER_TYPE
5438 && TREE_CODE (in_otype) == POINTER_TYPE);
5439
5440 if (added)
5441 warning_at (loc, OPT_Wcast_qual,
5442 "cast adds %q#v qualifier to function type", added);
5443
5444 if (discarded)
5445 /* There are qualifiers present in IN_OTYPE that are not present
5446 in IN_TYPE. */
5447 warning_at (loc, OPT_Wcast_qual,
5448 "cast discards %qv qualifier from pointer target type",
5449 discarded);
5450
5451 if (added || discarded)
5452 return;
5453
5454 /* A cast from **T to const **T is unsafe, because it can cause a
5455 const value to be changed with no additional warning. We only
5456 issue this warning if T is the same on both sides, and we only
5457 issue the warning if there are the same number of pointers on
5458 both sides, as otherwise the cast is clearly unsafe anyhow. A
5459 cast is unsafe when a qualifier is added at one level and const
5460 is not present at all outer levels.
5461
5462 To issue this warning, we check at each level whether the cast
5463 adds new qualifiers not already seen. We don't need to special
5464 case function types, as they won't have the same
5465 TYPE_MAIN_VARIANT. */
5466
5467 if (TYPE_MAIN_VARIANT (in_type) != TYPE_MAIN_VARIANT (in_otype))
5468 return;
5469 if (TREE_CODE (TREE_TYPE (type)) != POINTER_TYPE)
5470 return;
5471
5472 in_type = type;
5473 in_otype = otype;
5474 is_const = TYPE_READONLY (TREE_TYPE (in_type));
5475 do
5476 {
5477 in_type = TREE_TYPE (in_type);
5478 in_otype = TREE_TYPE (in_otype);
5479 if ((TYPE_QUALS (in_type) &~ TYPE_QUALS (in_otype)) != 0
5480 && !is_const)
5481 {
5482 warning_at (loc, OPT_Wcast_qual,
5483 "to be safe all intermediate pointers in cast from "
5484 "%qT to %qT must be %<const%> qualified",
5485 otype, type);
5486 break;
5487 }
5488 if (is_const)
5489 is_const = TYPE_READONLY (in_type);
5490 }
5491 while (TREE_CODE (in_type) == POINTER_TYPE);
5492 }
5493
5494 /* Heuristic check if two parameter types can be considered ABI-equivalent. */
5495
5496 static bool
5497 c_safe_arg_type_equiv_p (tree t1, tree t2)
5498 {
5499 t1 = TYPE_MAIN_VARIANT (t1);
5500 t2 = TYPE_MAIN_VARIANT (t2);
5501
5502 if (TREE_CODE (t1) == POINTER_TYPE
5503 && TREE_CODE (t2) == POINTER_TYPE)
5504 return true;
5505
5506 /* The signedness of the parameter matters only when an integral
5507 type smaller than int is promoted to int, otherwise only the
5508 precision of the parameter matters.
5509 This check should make sure that the callee does not see
5510 undefined values in argument registers. */
5511 if (INTEGRAL_TYPE_P (t1)
5512 && INTEGRAL_TYPE_P (t2)
5513 && TYPE_PRECISION (t1) == TYPE_PRECISION (t2)
5514 && (TYPE_UNSIGNED (t1) == TYPE_UNSIGNED (t2)
5515 || !targetm.calls.promote_prototypes (NULL_TREE)
5516 || TYPE_PRECISION (t1) >= TYPE_PRECISION (integer_type_node)))
5517 return true;
5518
5519 return comptypes (t1, t2);
5520 }
5521
5522 /* Check if a type cast between two function types can be considered safe. */
5523
5524 static bool
5525 c_safe_function_type_cast_p (tree t1, tree t2)
5526 {
5527 if (TREE_TYPE (t1) == void_type_node &&
5528 TYPE_ARG_TYPES (t1) == void_list_node)
5529 return true;
5530
5531 if (TREE_TYPE (t2) == void_type_node &&
5532 TYPE_ARG_TYPES (t2) == void_list_node)
5533 return true;
5534
5535 if (!c_safe_arg_type_equiv_p (TREE_TYPE (t1), TREE_TYPE (t2)))
5536 return false;
5537
5538 for (t1 = TYPE_ARG_TYPES (t1), t2 = TYPE_ARG_TYPES (t2);
5539 t1 && t2;
5540 t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2))
5541 if (!c_safe_arg_type_equiv_p (TREE_VALUE (t1), TREE_VALUE (t2)))
5542 return false;
5543
5544 return true;
5545 }
5546
5547 /* Build an expression representing a cast to type TYPE of expression EXPR.
5548 LOC is the location of the cast-- typically the open paren of the cast. */
5549
5550 tree
5551 build_c_cast (location_t loc, tree type, tree expr)
5552 {
5553 tree value;
5554
5555 if (TREE_CODE (expr) == EXCESS_PRECISION_EXPR)
5556 expr = TREE_OPERAND (expr, 0);
5557
5558 value = expr;
5559
5560 if (type == error_mark_node || expr == error_mark_node)
5561 return error_mark_node;
5562
5563 /* The ObjC front-end uses TYPE_MAIN_VARIANT to tie together types differing
5564 only in <protocol> qualifications. But when constructing cast expressions,
5565 the protocols do matter and must be kept around. */
5566 if (objc_is_object_ptr (type) && objc_is_object_ptr (TREE_TYPE (expr)))
5567 return build1 (NOP_EXPR, type, expr);
5568
5569 type = TYPE_MAIN_VARIANT (type);
5570
5571 if (TREE_CODE (type) == ARRAY_TYPE)
5572 {
5573 error_at (loc, "cast specifies array type");
5574 return error_mark_node;
5575 }
5576
5577 if (TREE_CODE (type) == FUNCTION_TYPE)
5578 {
5579 error_at (loc, "cast specifies function type");
5580 return error_mark_node;
5581 }
5582
5583 if (!VOID_TYPE_P (type))
5584 {
5585 value = require_complete_type (loc, value);
5586 if (value == error_mark_node)
5587 return error_mark_node;
5588 }
5589
5590 if (type == TYPE_MAIN_VARIANT (TREE_TYPE (value)))
5591 {
5592 if (RECORD_OR_UNION_TYPE_P (type))
5593 pedwarn (loc, OPT_Wpedantic,
5594 "ISO C forbids casting nonscalar to the same type");
5595
5596 /* Convert to remove any qualifiers from VALUE's type. */
5597 value = convert (type, value);
5598 }
5599 else if (TREE_CODE (type) == UNION_TYPE)
5600 {
5601 tree field;
5602
5603 for (field = TYPE_FIELDS (type); field; field = DECL_CHAIN (field))
5604 if (TREE_TYPE (field) != error_mark_node
5605 && comptypes (TYPE_MAIN_VARIANT (TREE_TYPE (field)),
5606 TYPE_MAIN_VARIANT (TREE_TYPE (value))))
5607 break;
5608
5609 if (field)
5610 {
5611 tree t;
5612 bool maybe_const = true;
5613
5614 pedwarn (loc, OPT_Wpedantic, "ISO C forbids casts to union type");
5615 t = c_fully_fold (value, false, &maybe_const);
5616 t = build_constructor_single (type, field, t);
5617 if (!maybe_const)
5618 t = c_wrap_maybe_const (t, true);
5619 t = digest_init (loc, type, t,
5620 NULL_TREE, false, true, 0);
5621 TREE_CONSTANT (t) = TREE_CONSTANT (value);
5622 return t;
5623 }
5624 error_at (loc, "cast to union type from type not present in union");
5625 return error_mark_node;
5626 }
5627 else
5628 {
5629 tree otype, ovalue;
5630
5631 if (type == void_type_node)
5632 {
5633 tree t = build1 (CONVERT_EXPR, type, value);
5634 SET_EXPR_LOCATION (t, loc);
5635 return t;
5636 }
5637
5638 otype = TREE_TYPE (value);
5639
5640 /* Optionally warn about potentially worrisome casts. */
5641 if (warn_cast_qual
5642 && TREE_CODE (type) == POINTER_TYPE
5643 && TREE_CODE (otype) == POINTER_TYPE)
5644 handle_warn_cast_qual (loc, type, otype);
5645
5646 /* Warn about conversions between pointers to disjoint
5647 address spaces. */
5648 if (TREE_CODE (type) == POINTER_TYPE
5649 && TREE_CODE (otype) == POINTER_TYPE
5650 && !null_pointer_constant_p (value))
5651 {
5652 addr_space_t as_to = TYPE_ADDR_SPACE (TREE_TYPE (type));
5653 addr_space_t as_from = TYPE_ADDR_SPACE (TREE_TYPE (otype));
5654 addr_space_t as_common;
5655
5656 if (!addr_space_superset (as_to, as_from, &as_common))
5657 {
5658 if (ADDR_SPACE_GENERIC_P (as_from))
5659 warning_at (loc, 0, "cast to %s address space pointer "
5660 "from disjoint generic address space pointer",
5661 c_addr_space_name (as_to));
5662
5663 else if (ADDR_SPACE_GENERIC_P (as_to))
5664 warning_at (loc, 0, "cast to generic address space pointer "
5665 "from disjoint %s address space pointer",
5666 c_addr_space_name (as_from));
5667
5668 else
5669 warning_at (loc, 0, "cast to %s address space pointer "
5670 "from disjoint %s address space pointer",
5671 c_addr_space_name (as_to),
5672 c_addr_space_name (as_from));
5673 }
5674 }
5675
5676 /* Warn about possible alignment problems. */
5677 if ((STRICT_ALIGNMENT || warn_cast_align == 2)
5678 && TREE_CODE (type) == POINTER_TYPE
5679 && TREE_CODE (otype) == POINTER_TYPE
5680 && TREE_CODE (TREE_TYPE (otype)) != VOID_TYPE
5681 && TREE_CODE (TREE_TYPE (otype)) != FUNCTION_TYPE
5682 /* Don't warn about opaque types, where the actual alignment
5683 restriction is unknown. */
5684 && !(RECORD_OR_UNION_TYPE_P (TREE_TYPE (otype))
5685 && TYPE_MODE (TREE_TYPE (otype)) == VOIDmode)
5686 && min_align_of_type (TREE_TYPE (type))
5687 > min_align_of_type (TREE_TYPE (otype)))
5688 warning_at (loc, OPT_Wcast_align,
5689 "cast increases required alignment of target type");
5690
5691 if (TREE_CODE (type) == INTEGER_TYPE
5692 && TREE_CODE (otype) == POINTER_TYPE
5693 && TYPE_PRECISION (type) != TYPE_PRECISION (otype))
5694 /* Unlike conversion of integers to pointers, where the
5695 warning is disabled for converting constants because
5696 of cases such as SIG_*, warn about converting constant
5697 pointers to integers. In some cases it may cause unwanted
5698 sign extension, and a warning is appropriate. */
5699 warning_at (loc, OPT_Wpointer_to_int_cast,
5700 "cast from pointer to integer of different size");
5701
5702 if (TREE_CODE (value) == CALL_EXPR
5703 && TREE_CODE (type) != TREE_CODE (otype))
5704 warning_at (loc, OPT_Wbad_function_cast,
5705 "cast from function call of type %qT "
5706 "to non-matching type %qT", otype, type);
5707
5708 if (TREE_CODE (type) == POINTER_TYPE
5709 && TREE_CODE (otype) == INTEGER_TYPE
5710 && TYPE_PRECISION (type) != TYPE_PRECISION (otype)
5711 /* Don't warn about converting any constant. */
5712 && !TREE_CONSTANT (value))
5713 warning_at (loc,
5714 OPT_Wint_to_pointer_cast, "cast to pointer from integer "
5715 "of different size");
5716
5717 if (warn_strict_aliasing <= 2)
5718 strict_aliasing_warning (EXPR_LOCATION (value), type, expr);
5719
5720 /* If pedantic, warn for conversions between function and object
5721 pointer types, except for converting a null pointer constant
5722 to function pointer type. */
5723 if (pedantic
5724 && TREE_CODE (type) == POINTER_TYPE
5725 && TREE_CODE (otype) == POINTER_TYPE
5726 && TREE_CODE (TREE_TYPE (otype)) == FUNCTION_TYPE
5727 && TREE_CODE (TREE_TYPE (type)) != FUNCTION_TYPE)
5728 pedwarn (loc, OPT_Wpedantic, "ISO C forbids "
5729 "conversion of function pointer to object pointer type");
5730
5731 if (pedantic
5732 && TREE_CODE (type) == POINTER_TYPE
5733 && TREE_CODE (otype) == POINTER_TYPE
5734 && TREE_CODE (TREE_TYPE (type)) == FUNCTION_TYPE
5735 && TREE_CODE (TREE_TYPE (otype)) != FUNCTION_TYPE
5736 && !null_pointer_constant_p (value))
5737 pedwarn (loc, OPT_Wpedantic, "ISO C forbids "
5738 "conversion of object pointer to function pointer type");
5739
5740 if (TREE_CODE (type) == POINTER_TYPE
5741 && TREE_CODE (otype) == POINTER_TYPE
5742 && TREE_CODE (TREE_TYPE (type)) == FUNCTION_TYPE
5743 && TREE_CODE (TREE_TYPE (otype)) == FUNCTION_TYPE
5744 && !c_safe_function_type_cast_p (TREE_TYPE (type),
5745 TREE_TYPE (otype)))
5746 warning_at (loc, OPT_Wcast_function_type,
5747 "cast between incompatible function types"
5748 " from %qT to %qT", otype, type);
5749
5750 ovalue = value;
5751 value = convert (type, value);
5752
5753 /* Ignore any integer overflow caused by the cast. */
5754 if (TREE_CODE (value) == INTEGER_CST && !FLOAT_TYPE_P (otype))
5755 {
5756 if (CONSTANT_CLASS_P (ovalue) && TREE_OVERFLOW (ovalue))
5757 {
5758 if (!TREE_OVERFLOW (value))
5759 {
5760 /* Avoid clobbering a shared constant. */
5761 value = copy_node (value);
5762 TREE_OVERFLOW (value) = TREE_OVERFLOW (ovalue);
5763 }
5764 }
5765 else if (TREE_OVERFLOW (value))
5766 /* Reset VALUE's overflow flags, ensuring constant sharing. */
5767 value = wide_int_to_tree (TREE_TYPE (value), wi::to_wide (value));
5768 }
5769 }
5770
5771 /* Don't let a cast be an lvalue. */
5772 if (lvalue_p (value))
5773 value = non_lvalue_loc (loc, value);
5774
5775 /* Don't allow the results of casting to floating-point or complex
5776 types be confused with actual constants, or casts involving
5777 integer and pointer types other than direct integer-to-integer
5778 and integer-to-pointer be confused with integer constant
5779 expressions and null pointer constants. */
5780 if (TREE_CODE (value) == REAL_CST
5781 || TREE_CODE (value) == COMPLEX_CST
5782 || (TREE_CODE (value) == INTEGER_CST
5783 && !((TREE_CODE (expr) == INTEGER_CST
5784 && INTEGRAL_TYPE_P (TREE_TYPE (expr)))
5785 || TREE_CODE (expr) == REAL_CST
5786 || TREE_CODE (expr) == COMPLEX_CST)))
5787 value = build1 (NOP_EXPR, type, value);
5788
5789 protected_set_expr_location (value, loc);
5790 return value;
5791 }
5792
5793 /* Interpret a cast of expression EXPR to type TYPE. LOC is the
5794 location of the open paren of the cast, or the position of the cast
5795 expr. */
5796 tree
5797 c_cast_expr (location_t loc, struct c_type_name *type_name, tree expr)
5798 {
5799 tree type;
5800 tree type_expr = NULL_TREE;
5801 bool type_expr_const = true;
5802 tree ret;
5803 int saved_wsp = warn_strict_prototypes;
5804
5805 /* This avoids warnings about unprototyped casts on
5806 integers. E.g. "#define SIG_DFL (void(*)())0". */
5807 if (TREE_CODE (expr) == INTEGER_CST)
5808 warn_strict_prototypes = 0;
5809 type = groktypename (type_name, &type_expr, &type_expr_const);
5810 warn_strict_prototypes = saved_wsp;
5811
5812 if (TREE_CODE (expr) == ADDR_EXPR && !VOID_TYPE_P (type)
5813 && reject_gcc_builtin (expr))
5814 return error_mark_node;
5815
5816 ret = build_c_cast (loc, type, expr);
5817 if (type_expr)
5818 {
5819 bool inner_expr_const = true;
5820 ret = c_fully_fold (ret, require_constant_value, &inner_expr_const);
5821 ret = build2 (C_MAYBE_CONST_EXPR, TREE_TYPE (ret), type_expr, ret);
5822 C_MAYBE_CONST_EXPR_NON_CONST (ret) = !(type_expr_const
5823 && inner_expr_const);
5824 SET_EXPR_LOCATION (ret, loc);
5825 }
5826
5827 if (!EXPR_HAS_LOCATION (ret))
5828 protected_set_expr_location (ret, loc);
5829
5830 /* C++ does not permits types to be defined in a cast, but it
5831 allows references to incomplete types. */
5832 if (warn_cxx_compat && type_name->specs->typespec_kind == ctsk_tagdef)
5833 warning_at (loc, OPT_Wc___compat,
5834 "defining a type in a cast is invalid in C++");
5835
5836 return ret;
5837 }
5838 \f
5839 /* Build an assignment expression of lvalue LHS from value RHS.
5840 If LHS_ORIGTYPE is not NULL, it is the original type of LHS, which
5841 may differ from TREE_TYPE (LHS) for an enum bitfield.
5842 MODIFYCODE is the code for a binary operator that we use
5843 to combine the old value of LHS with RHS to get the new value.
5844 Or else MODIFYCODE is NOP_EXPR meaning do a simple assignment.
5845 If RHS_ORIGTYPE is not NULL_TREE, it is the original type of RHS,
5846 which may differ from TREE_TYPE (RHS) for an enum value.
5847
5848 LOCATION is the location of the MODIFYCODE operator.
5849 RHS_LOC is the location of the RHS. */
5850
5851 tree
5852 build_modify_expr (location_t location, tree lhs, tree lhs_origtype,
5853 enum tree_code modifycode,
5854 location_t rhs_loc, tree rhs, tree rhs_origtype)
5855 {
5856 tree result;
5857 tree newrhs;
5858 tree rhseval = NULL_TREE;
5859 tree lhstype = TREE_TYPE (lhs);
5860 tree olhstype = lhstype;
5861 bool npc;
5862 bool is_atomic_op;
5863
5864 /* Types that aren't fully specified cannot be used in assignments. */
5865 lhs = require_complete_type (location, lhs);
5866
5867 /* Avoid duplicate error messages from operands that had errors. */
5868 if (TREE_CODE (lhs) == ERROR_MARK || TREE_CODE (rhs) == ERROR_MARK)
5869 return error_mark_node;
5870
5871 /* Ensure an error for assigning a non-lvalue array to an array in
5872 C90. */
5873 if (TREE_CODE (lhstype) == ARRAY_TYPE)
5874 {
5875 error_at (location, "assignment to expression with array type");
5876 return error_mark_node;
5877 }
5878
5879 /* For ObjC properties, defer this check. */
5880 if (!objc_is_property_ref (lhs) && !lvalue_or_else (location, lhs, lv_assign))
5881 return error_mark_node;
5882
5883 is_atomic_op = really_atomic_lvalue (lhs);
5884
5885 newrhs = rhs;
5886
5887 if (TREE_CODE (lhs) == C_MAYBE_CONST_EXPR)
5888 {
5889 tree inner = build_modify_expr (location, C_MAYBE_CONST_EXPR_EXPR (lhs),
5890 lhs_origtype, modifycode, rhs_loc, rhs,
5891 rhs_origtype);
5892 if (inner == error_mark_node)
5893 return error_mark_node;
5894 result = build2 (C_MAYBE_CONST_EXPR, TREE_TYPE (inner),
5895 C_MAYBE_CONST_EXPR_PRE (lhs), inner);
5896 gcc_assert (!C_MAYBE_CONST_EXPR_INT_OPERANDS (lhs));
5897 C_MAYBE_CONST_EXPR_NON_CONST (result) = 1;
5898 protected_set_expr_location (result, location);
5899 return result;
5900 }
5901
5902 /* If a binary op has been requested, combine the old LHS value with the RHS
5903 producing the value we should actually store into the LHS. */
5904
5905 if (modifycode != NOP_EXPR)
5906 {
5907 lhs = c_fully_fold (lhs, false, NULL, true);
5908 lhs = stabilize_reference (lhs);
5909
5910 /* Construct the RHS for any non-atomic compound assignemnt. */
5911 if (!is_atomic_op)
5912 {
5913 /* If in LHS op= RHS the RHS has side-effects, ensure they
5914 are preevaluated before the rest of the assignment expression's
5915 side-effects, because RHS could contain e.g. function calls
5916 that modify LHS. */
5917 if (TREE_SIDE_EFFECTS (rhs))
5918 {
5919 if (TREE_CODE (rhs) == EXCESS_PRECISION_EXPR)
5920 newrhs = save_expr (TREE_OPERAND (rhs, 0));
5921 else
5922 newrhs = save_expr (rhs);
5923 rhseval = newrhs;
5924 if (TREE_CODE (rhs) == EXCESS_PRECISION_EXPR)
5925 newrhs = build1 (EXCESS_PRECISION_EXPR, TREE_TYPE (rhs),
5926 newrhs);
5927 }
5928 newrhs = build_binary_op (location,
5929 modifycode, lhs, newrhs, true);
5930
5931 /* The original type of the right hand side is no longer
5932 meaningful. */
5933 rhs_origtype = NULL_TREE;
5934 }
5935 }
5936
5937 if (c_dialect_objc ())
5938 {
5939 /* Check if we are modifying an Objective-C property reference;
5940 if so, we need to generate setter calls. */
5941 if (TREE_CODE (newrhs) == EXCESS_PRECISION_EXPR)
5942 result = objc_maybe_build_modify_expr (lhs, TREE_OPERAND (newrhs, 0));
5943 else
5944 result = objc_maybe_build_modify_expr (lhs, newrhs);
5945 if (result)
5946 goto return_result;
5947
5948 /* Else, do the check that we postponed for Objective-C. */
5949 if (!lvalue_or_else (location, lhs, lv_assign))
5950 return error_mark_node;
5951 }
5952
5953 /* Give an error for storing in something that is 'const'. */
5954
5955 if (TYPE_READONLY (lhstype)
5956 || (RECORD_OR_UNION_TYPE_P (lhstype)
5957 && C_TYPE_FIELDS_READONLY (lhstype)))
5958 {
5959 readonly_error (location, lhs, lv_assign);
5960 return error_mark_node;
5961 }
5962 else if (TREE_READONLY (lhs))
5963 readonly_warning (lhs, lv_assign);
5964
5965 /* If storing into a structure or union member,
5966 it has probably been given type `int'.
5967 Compute the type that would go with
5968 the actual amount of storage the member occupies. */
5969
5970 if (TREE_CODE (lhs) == COMPONENT_REF
5971 && (TREE_CODE (lhstype) == INTEGER_TYPE
5972 || TREE_CODE (lhstype) == BOOLEAN_TYPE
5973 || TREE_CODE (lhstype) == REAL_TYPE
5974 || TREE_CODE (lhstype) == ENUMERAL_TYPE))
5975 lhstype = TREE_TYPE (get_unwidened (lhs, 0));
5976
5977 /* If storing in a field that is in actuality a short or narrower than one,
5978 we must store in the field in its actual type. */
5979
5980 if (lhstype != TREE_TYPE (lhs))
5981 {
5982 lhs = copy_node (lhs);
5983 TREE_TYPE (lhs) = lhstype;
5984 }
5985
5986 /* Issue -Wc++-compat warnings about an assignment to an enum type
5987 when LHS does not have its original type. This happens for,
5988 e.g., an enum bitfield in a struct. */
5989 if (warn_cxx_compat
5990 && lhs_origtype != NULL_TREE
5991 && lhs_origtype != lhstype
5992 && TREE_CODE (lhs_origtype) == ENUMERAL_TYPE)
5993 {
5994 tree checktype = (rhs_origtype != NULL_TREE
5995 ? rhs_origtype
5996 : TREE_TYPE (rhs));
5997 if (checktype != error_mark_node
5998 && (TYPE_MAIN_VARIANT (checktype) != TYPE_MAIN_VARIANT (lhs_origtype)
5999 || (is_atomic_op && modifycode != NOP_EXPR)))
6000 warning_at (location, OPT_Wc___compat,
6001 "enum conversion in assignment is invalid in C++");
6002 }
6003
6004 /* If the lhs is atomic, remove that qualifier. */
6005 if (is_atomic_op)
6006 {
6007 lhstype = build_qualified_type (lhstype,
6008 (TYPE_QUALS (lhstype)
6009 & ~TYPE_QUAL_ATOMIC));
6010 olhstype = build_qualified_type (olhstype,
6011 (TYPE_QUALS (lhstype)
6012 & ~TYPE_QUAL_ATOMIC));
6013 }
6014
6015 /* Convert new value to destination type. Fold it first, then
6016 restore any excess precision information, for the sake of
6017 conversion warnings. */
6018
6019 if (!(is_atomic_op && modifycode != NOP_EXPR))
6020 {
6021 tree rhs_semantic_type = NULL_TREE;
6022 if (TREE_CODE (newrhs) == EXCESS_PRECISION_EXPR)
6023 {
6024 rhs_semantic_type = TREE_TYPE (newrhs);
6025 newrhs = TREE_OPERAND (newrhs, 0);
6026 }
6027 npc = null_pointer_constant_p (newrhs);
6028 newrhs = c_fully_fold (newrhs, false, NULL);
6029 if (rhs_semantic_type)
6030 newrhs = build1 (EXCESS_PRECISION_EXPR, rhs_semantic_type, newrhs);
6031 newrhs = convert_for_assignment (location, rhs_loc, lhstype, newrhs,
6032 rhs_origtype, ic_assign, npc,
6033 NULL_TREE, NULL_TREE, 0);
6034 if (TREE_CODE (newrhs) == ERROR_MARK)
6035 return error_mark_node;
6036 }
6037
6038 /* Emit ObjC write barrier, if necessary. */
6039 if (c_dialect_objc () && flag_objc_gc)
6040 {
6041 result = objc_generate_write_barrier (lhs, modifycode, newrhs);
6042 if (result)
6043 {
6044 protected_set_expr_location (result, location);
6045 goto return_result;
6046 }
6047 }
6048
6049 /* Scan operands. */
6050
6051 if (is_atomic_op)
6052 result = build_atomic_assign (location, lhs, modifycode, newrhs, false);
6053 else
6054 {
6055 result = build2 (MODIFY_EXPR, lhstype, lhs, newrhs);
6056 TREE_SIDE_EFFECTS (result) = 1;
6057 protected_set_expr_location (result, location);
6058 }
6059
6060 /* If we got the LHS in a different type for storing in,
6061 convert the result back to the nominal type of LHS
6062 so that the value we return always has the same type
6063 as the LHS argument. */
6064
6065 if (olhstype == TREE_TYPE (result))
6066 goto return_result;
6067
6068 result = convert_for_assignment (location, rhs_loc, olhstype, result,
6069 rhs_origtype, ic_assign, false, NULL_TREE,
6070 NULL_TREE, 0);
6071 protected_set_expr_location (result, location);
6072
6073 return_result:
6074 if (rhseval)
6075 result = build2 (COMPOUND_EXPR, TREE_TYPE (result), rhseval, result);
6076 return result;
6077 }
6078 \f
6079 /* Return whether STRUCT_TYPE has an anonymous field with type TYPE.
6080 This is used to implement -fplan9-extensions. */
6081
6082 static bool
6083 find_anonymous_field_with_type (tree struct_type, tree type)
6084 {
6085 tree field;
6086 bool found;
6087
6088 gcc_assert (RECORD_OR_UNION_TYPE_P (struct_type));
6089 found = false;
6090 for (field = TYPE_FIELDS (struct_type);
6091 field != NULL_TREE;
6092 field = TREE_CHAIN (field))
6093 {
6094 tree fieldtype = (TYPE_ATOMIC (TREE_TYPE (field))
6095 ? c_build_qualified_type (TREE_TYPE (field),
6096 TYPE_QUAL_ATOMIC)
6097 : TYPE_MAIN_VARIANT (TREE_TYPE (field)));
6098 if (DECL_NAME (field) == NULL
6099 && comptypes (type, fieldtype))
6100 {
6101 if (found)
6102 return false;
6103 found = true;
6104 }
6105 else if (DECL_NAME (field) == NULL
6106 && RECORD_OR_UNION_TYPE_P (TREE_TYPE (field))
6107 && find_anonymous_field_with_type (TREE_TYPE (field), type))
6108 {
6109 if (found)
6110 return false;
6111 found = true;
6112 }
6113 }
6114 return found;
6115 }
6116
6117 /* RHS is an expression whose type is pointer to struct. If there is
6118 an anonymous field in RHS with type TYPE, then return a pointer to
6119 that field in RHS. This is used with -fplan9-extensions. This
6120 returns NULL if no conversion could be found. */
6121
6122 static tree
6123 convert_to_anonymous_field (location_t location, tree type, tree rhs)
6124 {
6125 tree rhs_struct_type, lhs_main_type;
6126 tree field, found_field;
6127 bool found_sub_field;
6128 tree ret;
6129
6130 gcc_assert (POINTER_TYPE_P (TREE_TYPE (rhs)));
6131 rhs_struct_type = TREE_TYPE (TREE_TYPE (rhs));
6132 gcc_assert (RECORD_OR_UNION_TYPE_P (rhs_struct_type));
6133
6134 gcc_assert (POINTER_TYPE_P (type));
6135 lhs_main_type = (TYPE_ATOMIC (TREE_TYPE (type))
6136 ? c_build_qualified_type (TREE_TYPE (type),
6137 TYPE_QUAL_ATOMIC)
6138 : TYPE_MAIN_VARIANT (TREE_TYPE (type)));
6139
6140 found_field = NULL_TREE;
6141 found_sub_field = false;
6142 for (field = TYPE_FIELDS (rhs_struct_type);
6143 field != NULL_TREE;
6144 field = TREE_CHAIN (field))
6145 {
6146 if (DECL_NAME (field) != NULL_TREE
6147 || !RECORD_OR_UNION_TYPE_P (TREE_TYPE (field)))
6148 continue;
6149 tree fieldtype = (TYPE_ATOMIC (TREE_TYPE (field))
6150 ? c_build_qualified_type (TREE_TYPE (field),
6151 TYPE_QUAL_ATOMIC)
6152 : TYPE_MAIN_VARIANT (TREE_TYPE (field)));
6153 if (comptypes (lhs_main_type, fieldtype))
6154 {
6155 if (found_field != NULL_TREE)
6156 return NULL_TREE;
6157 found_field = field;
6158 }
6159 else if (find_anonymous_field_with_type (TREE_TYPE (field),
6160 lhs_main_type))
6161 {
6162 if (found_field != NULL_TREE)
6163 return NULL_TREE;
6164 found_field = field;
6165 found_sub_field = true;
6166 }
6167 }
6168
6169 if (found_field == NULL_TREE)
6170 return NULL_TREE;
6171
6172 ret = fold_build3_loc (location, COMPONENT_REF, TREE_TYPE (found_field),
6173 build_fold_indirect_ref (rhs), found_field,
6174 NULL_TREE);
6175 ret = build_fold_addr_expr_loc (location, ret);
6176
6177 if (found_sub_field)
6178 {
6179 ret = convert_to_anonymous_field (location, type, ret);
6180 gcc_assert (ret != NULL_TREE);
6181 }
6182
6183 return ret;
6184 }
6185
6186 /* Issue an error message for a bad initializer component.
6187 GMSGID identifies the message.
6188 The component name is taken from the spelling stack. */
6189
6190 static void
6191 error_init (location_t loc, const char *gmsgid)
6192 {
6193 char *ofwhat;
6194
6195 /* The gmsgid may be a format string with %< and %>. */
6196 error_at (loc, gmsgid);
6197 ofwhat = print_spelling ((char *) alloca (spelling_length () + 1));
6198 if (*ofwhat)
6199 inform (loc, "(near initialization for %qs)", ofwhat);
6200 }
6201
6202 /* Issue a pedantic warning for a bad initializer component. OPT is
6203 the option OPT_* (from options.h) controlling this warning or 0 if
6204 it is unconditionally given. GMSGID identifies the message. The
6205 component name is taken from the spelling stack. */
6206
6207 static void ATTRIBUTE_GCC_DIAG (3,0)
6208 pedwarn_init (location_t loc, int opt, const char *gmsgid, ...)
6209 {
6210 /* Use the location where a macro was expanded rather than where
6211 it was defined to make sure macros defined in system headers
6212 but used incorrectly elsewhere are diagnosed. */
6213 source_location exploc = expansion_point_location_if_in_system_header (loc);
6214
6215 va_list ap;
6216 va_start (ap, gmsgid);
6217 bool warned = emit_diagnostic_valist (DK_PEDWARN, exploc, opt, gmsgid, &ap);
6218 va_end (ap);
6219 char *ofwhat = print_spelling ((char *) alloca (spelling_length () + 1));
6220 if (*ofwhat && warned)
6221 inform (exploc, "(near initialization for %qs)", ofwhat);
6222 }
6223
6224 /* Issue a warning for a bad initializer component.
6225
6226 OPT is the OPT_W* value corresponding to the warning option that
6227 controls this warning. GMSGID identifies the message. The
6228 component name is taken from the spelling stack. */
6229
6230 static void
6231 warning_init (location_t loc, int opt, const char *gmsgid)
6232 {
6233 char *ofwhat;
6234 bool warned;
6235
6236 /* Use the location where a macro was expanded rather than where
6237 it was defined to make sure macros defined in system headers
6238 but used incorrectly elsewhere are diagnosed. */
6239 source_location exploc = expansion_point_location_if_in_system_header (loc);
6240
6241 /* The gmsgid may be a format string with %< and %>. */
6242 warned = warning_at (exploc, opt, gmsgid);
6243 ofwhat = print_spelling ((char *) alloca (spelling_length () + 1));
6244 if (*ofwhat && warned)
6245 inform (exploc, "(near initialization for %qs)", ofwhat);
6246 }
6247 \f
6248 /* If TYPE is an array type and EXPR is a parenthesized string
6249 constant, warn if pedantic that EXPR is being used to initialize an
6250 object of type TYPE. */
6251
6252 void
6253 maybe_warn_string_init (location_t loc, tree type, struct c_expr expr)
6254 {
6255 if (pedantic
6256 && TREE_CODE (type) == ARRAY_TYPE
6257 && TREE_CODE (expr.value) == STRING_CST
6258 && expr.original_code != STRING_CST)
6259 pedwarn_init (loc, OPT_Wpedantic,
6260 "array initialized from parenthesized string constant");
6261 }
6262
6263 /* Attempt to locate the parameter with the given index within FNDECL,
6264 returning DECL_SOURCE_LOCATION (FNDECL) if it can't be found. */
6265
6266 static location_t
6267 get_fndecl_argument_location (tree fndecl, int argnum)
6268 {
6269 int i;
6270 tree param;
6271
6272 /* Locate param by index within DECL_ARGUMENTS (fndecl). */
6273 for (i = 0, param = DECL_ARGUMENTS (fndecl);
6274 i < argnum && param;
6275 i++, param = TREE_CHAIN (param))
6276 ;
6277
6278 /* If something went wrong (e.g. if we have a builtin and thus no arguments),
6279 return DECL_SOURCE_LOCATION (FNDECL). */
6280 if (param == NULL)
6281 return DECL_SOURCE_LOCATION (fndecl);
6282
6283 return DECL_SOURCE_LOCATION (param);
6284 }
6285
6286 /* Issue a note about a mismatching argument for parameter PARMNUM
6287 to FUNDECL, for types EXPECTED_TYPE and ACTUAL_TYPE.
6288 Attempt to issue the note at the pertinent parameter of the decl;
6289 failing that issue it at the location of FUNDECL; failing that
6290 issue it at PLOC. */
6291
6292 static void
6293 inform_for_arg (tree fundecl, location_t ploc, int parmnum,
6294 tree expected_type, tree actual_type)
6295 {
6296 location_t loc;
6297 if (fundecl && !DECL_IS_BUILTIN (fundecl))
6298 loc = get_fndecl_argument_location (fundecl, parmnum - 1);
6299 else
6300 loc = ploc;
6301
6302 inform (loc,
6303 "expected %qT but argument is of type %qT",
6304 expected_type, actual_type);
6305 }
6306
6307 /* Convert value RHS to type TYPE as preparation for an assignment to
6308 an lvalue of type TYPE. If ORIGTYPE is not NULL_TREE, it is the
6309 original type of RHS; this differs from TREE_TYPE (RHS) for enum
6310 types. NULL_POINTER_CONSTANT says whether RHS was a null pointer
6311 constant before any folding.
6312 The real work of conversion is done by `convert'.
6313 The purpose of this function is to generate error messages
6314 for assignments that are not allowed in C.
6315 ERRTYPE says whether it is argument passing, assignment,
6316 initialization or return.
6317
6318 In the following example, '~' denotes where EXPR_LOC and '^' where
6319 LOCATION point to:
6320
6321 f (var); [ic_argpass]
6322 ^ ~~~
6323 x = var; [ic_assign]
6324 ^ ~~~;
6325 int x = var; [ic_init]
6326 ^^^
6327 return x; [ic_return]
6328 ^
6329
6330 FUNCTION is a tree for the function being called.
6331 PARMNUM is the number of the argument, for printing in error messages. */
6332
6333 static tree
6334 convert_for_assignment (location_t location, location_t expr_loc, tree type,
6335 tree rhs, tree origtype, enum impl_conv errtype,
6336 bool null_pointer_constant, tree fundecl,
6337 tree function, int parmnum)
6338 {
6339 enum tree_code codel = TREE_CODE (type);
6340 tree orig_rhs = rhs;
6341 tree rhstype;
6342 enum tree_code coder;
6343 tree rname = NULL_TREE;
6344 bool objc_ok = false;
6345
6346 /* Use the expansion point location to handle cases such as user's
6347 function returning a wrong-type macro defined in a system header. */
6348 location = expansion_point_location_if_in_system_header (location);
6349
6350 if (errtype == ic_argpass)
6351 {
6352 tree selector;
6353 /* Change pointer to function to the function itself for
6354 diagnostics. */
6355 if (TREE_CODE (function) == ADDR_EXPR
6356 && TREE_CODE (TREE_OPERAND (function, 0)) == FUNCTION_DECL)
6357 function = TREE_OPERAND (function, 0);
6358
6359 /* Handle an ObjC selector specially for diagnostics. */
6360 selector = objc_message_selector ();
6361 rname = function;
6362 if (selector && parmnum > 2)
6363 {
6364 rname = selector;
6365 parmnum -= 2;
6366 }
6367 }
6368
6369 /* This macro is used to emit diagnostics to ensure that all format
6370 strings are complete sentences, visible to gettext and checked at
6371 compile time. */
6372 #define PEDWARN_FOR_ASSIGNMENT(LOCATION, PLOC, OPT, AR, AS, IN, RE) \
6373 do { \
6374 switch (errtype) \
6375 { \
6376 case ic_argpass: \
6377 if (pedwarn (PLOC, OPT, AR, parmnum, rname)) \
6378 inform_for_arg (fundecl, (PLOC), parmnum, type, rhstype); \
6379 break; \
6380 case ic_assign: \
6381 pedwarn (LOCATION, OPT, AS); \
6382 break; \
6383 case ic_init: \
6384 pedwarn_init (LOCATION, OPT, IN); \
6385 break; \
6386 case ic_return: \
6387 pedwarn (LOCATION, OPT, RE); \
6388 break; \
6389 default: \
6390 gcc_unreachable (); \
6391 } \
6392 } while (0)
6393
6394 /* This macro is used to emit diagnostics to ensure that all format
6395 strings are complete sentences, visible to gettext and checked at
6396 compile time. It is the same as PEDWARN_FOR_ASSIGNMENT but with an
6397 extra parameter to enumerate qualifiers. */
6398 #define PEDWARN_FOR_QUALIFIERS(LOCATION, PLOC, OPT, AR, AS, IN, RE, QUALS) \
6399 do { \
6400 switch (errtype) \
6401 { \
6402 case ic_argpass: \
6403 if (pedwarn (PLOC, OPT, AR, parmnum, rname, QUALS)) \
6404 inform_for_arg (fundecl, (PLOC), parmnum, type, rhstype); \
6405 break; \
6406 case ic_assign: \
6407 pedwarn (LOCATION, OPT, AS, QUALS); \
6408 break; \
6409 case ic_init: \
6410 pedwarn (LOCATION, OPT, IN, QUALS); \
6411 break; \
6412 case ic_return: \
6413 pedwarn (LOCATION, OPT, RE, QUALS); \
6414 break; \
6415 default: \
6416 gcc_unreachable (); \
6417 } \
6418 } while (0)
6419
6420 /* This macro is used to emit diagnostics to ensure that all format
6421 strings are complete sentences, visible to gettext and checked at
6422 compile time. It is the same as PEDWARN_FOR_QUALIFIERS but uses
6423 warning_at instead of pedwarn. */
6424 #define WARNING_FOR_QUALIFIERS(LOCATION, PLOC, OPT, AR, AS, IN, RE, QUALS) \
6425 do { \
6426 switch (errtype) \
6427 { \
6428 case ic_argpass: \
6429 if (warning_at (PLOC, OPT, AR, parmnum, rname, QUALS)) \
6430 inform_for_arg (fundecl, (PLOC), parmnum, type, rhstype); \
6431 break; \
6432 case ic_assign: \
6433 warning_at (LOCATION, OPT, AS, QUALS); \
6434 break; \
6435 case ic_init: \
6436 warning_at (LOCATION, OPT, IN, QUALS); \
6437 break; \
6438 case ic_return: \
6439 warning_at (LOCATION, OPT, RE, QUALS); \
6440 break; \
6441 default: \
6442 gcc_unreachable (); \
6443 } \
6444 } while (0)
6445
6446 if (TREE_CODE (rhs) == EXCESS_PRECISION_EXPR)
6447 rhs = TREE_OPERAND (rhs, 0);
6448
6449 rhstype = TREE_TYPE (rhs);
6450 coder = TREE_CODE (rhstype);
6451
6452 if (coder == ERROR_MARK)
6453 return error_mark_node;
6454
6455 if (c_dialect_objc ())
6456 {
6457 int parmno;
6458
6459 switch (errtype)
6460 {
6461 case ic_return:
6462 parmno = 0;
6463 break;
6464
6465 case ic_assign:
6466 parmno = -1;
6467 break;
6468
6469 case ic_init:
6470 parmno = -2;
6471 break;
6472
6473 default:
6474 parmno = parmnum;
6475 break;
6476 }
6477
6478 objc_ok = objc_compare_types (type, rhstype, parmno, rname);
6479 }
6480
6481 if (warn_cxx_compat)
6482 {
6483 tree checktype = origtype != NULL_TREE ? origtype : rhstype;
6484 if (checktype != error_mark_node
6485 && TREE_CODE (type) == ENUMERAL_TYPE
6486 && TYPE_MAIN_VARIANT (checktype) != TYPE_MAIN_VARIANT (type))
6487 switch (errtype)
6488 {
6489 case ic_argpass:
6490 if (pedwarn (expr_loc, OPT_Wc___compat, "enum conversion when "
6491 "passing argument %d of %qE is invalid in C++",
6492 parmnum, rname))
6493 inform ((fundecl && !DECL_IS_BUILTIN (fundecl))
6494 ? DECL_SOURCE_LOCATION (fundecl) : expr_loc,
6495 "expected %qT but argument is of type %qT",
6496 type, rhstype);
6497 break;
6498 case ic_assign:
6499 pedwarn (location, OPT_Wc___compat, "enum conversion from %qT to "
6500 "%qT in assignment is invalid in C++", rhstype, type);
6501 break;
6502 case ic_init:
6503 pedwarn_init (location, OPT_Wc___compat, "enum conversion from "
6504 "%qT to %qT in initialization is invalid in C++",
6505 rhstype, type);
6506 break;
6507 case ic_return:
6508 pedwarn (location, OPT_Wc___compat, "enum conversion from %qT to "
6509 "%qT in return is invalid in C++", rhstype, type);
6510 break;
6511 default:
6512 gcc_unreachable ();
6513 }
6514 }
6515
6516 if (TYPE_MAIN_VARIANT (type) == TYPE_MAIN_VARIANT (rhstype))
6517 return rhs;
6518
6519 if (coder == VOID_TYPE)
6520 {
6521 /* Except for passing an argument to an unprototyped function,
6522 this is a constraint violation. When passing an argument to
6523 an unprototyped function, it is compile-time undefined;
6524 making it a constraint in that case was rejected in
6525 DR#252. */
6526 error_at (location, "void value not ignored as it ought to be");
6527 return error_mark_node;
6528 }
6529 rhs = require_complete_type (location, rhs);
6530 if (rhs == error_mark_node)
6531 return error_mark_node;
6532
6533 if (coder == POINTER_TYPE && reject_gcc_builtin (rhs))
6534 return error_mark_node;
6535
6536 /* A non-reference type can convert to a reference. This handles
6537 va_start, va_copy and possibly port built-ins. */
6538 if (codel == REFERENCE_TYPE && coder != REFERENCE_TYPE)
6539 {
6540 if (!lvalue_p (rhs))
6541 {
6542 error_at (location, "cannot pass rvalue to reference parameter");
6543 return error_mark_node;
6544 }
6545 if (!c_mark_addressable (rhs))
6546 return error_mark_node;
6547 rhs = build1 (ADDR_EXPR, build_pointer_type (TREE_TYPE (rhs)), rhs);
6548 SET_EXPR_LOCATION (rhs, location);
6549
6550 rhs = convert_for_assignment (location, expr_loc,
6551 build_pointer_type (TREE_TYPE (type)),
6552 rhs, origtype, errtype,
6553 null_pointer_constant, fundecl, function,
6554 parmnum);
6555 if (rhs == error_mark_node)
6556 return error_mark_node;
6557
6558 rhs = build1 (NOP_EXPR, type, rhs);
6559 SET_EXPR_LOCATION (rhs, location);
6560 return rhs;
6561 }
6562 /* Some types can interconvert without explicit casts. */
6563 else if (codel == VECTOR_TYPE && coder == VECTOR_TYPE
6564 && vector_types_convertible_p (type, TREE_TYPE (rhs), true))
6565 return convert (type, rhs);
6566 /* Arithmetic types all interconvert, and enum is treated like int. */
6567 else if ((codel == INTEGER_TYPE || codel == REAL_TYPE
6568 || codel == FIXED_POINT_TYPE
6569 || codel == ENUMERAL_TYPE || codel == COMPLEX_TYPE
6570 || codel == BOOLEAN_TYPE)
6571 && (coder == INTEGER_TYPE || coder == REAL_TYPE
6572 || coder == FIXED_POINT_TYPE
6573 || coder == ENUMERAL_TYPE || coder == COMPLEX_TYPE
6574 || coder == BOOLEAN_TYPE))
6575 {
6576 tree ret;
6577 bool save = in_late_binary_op;
6578 if (codel == BOOLEAN_TYPE || codel == COMPLEX_TYPE
6579 || (coder == REAL_TYPE
6580 && (codel == INTEGER_TYPE || codel == ENUMERAL_TYPE)
6581 && sanitize_flags_p (SANITIZE_FLOAT_CAST)))
6582 in_late_binary_op = true;
6583 ret = convert_and_check (expr_loc != UNKNOWN_LOCATION
6584 ? expr_loc : location, type, orig_rhs);
6585 in_late_binary_op = save;
6586 return ret;
6587 }
6588
6589 /* Aggregates in different TUs might need conversion. */
6590 if ((codel == RECORD_TYPE || codel == UNION_TYPE)
6591 && codel == coder
6592 && comptypes (type, rhstype))
6593 return convert_and_check (expr_loc != UNKNOWN_LOCATION
6594 ? expr_loc : location, type, rhs);
6595
6596 /* Conversion to a transparent union or record from its member types.
6597 This applies only to function arguments. */
6598 if (((codel == UNION_TYPE || codel == RECORD_TYPE)
6599 && TYPE_TRANSPARENT_AGGR (type))
6600 && errtype == ic_argpass)
6601 {
6602 tree memb, marginal_memb = NULL_TREE;
6603
6604 for (memb = TYPE_FIELDS (type); memb ; memb = DECL_CHAIN (memb))
6605 {
6606 tree memb_type = TREE_TYPE (memb);
6607
6608 if (comptypes (TYPE_MAIN_VARIANT (memb_type),
6609 TYPE_MAIN_VARIANT (rhstype)))
6610 break;
6611
6612 if (TREE_CODE (memb_type) != POINTER_TYPE)
6613 continue;
6614
6615 if (coder == POINTER_TYPE)
6616 {
6617 tree ttl = TREE_TYPE (memb_type);
6618 tree ttr = TREE_TYPE (rhstype);
6619
6620 /* Any non-function converts to a [const][volatile] void *
6621 and vice versa; otherwise, targets must be the same.
6622 Meanwhile, the lhs target must have all the qualifiers of
6623 the rhs. */
6624 if ((VOID_TYPE_P (ttl) && !TYPE_ATOMIC (ttl))
6625 || (VOID_TYPE_P (ttr) && !TYPE_ATOMIC (ttr))
6626 || comp_target_types (location, memb_type, rhstype))
6627 {
6628 int lquals = TYPE_QUALS (ttl) & ~TYPE_QUAL_ATOMIC;
6629 int rquals = TYPE_QUALS (ttr) & ~TYPE_QUAL_ATOMIC;
6630 /* If this type won't generate any warnings, use it. */
6631 if (lquals == rquals
6632 || ((TREE_CODE (ttr) == FUNCTION_TYPE
6633 && TREE_CODE (ttl) == FUNCTION_TYPE)
6634 ? ((lquals | rquals) == rquals)
6635 : ((lquals | rquals) == lquals)))
6636 break;
6637
6638 /* Keep looking for a better type, but remember this one. */
6639 if (!marginal_memb)
6640 marginal_memb = memb;
6641 }
6642 }
6643
6644 /* Can convert integer zero to any pointer type. */
6645 if (null_pointer_constant)
6646 {
6647 rhs = null_pointer_node;
6648 break;
6649 }
6650 }
6651
6652 if (memb || marginal_memb)
6653 {
6654 if (!memb)
6655 {
6656 /* We have only a marginally acceptable member type;
6657 it needs a warning. */
6658 tree ttl = TREE_TYPE (TREE_TYPE (marginal_memb));
6659 tree ttr = TREE_TYPE (rhstype);
6660
6661 /* Const and volatile mean something different for function
6662 types, so the usual warnings are not appropriate. */
6663 if (TREE_CODE (ttr) == FUNCTION_TYPE
6664 && TREE_CODE (ttl) == FUNCTION_TYPE)
6665 {
6666 /* Because const and volatile on functions are
6667 restrictions that say the function will not do
6668 certain things, it is okay to use a const or volatile
6669 function where an ordinary one is wanted, but not
6670 vice-versa. */
6671 if (TYPE_QUALS_NO_ADDR_SPACE (ttl)
6672 & ~TYPE_QUALS_NO_ADDR_SPACE (ttr))
6673 PEDWARN_FOR_QUALIFIERS (location, expr_loc,
6674 OPT_Wdiscarded_qualifiers,
6675 G_("passing argument %d of %qE "
6676 "makes %q#v qualified function "
6677 "pointer from unqualified"),
6678 G_("assignment makes %q#v qualified "
6679 "function pointer from "
6680 "unqualified"),
6681 G_("initialization makes %q#v qualified "
6682 "function pointer from "
6683 "unqualified"),
6684 G_("return makes %q#v qualified function "
6685 "pointer from unqualified"),
6686 TYPE_QUALS (ttl) & ~TYPE_QUALS (ttr));
6687 }
6688 else if (TYPE_QUALS_NO_ADDR_SPACE (ttr)
6689 & ~TYPE_QUALS_NO_ADDR_SPACE (ttl))
6690 PEDWARN_FOR_QUALIFIERS (location, expr_loc,
6691 OPT_Wdiscarded_qualifiers,
6692 G_("passing argument %d of %qE discards "
6693 "%qv qualifier from pointer target type"),
6694 G_("assignment discards %qv qualifier "
6695 "from pointer target type"),
6696 G_("initialization discards %qv qualifier "
6697 "from pointer target type"),
6698 G_("return discards %qv qualifier from "
6699 "pointer target type"),
6700 TYPE_QUALS (ttr) & ~TYPE_QUALS (ttl));
6701
6702 memb = marginal_memb;
6703 }
6704
6705 if (!fundecl || !DECL_IN_SYSTEM_HEADER (fundecl))
6706 pedwarn (location, OPT_Wpedantic,
6707 "ISO C prohibits argument conversion to union type");
6708
6709 rhs = fold_convert_loc (location, TREE_TYPE (memb), rhs);
6710 return build_constructor_single (type, memb, rhs);
6711 }
6712 }
6713
6714 /* Conversions among pointers */
6715 else if ((codel == POINTER_TYPE || codel == REFERENCE_TYPE)
6716 && (coder == codel))
6717 {
6718 tree ttl = TREE_TYPE (type);
6719 tree ttr = TREE_TYPE (rhstype);
6720 tree mvl = ttl;
6721 tree mvr = ttr;
6722 bool is_opaque_pointer;
6723 int target_cmp = 0; /* Cache comp_target_types () result. */
6724 addr_space_t asl;
6725 addr_space_t asr;
6726
6727 if (TREE_CODE (mvl) != ARRAY_TYPE)
6728 mvl = (TYPE_ATOMIC (mvl)
6729 ? c_build_qualified_type (TYPE_MAIN_VARIANT (mvl),
6730 TYPE_QUAL_ATOMIC)
6731 : TYPE_MAIN_VARIANT (mvl));
6732 if (TREE_CODE (mvr) != ARRAY_TYPE)
6733 mvr = (TYPE_ATOMIC (mvr)
6734 ? c_build_qualified_type (TYPE_MAIN_VARIANT (mvr),
6735 TYPE_QUAL_ATOMIC)
6736 : TYPE_MAIN_VARIANT (mvr));
6737 /* Opaque pointers are treated like void pointers. */
6738 is_opaque_pointer = vector_targets_convertible_p (ttl, ttr);
6739
6740 /* The Plan 9 compiler permits a pointer to a struct to be
6741 automatically converted into a pointer to an anonymous field
6742 within the struct. */
6743 if (flag_plan9_extensions
6744 && RECORD_OR_UNION_TYPE_P (mvl)
6745 && RECORD_OR_UNION_TYPE_P (mvr)
6746 && mvl != mvr)
6747 {
6748 tree new_rhs = convert_to_anonymous_field (location, type, rhs);
6749 if (new_rhs != NULL_TREE)
6750 {
6751 rhs = new_rhs;
6752 rhstype = TREE_TYPE (rhs);
6753 coder = TREE_CODE (rhstype);
6754 ttr = TREE_TYPE (rhstype);
6755 mvr = TYPE_MAIN_VARIANT (ttr);
6756 }
6757 }
6758
6759 /* C++ does not allow the implicit conversion void* -> T*. However,
6760 for the purpose of reducing the number of false positives, we
6761 tolerate the special case of
6762
6763 int *p = NULL;
6764
6765 where NULL is typically defined in C to be '(void *) 0'. */
6766 if (VOID_TYPE_P (ttr) && rhs != null_pointer_node && !VOID_TYPE_P (ttl))
6767 warning_at (errtype == ic_argpass ? expr_loc : location,
6768 OPT_Wc___compat,
6769 "request for implicit conversion "
6770 "from %qT to %qT not permitted in C++", rhstype, type);
6771
6772 /* See if the pointers point to incompatible address spaces. */
6773 asl = TYPE_ADDR_SPACE (ttl);
6774 asr = TYPE_ADDR_SPACE (ttr);
6775 if (!null_pointer_constant_p (rhs)
6776 && asr != asl && !targetm.addr_space.subset_p (asr, asl))
6777 {
6778 switch (errtype)
6779 {
6780 case ic_argpass:
6781 error_at (expr_loc, "passing argument %d of %qE from pointer to "
6782 "non-enclosed address space", parmnum, rname);
6783 break;
6784 case ic_assign:
6785 error_at (location, "assignment from pointer to "
6786 "non-enclosed address space");
6787 break;
6788 case ic_init:
6789 error_at (location, "initialization from pointer to "
6790 "non-enclosed address space");
6791 break;
6792 case ic_return:
6793 error_at (location, "return from pointer to "
6794 "non-enclosed address space");
6795 break;
6796 default:
6797 gcc_unreachable ();
6798 }
6799 return error_mark_node;
6800 }
6801
6802 /* Check if the right-hand side has a format attribute but the
6803 left-hand side doesn't. */
6804 if (warn_suggest_attribute_format
6805 && check_missing_format_attribute (type, rhstype))
6806 {
6807 switch (errtype)
6808 {
6809 case ic_argpass:
6810 warning_at (expr_loc, OPT_Wsuggest_attribute_format,
6811 "argument %d of %qE might be "
6812 "a candidate for a format attribute",
6813 parmnum, rname);
6814 break;
6815 case ic_assign:
6816 warning_at (location, OPT_Wsuggest_attribute_format,
6817 "assignment left-hand side might be "
6818 "a candidate for a format attribute");
6819 break;
6820 case ic_init:
6821 warning_at (location, OPT_Wsuggest_attribute_format,
6822 "initialization left-hand side might be "
6823 "a candidate for a format attribute");
6824 break;
6825 case ic_return:
6826 warning_at (location, OPT_Wsuggest_attribute_format,
6827 "return type might be "
6828 "a candidate for a format attribute");
6829 break;
6830 default:
6831 gcc_unreachable ();
6832 }
6833 }
6834
6835 /* Any non-function converts to a [const][volatile] void *
6836 and vice versa; otherwise, targets must be the same.
6837 Meanwhile, the lhs target must have all the qualifiers of the rhs. */
6838 if ((VOID_TYPE_P (ttl) && !TYPE_ATOMIC (ttl))
6839 || (VOID_TYPE_P (ttr) && !TYPE_ATOMIC (ttr))
6840 || (target_cmp = comp_target_types (location, type, rhstype))
6841 || is_opaque_pointer
6842 || ((c_common_unsigned_type (mvl)
6843 == c_common_unsigned_type (mvr))
6844 && (c_common_signed_type (mvl)
6845 == c_common_signed_type (mvr))
6846 && TYPE_ATOMIC (mvl) == TYPE_ATOMIC (mvr)))
6847 {
6848 /* Warn about loss of qualifers from pointers to arrays with
6849 qualifiers on the element type. */
6850 if (TREE_CODE (ttr) == ARRAY_TYPE)
6851 {
6852 ttr = strip_array_types (ttr);
6853 ttl = strip_array_types (ttl);
6854
6855 if (TYPE_QUALS_NO_ADDR_SPACE_NO_ATOMIC (ttr)
6856 & ~TYPE_QUALS_NO_ADDR_SPACE_NO_ATOMIC (ttl))
6857 WARNING_FOR_QUALIFIERS (location, expr_loc,
6858 OPT_Wdiscarded_array_qualifiers,
6859 G_("passing argument %d of %qE discards "
6860 "%qv qualifier from pointer target type"),
6861 G_("assignment discards %qv qualifier "
6862 "from pointer target type"),
6863 G_("initialization discards %qv qualifier "
6864 "from pointer target type"),
6865 G_("return discards %qv qualifier from "
6866 "pointer target type"),
6867 TYPE_QUALS (ttr) & ~TYPE_QUALS (ttl));
6868 }
6869 else if (pedantic
6870 && ((VOID_TYPE_P (ttl) && TREE_CODE (ttr) == FUNCTION_TYPE)
6871 ||
6872 (VOID_TYPE_P (ttr)
6873 && !null_pointer_constant
6874 && TREE_CODE (ttl) == FUNCTION_TYPE)))
6875 PEDWARN_FOR_ASSIGNMENT (location, expr_loc, OPT_Wpedantic,
6876 G_("ISO C forbids passing argument %d of "
6877 "%qE between function pointer "
6878 "and %<void *%>"),
6879 G_("ISO C forbids assignment between "
6880 "function pointer and %<void *%>"),
6881 G_("ISO C forbids initialization between "
6882 "function pointer and %<void *%>"),
6883 G_("ISO C forbids return between function "
6884 "pointer and %<void *%>"));
6885 /* Const and volatile mean something different for function types,
6886 so the usual warnings are not appropriate. */
6887 else if (TREE_CODE (ttr) != FUNCTION_TYPE
6888 && TREE_CODE (ttl) != FUNCTION_TYPE)
6889 {
6890 /* Don't warn about loss of qualifier for conversions from
6891 qualified void* to pointers to arrays with corresponding
6892 qualifier on the element type. */
6893 if (!pedantic)
6894 ttl = strip_array_types (ttl);
6895
6896 /* Assignments between atomic and non-atomic objects are OK. */
6897 if (TYPE_QUALS_NO_ADDR_SPACE_NO_ATOMIC (ttr)
6898 & ~TYPE_QUALS_NO_ADDR_SPACE_NO_ATOMIC (ttl))
6899 {
6900 PEDWARN_FOR_QUALIFIERS (location, expr_loc,
6901 OPT_Wdiscarded_qualifiers,
6902 G_("passing argument %d of %qE discards "
6903 "%qv qualifier from pointer target type"),
6904 G_("assignment discards %qv qualifier "
6905 "from pointer target type"),
6906 G_("initialization discards %qv qualifier "
6907 "from pointer target type"),
6908 G_("return discards %qv qualifier from "
6909 "pointer target type"),
6910 TYPE_QUALS (ttr) & ~TYPE_QUALS (ttl));
6911 }
6912 /* If this is not a case of ignoring a mismatch in signedness,
6913 no warning. */
6914 else if (VOID_TYPE_P (ttl) || VOID_TYPE_P (ttr)
6915 || target_cmp)
6916 ;
6917 /* If there is a mismatch, do warn. */
6918 else if (warn_pointer_sign)
6919 switch (errtype)
6920 {
6921 case ic_argpass:
6922 if (pedwarn (expr_loc, OPT_Wpointer_sign,
6923 "pointer targets in passing argument %d of "
6924 "%qE differ in signedness", parmnum, rname))
6925 inform ((fundecl && !DECL_IS_BUILTIN (fundecl))
6926 ? DECL_SOURCE_LOCATION (fundecl) : expr_loc,
6927 "expected %qT but argument is of type %qT",
6928 type, rhstype);
6929 break;
6930 case ic_assign:
6931 pedwarn (location, OPT_Wpointer_sign,
6932 "pointer targets in assignment from %qT to %qT "
6933 "differ in signedness", rhstype, type);
6934 break;
6935 case ic_init:
6936 pedwarn_init (location, OPT_Wpointer_sign,
6937 "pointer targets in initialization of %qT "
6938 "from %qT differ in signedness", type,
6939 rhstype);
6940 break;
6941 case ic_return:
6942 pedwarn (location, OPT_Wpointer_sign, "pointer targets in "
6943 "returning %qT from a function with return type "
6944 "%qT differ in signedness", rhstype, type);
6945 break;
6946 default:
6947 gcc_unreachable ();
6948 }
6949 }
6950 else if (TREE_CODE (ttl) == FUNCTION_TYPE
6951 && TREE_CODE (ttr) == FUNCTION_TYPE)
6952 {
6953 /* Because const and volatile on functions are restrictions
6954 that say the function will not do certain things,
6955 it is okay to use a const or volatile function
6956 where an ordinary one is wanted, but not vice-versa. */
6957 if (TYPE_QUALS_NO_ADDR_SPACE (ttl)
6958 & ~TYPE_QUALS_NO_ADDR_SPACE (ttr))
6959 PEDWARN_FOR_QUALIFIERS (location, expr_loc,
6960 OPT_Wdiscarded_qualifiers,
6961 G_("passing argument %d of %qE makes "
6962 "%q#v qualified function pointer "
6963 "from unqualified"),
6964 G_("assignment makes %q#v qualified function "
6965 "pointer from unqualified"),
6966 G_("initialization makes %q#v qualified "
6967 "function pointer from unqualified"),
6968 G_("return makes %q#v qualified function "
6969 "pointer from unqualified"),
6970 TYPE_QUALS (ttl) & ~TYPE_QUALS (ttr));
6971 }
6972 }
6973 /* Avoid warning about the volatile ObjC EH puts on decls. */
6974 else if (!objc_ok)
6975 {
6976 switch (errtype)
6977 {
6978 case ic_argpass:
6979 if (pedwarn (expr_loc, OPT_Wincompatible_pointer_types,
6980 "passing argument %d of %qE from incompatible "
6981 "pointer type", parmnum, rname))
6982 inform_for_arg (fundecl, expr_loc, parmnum, type, rhstype);
6983 break;
6984 case ic_assign:
6985 pedwarn (location, OPT_Wincompatible_pointer_types,
6986 "assignment to %qT from incompatible pointer type %qT",
6987 type, rhstype);
6988 break;
6989 case ic_init:
6990 pedwarn_init (location, OPT_Wincompatible_pointer_types,
6991 "initialization of %qT from incompatible pointer "
6992 "type %qT", type, rhstype);
6993 break;
6994 case ic_return:
6995 pedwarn (location, OPT_Wincompatible_pointer_types,
6996 "returning %qT from a function with incompatible "
6997 "return type %qT", rhstype, type);
6998 break;
6999 default:
7000 gcc_unreachable ();
7001 }
7002 }
7003
7004 return convert (type, rhs);
7005 }
7006 else if (codel == POINTER_TYPE && coder == ARRAY_TYPE)
7007 {
7008 /* ??? This should not be an error when inlining calls to
7009 unprototyped functions. */
7010 error_at (location, "invalid use of non-lvalue array");
7011 return error_mark_node;
7012 }
7013 else if (codel == POINTER_TYPE && coder == INTEGER_TYPE)
7014 {
7015 /* An explicit constant 0 can convert to a pointer,
7016 or one that results from arithmetic, even including
7017 a cast to integer type. */
7018 if (!null_pointer_constant)
7019 switch (errtype)
7020 {
7021 case ic_argpass:
7022 if (pedwarn (expr_loc, OPT_Wint_conversion,
7023 "passing argument %d of %qE makes pointer from "
7024 "integer without a cast", parmnum, rname))
7025 inform_for_arg (fundecl, expr_loc, parmnum, type, rhstype);
7026 break;
7027 case ic_assign:
7028 pedwarn (location, OPT_Wint_conversion,
7029 "assignment to %qT from %qT makes pointer from integer "
7030 "without a cast", type, rhstype);
7031 break;
7032 case ic_init:
7033 pedwarn_init (location, OPT_Wint_conversion,
7034 "initialization of %qT from %qT makes pointer from "
7035 "integer without a cast", type, rhstype);
7036 break;
7037 case ic_return:
7038 pedwarn (location, OPT_Wint_conversion, "returning %qT from a "
7039 "function with return type %qT makes pointer from "
7040 "integer without a cast", rhstype, type);
7041 break;
7042 default:
7043 gcc_unreachable ();
7044 }
7045
7046 return convert (type, rhs);
7047 }
7048 else if (codel == INTEGER_TYPE && coder == POINTER_TYPE)
7049 {
7050 switch (errtype)
7051 {
7052 case ic_argpass:
7053 if (pedwarn (expr_loc, OPT_Wint_conversion,
7054 "passing argument %d of %qE makes integer from "
7055 "pointer without a cast", parmnum, rname))
7056 inform_for_arg (fundecl, expr_loc, parmnum, type, rhstype);
7057 break;
7058 case ic_assign:
7059 pedwarn (location, OPT_Wint_conversion,
7060 "assignment to %qT from %qT makes integer from pointer "
7061 "without a cast", type, rhstype);
7062 break;
7063 case ic_init:
7064 pedwarn_init (location, OPT_Wint_conversion,
7065 "initialization of %qT from %qT makes integer from "
7066 "pointer without a cast", type, rhstype);
7067 break;
7068 case ic_return:
7069 pedwarn (location, OPT_Wint_conversion, "returning %qT from a "
7070 "function with return type %qT makes integer from "
7071 "pointer without a cast", rhstype, type);
7072 break;
7073 default:
7074 gcc_unreachable ();
7075 }
7076
7077 return convert (type, rhs);
7078 }
7079 else if (codel == BOOLEAN_TYPE && coder == POINTER_TYPE)
7080 {
7081 tree ret;
7082 bool save = in_late_binary_op;
7083 in_late_binary_op = true;
7084 ret = convert (type, rhs);
7085 in_late_binary_op = save;
7086 return ret;
7087 }
7088
7089 switch (errtype)
7090 {
7091 case ic_argpass:
7092 error_at (expr_loc, "incompatible type for argument %d of %qE", parmnum,
7093 rname);
7094 inform_for_arg (fundecl, expr_loc, parmnum, type, rhstype);
7095 break;
7096 case ic_assign:
7097 error_at (location, "incompatible types when assigning to type %qT from "
7098 "type %qT", type, rhstype);
7099 break;
7100 case ic_init:
7101 error_at (location,
7102 "incompatible types when initializing type %qT using type %qT",
7103 type, rhstype);
7104 break;
7105 case ic_return:
7106 error_at (location,
7107 "incompatible types when returning type %qT but %qT was "
7108 "expected", rhstype, type);
7109 break;
7110 default:
7111 gcc_unreachable ();
7112 }
7113
7114 return error_mark_node;
7115 }
7116 \f
7117 /* If VALUE is a compound expr all of whose expressions are constant, then
7118 return its value. Otherwise, return error_mark_node.
7119
7120 This is for handling COMPOUND_EXPRs as initializer elements
7121 which is allowed with a warning when -pedantic is specified. */
7122
7123 static tree
7124 valid_compound_expr_initializer (tree value, tree endtype)
7125 {
7126 if (TREE_CODE (value) == COMPOUND_EXPR)
7127 {
7128 if (valid_compound_expr_initializer (TREE_OPERAND (value, 0), endtype)
7129 == error_mark_node)
7130 return error_mark_node;
7131 return valid_compound_expr_initializer (TREE_OPERAND (value, 1),
7132 endtype);
7133 }
7134 else if (!initializer_constant_valid_p (value, endtype))
7135 return error_mark_node;
7136 else
7137 return value;
7138 }
7139 \f
7140 /* Perform appropriate conversions on the initial value of a variable,
7141 store it in the declaration DECL,
7142 and print any error messages that are appropriate.
7143 If ORIGTYPE is not NULL_TREE, it is the original type of INIT.
7144 If the init is invalid, store an ERROR_MARK.
7145
7146 INIT_LOC is the location of the initial value. */
7147
7148 void
7149 store_init_value (location_t init_loc, tree decl, tree init, tree origtype)
7150 {
7151 tree value, type;
7152 bool npc = false;
7153
7154 /* If variable's type was invalidly declared, just ignore it. */
7155
7156 type = TREE_TYPE (decl);
7157 if (TREE_CODE (type) == ERROR_MARK)
7158 return;
7159
7160 /* Digest the specified initializer into an expression. */
7161
7162 if (init)
7163 npc = null_pointer_constant_p (init);
7164 value = digest_init (init_loc, type, init, origtype, npc,
7165 true, TREE_STATIC (decl));
7166
7167 /* Store the expression if valid; else report error. */
7168
7169 if (!in_system_header_at (input_location)
7170 && AGGREGATE_TYPE_P (TREE_TYPE (decl)) && !TREE_STATIC (decl))
7171 warning (OPT_Wtraditional, "traditional C rejects automatic "
7172 "aggregate initialization");
7173
7174 if (value != error_mark_node || TREE_CODE (decl) != FUNCTION_DECL)
7175 DECL_INITIAL (decl) = value;
7176
7177 /* ANSI wants warnings about out-of-range constant initializers. */
7178 STRIP_TYPE_NOPS (value);
7179 if (TREE_STATIC (decl))
7180 constant_expression_warning (value);
7181
7182 /* Check if we need to set array size from compound literal size. */
7183 if (TREE_CODE (type) == ARRAY_TYPE
7184 && TYPE_DOMAIN (type) == NULL_TREE
7185 && value != error_mark_node)
7186 {
7187 tree inside_init = init;
7188
7189 STRIP_TYPE_NOPS (inside_init);
7190 inside_init = fold (inside_init);
7191
7192 if (TREE_CODE (inside_init) == COMPOUND_LITERAL_EXPR)
7193 {
7194 tree cldecl = COMPOUND_LITERAL_EXPR_DECL (inside_init);
7195
7196 if (TYPE_DOMAIN (TREE_TYPE (cldecl)))
7197 {
7198 /* For int foo[] = (int [3]){1}; we need to set array size
7199 now since later on array initializer will be just the
7200 brace enclosed list of the compound literal. */
7201 tree etype = strip_array_types (TREE_TYPE (decl));
7202 type = build_distinct_type_copy (TYPE_MAIN_VARIANT (type));
7203 TYPE_DOMAIN (type) = TYPE_DOMAIN (TREE_TYPE (cldecl));
7204 layout_type (type);
7205 layout_decl (cldecl, 0);
7206 TREE_TYPE (decl)
7207 = c_build_qualified_type (type, TYPE_QUALS (etype));
7208 }
7209 }
7210 }
7211 }
7212 \f
7213 /* Methods for storing and printing names for error messages. */
7214
7215 /* Implement a spelling stack that allows components of a name to be pushed
7216 and popped. Each element on the stack is this structure. */
7217
7218 struct spelling
7219 {
7220 int kind;
7221 union
7222 {
7223 unsigned HOST_WIDE_INT i;
7224 const char *s;
7225 } u;
7226 };
7227
7228 #define SPELLING_STRING 1
7229 #define SPELLING_MEMBER 2
7230 #define SPELLING_BOUNDS 3
7231
7232 static struct spelling *spelling; /* Next stack element (unused). */
7233 static struct spelling *spelling_base; /* Spelling stack base. */
7234 static int spelling_size; /* Size of the spelling stack. */
7235
7236 /* Macros to save and restore the spelling stack around push_... functions.
7237 Alternative to SAVE_SPELLING_STACK. */
7238
7239 #define SPELLING_DEPTH() (spelling - spelling_base)
7240 #define RESTORE_SPELLING_DEPTH(DEPTH) (spelling = spelling_base + (DEPTH))
7241
7242 /* Push an element on the spelling stack with type KIND and assign VALUE
7243 to MEMBER. */
7244
7245 #define PUSH_SPELLING(KIND, VALUE, MEMBER) \
7246 { \
7247 int depth = SPELLING_DEPTH (); \
7248 \
7249 if (depth >= spelling_size) \
7250 { \
7251 spelling_size += 10; \
7252 spelling_base = XRESIZEVEC (struct spelling, spelling_base, \
7253 spelling_size); \
7254 RESTORE_SPELLING_DEPTH (depth); \
7255 } \
7256 \
7257 spelling->kind = (KIND); \
7258 spelling->MEMBER = (VALUE); \
7259 spelling++; \
7260 }
7261
7262 /* Push STRING on the stack. Printed literally. */
7263
7264 static void
7265 push_string (const char *string)
7266 {
7267 PUSH_SPELLING (SPELLING_STRING, string, u.s);
7268 }
7269
7270 /* Push a member name on the stack. Printed as '.' STRING. */
7271
7272 static void
7273 push_member_name (tree decl)
7274 {
7275 const char *const string
7276 = (DECL_NAME (decl)
7277 ? identifier_to_locale (IDENTIFIER_POINTER (DECL_NAME (decl)))
7278 : _("<anonymous>"));
7279 PUSH_SPELLING (SPELLING_MEMBER, string, u.s);
7280 }
7281
7282 /* Push an array bounds on the stack. Printed as [BOUNDS]. */
7283
7284 static void
7285 push_array_bounds (unsigned HOST_WIDE_INT bounds)
7286 {
7287 PUSH_SPELLING (SPELLING_BOUNDS, bounds, u.i);
7288 }
7289
7290 /* Compute the maximum size in bytes of the printed spelling. */
7291
7292 static int
7293 spelling_length (void)
7294 {
7295 int size = 0;
7296 struct spelling *p;
7297
7298 for (p = spelling_base; p < spelling; p++)
7299 {
7300 if (p->kind == SPELLING_BOUNDS)
7301 size += 25;
7302 else
7303 size += strlen (p->u.s) + 1;
7304 }
7305
7306 return size;
7307 }
7308
7309 /* Print the spelling to BUFFER and return it. */
7310
7311 static char *
7312 print_spelling (char *buffer)
7313 {
7314 char *d = buffer;
7315 struct spelling *p;
7316
7317 for (p = spelling_base; p < spelling; p++)
7318 if (p->kind == SPELLING_BOUNDS)
7319 {
7320 sprintf (d, "[" HOST_WIDE_INT_PRINT_UNSIGNED "]", p->u.i);
7321 d += strlen (d);
7322 }
7323 else
7324 {
7325 const char *s;
7326 if (p->kind == SPELLING_MEMBER)
7327 *d++ = '.';
7328 for (s = p->u.s; (*d = *s++); d++)
7329 ;
7330 }
7331 *d++ = '\0';
7332 return buffer;
7333 }
7334
7335 /* Digest the parser output INIT as an initializer for type TYPE.
7336 Return a C expression of type TYPE to represent the initial value.
7337
7338 If ORIGTYPE is not NULL_TREE, it is the original type of INIT.
7339
7340 NULL_POINTER_CONSTANT is true if INIT is a null pointer constant.
7341
7342 If INIT is a string constant, STRICT_STRING is true if it is
7343 unparenthesized or we should not warn here for it being parenthesized.
7344 For other types of INIT, STRICT_STRING is not used.
7345
7346 INIT_LOC is the location of the INIT.
7347
7348 REQUIRE_CONSTANT requests an error if non-constant initializers or
7349 elements are seen. */
7350
7351 static tree
7352 digest_init (location_t init_loc, tree type, tree init, tree origtype,
7353 bool null_pointer_constant, bool strict_string,
7354 int require_constant)
7355 {
7356 enum tree_code code = TREE_CODE (type);
7357 tree inside_init = init;
7358 tree semantic_type = NULL_TREE;
7359 bool maybe_const = true;
7360
7361 if (type == error_mark_node
7362 || !init
7363 || error_operand_p (init))
7364 return error_mark_node;
7365
7366 STRIP_TYPE_NOPS (inside_init);
7367
7368 if (TREE_CODE (inside_init) == EXCESS_PRECISION_EXPR)
7369 {
7370 semantic_type = TREE_TYPE (inside_init);
7371 inside_init = TREE_OPERAND (inside_init, 0);
7372 }
7373 inside_init = c_fully_fold (inside_init, require_constant, &maybe_const);
7374
7375 /* Initialization of an array of chars from a string constant
7376 optionally enclosed in braces. */
7377
7378 if (code == ARRAY_TYPE && inside_init
7379 && TREE_CODE (inside_init) == STRING_CST)
7380 {
7381 tree typ1
7382 = (TYPE_ATOMIC (TREE_TYPE (type))
7383 ? c_build_qualified_type (TYPE_MAIN_VARIANT (TREE_TYPE (type)),
7384 TYPE_QUAL_ATOMIC)
7385 : TYPE_MAIN_VARIANT (TREE_TYPE (type)));
7386 /* Note that an array could be both an array of character type
7387 and an array of wchar_t if wchar_t is signed char or unsigned
7388 char. */
7389 bool char_array = (typ1 == char_type_node
7390 || typ1 == signed_char_type_node
7391 || typ1 == unsigned_char_type_node);
7392 bool wchar_array = !!comptypes (typ1, wchar_type_node);
7393 bool char16_array = !!comptypes (typ1, char16_type_node);
7394 bool char32_array = !!comptypes (typ1, char32_type_node);
7395
7396 if (char_array || wchar_array || char16_array || char32_array)
7397 {
7398 struct c_expr expr;
7399 tree typ2 = TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (inside_init)));
7400 expr.value = inside_init;
7401 expr.original_code = (strict_string ? STRING_CST : ERROR_MARK);
7402 expr.original_type = NULL;
7403 maybe_warn_string_init (init_loc, type, expr);
7404
7405 if (TYPE_DOMAIN (type) && !TYPE_MAX_VALUE (TYPE_DOMAIN (type)))
7406 pedwarn_init (init_loc, OPT_Wpedantic,
7407 "initialization of a flexible array member");
7408
7409 if (comptypes (TYPE_MAIN_VARIANT (TREE_TYPE (inside_init)),
7410 TYPE_MAIN_VARIANT (type)))
7411 return inside_init;
7412
7413 if (char_array)
7414 {
7415 if (typ2 != char_type_node)
7416 {
7417 error_init (init_loc, "char-array initialized from wide "
7418 "string");
7419 return error_mark_node;
7420 }
7421 }
7422 else
7423 {
7424 if (typ2 == char_type_node)
7425 {
7426 error_init (init_loc, "wide character array initialized "
7427 "from non-wide string");
7428 return error_mark_node;
7429 }
7430 else if (!comptypes(typ1, typ2))
7431 {
7432 error_init (init_loc, "wide character array initialized "
7433 "from incompatible wide string");
7434 return error_mark_node;
7435 }
7436 }
7437
7438 TREE_TYPE (inside_init) = type;
7439 if (TYPE_DOMAIN (type) != NULL_TREE
7440 && TYPE_SIZE (type) != NULL_TREE
7441 && TREE_CODE (TYPE_SIZE (type)) == INTEGER_CST)
7442 {
7443 unsigned HOST_WIDE_INT len = TREE_STRING_LENGTH (inside_init);
7444
7445 /* Subtract the size of a single (possibly wide) character
7446 because it's ok to ignore the terminating null char
7447 that is counted in the length of the constant. */
7448 if (compare_tree_int (TYPE_SIZE_UNIT (type),
7449 (len - (TYPE_PRECISION (typ1)
7450 / BITS_PER_UNIT))) < 0)
7451 pedwarn_init (init_loc, 0,
7452 ("initializer-string for array of chars "
7453 "is too long"));
7454 else if (warn_cxx_compat
7455 && compare_tree_int (TYPE_SIZE_UNIT (type), len) < 0)
7456 warning_at (init_loc, OPT_Wc___compat,
7457 ("initializer-string for array chars "
7458 "is too long for C++"));
7459 }
7460
7461 return inside_init;
7462 }
7463 else if (INTEGRAL_TYPE_P (typ1))
7464 {
7465 error_init (init_loc, "array of inappropriate type initialized "
7466 "from string constant");
7467 return error_mark_node;
7468 }
7469 }
7470
7471 /* Build a VECTOR_CST from a *constant* vector constructor. If the
7472 vector constructor is not constant (e.g. {1,2,3,foo()}) then punt
7473 below and handle as a constructor. */
7474 if (code == VECTOR_TYPE
7475 && VECTOR_TYPE_P (TREE_TYPE (inside_init))
7476 && vector_types_convertible_p (TREE_TYPE (inside_init), type, true)
7477 && TREE_CONSTANT (inside_init))
7478 {
7479 if (TREE_CODE (inside_init) == VECTOR_CST
7480 && comptypes (TYPE_MAIN_VARIANT (TREE_TYPE (inside_init)),
7481 TYPE_MAIN_VARIANT (type)))
7482 return inside_init;
7483
7484 if (TREE_CODE (inside_init) == CONSTRUCTOR)
7485 {
7486 unsigned HOST_WIDE_INT ix;
7487 tree value;
7488 bool constant_p = true;
7489
7490 /* Iterate through elements and check if all constructor
7491 elements are *_CSTs. */
7492 FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (inside_init), ix, value)
7493 if (!CONSTANT_CLASS_P (value))
7494 {
7495 constant_p = false;
7496 break;
7497 }
7498
7499 if (constant_p)
7500 return build_vector_from_ctor (type,
7501 CONSTRUCTOR_ELTS (inside_init));
7502 }
7503 }
7504
7505 if (warn_sequence_point)
7506 verify_sequence_points (inside_init);
7507
7508 /* Any type can be initialized
7509 from an expression of the same type, optionally with braces. */
7510
7511 if (inside_init && TREE_TYPE (inside_init) != NULL_TREE
7512 && (comptypes (TYPE_MAIN_VARIANT (TREE_TYPE (inside_init)),
7513 TYPE_MAIN_VARIANT (type))
7514 || (code == ARRAY_TYPE
7515 && comptypes (TREE_TYPE (inside_init), type))
7516 || (code == VECTOR_TYPE
7517 && comptypes (TREE_TYPE (inside_init), type))
7518 || (code == POINTER_TYPE
7519 && TREE_CODE (TREE_TYPE (inside_init)) == ARRAY_TYPE
7520 && comptypes (TREE_TYPE (TREE_TYPE (inside_init)),
7521 TREE_TYPE (type)))))
7522 {
7523 if (code == POINTER_TYPE)
7524 {
7525 if (TREE_CODE (TREE_TYPE (inside_init)) == ARRAY_TYPE)
7526 {
7527 if (TREE_CODE (inside_init) == STRING_CST
7528 || TREE_CODE (inside_init) == COMPOUND_LITERAL_EXPR)
7529 inside_init = array_to_pointer_conversion
7530 (init_loc, inside_init);
7531 else
7532 {
7533 error_init (init_loc, "invalid use of non-lvalue array");
7534 return error_mark_node;
7535 }
7536 }
7537 }
7538
7539 if (code == VECTOR_TYPE)
7540 /* Although the types are compatible, we may require a
7541 conversion. */
7542 inside_init = convert (type, inside_init);
7543
7544 if (require_constant
7545 && TREE_CODE (inside_init) == COMPOUND_LITERAL_EXPR)
7546 {
7547 /* As an extension, allow initializing objects with static storage
7548 duration with compound literals (which are then treated just as
7549 the brace enclosed list they contain). Also allow this for
7550 vectors, as we can only assign them with compound literals. */
7551 if (flag_isoc99 && code != VECTOR_TYPE)
7552 pedwarn_init (init_loc, OPT_Wpedantic, "initializer element "
7553 "is not constant");
7554 tree decl = COMPOUND_LITERAL_EXPR_DECL (inside_init);
7555 inside_init = DECL_INITIAL (decl);
7556 }
7557
7558 if (code == ARRAY_TYPE && TREE_CODE (inside_init) != STRING_CST
7559 && TREE_CODE (inside_init) != CONSTRUCTOR)
7560 {
7561 error_init (init_loc, "array initialized from non-constant array "
7562 "expression");
7563 return error_mark_node;
7564 }
7565
7566 /* Compound expressions can only occur here if -Wpedantic or
7567 -pedantic-errors is specified. In the later case, we always want
7568 an error. In the former case, we simply want a warning. */
7569 if (require_constant && pedantic
7570 && TREE_CODE (inside_init) == COMPOUND_EXPR)
7571 {
7572 inside_init
7573 = valid_compound_expr_initializer (inside_init,
7574 TREE_TYPE (inside_init));
7575 if (inside_init == error_mark_node)
7576 error_init (init_loc, "initializer element is not constant");
7577 else
7578 pedwarn_init (init_loc, OPT_Wpedantic,
7579 "initializer element is not constant");
7580 if (flag_pedantic_errors)
7581 inside_init = error_mark_node;
7582 }
7583 else if (require_constant
7584 && !initializer_constant_valid_p (inside_init,
7585 TREE_TYPE (inside_init)))
7586 {
7587 error_init (init_loc, "initializer element is not constant");
7588 inside_init = error_mark_node;
7589 }
7590 else if (require_constant && !maybe_const)
7591 pedwarn_init (init_loc, OPT_Wpedantic,
7592 "initializer element is not a constant expression");
7593
7594 /* Added to enable additional -Wsuggest-attribute=format warnings. */
7595 if (TREE_CODE (TREE_TYPE (inside_init)) == POINTER_TYPE)
7596 inside_init = convert_for_assignment (init_loc, UNKNOWN_LOCATION,
7597 type, inside_init, origtype,
7598 ic_init, null_pointer_constant,
7599 NULL_TREE, NULL_TREE, 0);
7600 return inside_init;
7601 }
7602
7603 /* Handle scalar types, including conversions. */
7604
7605 if (code == INTEGER_TYPE || code == REAL_TYPE || code == FIXED_POINT_TYPE
7606 || code == POINTER_TYPE || code == ENUMERAL_TYPE || code == BOOLEAN_TYPE
7607 || code == COMPLEX_TYPE || code == VECTOR_TYPE)
7608 {
7609 if (TREE_CODE (TREE_TYPE (init)) == ARRAY_TYPE
7610 && (TREE_CODE (init) == STRING_CST
7611 || TREE_CODE (init) == COMPOUND_LITERAL_EXPR))
7612 inside_init = init = array_to_pointer_conversion (init_loc, init);
7613 if (semantic_type)
7614 inside_init = build1 (EXCESS_PRECISION_EXPR, semantic_type,
7615 inside_init);
7616 inside_init
7617 = convert_for_assignment (init_loc, UNKNOWN_LOCATION, type,
7618 inside_init, origtype, ic_init,
7619 null_pointer_constant, NULL_TREE, NULL_TREE,
7620 0);
7621
7622 /* Check to see if we have already given an error message. */
7623 if (inside_init == error_mark_node)
7624 ;
7625 else if (require_constant && !TREE_CONSTANT (inside_init))
7626 {
7627 error_init (init_loc, "initializer element is not constant");
7628 inside_init = error_mark_node;
7629 }
7630 else if (require_constant
7631 && !initializer_constant_valid_p (inside_init,
7632 TREE_TYPE (inside_init)))
7633 {
7634 error_init (init_loc, "initializer element is not computable at "
7635 "load time");
7636 inside_init = error_mark_node;
7637 }
7638 else if (require_constant && !maybe_const)
7639 pedwarn_init (init_loc, OPT_Wpedantic,
7640 "initializer element is not a constant expression");
7641
7642 return inside_init;
7643 }
7644
7645 /* Come here only for records and arrays. */
7646
7647 if (COMPLETE_TYPE_P (type) && TREE_CODE (TYPE_SIZE (type)) != INTEGER_CST)
7648 {
7649 error_init (init_loc, "variable-sized object may not be initialized");
7650 return error_mark_node;
7651 }
7652
7653 error_init (init_loc, "invalid initializer");
7654 return error_mark_node;
7655 }
7656 \f
7657 /* Handle initializers that use braces. */
7658
7659 /* Type of object we are accumulating a constructor for.
7660 This type is always a RECORD_TYPE, UNION_TYPE or ARRAY_TYPE. */
7661 static tree constructor_type;
7662
7663 /* For a RECORD_TYPE or UNION_TYPE, this is the chain of fields
7664 left to fill. */
7665 static tree constructor_fields;
7666
7667 /* For an ARRAY_TYPE, this is the specified index
7668 at which to store the next element we get. */
7669 static tree constructor_index;
7670
7671 /* For an ARRAY_TYPE, this is the maximum index. */
7672 static tree constructor_max_index;
7673
7674 /* For a RECORD_TYPE, this is the first field not yet written out. */
7675 static tree constructor_unfilled_fields;
7676
7677 /* For an ARRAY_TYPE, this is the index of the first element
7678 not yet written out. */
7679 static tree constructor_unfilled_index;
7680
7681 /* In a RECORD_TYPE, the byte index of the next consecutive field.
7682 This is so we can generate gaps between fields, when appropriate. */
7683 static tree constructor_bit_index;
7684
7685 /* If we are saving up the elements rather than allocating them,
7686 this is the list of elements so far (in reverse order,
7687 most recent first). */
7688 static vec<constructor_elt, va_gc> *constructor_elements;
7689
7690 /* 1 if constructor should be incrementally stored into a constructor chain,
7691 0 if all the elements should be kept in AVL tree. */
7692 static int constructor_incremental;
7693
7694 /* 1 if so far this constructor's elements are all compile-time constants. */
7695 static int constructor_constant;
7696
7697 /* 1 if so far this constructor's elements are all valid address constants. */
7698 static int constructor_simple;
7699
7700 /* 1 if this constructor has an element that cannot be part of a
7701 constant expression. */
7702 static int constructor_nonconst;
7703
7704 /* 1 if this constructor is erroneous so far. */
7705 static int constructor_erroneous;
7706
7707 /* 1 if this constructor is the universal zero initializer { 0 }. */
7708 static int constructor_zeroinit;
7709
7710 /* Structure for managing pending initializer elements, organized as an
7711 AVL tree. */
7712
7713 struct init_node
7714 {
7715 struct init_node *left, *right;
7716 struct init_node *parent;
7717 int balance;
7718 tree purpose;
7719 tree value;
7720 tree origtype;
7721 };
7722
7723 /* Tree of pending elements at this constructor level.
7724 These are elements encountered out of order
7725 which belong at places we haven't reached yet in actually
7726 writing the output.
7727 Will never hold tree nodes across GC runs. */
7728 static struct init_node *constructor_pending_elts;
7729
7730 /* The SPELLING_DEPTH of this constructor. */
7731 static int constructor_depth;
7732
7733 /* DECL node for which an initializer is being read.
7734 0 means we are reading a constructor expression
7735 such as (struct foo) {...}. */
7736 static tree constructor_decl;
7737
7738 /* Nonzero if this is an initializer for a top-level decl. */
7739 static int constructor_top_level;
7740
7741 /* Nonzero if there were any member designators in this initializer. */
7742 static int constructor_designated;
7743
7744 /* Nesting depth of designator list. */
7745 static int designator_depth;
7746
7747 /* Nonzero if there were diagnosed errors in this designator list. */
7748 static int designator_erroneous;
7749
7750 \f
7751 /* This stack has a level for each implicit or explicit level of
7752 structuring in the initializer, including the outermost one. It
7753 saves the values of most of the variables above. */
7754
7755 struct constructor_range_stack;
7756
7757 struct constructor_stack
7758 {
7759 struct constructor_stack *next;
7760 tree type;
7761 tree fields;
7762 tree index;
7763 tree max_index;
7764 tree unfilled_index;
7765 tree unfilled_fields;
7766 tree bit_index;
7767 vec<constructor_elt, va_gc> *elements;
7768 struct init_node *pending_elts;
7769 int offset;
7770 int depth;
7771 /* If value nonzero, this value should replace the entire
7772 constructor at this level. */
7773 struct c_expr replacement_value;
7774 struct constructor_range_stack *range_stack;
7775 char constant;
7776 char simple;
7777 char nonconst;
7778 char implicit;
7779 char erroneous;
7780 char outer;
7781 char incremental;
7782 char designated;
7783 int designator_depth;
7784 };
7785
7786 static struct constructor_stack *constructor_stack;
7787
7788 /* This stack represents designators from some range designator up to
7789 the last designator in the list. */
7790
7791 struct constructor_range_stack
7792 {
7793 struct constructor_range_stack *next, *prev;
7794 struct constructor_stack *stack;
7795 tree range_start;
7796 tree index;
7797 tree range_end;
7798 tree fields;
7799 };
7800
7801 static struct constructor_range_stack *constructor_range_stack;
7802
7803 /* This stack records separate initializers that are nested.
7804 Nested initializers can't happen in ANSI C, but GNU C allows them
7805 in cases like { ... (struct foo) { ... } ... }. */
7806
7807 struct initializer_stack
7808 {
7809 struct initializer_stack *next;
7810 tree decl;
7811 struct constructor_stack *constructor_stack;
7812 struct constructor_range_stack *constructor_range_stack;
7813 vec<constructor_elt, va_gc> *elements;
7814 struct spelling *spelling;
7815 struct spelling *spelling_base;
7816 int spelling_size;
7817 char top_level;
7818 char require_constant_value;
7819 char require_constant_elements;
7820 rich_location *missing_brace_richloc;
7821 };
7822
7823 static struct initializer_stack *initializer_stack;
7824 \f
7825 /* Prepare to parse and output the initializer for variable DECL. */
7826
7827 void
7828 start_init (tree decl, tree asmspec_tree ATTRIBUTE_UNUSED, int top_level,
7829 rich_location *richloc)
7830 {
7831 const char *locus;
7832 struct initializer_stack *p = XNEW (struct initializer_stack);
7833
7834 p->decl = constructor_decl;
7835 p->require_constant_value = require_constant_value;
7836 p->require_constant_elements = require_constant_elements;
7837 p->constructor_stack = constructor_stack;
7838 p->constructor_range_stack = constructor_range_stack;
7839 p->elements = constructor_elements;
7840 p->spelling = spelling;
7841 p->spelling_base = spelling_base;
7842 p->spelling_size = spelling_size;
7843 p->top_level = constructor_top_level;
7844 p->next = initializer_stack;
7845 p->missing_brace_richloc = richloc;
7846 initializer_stack = p;
7847
7848 constructor_decl = decl;
7849 constructor_designated = 0;
7850 constructor_top_level = top_level;
7851
7852 if (decl != NULL_TREE && decl != error_mark_node)
7853 {
7854 require_constant_value = TREE_STATIC (decl);
7855 require_constant_elements
7856 = ((TREE_STATIC (decl) || (pedantic && !flag_isoc99))
7857 /* For a scalar, you can always use any value to initialize,
7858 even within braces. */
7859 && AGGREGATE_TYPE_P (TREE_TYPE (decl)));
7860 locus = identifier_to_locale (IDENTIFIER_POINTER (DECL_NAME (decl)));
7861 }
7862 else
7863 {
7864 require_constant_value = 0;
7865 require_constant_elements = 0;
7866 locus = _("(anonymous)");
7867 }
7868
7869 constructor_stack = 0;
7870 constructor_range_stack = 0;
7871
7872 found_missing_braces = 0;
7873
7874 spelling_base = 0;
7875 spelling_size = 0;
7876 RESTORE_SPELLING_DEPTH (0);
7877
7878 if (locus)
7879 push_string (locus);
7880 }
7881
7882 void
7883 finish_init (void)
7884 {
7885 struct initializer_stack *p = initializer_stack;
7886
7887 /* Free the whole constructor stack of this initializer. */
7888 while (constructor_stack)
7889 {
7890 struct constructor_stack *q = constructor_stack;
7891 constructor_stack = q->next;
7892 free (q);
7893 }
7894
7895 gcc_assert (!constructor_range_stack);
7896
7897 /* Pop back to the data of the outer initializer (if any). */
7898 free (spelling_base);
7899
7900 constructor_decl = p->decl;
7901 require_constant_value = p->require_constant_value;
7902 require_constant_elements = p->require_constant_elements;
7903 constructor_stack = p->constructor_stack;
7904 constructor_range_stack = p->constructor_range_stack;
7905 constructor_elements = p->elements;
7906 spelling = p->spelling;
7907 spelling_base = p->spelling_base;
7908 spelling_size = p->spelling_size;
7909 constructor_top_level = p->top_level;
7910 initializer_stack = p->next;
7911 free (p);
7912 }
7913 \f
7914 /* Call here when we see the initializer is surrounded by braces.
7915 This is instead of a call to push_init_level;
7916 it is matched by a call to pop_init_level.
7917
7918 TYPE is the type to initialize, for a constructor expression.
7919 For an initializer for a decl, TYPE is zero. */
7920
7921 void
7922 really_start_incremental_init (tree type)
7923 {
7924 struct constructor_stack *p = XNEW (struct constructor_stack);
7925
7926 if (type == NULL_TREE)
7927 type = TREE_TYPE (constructor_decl);
7928
7929 if (VECTOR_TYPE_P (type)
7930 && TYPE_VECTOR_OPAQUE (type))
7931 error ("opaque vector types cannot be initialized");
7932
7933 p->type = constructor_type;
7934 p->fields = constructor_fields;
7935 p->index = constructor_index;
7936 p->max_index = constructor_max_index;
7937 p->unfilled_index = constructor_unfilled_index;
7938 p->unfilled_fields = constructor_unfilled_fields;
7939 p->bit_index = constructor_bit_index;
7940 p->elements = constructor_elements;
7941 p->constant = constructor_constant;
7942 p->simple = constructor_simple;
7943 p->nonconst = constructor_nonconst;
7944 p->erroneous = constructor_erroneous;
7945 p->pending_elts = constructor_pending_elts;
7946 p->depth = constructor_depth;
7947 p->replacement_value.value = 0;
7948 p->replacement_value.original_code = ERROR_MARK;
7949 p->replacement_value.original_type = NULL;
7950 p->implicit = 0;
7951 p->range_stack = 0;
7952 p->outer = 0;
7953 p->incremental = constructor_incremental;
7954 p->designated = constructor_designated;
7955 p->designator_depth = designator_depth;
7956 p->next = 0;
7957 constructor_stack = p;
7958
7959 constructor_constant = 1;
7960 constructor_simple = 1;
7961 constructor_nonconst = 0;
7962 constructor_depth = SPELLING_DEPTH ();
7963 constructor_elements = NULL;
7964 constructor_pending_elts = 0;
7965 constructor_type = type;
7966 constructor_incremental = 1;
7967 constructor_designated = 0;
7968 constructor_zeroinit = 1;
7969 designator_depth = 0;
7970 designator_erroneous = 0;
7971
7972 if (RECORD_OR_UNION_TYPE_P (constructor_type))
7973 {
7974 constructor_fields = TYPE_FIELDS (constructor_type);
7975 /* Skip any nameless bit fields at the beginning. */
7976 while (constructor_fields != NULL_TREE
7977 && DECL_UNNAMED_BIT_FIELD (constructor_fields))
7978 constructor_fields = DECL_CHAIN (constructor_fields);
7979
7980 constructor_unfilled_fields = constructor_fields;
7981 constructor_bit_index = bitsize_zero_node;
7982 }
7983 else if (TREE_CODE (constructor_type) == ARRAY_TYPE)
7984 {
7985 if (TYPE_DOMAIN (constructor_type))
7986 {
7987 constructor_max_index
7988 = TYPE_MAX_VALUE (TYPE_DOMAIN (constructor_type));
7989
7990 /* Detect non-empty initializations of zero-length arrays. */
7991 if (constructor_max_index == NULL_TREE
7992 && TYPE_SIZE (constructor_type))
7993 constructor_max_index = integer_minus_one_node;
7994
7995 /* constructor_max_index needs to be an INTEGER_CST. Attempts
7996 to initialize VLAs will cause a proper error; avoid tree
7997 checking errors as well by setting a safe value. */
7998 if (constructor_max_index
7999 && TREE_CODE (constructor_max_index) != INTEGER_CST)
8000 constructor_max_index = integer_minus_one_node;
8001
8002 constructor_index
8003 = convert (bitsizetype,
8004 TYPE_MIN_VALUE (TYPE_DOMAIN (constructor_type)));
8005 }
8006 else
8007 {
8008 constructor_index = bitsize_zero_node;
8009 constructor_max_index = NULL_TREE;
8010 }
8011
8012 constructor_unfilled_index = constructor_index;
8013 }
8014 else if (VECTOR_TYPE_P (constructor_type))
8015 {
8016 /* Vectors are like simple fixed-size arrays. */
8017 constructor_max_index =
8018 bitsize_int (TYPE_VECTOR_SUBPARTS (constructor_type) - 1);
8019 constructor_index = bitsize_zero_node;
8020 constructor_unfilled_index = constructor_index;
8021 }
8022 else
8023 {
8024 /* Handle the case of int x = {5}; */
8025 constructor_fields = constructor_type;
8026 constructor_unfilled_fields = constructor_type;
8027 }
8028 }
8029 \f
8030 extern location_t last_init_list_comma;
8031
8032 /* Called when we see an open brace for a nested initializer. Finish
8033 off any pending levels with implicit braces. */
8034 void
8035 finish_implicit_inits (location_t loc, struct obstack *braced_init_obstack)
8036 {
8037 while (constructor_stack->implicit)
8038 {
8039 if (RECORD_OR_UNION_TYPE_P (constructor_type)
8040 && constructor_fields == NULL_TREE)
8041 process_init_element (input_location,
8042 pop_init_level (loc, 1, braced_init_obstack,
8043 last_init_list_comma),
8044 true, braced_init_obstack);
8045 else if (TREE_CODE (constructor_type) == ARRAY_TYPE
8046 && constructor_max_index
8047 && tree_int_cst_lt (constructor_max_index,
8048 constructor_index))
8049 process_init_element (input_location,
8050 pop_init_level (loc, 1, braced_init_obstack,
8051 last_init_list_comma),
8052 true, braced_init_obstack);
8053 else
8054 break;
8055 }
8056 }
8057
8058 /* Push down into a subobject, for initialization.
8059 If this is for an explicit set of braces, IMPLICIT is 0.
8060 If it is because the next element belongs at a lower level,
8061 IMPLICIT is 1 (or 2 if the push is because of designator list). */
8062
8063 void
8064 push_init_level (location_t loc, int implicit,
8065 struct obstack *braced_init_obstack)
8066 {
8067 struct constructor_stack *p;
8068 tree value = NULL_TREE;
8069
8070 /* Unless this is an explicit brace, we need to preserve previous
8071 content if any. */
8072 if (implicit)
8073 {
8074 if (RECORD_OR_UNION_TYPE_P (constructor_type) && constructor_fields)
8075 value = find_init_member (constructor_fields, braced_init_obstack);
8076 else if (TREE_CODE (constructor_type) == ARRAY_TYPE)
8077 value = find_init_member (constructor_index, braced_init_obstack);
8078 }
8079
8080 p = XNEW (struct constructor_stack);
8081 p->type = constructor_type;
8082 p->fields = constructor_fields;
8083 p->index = constructor_index;
8084 p->max_index = constructor_max_index;
8085 p->unfilled_index = constructor_unfilled_index;
8086 p->unfilled_fields = constructor_unfilled_fields;
8087 p->bit_index = constructor_bit_index;
8088 p->elements = constructor_elements;
8089 p->constant = constructor_constant;
8090 p->simple = constructor_simple;
8091 p->nonconst = constructor_nonconst;
8092 p->erroneous = constructor_erroneous;
8093 p->pending_elts = constructor_pending_elts;
8094 p->depth = constructor_depth;
8095 p->replacement_value.value = NULL_TREE;
8096 p->replacement_value.original_code = ERROR_MARK;
8097 p->replacement_value.original_type = NULL;
8098 p->implicit = implicit;
8099 p->outer = 0;
8100 p->incremental = constructor_incremental;
8101 p->designated = constructor_designated;
8102 p->designator_depth = designator_depth;
8103 p->next = constructor_stack;
8104 p->range_stack = 0;
8105 constructor_stack = p;
8106
8107 constructor_constant = 1;
8108 constructor_simple = 1;
8109 constructor_nonconst = 0;
8110 constructor_depth = SPELLING_DEPTH ();
8111 constructor_elements = NULL;
8112 constructor_incremental = 1;
8113 constructor_designated = 0;
8114 constructor_pending_elts = 0;
8115 if (!implicit)
8116 {
8117 p->range_stack = constructor_range_stack;
8118 constructor_range_stack = 0;
8119 designator_depth = 0;
8120 designator_erroneous = 0;
8121 }
8122
8123 /* Don't die if an entire brace-pair level is superfluous
8124 in the containing level. */
8125 if (constructor_type == NULL_TREE)
8126 ;
8127 else if (RECORD_OR_UNION_TYPE_P (constructor_type))
8128 {
8129 /* Don't die if there are extra init elts at the end. */
8130 if (constructor_fields == NULL_TREE)
8131 constructor_type = NULL_TREE;
8132 else
8133 {
8134 constructor_type = TREE_TYPE (constructor_fields);
8135 push_member_name (constructor_fields);
8136 constructor_depth++;
8137 }
8138 /* If upper initializer is designated, then mark this as
8139 designated too to prevent bogus warnings. */
8140 constructor_designated = p->designated;
8141 }
8142 else if (TREE_CODE (constructor_type) == ARRAY_TYPE)
8143 {
8144 constructor_type = TREE_TYPE (constructor_type);
8145 push_array_bounds (tree_to_uhwi (constructor_index));
8146 constructor_depth++;
8147 }
8148
8149 if (constructor_type == NULL_TREE)
8150 {
8151 error_init (loc, "extra brace group at end of initializer");
8152 constructor_fields = NULL_TREE;
8153 constructor_unfilled_fields = NULL_TREE;
8154 return;
8155 }
8156
8157 if (value && TREE_CODE (value) == CONSTRUCTOR)
8158 {
8159 constructor_constant = TREE_CONSTANT (value);
8160 constructor_simple = TREE_STATIC (value);
8161 constructor_nonconst = CONSTRUCTOR_NON_CONST (value);
8162 constructor_elements = CONSTRUCTOR_ELTS (value);
8163 if (!vec_safe_is_empty (constructor_elements)
8164 && (TREE_CODE (constructor_type) == RECORD_TYPE
8165 || TREE_CODE (constructor_type) == ARRAY_TYPE))
8166 set_nonincremental_init (braced_init_obstack);
8167 }
8168
8169 if (implicit == 1)
8170 {
8171 found_missing_braces = 1;
8172 if (initializer_stack->missing_brace_richloc)
8173 initializer_stack->missing_brace_richloc->add_fixit_insert_before
8174 (loc, "{");
8175 }
8176
8177 if (RECORD_OR_UNION_TYPE_P (constructor_type))
8178 {
8179 constructor_fields = TYPE_FIELDS (constructor_type);
8180 /* Skip any nameless bit fields at the beginning. */
8181 while (constructor_fields != NULL_TREE
8182 && DECL_UNNAMED_BIT_FIELD (constructor_fields))
8183 constructor_fields = DECL_CHAIN (constructor_fields);
8184
8185 constructor_unfilled_fields = constructor_fields;
8186 constructor_bit_index = bitsize_zero_node;
8187 }
8188 else if (VECTOR_TYPE_P (constructor_type))
8189 {
8190 /* Vectors are like simple fixed-size arrays. */
8191 constructor_max_index =
8192 bitsize_int (TYPE_VECTOR_SUBPARTS (constructor_type) - 1);
8193 constructor_index = bitsize_int (0);
8194 constructor_unfilled_index = constructor_index;
8195 }
8196 else if (TREE_CODE (constructor_type) == ARRAY_TYPE)
8197 {
8198 if (TYPE_DOMAIN (constructor_type))
8199 {
8200 constructor_max_index
8201 = TYPE_MAX_VALUE (TYPE_DOMAIN (constructor_type));
8202
8203 /* Detect non-empty initializations of zero-length arrays. */
8204 if (constructor_max_index == NULL_TREE
8205 && TYPE_SIZE (constructor_type))
8206 constructor_max_index = integer_minus_one_node;
8207
8208 /* constructor_max_index needs to be an INTEGER_CST. Attempts
8209 to initialize VLAs will cause a proper error; avoid tree
8210 checking errors as well by setting a safe value. */
8211 if (constructor_max_index
8212 && TREE_CODE (constructor_max_index) != INTEGER_CST)
8213 constructor_max_index = integer_minus_one_node;
8214
8215 constructor_index
8216 = convert (bitsizetype,
8217 TYPE_MIN_VALUE (TYPE_DOMAIN (constructor_type)));
8218 }
8219 else
8220 constructor_index = bitsize_zero_node;
8221
8222 constructor_unfilled_index = constructor_index;
8223 if (value && TREE_CODE (value) == STRING_CST)
8224 {
8225 /* We need to split the char/wchar array into individual
8226 characters, so that we don't have to special case it
8227 everywhere. */
8228 set_nonincremental_init_from_string (value, braced_init_obstack);
8229 }
8230 }
8231 else
8232 {
8233 if (constructor_type != error_mark_node)
8234 warning_init (input_location, 0, "braces around scalar initializer");
8235 constructor_fields = constructor_type;
8236 constructor_unfilled_fields = constructor_type;
8237 }
8238 }
8239
8240 /* At the end of an implicit or explicit brace level,
8241 finish up that level of constructor. If a single expression
8242 with redundant braces initialized that level, return the
8243 c_expr structure for that expression. Otherwise, the original_code
8244 element is set to ERROR_MARK.
8245 If we were outputting the elements as they are read, return 0 as the value
8246 from inner levels (process_init_element ignores that),
8247 but return error_mark_node as the value from the outermost level
8248 (that's what we want to put in DECL_INITIAL).
8249 Otherwise, return a CONSTRUCTOR expression as the value. */
8250
8251 struct c_expr
8252 pop_init_level (location_t loc, int implicit,
8253 struct obstack *braced_init_obstack,
8254 location_t insert_before)
8255 {
8256 struct constructor_stack *p;
8257 struct c_expr ret;
8258 ret.value = NULL_TREE;
8259 ret.original_code = ERROR_MARK;
8260 ret.original_type = NULL;
8261
8262 if (implicit == 0)
8263 {
8264 /* When we come to an explicit close brace,
8265 pop any inner levels that didn't have explicit braces. */
8266 while (constructor_stack->implicit)
8267 process_init_element (input_location,
8268 pop_init_level (loc, 1, braced_init_obstack,
8269 insert_before),
8270 true, braced_init_obstack);
8271 gcc_assert (!constructor_range_stack);
8272 }
8273 else
8274 if (initializer_stack->missing_brace_richloc)
8275 initializer_stack->missing_brace_richloc->add_fixit_insert_before
8276 (insert_before, "}");
8277
8278 /* Now output all pending elements. */
8279 constructor_incremental = 1;
8280 output_pending_init_elements (1, braced_init_obstack);
8281
8282 p = constructor_stack;
8283
8284 /* Error for initializing a flexible array member, or a zero-length
8285 array member in an inappropriate context. */
8286 if (constructor_type && constructor_fields
8287 && TREE_CODE (constructor_type) == ARRAY_TYPE
8288 && TYPE_DOMAIN (constructor_type)
8289 && !TYPE_MAX_VALUE (TYPE_DOMAIN (constructor_type)))
8290 {
8291 /* Silently discard empty initializations. The parser will
8292 already have pedwarned for empty brackets. */
8293 if (integer_zerop (constructor_unfilled_index))
8294 constructor_type = NULL_TREE;
8295 else
8296 {
8297 gcc_assert (!TYPE_SIZE (constructor_type));
8298
8299 if (constructor_depth > 2)
8300 error_init (loc, "initialization of flexible array member in a nested context");
8301 else
8302 pedwarn_init (loc, OPT_Wpedantic,
8303 "initialization of a flexible array member");
8304
8305 /* We have already issued an error message for the existence
8306 of a flexible array member not at the end of the structure.
8307 Discard the initializer so that we do not die later. */
8308 if (DECL_CHAIN (constructor_fields) != NULL_TREE)
8309 constructor_type = NULL_TREE;
8310 }
8311 }
8312
8313 switch (vec_safe_length (constructor_elements))
8314 {
8315 case 0:
8316 /* Initialization with { } counts as zeroinit. */
8317 constructor_zeroinit = 1;
8318 break;
8319 case 1:
8320 /* This might be zeroinit as well. */
8321 if (integer_zerop ((*constructor_elements)[0].value))
8322 constructor_zeroinit = 1;
8323 break;
8324 default:
8325 /* If the constructor has more than one element, it can't be { 0 }. */
8326 constructor_zeroinit = 0;
8327 break;
8328 }
8329
8330 /* Warn when some structs are initialized with direct aggregation. */
8331 if (!implicit && found_missing_braces && warn_missing_braces
8332 && !constructor_zeroinit)
8333 {
8334 gcc_assert (initializer_stack->missing_brace_richloc);
8335 warning_at (initializer_stack->missing_brace_richloc,
8336 OPT_Wmissing_braces,
8337 "missing braces around initializer");
8338 }
8339
8340 /* Warn when some struct elements are implicitly initialized to zero. */
8341 if (warn_missing_field_initializers
8342 && constructor_type
8343 && TREE_CODE (constructor_type) == RECORD_TYPE
8344 && constructor_unfilled_fields)
8345 {
8346 /* Do not warn for flexible array members or zero-length arrays. */
8347 while (constructor_unfilled_fields
8348 && (!DECL_SIZE (constructor_unfilled_fields)
8349 || integer_zerop (DECL_SIZE (constructor_unfilled_fields))))
8350 constructor_unfilled_fields = DECL_CHAIN (constructor_unfilled_fields);
8351
8352 if (constructor_unfilled_fields
8353 /* Do not warn if this level of the initializer uses member
8354 designators; it is likely to be deliberate. */
8355 && !constructor_designated
8356 /* Do not warn about initializing with { 0 } or with { }. */
8357 && !constructor_zeroinit)
8358 {
8359 if (warning_at (input_location, OPT_Wmissing_field_initializers,
8360 "missing initializer for field %qD of %qT",
8361 constructor_unfilled_fields,
8362 constructor_type))
8363 inform (DECL_SOURCE_LOCATION (constructor_unfilled_fields),
8364 "%qD declared here", constructor_unfilled_fields);
8365 }
8366 }
8367
8368 /* Pad out the end of the structure. */
8369 if (p->replacement_value.value)
8370 /* If this closes a superfluous brace pair,
8371 just pass out the element between them. */
8372 ret = p->replacement_value;
8373 else if (constructor_type == NULL_TREE)
8374 ;
8375 else if (!RECORD_OR_UNION_TYPE_P (constructor_type)
8376 && TREE_CODE (constructor_type) != ARRAY_TYPE
8377 && !VECTOR_TYPE_P (constructor_type))
8378 {
8379 /* A nonincremental scalar initializer--just return
8380 the element, after verifying there is just one. */
8381 if (vec_safe_is_empty (constructor_elements))
8382 {
8383 if (!constructor_erroneous)
8384 error_init (loc, "empty scalar initializer");
8385 ret.value = error_mark_node;
8386 }
8387 else if (vec_safe_length (constructor_elements) != 1)
8388 {
8389 error_init (loc, "extra elements in scalar initializer");
8390 ret.value = (*constructor_elements)[0].value;
8391 }
8392 else
8393 ret.value = (*constructor_elements)[0].value;
8394 }
8395 else
8396 {
8397 if (constructor_erroneous)
8398 ret.value = error_mark_node;
8399 else
8400 {
8401 ret.value = build_constructor (constructor_type,
8402 constructor_elements);
8403 if (constructor_constant)
8404 TREE_CONSTANT (ret.value) = 1;
8405 if (constructor_constant && constructor_simple)
8406 TREE_STATIC (ret.value) = 1;
8407 if (constructor_nonconst)
8408 CONSTRUCTOR_NON_CONST (ret.value) = 1;
8409 }
8410 }
8411
8412 if (ret.value && TREE_CODE (ret.value) != CONSTRUCTOR)
8413 {
8414 if (constructor_nonconst)
8415 ret.original_code = C_MAYBE_CONST_EXPR;
8416 else if (ret.original_code == C_MAYBE_CONST_EXPR)
8417 ret.original_code = ERROR_MARK;
8418 }
8419
8420 constructor_type = p->type;
8421 constructor_fields = p->fields;
8422 constructor_index = p->index;
8423 constructor_max_index = p->max_index;
8424 constructor_unfilled_index = p->unfilled_index;
8425 constructor_unfilled_fields = p->unfilled_fields;
8426 constructor_bit_index = p->bit_index;
8427 constructor_elements = p->elements;
8428 constructor_constant = p->constant;
8429 constructor_simple = p->simple;
8430 constructor_nonconst = p->nonconst;
8431 constructor_erroneous = p->erroneous;
8432 constructor_incremental = p->incremental;
8433 constructor_designated = p->designated;
8434 designator_depth = p->designator_depth;
8435 constructor_pending_elts = p->pending_elts;
8436 constructor_depth = p->depth;
8437 if (!p->implicit)
8438 constructor_range_stack = p->range_stack;
8439 RESTORE_SPELLING_DEPTH (constructor_depth);
8440
8441 constructor_stack = p->next;
8442 free (p);
8443
8444 if (ret.value == NULL_TREE && constructor_stack == 0)
8445 ret.value = error_mark_node;
8446 return ret;
8447 }
8448
8449 /* Common handling for both array range and field name designators.
8450 ARRAY argument is nonzero for array ranges. Returns false for success. */
8451
8452 static bool
8453 set_designator (location_t loc, bool array,
8454 struct obstack *braced_init_obstack)
8455 {
8456 tree subtype;
8457 enum tree_code subcode;
8458
8459 /* Don't die if an entire brace-pair level is superfluous
8460 in the containing level. */
8461 if (constructor_type == NULL_TREE)
8462 return true;
8463
8464 /* If there were errors in this designator list already, bail out
8465 silently. */
8466 if (designator_erroneous)
8467 return true;
8468
8469 if (!designator_depth)
8470 {
8471 gcc_assert (!constructor_range_stack);
8472
8473 /* Designator list starts at the level of closest explicit
8474 braces. */
8475 while (constructor_stack->implicit)
8476 process_init_element (input_location,
8477 pop_init_level (loc, 1, braced_init_obstack,
8478 last_init_list_comma),
8479 true, braced_init_obstack);
8480 constructor_designated = 1;
8481 return false;
8482 }
8483
8484 switch (TREE_CODE (constructor_type))
8485 {
8486 case RECORD_TYPE:
8487 case UNION_TYPE:
8488 subtype = TREE_TYPE (constructor_fields);
8489 if (subtype != error_mark_node)
8490 subtype = TYPE_MAIN_VARIANT (subtype);
8491 break;
8492 case ARRAY_TYPE:
8493 subtype = TYPE_MAIN_VARIANT (TREE_TYPE (constructor_type));
8494 break;
8495 default:
8496 gcc_unreachable ();
8497 }
8498
8499 subcode = TREE_CODE (subtype);
8500 if (array && subcode != ARRAY_TYPE)
8501 {
8502 error_init (loc, "array index in non-array initializer");
8503 return true;
8504 }
8505 else if (!array && subcode != RECORD_TYPE && subcode != UNION_TYPE)
8506 {
8507 error_init (loc, "field name not in record or union initializer");
8508 return true;
8509 }
8510
8511 constructor_designated = 1;
8512 finish_implicit_inits (loc, braced_init_obstack);
8513 push_init_level (loc, 2, braced_init_obstack);
8514 return false;
8515 }
8516
8517 /* If there are range designators in designator list, push a new designator
8518 to constructor_range_stack. RANGE_END is end of such stack range or
8519 NULL_TREE if there is no range designator at this level. */
8520
8521 static void
8522 push_range_stack (tree range_end, struct obstack * braced_init_obstack)
8523 {
8524 struct constructor_range_stack *p;
8525
8526 p = (struct constructor_range_stack *)
8527 obstack_alloc (braced_init_obstack,
8528 sizeof (struct constructor_range_stack));
8529 p->prev = constructor_range_stack;
8530 p->next = 0;
8531 p->fields = constructor_fields;
8532 p->range_start = constructor_index;
8533 p->index = constructor_index;
8534 p->stack = constructor_stack;
8535 p->range_end = range_end;
8536 if (constructor_range_stack)
8537 constructor_range_stack->next = p;
8538 constructor_range_stack = p;
8539 }
8540
8541 /* Within an array initializer, specify the next index to be initialized.
8542 FIRST is that index. If LAST is nonzero, then initialize a range
8543 of indices, running from FIRST through LAST. */
8544
8545 void
8546 set_init_index (location_t loc, tree first, tree last,
8547 struct obstack *braced_init_obstack)
8548 {
8549 if (set_designator (loc, true, braced_init_obstack))
8550 return;
8551
8552 designator_erroneous = 1;
8553
8554 if (!INTEGRAL_TYPE_P (TREE_TYPE (first))
8555 || (last && !INTEGRAL_TYPE_P (TREE_TYPE (last))))
8556 {
8557 error_init (loc, "array index in initializer not of integer type");
8558 return;
8559 }
8560
8561 if (TREE_CODE (first) != INTEGER_CST)
8562 {
8563 first = c_fully_fold (first, false, NULL);
8564 if (TREE_CODE (first) == INTEGER_CST)
8565 pedwarn_init (loc, OPT_Wpedantic,
8566 "array index in initializer is not "
8567 "an integer constant expression");
8568 }
8569
8570 if (last && TREE_CODE (last) != INTEGER_CST)
8571 {
8572 last = c_fully_fold (last, false, NULL);
8573 if (TREE_CODE (last) == INTEGER_CST)
8574 pedwarn_init (loc, OPT_Wpedantic,
8575 "array index in initializer is not "
8576 "an integer constant expression");
8577 }
8578
8579 if (TREE_CODE (first) != INTEGER_CST)
8580 error_init (loc, "nonconstant array index in initializer");
8581 else if (last != NULL_TREE && TREE_CODE (last) != INTEGER_CST)
8582 error_init (loc, "nonconstant array index in initializer");
8583 else if (TREE_CODE (constructor_type) != ARRAY_TYPE)
8584 error_init (loc, "array index in non-array initializer");
8585 else if (tree_int_cst_sgn (first) == -1)
8586 error_init (loc, "array index in initializer exceeds array bounds");
8587 else if (constructor_max_index
8588 && tree_int_cst_lt (constructor_max_index, first))
8589 error_init (loc, "array index in initializer exceeds array bounds");
8590 else
8591 {
8592 constant_expression_warning (first);
8593 if (last)
8594 constant_expression_warning (last);
8595 constructor_index = convert (bitsizetype, first);
8596 if (tree_int_cst_lt (constructor_index, first))
8597 {
8598 constructor_index = copy_node (constructor_index);
8599 TREE_OVERFLOW (constructor_index) = 1;
8600 }
8601
8602 if (last)
8603 {
8604 if (tree_int_cst_equal (first, last))
8605 last = NULL_TREE;
8606 else if (tree_int_cst_lt (last, first))
8607 {
8608 error_init (loc, "empty index range in initializer");
8609 last = NULL_TREE;
8610 }
8611 else
8612 {
8613 last = convert (bitsizetype, last);
8614 if (constructor_max_index != NULL_TREE
8615 && tree_int_cst_lt (constructor_max_index, last))
8616 {
8617 error_init (loc, "array index range in initializer exceeds "
8618 "array bounds");
8619 last = NULL_TREE;
8620 }
8621 }
8622 }
8623
8624 designator_depth++;
8625 designator_erroneous = 0;
8626 if (constructor_range_stack || last)
8627 push_range_stack (last, braced_init_obstack);
8628 }
8629 }
8630
8631 /* Within a struct initializer, specify the next field to be initialized. */
8632
8633 void
8634 set_init_label (location_t loc, tree fieldname, location_t fieldname_loc,
8635 struct obstack *braced_init_obstack)
8636 {
8637 tree field;
8638
8639 if (set_designator (loc, false, braced_init_obstack))
8640 return;
8641
8642 designator_erroneous = 1;
8643
8644 if (!RECORD_OR_UNION_TYPE_P (constructor_type))
8645 {
8646 error_init (loc, "field name not in record or union initializer");
8647 return;
8648 }
8649
8650 field = lookup_field (constructor_type, fieldname);
8651
8652 if (field == NULL_TREE)
8653 {
8654 tree guessed_id = lookup_field_fuzzy (constructor_type, fieldname);
8655 if (guessed_id)
8656 {
8657 gcc_rich_location rich_loc (fieldname_loc);
8658 rich_loc.add_fixit_misspelled_id (fieldname_loc, guessed_id);
8659 error_at (&rich_loc,
8660 "%qT has no member named %qE; did you mean %qE?",
8661 constructor_type, fieldname, guessed_id);
8662 }
8663 else
8664 error_at (fieldname_loc, "%qT has no member named %qE",
8665 constructor_type, fieldname);
8666 }
8667 else
8668 do
8669 {
8670 constructor_fields = TREE_VALUE (field);
8671 designator_depth++;
8672 designator_erroneous = 0;
8673 if (constructor_range_stack)
8674 push_range_stack (NULL_TREE, braced_init_obstack);
8675 field = TREE_CHAIN (field);
8676 if (field)
8677 {
8678 if (set_designator (loc, false, braced_init_obstack))
8679 return;
8680 }
8681 }
8682 while (field != NULL_TREE);
8683 }
8684 \f
8685 /* Add a new initializer to the tree of pending initializers. PURPOSE
8686 identifies the initializer, either array index or field in a structure.
8687 VALUE is the value of that index or field. If ORIGTYPE is not
8688 NULL_TREE, it is the original type of VALUE.
8689
8690 IMPLICIT is true if value comes from pop_init_level (1),
8691 the new initializer has been merged with the existing one
8692 and thus no warnings should be emitted about overriding an
8693 existing initializer. */
8694
8695 static void
8696 add_pending_init (location_t loc, tree purpose, tree value, tree origtype,
8697 bool implicit, struct obstack *braced_init_obstack)
8698 {
8699 struct init_node *p, **q, *r;
8700
8701 q = &constructor_pending_elts;
8702 p = 0;
8703
8704 if (TREE_CODE (constructor_type) == ARRAY_TYPE)
8705 {
8706 while (*q != 0)
8707 {
8708 p = *q;
8709 if (tree_int_cst_lt (purpose, p->purpose))
8710 q = &p->left;
8711 else if (tree_int_cst_lt (p->purpose, purpose))
8712 q = &p->right;
8713 else
8714 {
8715 if (!implicit)
8716 {
8717 if (TREE_SIDE_EFFECTS (p->value))
8718 warning_init (loc, OPT_Woverride_init_side_effects,
8719 "initialized field with side-effects "
8720 "overwritten");
8721 else if (warn_override_init)
8722 warning_init (loc, OPT_Woverride_init,
8723 "initialized field overwritten");
8724 }
8725 p->value = value;
8726 p->origtype = origtype;
8727 return;
8728 }
8729 }
8730 }
8731 else
8732 {
8733 tree bitpos;
8734
8735 bitpos = bit_position (purpose);
8736 while (*q != NULL)
8737 {
8738 p = *q;
8739 if (tree_int_cst_lt (bitpos, bit_position (p->purpose)))
8740 q = &p->left;
8741 else if (p->purpose != purpose)
8742 q = &p->right;
8743 else
8744 {
8745 if (!implicit)
8746 {
8747 if (TREE_SIDE_EFFECTS (p->value))
8748 warning_init (loc, OPT_Woverride_init_side_effects,
8749 "initialized field with side-effects "
8750 "overwritten");
8751 else if (warn_override_init)
8752 warning_init (loc, OPT_Woverride_init,
8753 "initialized field overwritten");
8754 }
8755 p->value = value;
8756 p->origtype = origtype;
8757 return;
8758 }
8759 }
8760 }
8761
8762 r = (struct init_node *) obstack_alloc (braced_init_obstack,
8763 sizeof (struct init_node));
8764 r->purpose = purpose;
8765 r->value = value;
8766 r->origtype = origtype;
8767
8768 *q = r;
8769 r->parent = p;
8770 r->left = 0;
8771 r->right = 0;
8772 r->balance = 0;
8773
8774 while (p)
8775 {
8776 struct init_node *s;
8777
8778 if (r == p->left)
8779 {
8780 if (p->balance == 0)
8781 p->balance = -1;
8782 else if (p->balance < 0)
8783 {
8784 if (r->balance < 0)
8785 {
8786 /* L rotation. */
8787 p->left = r->right;
8788 if (p->left)
8789 p->left->parent = p;
8790 r->right = p;
8791
8792 p->balance = 0;
8793 r->balance = 0;
8794
8795 s = p->parent;
8796 p->parent = r;
8797 r->parent = s;
8798 if (s)
8799 {
8800 if (s->left == p)
8801 s->left = r;
8802 else
8803 s->right = r;
8804 }
8805 else
8806 constructor_pending_elts = r;
8807 }
8808 else
8809 {
8810 /* LR rotation. */
8811 struct init_node *t = r->right;
8812
8813 r->right = t->left;
8814 if (r->right)
8815 r->right->parent = r;
8816 t->left = r;
8817
8818 p->left = t->right;
8819 if (p->left)
8820 p->left->parent = p;
8821 t->right = p;
8822
8823 p->balance = t->balance < 0;
8824 r->balance = -(t->balance > 0);
8825 t->balance = 0;
8826
8827 s = p->parent;
8828 p->parent = t;
8829 r->parent = t;
8830 t->parent = s;
8831 if (s)
8832 {
8833 if (s->left == p)
8834 s->left = t;
8835 else
8836 s->right = t;
8837 }
8838 else
8839 constructor_pending_elts = t;
8840 }
8841 break;
8842 }
8843 else
8844 {
8845 /* p->balance == +1; growth of left side balances the node. */
8846 p->balance = 0;
8847 break;
8848 }
8849 }
8850 else /* r == p->right */
8851 {
8852 if (p->balance == 0)
8853 /* Growth propagation from right side. */
8854 p->balance++;
8855 else if (p->balance > 0)
8856 {
8857 if (r->balance > 0)
8858 {
8859 /* R rotation. */
8860 p->right = r->left;
8861 if (p->right)
8862 p->right->parent = p;
8863 r->left = p;
8864
8865 p->balance = 0;
8866 r->balance = 0;
8867
8868 s = p->parent;
8869 p->parent = r;
8870 r->parent = s;
8871 if (s)
8872 {
8873 if (s->left == p)
8874 s->left = r;
8875 else
8876 s->right = r;
8877 }
8878 else
8879 constructor_pending_elts = r;
8880 }
8881 else /* r->balance == -1 */
8882 {
8883 /* RL rotation */
8884 struct init_node *t = r->left;
8885
8886 r->left = t->right;
8887 if (r->left)
8888 r->left->parent = r;
8889 t->right = r;
8890
8891 p->right = t->left;
8892 if (p->right)
8893 p->right->parent = p;
8894 t->left = p;
8895
8896 r->balance = (t->balance < 0);
8897 p->balance = -(t->balance > 0);
8898 t->balance = 0;
8899
8900 s = p->parent;
8901 p->parent = t;
8902 r->parent = t;
8903 t->parent = s;
8904 if (s)
8905 {
8906 if (s->left == p)
8907 s->left = t;
8908 else
8909 s->right = t;
8910 }
8911 else
8912 constructor_pending_elts = t;
8913 }
8914 break;
8915 }
8916 else
8917 {
8918 /* p->balance == -1; growth of right side balances the node. */
8919 p->balance = 0;
8920 break;
8921 }
8922 }
8923
8924 r = p;
8925 p = p->parent;
8926 }
8927 }
8928
8929 /* Build AVL tree from a sorted chain. */
8930
8931 static void
8932 set_nonincremental_init (struct obstack * braced_init_obstack)
8933 {
8934 unsigned HOST_WIDE_INT ix;
8935 tree index, value;
8936
8937 if (TREE_CODE (constructor_type) != RECORD_TYPE
8938 && TREE_CODE (constructor_type) != ARRAY_TYPE)
8939 return;
8940
8941 FOR_EACH_CONSTRUCTOR_ELT (constructor_elements, ix, index, value)
8942 add_pending_init (input_location, index, value, NULL_TREE, true,
8943 braced_init_obstack);
8944 constructor_elements = NULL;
8945 if (TREE_CODE (constructor_type) == RECORD_TYPE)
8946 {
8947 constructor_unfilled_fields = TYPE_FIELDS (constructor_type);
8948 /* Skip any nameless bit fields at the beginning. */
8949 while (constructor_unfilled_fields != NULL_TREE
8950 && DECL_UNNAMED_BIT_FIELD (constructor_unfilled_fields))
8951 constructor_unfilled_fields = TREE_CHAIN (constructor_unfilled_fields);
8952
8953 }
8954 else if (TREE_CODE (constructor_type) == ARRAY_TYPE)
8955 {
8956 if (TYPE_DOMAIN (constructor_type))
8957 constructor_unfilled_index
8958 = convert (bitsizetype,
8959 TYPE_MIN_VALUE (TYPE_DOMAIN (constructor_type)));
8960 else
8961 constructor_unfilled_index = bitsize_zero_node;
8962 }
8963 constructor_incremental = 0;
8964 }
8965
8966 /* Build AVL tree from a string constant. */
8967
8968 static void
8969 set_nonincremental_init_from_string (tree str,
8970 struct obstack * braced_init_obstack)
8971 {
8972 tree value, purpose, type;
8973 HOST_WIDE_INT val[2];
8974 const char *p, *end;
8975 int byte, wchar_bytes, charwidth, bitpos;
8976
8977 gcc_assert (TREE_CODE (constructor_type) == ARRAY_TYPE);
8978
8979 wchar_bytes = TYPE_PRECISION (TREE_TYPE (TREE_TYPE (str))) / BITS_PER_UNIT;
8980 charwidth = TYPE_PRECISION (char_type_node);
8981 gcc_assert ((size_t) wchar_bytes * charwidth
8982 <= ARRAY_SIZE (val) * HOST_BITS_PER_WIDE_INT);
8983 type = TREE_TYPE (constructor_type);
8984 p = TREE_STRING_POINTER (str);
8985 end = p + TREE_STRING_LENGTH (str);
8986
8987 for (purpose = bitsize_zero_node;
8988 p < end
8989 && !(constructor_max_index
8990 && tree_int_cst_lt (constructor_max_index, purpose));
8991 purpose = size_binop (PLUS_EXPR, purpose, bitsize_one_node))
8992 {
8993 if (wchar_bytes == 1)
8994 {
8995 val[0] = (unsigned char) *p++;
8996 val[1] = 0;
8997 }
8998 else
8999 {
9000 val[1] = 0;
9001 val[0] = 0;
9002 for (byte = 0; byte < wchar_bytes; byte++)
9003 {
9004 if (BYTES_BIG_ENDIAN)
9005 bitpos = (wchar_bytes - byte - 1) * charwidth;
9006 else
9007 bitpos = byte * charwidth;
9008 val[bitpos / HOST_BITS_PER_WIDE_INT]
9009 |= ((unsigned HOST_WIDE_INT) ((unsigned char) *p++))
9010 << (bitpos % HOST_BITS_PER_WIDE_INT);
9011 }
9012 }
9013
9014 if (!TYPE_UNSIGNED (type))
9015 {
9016 bitpos = ((wchar_bytes - 1) * charwidth) + HOST_BITS_PER_CHAR;
9017 if (bitpos < HOST_BITS_PER_WIDE_INT)
9018 {
9019 if (val[0] & (HOST_WIDE_INT_1 << (bitpos - 1)))
9020 {
9021 val[0] |= HOST_WIDE_INT_M1U << bitpos;
9022 val[1] = -1;
9023 }
9024 }
9025 else if (bitpos == HOST_BITS_PER_WIDE_INT)
9026 {
9027 if (val[0] < 0)
9028 val[1] = -1;
9029 }
9030 else if (val[1] & (HOST_WIDE_INT_1
9031 << (bitpos - 1 - HOST_BITS_PER_WIDE_INT)))
9032 val[1] |= HOST_WIDE_INT_M1U << (bitpos - HOST_BITS_PER_WIDE_INT);
9033 }
9034
9035 value = wide_int_to_tree (type,
9036 wide_int::from_array (val, 2,
9037 HOST_BITS_PER_WIDE_INT * 2));
9038 add_pending_init (input_location, purpose, value, NULL_TREE, true,
9039 braced_init_obstack);
9040 }
9041
9042 constructor_incremental = 0;
9043 }
9044
9045 /* Return value of FIELD in pending initializer or NULL_TREE if the field was
9046 not initialized yet. */
9047
9048 static tree
9049 find_init_member (tree field, struct obstack * braced_init_obstack)
9050 {
9051 struct init_node *p;
9052
9053 if (TREE_CODE (constructor_type) == ARRAY_TYPE)
9054 {
9055 if (constructor_incremental
9056 && tree_int_cst_lt (field, constructor_unfilled_index))
9057 set_nonincremental_init (braced_init_obstack);
9058
9059 p = constructor_pending_elts;
9060 while (p)
9061 {
9062 if (tree_int_cst_lt (field, p->purpose))
9063 p = p->left;
9064 else if (tree_int_cst_lt (p->purpose, field))
9065 p = p->right;
9066 else
9067 return p->value;
9068 }
9069 }
9070 else if (TREE_CODE (constructor_type) == RECORD_TYPE)
9071 {
9072 tree bitpos = bit_position (field);
9073
9074 if (constructor_incremental
9075 && (!constructor_unfilled_fields
9076 || tree_int_cst_lt (bitpos,
9077 bit_position (constructor_unfilled_fields))))
9078 set_nonincremental_init (braced_init_obstack);
9079
9080 p = constructor_pending_elts;
9081 while (p)
9082 {
9083 if (field == p->purpose)
9084 return p->value;
9085 else if (tree_int_cst_lt (bitpos, bit_position (p->purpose)))
9086 p = p->left;
9087 else
9088 p = p->right;
9089 }
9090 }
9091 else if (TREE_CODE (constructor_type) == UNION_TYPE)
9092 {
9093 if (!vec_safe_is_empty (constructor_elements)
9094 && (constructor_elements->last ().index == field))
9095 return constructor_elements->last ().value;
9096 }
9097 return NULL_TREE;
9098 }
9099
9100 /* "Output" the next constructor element.
9101 At top level, really output it to assembler code now.
9102 Otherwise, collect it in a list from which we will make a CONSTRUCTOR.
9103 If ORIGTYPE is not NULL_TREE, it is the original type of VALUE.
9104 TYPE is the data type that the containing data type wants here.
9105 FIELD is the field (a FIELD_DECL) or the index that this element fills.
9106 If VALUE is a string constant, STRICT_STRING is true if it is
9107 unparenthesized or we should not warn here for it being parenthesized.
9108 For other types of VALUE, STRICT_STRING is not used.
9109
9110 PENDING if true means output pending elements that belong
9111 right after this element. (PENDING is normally true;
9112 it is false while outputting pending elements, to avoid recursion.)
9113
9114 IMPLICIT is true if value comes from pop_init_level (1),
9115 the new initializer has been merged with the existing one
9116 and thus no warnings should be emitted about overriding an
9117 existing initializer. */
9118
9119 static void
9120 output_init_element (location_t loc, tree value, tree origtype,
9121 bool strict_string, tree type, tree field, bool pending,
9122 bool implicit, struct obstack * braced_init_obstack)
9123 {
9124 tree semantic_type = NULL_TREE;
9125 bool maybe_const = true;
9126 bool npc;
9127
9128 if (type == error_mark_node || value == error_mark_node)
9129 {
9130 constructor_erroneous = 1;
9131 return;
9132 }
9133 if (TREE_CODE (TREE_TYPE (value)) == ARRAY_TYPE
9134 && (TREE_CODE (value) == STRING_CST
9135 || TREE_CODE (value) == COMPOUND_LITERAL_EXPR)
9136 && !(TREE_CODE (value) == STRING_CST
9137 && TREE_CODE (type) == ARRAY_TYPE
9138 && INTEGRAL_TYPE_P (TREE_TYPE (type)))
9139 && !comptypes (TYPE_MAIN_VARIANT (TREE_TYPE (value)),
9140 TYPE_MAIN_VARIANT (type)))
9141 value = array_to_pointer_conversion (input_location, value);
9142
9143 if (TREE_CODE (value) == COMPOUND_LITERAL_EXPR
9144 && require_constant_value && pending)
9145 {
9146 /* As an extension, allow initializing objects with static storage
9147 duration with compound literals (which are then treated just as
9148 the brace enclosed list they contain). */
9149 if (flag_isoc99)
9150 pedwarn_init (loc, OPT_Wpedantic, "initializer element is not "
9151 "constant");
9152 tree decl = COMPOUND_LITERAL_EXPR_DECL (value);
9153 value = DECL_INITIAL (decl);
9154 }
9155
9156 npc = null_pointer_constant_p (value);
9157 if (TREE_CODE (value) == EXCESS_PRECISION_EXPR)
9158 {
9159 semantic_type = TREE_TYPE (value);
9160 value = TREE_OPERAND (value, 0);
9161 }
9162 value = c_fully_fold (value, require_constant_value, &maybe_const);
9163
9164 if (value == error_mark_node)
9165 constructor_erroneous = 1;
9166 else if (!TREE_CONSTANT (value))
9167 constructor_constant = 0;
9168 else if (!initializer_constant_valid_p (value,
9169 TREE_TYPE (value),
9170 AGGREGATE_TYPE_P (constructor_type)
9171 && TYPE_REVERSE_STORAGE_ORDER
9172 (constructor_type))
9173 || (RECORD_OR_UNION_TYPE_P (constructor_type)
9174 && DECL_C_BIT_FIELD (field)
9175 && TREE_CODE (value) != INTEGER_CST))
9176 constructor_simple = 0;
9177 if (!maybe_const)
9178 constructor_nonconst = 1;
9179
9180 /* Digest the initializer and issue any errors about incompatible
9181 types before issuing errors about non-constant initializers. */
9182 tree new_value = value;
9183 if (semantic_type)
9184 new_value = build1 (EXCESS_PRECISION_EXPR, semantic_type, value);
9185 new_value = digest_init (loc, type, new_value, origtype, npc, strict_string,
9186 require_constant_value);
9187 if (new_value == error_mark_node)
9188 {
9189 constructor_erroneous = 1;
9190 return;
9191 }
9192 if (require_constant_value || require_constant_elements)
9193 constant_expression_warning (new_value);
9194
9195 /* Proceed to check the constness of the original initializer. */
9196 if (!initializer_constant_valid_p (value, TREE_TYPE (value)))
9197 {
9198 if (require_constant_value)
9199 {
9200 error_init (loc, "initializer element is not constant");
9201 value = error_mark_node;
9202 }
9203 else if (require_constant_elements)
9204 pedwarn (loc, OPT_Wpedantic,
9205 "initializer element is not computable at load time");
9206 }
9207 else if (!maybe_const
9208 && (require_constant_value || require_constant_elements))
9209 pedwarn_init (loc, OPT_Wpedantic,
9210 "initializer element is not a constant expression");
9211
9212 /* Issue -Wc++-compat warnings about initializing a bitfield with
9213 enum type. */
9214 if (warn_cxx_compat
9215 && field != NULL_TREE
9216 && TREE_CODE (field) == FIELD_DECL
9217 && DECL_BIT_FIELD_TYPE (field) != NULL_TREE
9218 && (TYPE_MAIN_VARIANT (DECL_BIT_FIELD_TYPE (field))
9219 != TYPE_MAIN_VARIANT (type))
9220 && TREE_CODE (DECL_BIT_FIELD_TYPE (field)) == ENUMERAL_TYPE)
9221 {
9222 tree checktype = origtype != NULL_TREE ? origtype : TREE_TYPE (value);
9223 if (checktype != error_mark_node
9224 && (TYPE_MAIN_VARIANT (checktype)
9225 != TYPE_MAIN_VARIANT (DECL_BIT_FIELD_TYPE (field))))
9226 warning_init (loc, OPT_Wc___compat,
9227 "enum conversion in initialization is invalid in C++");
9228 }
9229
9230 /* If this field is empty and does not have side effects (and is not at
9231 the end of structure), don't do anything other than checking the
9232 initializer. */
9233 if (field
9234 && (TREE_TYPE (field) == error_mark_node
9235 || (COMPLETE_TYPE_P (TREE_TYPE (field))
9236 && integer_zerop (TYPE_SIZE (TREE_TYPE (field)))
9237 && !TREE_SIDE_EFFECTS (new_value)
9238 && (TREE_CODE (constructor_type) == ARRAY_TYPE
9239 || DECL_CHAIN (field)))))
9240 return;
9241
9242 /* Finally, set VALUE to the initializer value digested above. */
9243 value = new_value;
9244
9245 /* If this element doesn't come next in sequence,
9246 put it on constructor_pending_elts. */
9247 if (TREE_CODE (constructor_type) == ARRAY_TYPE
9248 && (!constructor_incremental
9249 || !tree_int_cst_equal (field, constructor_unfilled_index)))
9250 {
9251 if (constructor_incremental
9252 && tree_int_cst_lt (field, constructor_unfilled_index))
9253 set_nonincremental_init (braced_init_obstack);
9254
9255 add_pending_init (loc, field, value, origtype, implicit,
9256 braced_init_obstack);
9257 return;
9258 }
9259 else if (TREE_CODE (constructor_type) == RECORD_TYPE
9260 && (!constructor_incremental
9261 || field != constructor_unfilled_fields))
9262 {
9263 /* We do this for records but not for unions. In a union,
9264 no matter which field is specified, it can be initialized
9265 right away since it starts at the beginning of the union. */
9266 if (constructor_incremental)
9267 {
9268 if (!constructor_unfilled_fields)
9269 set_nonincremental_init (braced_init_obstack);
9270 else
9271 {
9272 tree bitpos, unfillpos;
9273
9274 bitpos = bit_position (field);
9275 unfillpos = bit_position (constructor_unfilled_fields);
9276
9277 if (tree_int_cst_lt (bitpos, unfillpos))
9278 set_nonincremental_init (braced_init_obstack);
9279 }
9280 }
9281
9282 add_pending_init (loc, field, value, origtype, implicit,
9283 braced_init_obstack);
9284 return;
9285 }
9286 else if (TREE_CODE (constructor_type) == UNION_TYPE
9287 && !vec_safe_is_empty (constructor_elements))
9288 {
9289 if (!implicit)
9290 {
9291 if (TREE_SIDE_EFFECTS (constructor_elements->last ().value))
9292 warning_init (loc, OPT_Woverride_init_side_effects,
9293 "initialized field with side-effects overwritten");
9294 else if (warn_override_init)
9295 warning_init (loc, OPT_Woverride_init,
9296 "initialized field overwritten");
9297 }
9298
9299 /* We can have just one union field set. */
9300 constructor_elements = NULL;
9301 }
9302
9303 /* Otherwise, output this element either to
9304 constructor_elements or to the assembler file. */
9305
9306 constructor_elt celt = {field, value};
9307 vec_safe_push (constructor_elements, celt);
9308
9309 /* Advance the variable that indicates sequential elements output. */
9310 if (TREE_CODE (constructor_type) == ARRAY_TYPE)
9311 constructor_unfilled_index
9312 = size_binop_loc (input_location, PLUS_EXPR, constructor_unfilled_index,
9313 bitsize_one_node);
9314 else if (TREE_CODE (constructor_type) == RECORD_TYPE)
9315 {
9316 constructor_unfilled_fields
9317 = DECL_CHAIN (constructor_unfilled_fields);
9318
9319 /* Skip any nameless bit fields. */
9320 while (constructor_unfilled_fields != NULL_TREE
9321 && DECL_UNNAMED_BIT_FIELD (constructor_unfilled_fields))
9322 constructor_unfilled_fields =
9323 DECL_CHAIN (constructor_unfilled_fields);
9324 }
9325 else if (TREE_CODE (constructor_type) == UNION_TYPE)
9326 constructor_unfilled_fields = NULL_TREE;
9327
9328 /* Now output any pending elements which have become next. */
9329 if (pending)
9330 output_pending_init_elements (0, braced_init_obstack);
9331 }
9332
9333 /* Output any pending elements which have become next.
9334 As we output elements, constructor_unfilled_{fields,index}
9335 advances, which may cause other elements to become next;
9336 if so, they too are output.
9337
9338 If ALL is 0, we return when there are
9339 no more pending elements to output now.
9340
9341 If ALL is 1, we output space as necessary so that
9342 we can output all the pending elements. */
9343 static void
9344 output_pending_init_elements (int all, struct obstack * braced_init_obstack)
9345 {
9346 struct init_node *elt = constructor_pending_elts;
9347 tree next;
9348
9349 retry:
9350
9351 /* Look through the whole pending tree.
9352 If we find an element that should be output now,
9353 output it. Otherwise, set NEXT to the element
9354 that comes first among those still pending. */
9355
9356 next = NULL_TREE;
9357 while (elt)
9358 {
9359 if (TREE_CODE (constructor_type) == ARRAY_TYPE)
9360 {
9361 if (tree_int_cst_equal (elt->purpose,
9362 constructor_unfilled_index))
9363 output_init_element (input_location, elt->value, elt->origtype,
9364 true, TREE_TYPE (constructor_type),
9365 constructor_unfilled_index, false, false,
9366 braced_init_obstack);
9367 else if (tree_int_cst_lt (constructor_unfilled_index,
9368 elt->purpose))
9369 {
9370 /* Advance to the next smaller node. */
9371 if (elt->left)
9372 elt = elt->left;
9373 else
9374 {
9375 /* We have reached the smallest node bigger than the
9376 current unfilled index. Fill the space first. */
9377 next = elt->purpose;
9378 break;
9379 }
9380 }
9381 else
9382 {
9383 /* Advance to the next bigger node. */
9384 if (elt->right)
9385 elt = elt->right;
9386 else
9387 {
9388 /* We have reached the biggest node in a subtree. Find
9389 the parent of it, which is the next bigger node. */
9390 while (elt->parent && elt->parent->right == elt)
9391 elt = elt->parent;
9392 elt = elt->parent;
9393 if (elt && tree_int_cst_lt (constructor_unfilled_index,
9394 elt->purpose))
9395 {
9396 next = elt->purpose;
9397 break;
9398 }
9399 }
9400 }
9401 }
9402 else if (RECORD_OR_UNION_TYPE_P (constructor_type))
9403 {
9404 tree ctor_unfilled_bitpos, elt_bitpos;
9405
9406 /* If the current record is complete we are done. */
9407 if (constructor_unfilled_fields == NULL_TREE)
9408 break;
9409
9410 ctor_unfilled_bitpos = bit_position (constructor_unfilled_fields);
9411 elt_bitpos = bit_position (elt->purpose);
9412 /* We can't compare fields here because there might be empty
9413 fields in between. */
9414 if (tree_int_cst_equal (elt_bitpos, ctor_unfilled_bitpos))
9415 {
9416 constructor_unfilled_fields = elt->purpose;
9417 output_init_element (input_location, elt->value, elt->origtype,
9418 true, TREE_TYPE (elt->purpose),
9419 elt->purpose, false, false,
9420 braced_init_obstack);
9421 }
9422 else if (tree_int_cst_lt (ctor_unfilled_bitpos, elt_bitpos))
9423 {
9424 /* Advance to the next smaller node. */
9425 if (elt->left)
9426 elt = elt->left;
9427 else
9428 {
9429 /* We have reached the smallest node bigger than the
9430 current unfilled field. Fill the space first. */
9431 next = elt->purpose;
9432 break;
9433 }
9434 }
9435 else
9436 {
9437 /* Advance to the next bigger node. */
9438 if (elt->right)
9439 elt = elt->right;
9440 else
9441 {
9442 /* We have reached the biggest node in a subtree. Find
9443 the parent of it, which is the next bigger node. */
9444 while (elt->parent && elt->parent->right == elt)
9445 elt = elt->parent;
9446 elt = elt->parent;
9447 if (elt
9448 && (tree_int_cst_lt (ctor_unfilled_bitpos,
9449 bit_position (elt->purpose))))
9450 {
9451 next = elt->purpose;
9452 break;
9453 }
9454 }
9455 }
9456 }
9457 }
9458
9459 /* Ordinarily return, but not if we want to output all
9460 and there are elements left. */
9461 if (!(all && next != NULL_TREE))
9462 return;
9463
9464 /* If it's not incremental, just skip over the gap, so that after
9465 jumping to retry we will output the next successive element. */
9466 if (RECORD_OR_UNION_TYPE_P (constructor_type))
9467 constructor_unfilled_fields = next;
9468 else if (TREE_CODE (constructor_type) == ARRAY_TYPE)
9469 constructor_unfilled_index = next;
9470
9471 /* ELT now points to the node in the pending tree with the next
9472 initializer to output. */
9473 goto retry;
9474 }
9475 \f
9476 /* Add one non-braced element to the current constructor level.
9477 This adjusts the current position within the constructor's type.
9478 This may also start or terminate implicit levels
9479 to handle a partly-braced initializer.
9480
9481 Once this has found the correct level for the new element,
9482 it calls output_init_element.
9483
9484 IMPLICIT is true if value comes from pop_init_level (1),
9485 the new initializer has been merged with the existing one
9486 and thus no warnings should be emitted about overriding an
9487 existing initializer. */
9488
9489 void
9490 process_init_element (location_t loc, struct c_expr value, bool implicit,
9491 struct obstack * braced_init_obstack)
9492 {
9493 tree orig_value = value.value;
9494 int string_flag
9495 = (orig_value != NULL_TREE && TREE_CODE (orig_value) == STRING_CST);
9496 bool strict_string = value.original_code == STRING_CST;
9497 bool was_designated = designator_depth != 0;
9498
9499 designator_depth = 0;
9500 designator_erroneous = 0;
9501
9502 if (!implicit && value.value && !integer_zerop (value.value))
9503 constructor_zeroinit = 0;
9504
9505 /* Handle superfluous braces around string cst as in
9506 char x[] = {"foo"}; */
9507 if (string_flag
9508 && constructor_type
9509 && !was_designated
9510 && TREE_CODE (constructor_type) == ARRAY_TYPE
9511 && INTEGRAL_TYPE_P (TREE_TYPE (constructor_type))
9512 && integer_zerop (constructor_unfilled_index))
9513 {
9514 if (constructor_stack->replacement_value.value)
9515 error_init (loc, "excess elements in char array initializer");
9516 constructor_stack->replacement_value = value;
9517 return;
9518 }
9519
9520 if (constructor_stack->replacement_value.value != NULL_TREE)
9521 {
9522 error_init (loc, "excess elements in struct initializer");
9523 return;
9524 }
9525
9526 /* Ignore elements of a brace group if it is entirely superfluous
9527 and has already been diagnosed. */
9528 if (constructor_type == NULL_TREE)
9529 return;
9530
9531 if (!implicit && warn_designated_init && !was_designated
9532 && TREE_CODE (constructor_type) == RECORD_TYPE
9533 && lookup_attribute ("designated_init",
9534 TYPE_ATTRIBUTES (constructor_type)))
9535 warning_init (loc,
9536 OPT_Wdesignated_init,
9537 "positional initialization of field "
9538 "in %<struct%> declared with %<designated_init%> attribute");
9539
9540 /* If we've exhausted any levels that didn't have braces,
9541 pop them now. */
9542 while (constructor_stack->implicit)
9543 {
9544 if (RECORD_OR_UNION_TYPE_P (constructor_type)
9545 && constructor_fields == NULL_TREE)
9546 process_init_element (loc,
9547 pop_init_level (loc, 1, braced_init_obstack,
9548 last_init_list_comma),
9549 true, braced_init_obstack);
9550 else if ((TREE_CODE (constructor_type) == ARRAY_TYPE
9551 || VECTOR_TYPE_P (constructor_type))
9552 && constructor_max_index
9553 && tree_int_cst_lt (constructor_max_index,
9554 constructor_index))
9555 process_init_element (loc,
9556 pop_init_level (loc, 1, braced_init_obstack,
9557 last_init_list_comma),
9558 true, braced_init_obstack);
9559 else
9560 break;
9561 }
9562
9563 /* In the case of [LO ... HI] = VALUE, only evaluate VALUE once. */
9564 if (constructor_range_stack)
9565 {
9566 /* If value is a compound literal and we'll be just using its
9567 content, don't put it into a SAVE_EXPR. */
9568 if (TREE_CODE (value.value) != COMPOUND_LITERAL_EXPR
9569 || !require_constant_value)
9570 {
9571 tree semantic_type = NULL_TREE;
9572 if (TREE_CODE (value.value) == EXCESS_PRECISION_EXPR)
9573 {
9574 semantic_type = TREE_TYPE (value.value);
9575 value.value = TREE_OPERAND (value.value, 0);
9576 }
9577 value.value = save_expr (value.value);
9578 if (semantic_type)
9579 value.value = build1 (EXCESS_PRECISION_EXPR, semantic_type,
9580 value.value);
9581 }
9582 }
9583
9584 while (1)
9585 {
9586 if (TREE_CODE (constructor_type) == RECORD_TYPE)
9587 {
9588 tree fieldtype;
9589 enum tree_code fieldcode;
9590
9591 if (constructor_fields == NULL_TREE)
9592 {
9593 pedwarn_init (loc, 0, "excess elements in struct initializer");
9594 break;
9595 }
9596
9597 fieldtype = TREE_TYPE (constructor_fields);
9598 if (fieldtype != error_mark_node)
9599 fieldtype = TYPE_MAIN_VARIANT (fieldtype);
9600 fieldcode = TREE_CODE (fieldtype);
9601
9602 /* Error for non-static initialization of a flexible array member. */
9603 if (fieldcode == ARRAY_TYPE
9604 && !require_constant_value
9605 && TYPE_SIZE (fieldtype) == NULL_TREE
9606 && DECL_CHAIN (constructor_fields) == NULL_TREE)
9607 {
9608 error_init (loc, "non-static initialization of a flexible "
9609 "array member");
9610 break;
9611 }
9612
9613 /* Error for initialization of a flexible array member with
9614 a string constant if the structure is in an array. E.g.:
9615 struct S { int x; char y[]; };
9616 struct S s[] = { { 1, "foo" } };
9617 is invalid. */
9618 if (string_flag
9619 && fieldcode == ARRAY_TYPE
9620 && constructor_depth > 1
9621 && TYPE_SIZE (fieldtype) == NULL_TREE
9622 && DECL_CHAIN (constructor_fields) == NULL_TREE)
9623 {
9624 bool in_array_p = false;
9625 for (struct constructor_stack *p = constructor_stack;
9626 p && p->type; p = p->next)
9627 if (TREE_CODE (p->type) == ARRAY_TYPE)
9628 {
9629 in_array_p = true;
9630 break;
9631 }
9632 if (in_array_p)
9633 {
9634 error_init (loc, "initialization of flexible array "
9635 "member in a nested context");
9636 break;
9637 }
9638 }
9639
9640 /* Accept a string constant to initialize a subarray. */
9641 if (value.value != NULL_TREE
9642 && fieldcode == ARRAY_TYPE
9643 && INTEGRAL_TYPE_P (TREE_TYPE (fieldtype))
9644 && string_flag)
9645 value.value = orig_value;
9646 /* Otherwise, if we have come to a subaggregate,
9647 and we don't have an element of its type, push into it. */
9648 else if (value.value != NULL_TREE
9649 && value.value != error_mark_node
9650 && TYPE_MAIN_VARIANT (TREE_TYPE (value.value)) != fieldtype
9651 && (fieldcode == RECORD_TYPE || fieldcode == ARRAY_TYPE
9652 || fieldcode == UNION_TYPE || fieldcode == VECTOR_TYPE))
9653 {
9654 push_init_level (loc, 1, braced_init_obstack);
9655 continue;
9656 }
9657
9658 if (value.value)
9659 {
9660 push_member_name (constructor_fields);
9661 output_init_element (loc, value.value, value.original_type,
9662 strict_string, fieldtype,
9663 constructor_fields, true, implicit,
9664 braced_init_obstack);
9665 RESTORE_SPELLING_DEPTH (constructor_depth);
9666 }
9667 else
9668 /* Do the bookkeeping for an element that was
9669 directly output as a constructor. */
9670 {
9671 /* For a record, keep track of end position of last field. */
9672 if (DECL_SIZE (constructor_fields))
9673 constructor_bit_index
9674 = size_binop_loc (input_location, PLUS_EXPR,
9675 bit_position (constructor_fields),
9676 DECL_SIZE (constructor_fields));
9677
9678 /* If the current field was the first one not yet written out,
9679 it isn't now, so update. */
9680 if (constructor_unfilled_fields == constructor_fields)
9681 {
9682 constructor_unfilled_fields = DECL_CHAIN (constructor_fields);
9683 /* Skip any nameless bit fields. */
9684 while (constructor_unfilled_fields != 0
9685 && (DECL_UNNAMED_BIT_FIELD
9686 (constructor_unfilled_fields)))
9687 constructor_unfilled_fields =
9688 DECL_CHAIN (constructor_unfilled_fields);
9689 }
9690 }
9691
9692 constructor_fields = DECL_CHAIN (constructor_fields);
9693 /* Skip any nameless bit fields at the beginning. */
9694 while (constructor_fields != NULL_TREE
9695 && DECL_UNNAMED_BIT_FIELD (constructor_fields))
9696 constructor_fields = DECL_CHAIN (constructor_fields);
9697 }
9698 else if (TREE_CODE (constructor_type) == UNION_TYPE)
9699 {
9700 tree fieldtype;
9701 enum tree_code fieldcode;
9702
9703 if (constructor_fields == NULL_TREE)
9704 {
9705 pedwarn_init (loc, 0,
9706 "excess elements in union initializer");
9707 break;
9708 }
9709
9710 fieldtype = TREE_TYPE (constructor_fields);
9711 if (fieldtype != error_mark_node)
9712 fieldtype = TYPE_MAIN_VARIANT (fieldtype);
9713 fieldcode = TREE_CODE (fieldtype);
9714
9715 /* Warn that traditional C rejects initialization of unions.
9716 We skip the warning if the value is zero. This is done
9717 under the assumption that the zero initializer in user
9718 code appears conditioned on e.g. __STDC__ to avoid
9719 "missing initializer" warnings and relies on default
9720 initialization to zero in the traditional C case.
9721 We also skip the warning if the initializer is designated,
9722 again on the assumption that this must be conditional on
9723 __STDC__ anyway (and we've already complained about the
9724 member-designator already). */
9725 if (!in_system_header_at (input_location) && !constructor_designated
9726 && !(value.value && (integer_zerop (value.value)
9727 || real_zerop (value.value))))
9728 warning (OPT_Wtraditional, "traditional C rejects initialization "
9729 "of unions");
9730
9731 /* Accept a string constant to initialize a subarray. */
9732 if (value.value != NULL_TREE
9733 && fieldcode == ARRAY_TYPE
9734 && INTEGRAL_TYPE_P (TREE_TYPE (fieldtype))
9735 && string_flag)
9736 value.value = orig_value;
9737 /* Otherwise, if we have come to a subaggregate,
9738 and we don't have an element of its type, push into it. */
9739 else if (value.value != NULL_TREE
9740 && value.value != error_mark_node
9741 && TYPE_MAIN_VARIANT (TREE_TYPE (value.value)) != fieldtype
9742 && (fieldcode == RECORD_TYPE || fieldcode == ARRAY_TYPE
9743 || fieldcode == UNION_TYPE || fieldcode == VECTOR_TYPE))
9744 {
9745 push_init_level (loc, 1, braced_init_obstack);
9746 continue;
9747 }
9748
9749 if (value.value)
9750 {
9751 push_member_name (constructor_fields);
9752 output_init_element (loc, value.value, value.original_type,
9753 strict_string, fieldtype,
9754 constructor_fields, true, implicit,
9755 braced_init_obstack);
9756 RESTORE_SPELLING_DEPTH (constructor_depth);
9757 }
9758 else
9759 /* Do the bookkeeping for an element that was
9760 directly output as a constructor. */
9761 {
9762 constructor_bit_index = DECL_SIZE (constructor_fields);
9763 constructor_unfilled_fields = DECL_CHAIN (constructor_fields);
9764 }
9765
9766 constructor_fields = NULL_TREE;
9767 }
9768 else if (TREE_CODE (constructor_type) == ARRAY_TYPE)
9769 {
9770 tree elttype = TYPE_MAIN_VARIANT (TREE_TYPE (constructor_type));
9771 enum tree_code eltcode = TREE_CODE (elttype);
9772
9773 /* Accept a string constant to initialize a subarray. */
9774 if (value.value != NULL_TREE
9775 && eltcode == ARRAY_TYPE
9776 && INTEGRAL_TYPE_P (TREE_TYPE (elttype))
9777 && string_flag)
9778 value.value = orig_value;
9779 /* Otherwise, if we have come to a subaggregate,
9780 and we don't have an element of its type, push into it. */
9781 else if (value.value != NULL_TREE
9782 && value.value != error_mark_node
9783 && TYPE_MAIN_VARIANT (TREE_TYPE (value.value)) != elttype
9784 && (eltcode == RECORD_TYPE || eltcode == ARRAY_TYPE
9785 || eltcode == UNION_TYPE || eltcode == VECTOR_TYPE))
9786 {
9787 push_init_level (loc, 1, braced_init_obstack);
9788 continue;
9789 }
9790
9791 if (constructor_max_index != NULL_TREE
9792 && (tree_int_cst_lt (constructor_max_index, constructor_index)
9793 || integer_all_onesp (constructor_max_index)))
9794 {
9795 pedwarn_init (loc, 0,
9796 "excess elements in array initializer");
9797 break;
9798 }
9799
9800 /* Now output the actual element. */
9801 if (value.value)
9802 {
9803 push_array_bounds (tree_to_uhwi (constructor_index));
9804 output_init_element (loc, value.value, value.original_type,
9805 strict_string, elttype,
9806 constructor_index, true, implicit,
9807 braced_init_obstack);
9808 RESTORE_SPELLING_DEPTH (constructor_depth);
9809 }
9810
9811 constructor_index
9812 = size_binop_loc (input_location, PLUS_EXPR,
9813 constructor_index, bitsize_one_node);
9814
9815 if (!value.value)
9816 /* If we are doing the bookkeeping for an element that was
9817 directly output as a constructor, we must update
9818 constructor_unfilled_index. */
9819 constructor_unfilled_index = constructor_index;
9820 }
9821 else if (VECTOR_TYPE_P (constructor_type))
9822 {
9823 tree elttype = TYPE_MAIN_VARIANT (TREE_TYPE (constructor_type));
9824
9825 /* Do a basic check of initializer size. Note that vectors
9826 always have a fixed size derived from their type. */
9827 if (tree_int_cst_lt (constructor_max_index, constructor_index))
9828 {
9829 pedwarn_init (loc, 0,
9830 "excess elements in vector initializer");
9831 break;
9832 }
9833
9834 /* Now output the actual element. */
9835 if (value.value)
9836 {
9837 if (TREE_CODE (value.value) == VECTOR_CST)
9838 elttype = TYPE_MAIN_VARIANT (constructor_type);
9839 output_init_element (loc, value.value, value.original_type,
9840 strict_string, elttype,
9841 constructor_index, true, implicit,
9842 braced_init_obstack);
9843 }
9844
9845 constructor_index
9846 = size_binop_loc (input_location,
9847 PLUS_EXPR, constructor_index, bitsize_one_node);
9848
9849 if (!value.value)
9850 /* If we are doing the bookkeeping for an element that was
9851 directly output as a constructor, we must update
9852 constructor_unfilled_index. */
9853 constructor_unfilled_index = constructor_index;
9854 }
9855
9856 /* Handle the sole element allowed in a braced initializer
9857 for a scalar variable. */
9858 else if (constructor_type != error_mark_node
9859 && constructor_fields == NULL_TREE)
9860 {
9861 pedwarn_init (loc, 0,
9862 "excess elements in scalar initializer");
9863 break;
9864 }
9865 else
9866 {
9867 if (value.value)
9868 output_init_element (loc, value.value, value.original_type,
9869 strict_string, constructor_type,
9870 NULL_TREE, true, implicit,
9871 braced_init_obstack);
9872 constructor_fields = NULL_TREE;
9873 }
9874
9875 /* Handle range initializers either at this level or anywhere higher
9876 in the designator stack. */
9877 if (constructor_range_stack)
9878 {
9879 struct constructor_range_stack *p, *range_stack;
9880 int finish = 0;
9881
9882 range_stack = constructor_range_stack;
9883 constructor_range_stack = 0;
9884 while (constructor_stack != range_stack->stack)
9885 {
9886 gcc_assert (constructor_stack->implicit);
9887 process_init_element (loc,
9888 pop_init_level (loc, 1,
9889 braced_init_obstack,
9890 last_init_list_comma),
9891 true, braced_init_obstack);
9892 }
9893 for (p = range_stack;
9894 !p->range_end || tree_int_cst_equal (p->index, p->range_end);
9895 p = p->prev)
9896 {
9897 gcc_assert (constructor_stack->implicit);
9898 process_init_element (loc,
9899 pop_init_level (loc, 1,
9900 braced_init_obstack,
9901 last_init_list_comma),
9902 true, braced_init_obstack);
9903 }
9904
9905 p->index = size_binop_loc (input_location,
9906 PLUS_EXPR, p->index, bitsize_one_node);
9907 if (tree_int_cst_equal (p->index, p->range_end) && !p->prev)
9908 finish = 1;
9909
9910 while (1)
9911 {
9912 constructor_index = p->index;
9913 constructor_fields = p->fields;
9914 if (finish && p->range_end && p->index == p->range_start)
9915 {
9916 finish = 0;
9917 p->prev = 0;
9918 }
9919 p = p->next;
9920 if (!p)
9921 break;
9922 finish_implicit_inits (loc, braced_init_obstack);
9923 push_init_level (loc, 2, braced_init_obstack);
9924 p->stack = constructor_stack;
9925 if (p->range_end && tree_int_cst_equal (p->index, p->range_end))
9926 p->index = p->range_start;
9927 }
9928
9929 if (!finish)
9930 constructor_range_stack = range_stack;
9931 continue;
9932 }
9933
9934 break;
9935 }
9936
9937 constructor_range_stack = 0;
9938 }
9939 \f
9940 /* Build a complete asm-statement, whose components are a CV_QUALIFIER
9941 (guaranteed to be 'volatile' or null) and ARGS (represented using
9942 an ASM_EXPR node). */
9943 tree
9944 build_asm_stmt (tree cv_qualifier, tree args)
9945 {
9946 if (!ASM_VOLATILE_P (args) && cv_qualifier)
9947 ASM_VOLATILE_P (args) = 1;
9948 return add_stmt (args);
9949 }
9950
9951 /* Build an asm-expr, whose components are a STRING, some OUTPUTS,
9952 some INPUTS, and some CLOBBERS. The latter three may be NULL.
9953 SIMPLE indicates whether there was anything at all after the
9954 string in the asm expression -- asm("blah") and asm("blah" : )
9955 are subtly different. We use a ASM_EXPR node to represent this. */
9956 tree
9957 build_asm_expr (location_t loc, tree string, tree outputs, tree inputs,
9958 tree clobbers, tree labels, bool simple)
9959 {
9960 tree tail;
9961 tree args;
9962 int i;
9963 const char *constraint;
9964 const char **oconstraints;
9965 bool allows_mem, allows_reg, is_inout;
9966 int ninputs, noutputs;
9967
9968 ninputs = list_length (inputs);
9969 noutputs = list_length (outputs);
9970 oconstraints = (const char **) alloca (noutputs * sizeof (const char *));
9971
9972 string = resolve_asm_operand_names (string, outputs, inputs, labels);
9973
9974 /* Remove output conversions that change the type but not the mode. */
9975 for (i = 0, tail = outputs; tail; ++i, tail = TREE_CHAIN (tail))
9976 {
9977 tree output = TREE_VALUE (tail);
9978
9979 output = c_fully_fold (output, false, NULL, true);
9980
9981 /* ??? Really, this should not be here. Users should be using a
9982 proper lvalue, dammit. But there's a long history of using casts
9983 in the output operands. In cases like longlong.h, this becomes a
9984 primitive form of typechecking -- if the cast can be removed, then
9985 the output operand had a type of the proper width; otherwise we'll
9986 get an error. Gross, but ... */
9987 STRIP_NOPS (output);
9988
9989 if (!lvalue_or_else (loc, output, lv_asm))
9990 output = error_mark_node;
9991
9992 if (output != error_mark_node
9993 && (TREE_READONLY (output)
9994 || TYPE_READONLY (TREE_TYPE (output))
9995 || (RECORD_OR_UNION_TYPE_P (TREE_TYPE (output))
9996 && C_TYPE_FIELDS_READONLY (TREE_TYPE (output)))))
9997 readonly_error (loc, output, lv_asm);
9998
9999 constraint = TREE_STRING_POINTER (TREE_VALUE (TREE_PURPOSE (tail)));
10000 oconstraints[i] = constraint;
10001
10002 if (parse_output_constraint (&constraint, i, ninputs, noutputs,
10003 &allows_mem, &allows_reg, &is_inout))
10004 {
10005 /* If the operand is going to end up in memory,
10006 mark it addressable. */
10007 if (!allows_reg && !c_mark_addressable (output))
10008 output = error_mark_node;
10009 if (!(!allows_reg && allows_mem)
10010 && output != error_mark_node
10011 && VOID_TYPE_P (TREE_TYPE (output)))
10012 {
10013 error_at (loc, "invalid use of void expression");
10014 output = error_mark_node;
10015 }
10016 }
10017 else
10018 output = error_mark_node;
10019
10020 TREE_VALUE (tail) = output;
10021 }
10022
10023 for (i = 0, tail = inputs; tail; ++i, tail = TREE_CHAIN (tail))
10024 {
10025 tree input;
10026
10027 constraint = TREE_STRING_POINTER (TREE_VALUE (TREE_PURPOSE (tail)));
10028 input = TREE_VALUE (tail);
10029
10030 if (parse_input_constraint (&constraint, i, ninputs, noutputs, 0,
10031 oconstraints, &allows_mem, &allows_reg))
10032 {
10033 /* If the operand is going to end up in memory,
10034 mark it addressable. */
10035 if (!allows_reg && allows_mem)
10036 {
10037 input = c_fully_fold (input, false, NULL, true);
10038
10039 /* Strip the nops as we allow this case. FIXME, this really
10040 should be rejected or made deprecated. */
10041 STRIP_NOPS (input);
10042 if (!c_mark_addressable (input))
10043 input = error_mark_node;
10044 }
10045 else
10046 {
10047 struct c_expr expr;
10048 memset (&expr, 0, sizeof (expr));
10049 expr.value = input;
10050 expr = convert_lvalue_to_rvalue (loc, expr, true, false);
10051 input = c_fully_fold (expr.value, false, NULL);
10052
10053 if (input != error_mark_node && VOID_TYPE_P (TREE_TYPE (input)))
10054 {
10055 error_at (loc, "invalid use of void expression");
10056 input = error_mark_node;
10057 }
10058 }
10059 }
10060 else
10061 input = error_mark_node;
10062
10063 TREE_VALUE (tail) = input;
10064 }
10065
10066 /* ASMs with labels cannot have outputs. This should have been
10067 enforced by the parser. */
10068 gcc_assert (outputs == NULL || labels == NULL);
10069
10070 args = build_stmt (loc, ASM_EXPR, string, outputs, inputs, clobbers, labels);
10071
10072 /* asm statements without outputs, including simple ones, are treated
10073 as volatile. */
10074 ASM_INPUT_P (args) = simple;
10075 ASM_VOLATILE_P (args) = (noutputs == 0);
10076
10077 return args;
10078 }
10079 \f
10080 /* Generate a goto statement to LABEL. LOC is the location of the
10081 GOTO. */
10082
10083 tree
10084 c_finish_goto_label (location_t loc, tree label)
10085 {
10086 tree decl = lookup_label_for_goto (loc, label);
10087 if (!decl)
10088 return NULL_TREE;
10089 TREE_USED (decl) = 1;
10090 {
10091 add_stmt (build_predict_expr (PRED_GOTO, NOT_TAKEN));
10092 tree t = build1 (GOTO_EXPR, void_type_node, decl);
10093 SET_EXPR_LOCATION (t, loc);
10094 return add_stmt (t);
10095 }
10096 }
10097
10098 /* Generate a computed goto statement to EXPR. LOC is the location of
10099 the GOTO. */
10100
10101 tree
10102 c_finish_goto_ptr (location_t loc, tree expr)
10103 {
10104 tree t;
10105 pedwarn (loc, OPT_Wpedantic, "ISO C forbids %<goto *expr;%>");
10106 expr = c_fully_fold (expr, false, NULL);
10107 expr = convert (ptr_type_node, expr);
10108 t = build1 (GOTO_EXPR, void_type_node, expr);
10109 SET_EXPR_LOCATION (t, loc);
10110 return add_stmt (t);
10111 }
10112
10113 /* Generate a C `return' statement. RETVAL is the expression for what
10114 to return, or a null pointer for `return;' with no value. LOC is
10115 the location of the return statement, or the location of the expression,
10116 if the statement has any. If ORIGTYPE is not NULL_TREE, it
10117 is the original type of RETVAL. */
10118
10119 tree
10120 c_finish_return (location_t loc, tree retval, tree origtype)
10121 {
10122 tree valtype = TREE_TYPE (TREE_TYPE (current_function_decl)), ret_stmt;
10123 bool no_warning = false;
10124 bool npc = false;
10125
10126 /* Use the expansion point to handle cases such as returning NULL
10127 in a function returning void. */
10128 source_location xloc = expansion_point_location_if_in_system_header (loc);
10129
10130 if (TREE_THIS_VOLATILE (current_function_decl))
10131 warning_at (xloc, 0,
10132 "function declared %<noreturn%> has a %<return%> statement");
10133
10134 if (retval)
10135 {
10136 tree semantic_type = NULL_TREE;
10137 npc = null_pointer_constant_p (retval);
10138 if (TREE_CODE (retval) == EXCESS_PRECISION_EXPR)
10139 {
10140 semantic_type = TREE_TYPE (retval);
10141 retval = TREE_OPERAND (retval, 0);
10142 }
10143 retval = c_fully_fold (retval, false, NULL);
10144 if (semantic_type)
10145 retval = build1 (EXCESS_PRECISION_EXPR, semantic_type, retval);
10146 }
10147
10148 if (!retval)
10149 {
10150 current_function_returns_null = 1;
10151 if ((warn_return_type >= 0 || flag_isoc99)
10152 && valtype != NULL_TREE && TREE_CODE (valtype) != VOID_TYPE)
10153 {
10154 bool warned_here;
10155 if (flag_isoc99)
10156 warned_here = pedwarn
10157 (loc, warn_return_type >= 0 ? OPT_Wreturn_type : 0,
10158 "%<return%> with no value, in function returning non-void");
10159 else
10160 warned_here = warning_at
10161 (loc, OPT_Wreturn_type,
10162 "%<return%> with no value, in function returning non-void");
10163 no_warning = true;
10164 if (warned_here)
10165 inform (DECL_SOURCE_LOCATION (current_function_decl),
10166 "declared here");
10167 }
10168 }
10169 else if (valtype == NULL_TREE || TREE_CODE (valtype) == VOID_TYPE)
10170 {
10171 current_function_returns_null = 1;
10172 bool warned_here;
10173 if (TREE_CODE (TREE_TYPE (retval)) != VOID_TYPE)
10174 warned_here = pedwarn
10175 (xloc, warn_return_type >= 0 ? OPT_Wreturn_type : 0,
10176 "%<return%> with a value, in function returning void");
10177 else
10178 warned_here = pedwarn
10179 (xloc, OPT_Wpedantic, "ISO C forbids "
10180 "%<return%> with expression, in function returning void");
10181 if (warned_here)
10182 inform (DECL_SOURCE_LOCATION (current_function_decl),
10183 "declared here");
10184 }
10185 else
10186 {
10187 tree t = convert_for_assignment (loc, UNKNOWN_LOCATION, valtype,
10188 retval, origtype, ic_return,
10189 npc, NULL_TREE, NULL_TREE, 0);
10190 tree res = DECL_RESULT (current_function_decl);
10191 tree inner;
10192 bool save;
10193
10194 current_function_returns_value = 1;
10195 if (t == error_mark_node)
10196 return NULL_TREE;
10197
10198 save = in_late_binary_op;
10199 if (TREE_CODE (TREE_TYPE (res)) == BOOLEAN_TYPE
10200 || TREE_CODE (TREE_TYPE (res)) == COMPLEX_TYPE
10201 || (TREE_CODE (TREE_TYPE (t)) == REAL_TYPE
10202 && (TREE_CODE (TREE_TYPE (res)) == INTEGER_TYPE
10203 || TREE_CODE (TREE_TYPE (res)) == ENUMERAL_TYPE)
10204 && sanitize_flags_p (SANITIZE_FLOAT_CAST)))
10205 in_late_binary_op = true;
10206 inner = t = convert (TREE_TYPE (res), t);
10207 in_late_binary_op = save;
10208
10209 /* Strip any conversions, additions, and subtractions, and see if
10210 we are returning the address of a local variable. Warn if so. */
10211 while (1)
10212 {
10213 switch (TREE_CODE (inner))
10214 {
10215 CASE_CONVERT:
10216 case NON_LVALUE_EXPR:
10217 case PLUS_EXPR:
10218 case POINTER_PLUS_EXPR:
10219 inner = TREE_OPERAND (inner, 0);
10220 continue;
10221
10222 case MINUS_EXPR:
10223 /* If the second operand of the MINUS_EXPR has a pointer
10224 type (or is converted from it), this may be valid, so
10225 don't give a warning. */
10226 {
10227 tree op1 = TREE_OPERAND (inner, 1);
10228
10229 while (!POINTER_TYPE_P (TREE_TYPE (op1))
10230 && (CONVERT_EXPR_P (op1)
10231 || TREE_CODE (op1) == NON_LVALUE_EXPR))
10232 op1 = TREE_OPERAND (op1, 0);
10233
10234 if (POINTER_TYPE_P (TREE_TYPE (op1)))
10235 break;
10236
10237 inner = TREE_OPERAND (inner, 0);
10238 continue;
10239 }
10240
10241 case ADDR_EXPR:
10242 inner = TREE_OPERAND (inner, 0);
10243
10244 while (REFERENCE_CLASS_P (inner)
10245 && !INDIRECT_REF_P (inner))
10246 inner = TREE_OPERAND (inner, 0);
10247
10248 if (DECL_P (inner)
10249 && !DECL_EXTERNAL (inner)
10250 && !TREE_STATIC (inner)
10251 && DECL_CONTEXT (inner) == current_function_decl)
10252 {
10253 if (TREE_CODE (inner) == LABEL_DECL)
10254 warning_at (loc, OPT_Wreturn_local_addr,
10255 "function returns address of label");
10256 else
10257 {
10258 warning_at (loc, OPT_Wreturn_local_addr,
10259 "function returns address of local variable");
10260 tree zero = build_zero_cst (TREE_TYPE (res));
10261 t = build2 (COMPOUND_EXPR, TREE_TYPE (res), t, zero);
10262 }
10263 }
10264 break;
10265
10266 default:
10267 break;
10268 }
10269
10270 break;
10271 }
10272
10273 retval = build2 (MODIFY_EXPR, TREE_TYPE (res), res, t);
10274 SET_EXPR_LOCATION (retval, loc);
10275
10276 if (warn_sequence_point)
10277 verify_sequence_points (retval);
10278 }
10279
10280 ret_stmt = build_stmt (loc, RETURN_EXPR, retval);
10281 TREE_NO_WARNING (ret_stmt) |= no_warning;
10282 return add_stmt (ret_stmt);
10283 }
10284 \f
10285 struct c_switch {
10286 /* The SWITCH_EXPR being built. */
10287 tree switch_expr;
10288
10289 /* The original type of the testing expression, i.e. before the
10290 default conversion is applied. */
10291 tree orig_type;
10292
10293 /* A splay-tree mapping the low element of a case range to the high
10294 element, or NULL_TREE if there is no high element. Used to
10295 determine whether or not a new case label duplicates an old case
10296 label. We need a tree, rather than simply a hash table, because
10297 of the GNU case range extension. */
10298 splay_tree cases;
10299
10300 /* The bindings at the point of the switch. This is used for
10301 warnings crossing decls when branching to a case label. */
10302 struct c_spot_bindings *bindings;
10303
10304 /* The next node on the stack. */
10305 struct c_switch *next;
10306
10307 /* Remember whether the controlling expression had boolean type
10308 before integer promotions for the sake of -Wswitch-bool. */
10309 bool bool_cond_p;
10310
10311 /* Remember whether there was a case value that is outside the
10312 range of the ORIG_TYPE. */
10313 bool outside_range_p;
10314 };
10315
10316 /* A stack of the currently active switch statements. The innermost
10317 switch statement is on the top of the stack. There is no need to
10318 mark the stack for garbage collection because it is only active
10319 during the processing of the body of a function, and we never
10320 collect at that point. */
10321
10322 struct c_switch *c_switch_stack;
10323
10324 /* Start a C switch statement, testing expression EXP. Return the new
10325 SWITCH_EXPR. SWITCH_LOC is the location of the `switch'.
10326 SWITCH_COND_LOC is the location of the switch's condition.
10327 EXPLICIT_CAST_P is true if the expression EXP has an explicit cast. */
10328
10329 tree
10330 c_start_case (location_t switch_loc,
10331 location_t switch_cond_loc,
10332 tree exp, bool explicit_cast_p)
10333 {
10334 tree orig_type = error_mark_node;
10335 bool bool_cond_p = false;
10336 struct c_switch *cs;
10337
10338 if (exp != error_mark_node)
10339 {
10340 orig_type = TREE_TYPE (exp);
10341
10342 if (!INTEGRAL_TYPE_P (orig_type))
10343 {
10344 if (orig_type != error_mark_node)
10345 {
10346 error_at (switch_cond_loc, "switch quantity not an integer");
10347 orig_type = error_mark_node;
10348 }
10349 exp = integer_zero_node;
10350 }
10351 else
10352 {
10353 tree type = TYPE_MAIN_VARIANT (orig_type);
10354 tree e = exp;
10355
10356 /* Warn if the condition has boolean value. */
10357 while (TREE_CODE (e) == COMPOUND_EXPR)
10358 e = TREE_OPERAND (e, 1);
10359
10360 if ((TREE_CODE (type) == BOOLEAN_TYPE
10361 || truth_value_p (TREE_CODE (e)))
10362 /* Explicit cast to int suppresses this warning. */
10363 && !(TREE_CODE (type) == INTEGER_TYPE
10364 && explicit_cast_p))
10365 bool_cond_p = true;
10366
10367 if (!in_system_header_at (input_location)
10368 && (type == long_integer_type_node
10369 || type == long_unsigned_type_node))
10370 warning_at (switch_cond_loc,
10371 OPT_Wtraditional, "%<long%> switch expression not "
10372 "converted to %<int%> in ISO C");
10373
10374 exp = c_fully_fold (exp, false, NULL);
10375 exp = default_conversion (exp);
10376
10377 if (warn_sequence_point)
10378 verify_sequence_points (exp);
10379 }
10380 }
10381
10382 /* Add this new SWITCH_EXPR to the stack. */
10383 cs = XNEW (struct c_switch);
10384 cs->switch_expr = build2 (SWITCH_EXPR, orig_type, exp, NULL_TREE);
10385 SET_EXPR_LOCATION (cs->switch_expr, switch_loc);
10386 cs->orig_type = orig_type;
10387 cs->cases = splay_tree_new (case_compare, NULL, NULL);
10388 cs->bindings = c_get_switch_bindings ();
10389 cs->bool_cond_p = bool_cond_p;
10390 cs->outside_range_p = false;
10391 cs->next = c_switch_stack;
10392 c_switch_stack = cs;
10393
10394 return add_stmt (cs->switch_expr);
10395 }
10396
10397 /* Process a case label at location LOC. */
10398
10399 tree
10400 do_case (location_t loc, tree low_value, tree high_value)
10401 {
10402 tree label = NULL_TREE;
10403
10404 if (low_value && TREE_CODE (low_value) != INTEGER_CST)
10405 {
10406 low_value = c_fully_fold (low_value, false, NULL);
10407 if (TREE_CODE (low_value) == INTEGER_CST)
10408 pedwarn (loc, OPT_Wpedantic,
10409 "case label is not an integer constant expression");
10410 }
10411
10412 if (high_value && TREE_CODE (high_value) != INTEGER_CST)
10413 {
10414 high_value = c_fully_fold (high_value, false, NULL);
10415 if (TREE_CODE (high_value) == INTEGER_CST)
10416 pedwarn (input_location, OPT_Wpedantic,
10417 "case label is not an integer constant expression");
10418 }
10419
10420 if (c_switch_stack == NULL)
10421 {
10422 if (low_value)
10423 error_at (loc, "case label not within a switch statement");
10424 else
10425 error_at (loc, "%<default%> label not within a switch statement");
10426 return NULL_TREE;
10427 }
10428
10429 if (c_check_switch_jump_warnings (c_switch_stack->bindings,
10430 EXPR_LOCATION (c_switch_stack->switch_expr),
10431 loc))
10432 return NULL_TREE;
10433
10434 label = c_add_case_label (loc, c_switch_stack->cases,
10435 SWITCH_COND (c_switch_stack->switch_expr),
10436 c_switch_stack->orig_type,
10437 low_value, high_value,
10438 &c_switch_stack->outside_range_p);
10439 if (label == error_mark_node)
10440 label = NULL_TREE;
10441 return label;
10442 }
10443
10444 /* Finish the switch statement. TYPE is the original type of the
10445 controlling expression of the switch, or NULL_TREE. */
10446
10447 void
10448 c_finish_case (tree body, tree type)
10449 {
10450 struct c_switch *cs = c_switch_stack;
10451 location_t switch_location;
10452
10453 SWITCH_BODY (cs->switch_expr) = body;
10454
10455 /* Emit warnings as needed. */
10456 switch_location = EXPR_LOCATION (cs->switch_expr);
10457 c_do_switch_warnings (cs->cases, switch_location,
10458 type ? type : TREE_TYPE (cs->switch_expr),
10459 SWITCH_COND (cs->switch_expr),
10460 cs->bool_cond_p, cs->outside_range_p);
10461 if (c_switch_covers_all_cases_p (cs->cases, TREE_TYPE (cs->switch_expr)))
10462 SWITCH_ALL_CASES_P (cs->switch_expr) = 1;
10463
10464 /* Pop the stack. */
10465 c_switch_stack = cs->next;
10466 splay_tree_delete (cs->cases);
10467 c_release_switch_bindings (cs->bindings);
10468 XDELETE (cs);
10469 }
10470 \f
10471 /* Emit an if statement. IF_LOCUS is the location of the 'if'. COND,
10472 THEN_BLOCK and ELSE_BLOCK are expressions to be used; ELSE_BLOCK
10473 may be null. */
10474
10475 void
10476 c_finish_if_stmt (location_t if_locus, tree cond, tree then_block,
10477 tree else_block)
10478 {
10479 tree stmt;
10480
10481 stmt = build3 (COND_EXPR, void_type_node, cond, then_block, else_block);
10482 SET_EXPR_LOCATION (stmt, if_locus);
10483 add_stmt (stmt);
10484 }
10485
10486 /* Emit a general-purpose loop construct. START_LOCUS is the location of
10487 the beginning of the loop. COND is the loop condition. COND_IS_FIRST
10488 is false for DO loops. INCR is the FOR increment expression. BODY is
10489 the statement controlled by the loop. BLAB is the break label. CLAB is
10490 the continue label. Everything is allowed to be NULL. */
10491
10492 void
10493 c_finish_loop (location_t start_locus, tree cond, tree incr, tree body,
10494 tree blab, tree clab, bool cond_is_first)
10495 {
10496 tree entry = NULL, exit = NULL, t;
10497
10498 /* If the condition is zero don't generate a loop construct. */
10499 if (cond && integer_zerop (cond))
10500 {
10501 if (cond_is_first)
10502 {
10503 t = build_and_jump (&blab);
10504 SET_EXPR_LOCATION (t, start_locus);
10505 add_stmt (t);
10506 }
10507 }
10508 else
10509 {
10510 tree top = build1 (LABEL_EXPR, void_type_node, NULL_TREE);
10511
10512 /* If we have an exit condition, then we build an IF with gotos either
10513 out of the loop, or to the top of it. If there's no exit condition,
10514 then we just build a jump back to the top. */
10515 exit = build_and_jump (&LABEL_EXPR_LABEL (top));
10516
10517 if (cond && !integer_nonzerop (cond))
10518 {
10519 /* Canonicalize the loop condition to the end. This means
10520 generating a branch to the loop condition. Reuse the
10521 continue label, if possible. */
10522 if (cond_is_first)
10523 {
10524 if (incr || !clab)
10525 {
10526 entry = build1 (LABEL_EXPR, void_type_node, NULL_TREE);
10527 t = build_and_jump (&LABEL_EXPR_LABEL (entry));
10528 }
10529 else
10530 t = build1 (GOTO_EXPR, void_type_node, clab);
10531 SET_EXPR_LOCATION (t, start_locus);
10532 add_stmt (t);
10533 }
10534
10535 t = build_and_jump (&blab);
10536 if (cond_is_first)
10537 exit = fold_build3_loc (start_locus,
10538 COND_EXPR, void_type_node, cond, exit, t);
10539 else
10540 exit = fold_build3_loc (input_location,
10541 COND_EXPR, void_type_node, cond, exit, t);
10542 }
10543 else
10544 {
10545 /* For the backward-goto's location of an unconditional loop
10546 use the beginning of the body, or, if there is none, the
10547 top of the loop. */
10548 location_t loc = EXPR_LOCATION (expr_first (body));
10549 if (loc == UNKNOWN_LOCATION)
10550 loc = start_locus;
10551 SET_EXPR_LOCATION (exit, loc);
10552 }
10553
10554 add_stmt (top);
10555 }
10556
10557 if (body)
10558 add_stmt (body);
10559 if (clab)
10560 add_stmt (build1 (LABEL_EXPR, void_type_node, clab));
10561 if (incr)
10562 add_stmt (incr);
10563 if (entry)
10564 add_stmt (entry);
10565 if (exit)
10566 add_stmt (exit);
10567 if (blab)
10568 add_stmt (build1 (LABEL_EXPR, void_type_node, blab));
10569 }
10570
10571 tree
10572 c_finish_bc_stmt (location_t loc, tree *label_p, bool is_break)
10573 {
10574 bool skip;
10575 tree label = *label_p;
10576
10577 /* In switch statements break is sometimes stylistically used after
10578 a return statement. This can lead to spurious warnings about
10579 control reaching the end of a non-void function when it is
10580 inlined. Note that we are calling block_may_fallthru with
10581 language specific tree nodes; this works because
10582 block_may_fallthru returns true when given something it does not
10583 understand. */
10584 skip = !block_may_fallthru (cur_stmt_list);
10585
10586 if (!label)
10587 {
10588 if (!skip)
10589 *label_p = label = create_artificial_label (loc);
10590 }
10591 else if (TREE_CODE (label) == LABEL_DECL)
10592 ;
10593 else switch (TREE_INT_CST_LOW (label))
10594 {
10595 case 0:
10596 if (is_break)
10597 error_at (loc, "break statement not within loop or switch");
10598 else
10599 error_at (loc, "continue statement not within a loop");
10600 return NULL_TREE;
10601
10602 case 1:
10603 gcc_assert (is_break);
10604 error_at (loc, "break statement used with OpenMP for loop");
10605 return NULL_TREE;
10606
10607 case 2:
10608 if (is_break)
10609 error ("break statement within %<#pragma simd%> loop body");
10610 else
10611 error ("continue statement within %<#pragma simd%> loop body");
10612 return NULL_TREE;
10613
10614 default:
10615 gcc_unreachable ();
10616 }
10617
10618 if (skip)
10619 return NULL_TREE;
10620
10621 if (!is_break)
10622 add_stmt (build_predict_expr (PRED_CONTINUE, NOT_TAKEN));
10623
10624 return add_stmt (build1 (GOTO_EXPR, void_type_node, label));
10625 }
10626
10627 /* A helper routine for c_process_expr_stmt and c_finish_stmt_expr. */
10628
10629 static void
10630 emit_side_effect_warnings (location_t loc, tree expr)
10631 {
10632 if (expr == error_mark_node)
10633 ;
10634 else if (!TREE_SIDE_EFFECTS (expr))
10635 {
10636 if (!VOID_TYPE_P (TREE_TYPE (expr)) && !TREE_NO_WARNING (expr))
10637 warning_at (loc, OPT_Wunused_value, "statement with no effect");
10638 }
10639 else if (TREE_CODE (expr) == COMPOUND_EXPR)
10640 {
10641 tree r = expr;
10642 location_t cloc = loc;
10643 while (TREE_CODE (r) == COMPOUND_EXPR)
10644 {
10645 if (EXPR_HAS_LOCATION (r))
10646 cloc = EXPR_LOCATION (r);
10647 r = TREE_OPERAND (r, 1);
10648 }
10649 if (!TREE_SIDE_EFFECTS (r)
10650 && !VOID_TYPE_P (TREE_TYPE (r))
10651 && !CONVERT_EXPR_P (r)
10652 && !TREE_NO_WARNING (r)
10653 && !TREE_NO_WARNING (expr))
10654 warning_at (cloc, OPT_Wunused_value,
10655 "right-hand operand of comma expression has no effect");
10656 }
10657 else
10658 warn_if_unused_value (expr, loc);
10659 }
10660
10661 /* Process an expression as if it were a complete statement. Emit
10662 diagnostics, but do not call ADD_STMT. LOC is the location of the
10663 statement. */
10664
10665 tree
10666 c_process_expr_stmt (location_t loc, tree expr)
10667 {
10668 tree exprv;
10669
10670 if (!expr)
10671 return NULL_TREE;
10672
10673 expr = c_fully_fold (expr, false, NULL);
10674
10675 if (warn_sequence_point)
10676 verify_sequence_points (expr);
10677
10678 if (TREE_TYPE (expr) != error_mark_node
10679 && !COMPLETE_OR_VOID_TYPE_P (TREE_TYPE (expr))
10680 && TREE_CODE (TREE_TYPE (expr)) != ARRAY_TYPE)
10681 error_at (loc, "expression statement has incomplete type");
10682
10683 /* If we're not processing a statement expression, warn about unused values.
10684 Warnings for statement expressions will be emitted later, once we figure
10685 out which is the result. */
10686 if (!STATEMENT_LIST_STMT_EXPR (cur_stmt_list)
10687 && warn_unused_value)
10688 emit_side_effect_warnings (EXPR_LOC_OR_LOC (expr, loc), expr);
10689
10690 exprv = expr;
10691 while (TREE_CODE (exprv) == COMPOUND_EXPR)
10692 exprv = TREE_OPERAND (exprv, 1);
10693 while (CONVERT_EXPR_P (exprv))
10694 exprv = TREE_OPERAND (exprv, 0);
10695 if (DECL_P (exprv)
10696 || handled_component_p (exprv)
10697 || TREE_CODE (exprv) == ADDR_EXPR)
10698 mark_exp_read (exprv);
10699
10700 /* If the expression is not of a type to which we cannot assign a line
10701 number, wrap the thing in a no-op NOP_EXPR. */
10702 if (DECL_P (expr) || CONSTANT_CLASS_P (expr))
10703 {
10704 expr = build1 (NOP_EXPR, TREE_TYPE (expr), expr);
10705 SET_EXPR_LOCATION (expr, loc);
10706 }
10707
10708 return expr;
10709 }
10710
10711 /* Emit an expression as a statement. LOC is the location of the
10712 expression. */
10713
10714 tree
10715 c_finish_expr_stmt (location_t loc, tree expr)
10716 {
10717 if (expr)
10718 return add_stmt (c_process_expr_stmt (loc, expr));
10719 else
10720 return NULL;
10721 }
10722
10723 /* Do the opposite and emit a statement as an expression. To begin,
10724 create a new binding level and return it. */
10725
10726 tree
10727 c_begin_stmt_expr (void)
10728 {
10729 tree ret;
10730
10731 /* We must force a BLOCK for this level so that, if it is not expanded
10732 later, there is a way to turn off the entire subtree of blocks that
10733 are contained in it. */
10734 keep_next_level ();
10735 ret = c_begin_compound_stmt (true);
10736
10737 c_bindings_start_stmt_expr (c_switch_stack == NULL
10738 ? NULL
10739 : c_switch_stack->bindings);
10740
10741 /* Mark the current statement list as belonging to a statement list. */
10742 STATEMENT_LIST_STMT_EXPR (ret) = 1;
10743
10744 return ret;
10745 }
10746
10747 /* LOC is the location of the compound statement to which this body
10748 belongs. */
10749
10750 tree
10751 c_finish_stmt_expr (location_t loc, tree body)
10752 {
10753 tree last, type, tmp, val;
10754 tree *last_p;
10755
10756 body = c_end_compound_stmt (loc, body, true);
10757
10758 c_bindings_end_stmt_expr (c_switch_stack == NULL
10759 ? NULL
10760 : c_switch_stack->bindings);
10761
10762 /* Locate the last statement in BODY. See c_end_compound_stmt
10763 about always returning a BIND_EXPR. */
10764 last_p = &BIND_EXPR_BODY (body);
10765 last = BIND_EXPR_BODY (body);
10766
10767 continue_searching:
10768 if (TREE_CODE (last) == STATEMENT_LIST)
10769 {
10770 tree_stmt_iterator l = tsi_last (last);
10771
10772 while (!tsi_end_p (l) && TREE_CODE (tsi_stmt (l)) == DEBUG_BEGIN_STMT)
10773 tsi_prev (&l);
10774
10775 /* This can happen with degenerate cases like ({ }). No value. */
10776 if (tsi_end_p (l))
10777 return body;
10778
10779 /* If we're supposed to generate side effects warnings, process
10780 all of the statements except the last. */
10781 if (warn_unused_value)
10782 {
10783 for (tree_stmt_iterator i = tsi_start (last);
10784 tsi_stmt (i) != tsi_stmt (l); tsi_next (&i))
10785 {
10786 location_t tloc;
10787 tree t = tsi_stmt (i);
10788
10789 tloc = EXPR_HAS_LOCATION (t) ? EXPR_LOCATION (t) : loc;
10790 emit_side_effect_warnings (tloc, t);
10791 }
10792 }
10793 last_p = tsi_stmt_ptr (l);
10794 last = *last_p;
10795 }
10796
10797 /* If the end of the list is exception related, then the list was split
10798 by a call to push_cleanup. Continue searching. */
10799 if (TREE_CODE (last) == TRY_FINALLY_EXPR
10800 || TREE_CODE (last) == TRY_CATCH_EXPR)
10801 {
10802 last_p = &TREE_OPERAND (last, 0);
10803 last = *last_p;
10804 goto continue_searching;
10805 }
10806
10807 if (last == error_mark_node)
10808 return last;
10809
10810 /* In the case that the BIND_EXPR is not necessary, return the
10811 expression out from inside it. */
10812 if ((last == BIND_EXPR_BODY (body)
10813 /* Skip nested debug stmts. */
10814 || last == expr_first (BIND_EXPR_BODY (body)))
10815 && BIND_EXPR_VARS (body) == NULL)
10816 {
10817 /* Even if this looks constant, do not allow it in a constant
10818 expression. */
10819 last = c_wrap_maybe_const (last, true);
10820 /* Do not warn if the return value of a statement expression is
10821 unused. */
10822 TREE_NO_WARNING (last) = 1;
10823 return last;
10824 }
10825
10826 /* Extract the type of said expression. */
10827 type = TREE_TYPE (last);
10828
10829 /* If we're not returning a value at all, then the BIND_EXPR that
10830 we already have is a fine expression to return. */
10831 if (!type || VOID_TYPE_P (type))
10832 return body;
10833
10834 /* Now that we've located the expression containing the value, it seems
10835 silly to make voidify_wrapper_expr repeat the process. Create a
10836 temporary of the appropriate type and stick it in a TARGET_EXPR. */
10837 tmp = create_tmp_var_raw (type);
10838
10839 /* Unwrap a no-op NOP_EXPR as added by c_finish_expr_stmt. This avoids
10840 tree_expr_nonnegative_p giving up immediately. */
10841 val = last;
10842 if (TREE_CODE (val) == NOP_EXPR
10843 && TREE_TYPE (val) == TREE_TYPE (TREE_OPERAND (val, 0)))
10844 val = TREE_OPERAND (val, 0);
10845
10846 *last_p = build2 (MODIFY_EXPR, void_type_node, tmp, val);
10847 SET_EXPR_LOCATION (*last_p, EXPR_LOCATION (last));
10848
10849 {
10850 tree t = build4 (TARGET_EXPR, type, tmp, body, NULL_TREE, NULL_TREE);
10851 SET_EXPR_LOCATION (t, loc);
10852 return t;
10853 }
10854 }
10855 \f
10856 /* Begin and end compound statements. This is as simple as pushing
10857 and popping new statement lists from the tree. */
10858
10859 tree
10860 c_begin_compound_stmt (bool do_scope)
10861 {
10862 tree stmt = push_stmt_list ();
10863 if (do_scope)
10864 push_scope ();
10865 return stmt;
10866 }
10867
10868 /* End a compound statement. STMT is the statement. LOC is the
10869 location of the compound statement-- this is usually the location
10870 of the opening brace. */
10871
10872 tree
10873 c_end_compound_stmt (location_t loc, tree stmt, bool do_scope)
10874 {
10875 tree block = NULL;
10876
10877 if (do_scope)
10878 {
10879 if (c_dialect_objc ())
10880 objc_clear_super_receiver ();
10881 block = pop_scope ();
10882 }
10883
10884 stmt = pop_stmt_list (stmt);
10885 stmt = c_build_bind_expr (loc, block, stmt);
10886
10887 /* If this compound statement is nested immediately inside a statement
10888 expression, then force a BIND_EXPR to be created. Otherwise we'll
10889 do the wrong thing for ({ { 1; } }) or ({ 1; { } }). In particular,
10890 STATEMENT_LISTs merge, and thus we can lose track of what statement
10891 was really last. */
10892 if (building_stmt_list_p ()
10893 && STATEMENT_LIST_STMT_EXPR (cur_stmt_list)
10894 && TREE_CODE (stmt) != BIND_EXPR)
10895 {
10896 stmt = build3 (BIND_EXPR, void_type_node, NULL, stmt, NULL);
10897 TREE_SIDE_EFFECTS (stmt) = 1;
10898 SET_EXPR_LOCATION (stmt, loc);
10899 }
10900
10901 return stmt;
10902 }
10903
10904 /* Queue a cleanup. CLEANUP is an expression/statement to be executed
10905 when the current scope is exited. EH_ONLY is true when this is not
10906 meant to apply to normal control flow transfer. */
10907
10908 void
10909 push_cleanup (tree decl, tree cleanup, bool eh_only)
10910 {
10911 enum tree_code code;
10912 tree stmt, list;
10913 bool stmt_expr;
10914
10915 code = eh_only ? TRY_CATCH_EXPR : TRY_FINALLY_EXPR;
10916 stmt = build_stmt (DECL_SOURCE_LOCATION (decl), code, NULL, cleanup);
10917 add_stmt (stmt);
10918 stmt_expr = STATEMENT_LIST_STMT_EXPR (cur_stmt_list);
10919 list = push_stmt_list ();
10920 TREE_OPERAND (stmt, 0) = list;
10921 STATEMENT_LIST_STMT_EXPR (list) = stmt_expr;
10922 }
10923 \f
10924 /* Build a vector comparison of ARG0 and ARG1 using CODE opcode
10925 into a value of TYPE type. Comparison is done via VEC_COND_EXPR. */
10926
10927 static tree
10928 build_vec_cmp (tree_code code, tree type,
10929 tree arg0, tree arg1)
10930 {
10931 tree zero_vec = build_zero_cst (type);
10932 tree minus_one_vec = build_minus_one_cst (type);
10933 tree cmp_type = build_same_sized_truth_vector_type (type);
10934 tree cmp = build2 (code, cmp_type, arg0, arg1);
10935 return build3 (VEC_COND_EXPR, type, cmp, minus_one_vec, zero_vec);
10936 }
10937
10938 /* Build a binary-operation expression without default conversions.
10939 CODE is the kind of expression to build.
10940 LOCATION is the operator's location.
10941 This function differs from `build' in several ways:
10942 the data type of the result is computed and recorded in it,
10943 warnings are generated if arg data types are invalid,
10944 special handling for addition and subtraction of pointers is known,
10945 and some optimization is done (operations on narrow ints
10946 are done in the narrower type when that gives the same result).
10947 Constant folding is also done before the result is returned.
10948
10949 Note that the operands will never have enumeral types, or function
10950 or array types, because either they will have the default conversions
10951 performed or they have both just been converted to some other type in which
10952 the arithmetic is to be done. */
10953
10954 tree
10955 build_binary_op (location_t location, enum tree_code code,
10956 tree orig_op0, tree orig_op1, bool convert_p)
10957 {
10958 tree type0, type1, orig_type0, orig_type1;
10959 tree eptype;
10960 enum tree_code code0, code1;
10961 tree op0, op1;
10962 tree ret = error_mark_node;
10963 const char *invalid_op_diag;
10964 bool op0_int_operands, op1_int_operands;
10965 bool int_const, int_const_or_overflow, int_operands;
10966
10967 /* Expression code to give to the expression when it is built.
10968 Normally this is CODE, which is what the caller asked for,
10969 but in some special cases we change it. */
10970 enum tree_code resultcode = code;
10971
10972 /* Data type in which the computation is to be performed.
10973 In the simplest cases this is the common type of the arguments. */
10974 tree result_type = NULL;
10975
10976 /* When the computation is in excess precision, the type of the
10977 final EXCESS_PRECISION_EXPR. */
10978 tree semantic_result_type = NULL;
10979
10980 /* Nonzero means operands have already been type-converted
10981 in whatever way is necessary.
10982 Zero means they need to be converted to RESULT_TYPE. */
10983 int converted = 0;
10984
10985 /* Nonzero means create the expression with this type, rather than
10986 RESULT_TYPE. */
10987 tree build_type = NULL_TREE;
10988
10989 /* Nonzero means after finally constructing the expression
10990 convert it to this type. */
10991 tree final_type = NULL_TREE;
10992
10993 /* Nonzero if this is an operation like MIN or MAX which can
10994 safely be computed in short if both args are promoted shorts.
10995 Also implies COMMON.
10996 -1 indicates a bitwise operation; this makes a difference
10997 in the exact conditions for when it is safe to do the operation
10998 in a narrower mode. */
10999 int shorten = 0;
11000
11001 /* Nonzero if this is a comparison operation;
11002 if both args are promoted shorts, compare the original shorts.
11003 Also implies COMMON. */
11004 int short_compare = 0;
11005
11006 /* Nonzero if this is a right-shift operation, which can be computed on the
11007 original short and then promoted if the operand is a promoted short. */
11008 int short_shift = 0;
11009
11010 /* Nonzero means set RESULT_TYPE to the common type of the args. */
11011 int common = 0;
11012
11013 /* True means types are compatible as far as ObjC is concerned. */
11014 bool objc_ok;
11015
11016 /* True means this is an arithmetic operation that may need excess
11017 precision. */
11018 bool may_need_excess_precision;
11019
11020 /* True means this is a boolean operation that converts both its
11021 operands to truth-values. */
11022 bool boolean_op = false;
11023
11024 /* Remember whether we're doing / or %. */
11025 bool doing_div_or_mod = false;
11026
11027 /* Remember whether we're doing << or >>. */
11028 bool doing_shift = false;
11029
11030 /* Tree holding instrumentation expression. */
11031 tree instrument_expr = NULL;
11032
11033 if (location == UNKNOWN_LOCATION)
11034 location = input_location;
11035
11036 op0 = orig_op0;
11037 op1 = orig_op1;
11038
11039 op0_int_operands = EXPR_INT_CONST_OPERANDS (orig_op0);
11040 if (op0_int_operands)
11041 op0 = remove_c_maybe_const_expr (op0);
11042 op1_int_operands = EXPR_INT_CONST_OPERANDS (orig_op1);
11043 if (op1_int_operands)
11044 op1 = remove_c_maybe_const_expr (op1);
11045 int_operands = (op0_int_operands && op1_int_operands);
11046 if (int_operands)
11047 {
11048 int_const_or_overflow = (TREE_CODE (orig_op0) == INTEGER_CST
11049 && TREE_CODE (orig_op1) == INTEGER_CST);
11050 int_const = (int_const_or_overflow
11051 && !TREE_OVERFLOW (orig_op0)
11052 && !TREE_OVERFLOW (orig_op1));
11053 }
11054 else
11055 int_const = int_const_or_overflow = false;
11056
11057 /* Do not apply default conversion in mixed vector/scalar expression. */
11058 if (convert_p
11059 && VECTOR_TYPE_P (TREE_TYPE (op0)) == VECTOR_TYPE_P (TREE_TYPE (op1)))
11060 {
11061 op0 = default_conversion (op0);
11062 op1 = default_conversion (op1);
11063 }
11064
11065 orig_type0 = type0 = TREE_TYPE (op0);
11066
11067 orig_type1 = type1 = TREE_TYPE (op1);
11068
11069 /* The expression codes of the data types of the arguments tell us
11070 whether the arguments are integers, floating, pointers, etc. */
11071 code0 = TREE_CODE (type0);
11072 code1 = TREE_CODE (type1);
11073
11074 /* Strip NON_LVALUE_EXPRs, etc., since we aren't using as an lvalue. */
11075 STRIP_TYPE_NOPS (op0);
11076 STRIP_TYPE_NOPS (op1);
11077
11078 /* If an error was already reported for one of the arguments,
11079 avoid reporting another error. */
11080
11081 if (code0 == ERROR_MARK || code1 == ERROR_MARK)
11082 return error_mark_node;
11083
11084 if (code0 == POINTER_TYPE
11085 && reject_gcc_builtin (op0, EXPR_LOCATION (orig_op0)))
11086 return error_mark_node;
11087
11088 if (code1 == POINTER_TYPE
11089 && reject_gcc_builtin (op1, EXPR_LOCATION (orig_op1)))
11090 return error_mark_node;
11091
11092 if ((invalid_op_diag
11093 = targetm.invalid_binary_op (code, type0, type1)))
11094 {
11095 error_at (location, invalid_op_diag);
11096 return error_mark_node;
11097 }
11098
11099 switch (code)
11100 {
11101 case PLUS_EXPR:
11102 case MINUS_EXPR:
11103 case MULT_EXPR:
11104 case TRUNC_DIV_EXPR:
11105 case CEIL_DIV_EXPR:
11106 case FLOOR_DIV_EXPR:
11107 case ROUND_DIV_EXPR:
11108 case EXACT_DIV_EXPR:
11109 may_need_excess_precision = true;
11110 break;
11111 default:
11112 may_need_excess_precision = false;
11113 break;
11114 }
11115 if (TREE_CODE (op0) == EXCESS_PRECISION_EXPR)
11116 {
11117 op0 = TREE_OPERAND (op0, 0);
11118 type0 = TREE_TYPE (op0);
11119 }
11120 else if (may_need_excess_precision
11121 && (eptype = excess_precision_type (type0)) != NULL_TREE)
11122 {
11123 type0 = eptype;
11124 op0 = convert (eptype, op0);
11125 }
11126 if (TREE_CODE (op1) == EXCESS_PRECISION_EXPR)
11127 {
11128 op1 = TREE_OPERAND (op1, 0);
11129 type1 = TREE_TYPE (op1);
11130 }
11131 else if (may_need_excess_precision
11132 && (eptype = excess_precision_type (type1)) != NULL_TREE)
11133 {
11134 type1 = eptype;
11135 op1 = convert (eptype, op1);
11136 }
11137
11138 objc_ok = objc_compare_types (type0, type1, -3, NULL_TREE);
11139
11140 /* In case when one of the operands of the binary operation is
11141 a vector and another is a scalar -- convert scalar to vector. */
11142 if ((code0 == VECTOR_TYPE) != (code1 == VECTOR_TYPE))
11143 {
11144 enum stv_conv convert_flag = scalar_to_vector (location, code, op0, op1,
11145 true);
11146
11147 switch (convert_flag)
11148 {
11149 case stv_error:
11150 return error_mark_node;
11151 case stv_firstarg:
11152 {
11153 bool maybe_const = true;
11154 tree sc;
11155 sc = c_fully_fold (op0, false, &maybe_const);
11156 sc = save_expr (sc);
11157 sc = convert (TREE_TYPE (type1), sc);
11158 op0 = build_vector_from_val (type1, sc);
11159 if (!maybe_const)
11160 op0 = c_wrap_maybe_const (op0, true);
11161 orig_type0 = type0 = TREE_TYPE (op0);
11162 code0 = TREE_CODE (type0);
11163 converted = 1;
11164 break;
11165 }
11166 case stv_secondarg:
11167 {
11168 bool maybe_const = true;
11169 tree sc;
11170 sc = c_fully_fold (op1, false, &maybe_const);
11171 sc = save_expr (sc);
11172 sc = convert (TREE_TYPE (type0), sc);
11173 op1 = build_vector_from_val (type0, sc);
11174 if (!maybe_const)
11175 op1 = c_wrap_maybe_const (op1, true);
11176 orig_type1 = type1 = TREE_TYPE (op1);
11177 code1 = TREE_CODE (type1);
11178 converted = 1;
11179 break;
11180 }
11181 default:
11182 break;
11183 }
11184 }
11185
11186 switch (code)
11187 {
11188 case PLUS_EXPR:
11189 /* Handle the pointer + int case. */
11190 if (code0 == POINTER_TYPE && code1 == INTEGER_TYPE)
11191 {
11192 ret = pointer_int_sum (location, PLUS_EXPR, op0, op1);
11193 goto return_build_binary_op;
11194 }
11195 else if (code1 == POINTER_TYPE && code0 == INTEGER_TYPE)
11196 {
11197 ret = pointer_int_sum (location, PLUS_EXPR, op1, op0);
11198 goto return_build_binary_op;
11199 }
11200 else
11201 common = 1;
11202 break;
11203
11204 case MINUS_EXPR:
11205 /* Subtraction of two similar pointers.
11206 We must subtract them as integers, then divide by object size. */
11207 if (code0 == POINTER_TYPE && code1 == POINTER_TYPE
11208 && comp_target_types (location, type0, type1))
11209 {
11210 ret = pointer_diff (location, op0, op1, &instrument_expr);
11211 goto return_build_binary_op;
11212 }
11213 /* Handle pointer minus int. Just like pointer plus int. */
11214 else if (code0 == POINTER_TYPE && code1 == INTEGER_TYPE)
11215 {
11216 ret = pointer_int_sum (location, MINUS_EXPR, op0, op1);
11217 goto return_build_binary_op;
11218 }
11219 else
11220 common = 1;
11221 break;
11222
11223 case MULT_EXPR:
11224 common = 1;
11225 break;
11226
11227 case TRUNC_DIV_EXPR:
11228 case CEIL_DIV_EXPR:
11229 case FLOOR_DIV_EXPR:
11230 case ROUND_DIV_EXPR:
11231 case EXACT_DIV_EXPR:
11232 doing_div_or_mod = true;
11233 warn_for_div_by_zero (location, op1);
11234
11235 if ((code0 == INTEGER_TYPE || code0 == REAL_TYPE
11236 || code0 == FIXED_POINT_TYPE
11237 || code0 == COMPLEX_TYPE || code0 == VECTOR_TYPE)
11238 && (code1 == INTEGER_TYPE || code1 == REAL_TYPE
11239 || code1 == FIXED_POINT_TYPE
11240 || code1 == COMPLEX_TYPE || code1 == VECTOR_TYPE))
11241 {
11242 enum tree_code tcode0 = code0, tcode1 = code1;
11243
11244 if (code0 == COMPLEX_TYPE || code0 == VECTOR_TYPE)
11245 tcode0 = TREE_CODE (TREE_TYPE (TREE_TYPE (op0)));
11246 if (code1 == COMPLEX_TYPE || code1 == VECTOR_TYPE)
11247 tcode1 = TREE_CODE (TREE_TYPE (TREE_TYPE (op1)));
11248
11249 if (!((tcode0 == INTEGER_TYPE && tcode1 == INTEGER_TYPE)
11250 || (tcode0 == FIXED_POINT_TYPE && tcode1 == FIXED_POINT_TYPE)))
11251 resultcode = RDIV_EXPR;
11252 else
11253 /* Although it would be tempting to shorten always here, that
11254 loses on some targets, since the modulo instruction is
11255 undefined if the quotient can't be represented in the
11256 computation mode. We shorten only if unsigned or if
11257 dividing by something we know != -1. */
11258 shorten = (TYPE_UNSIGNED (TREE_TYPE (orig_op0))
11259 || (TREE_CODE (op1) == INTEGER_CST
11260 && !integer_all_onesp (op1)));
11261 common = 1;
11262 }
11263 break;
11264
11265 case BIT_AND_EXPR:
11266 case BIT_IOR_EXPR:
11267 case BIT_XOR_EXPR:
11268 if (code0 == INTEGER_TYPE && code1 == INTEGER_TYPE)
11269 shorten = -1;
11270 /* Allow vector types which are not floating point types. */
11271 else if (code0 == VECTOR_TYPE
11272 && code1 == VECTOR_TYPE
11273 && !VECTOR_FLOAT_TYPE_P (type0)
11274 && !VECTOR_FLOAT_TYPE_P (type1))
11275 common = 1;
11276 break;
11277
11278 case TRUNC_MOD_EXPR:
11279 case FLOOR_MOD_EXPR:
11280 doing_div_or_mod = true;
11281 warn_for_div_by_zero (location, op1);
11282
11283 if (code0 == VECTOR_TYPE && code1 == VECTOR_TYPE
11284 && TREE_CODE (TREE_TYPE (type0)) == INTEGER_TYPE
11285 && TREE_CODE (TREE_TYPE (type1)) == INTEGER_TYPE)
11286 common = 1;
11287 else if (code0 == INTEGER_TYPE && code1 == INTEGER_TYPE)
11288 {
11289 /* Although it would be tempting to shorten always here, that loses
11290 on some targets, since the modulo instruction is undefined if the
11291 quotient can't be represented in the computation mode. We shorten
11292 only if unsigned or if dividing by something we know != -1. */
11293 shorten = (TYPE_UNSIGNED (TREE_TYPE (orig_op0))
11294 || (TREE_CODE (op1) == INTEGER_CST
11295 && !integer_all_onesp (op1)));
11296 common = 1;
11297 }
11298 break;
11299
11300 case TRUTH_ANDIF_EXPR:
11301 case TRUTH_ORIF_EXPR:
11302 case TRUTH_AND_EXPR:
11303 case TRUTH_OR_EXPR:
11304 case TRUTH_XOR_EXPR:
11305 if ((code0 == INTEGER_TYPE || code0 == POINTER_TYPE
11306 || code0 == REAL_TYPE || code0 == COMPLEX_TYPE
11307 || code0 == FIXED_POINT_TYPE)
11308 && (code1 == INTEGER_TYPE || code1 == POINTER_TYPE
11309 || code1 == REAL_TYPE || code1 == COMPLEX_TYPE
11310 || code1 == FIXED_POINT_TYPE))
11311 {
11312 /* Result of these operations is always an int,
11313 but that does not mean the operands should be
11314 converted to ints! */
11315 result_type = integer_type_node;
11316 if (op0_int_operands)
11317 {
11318 op0 = c_objc_common_truthvalue_conversion (location, orig_op0);
11319 op0 = remove_c_maybe_const_expr (op0);
11320 }
11321 else
11322 op0 = c_objc_common_truthvalue_conversion (location, op0);
11323 if (op1_int_operands)
11324 {
11325 op1 = c_objc_common_truthvalue_conversion (location, orig_op1);
11326 op1 = remove_c_maybe_const_expr (op1);
11327 }
11328 else
11329 op1 = c_objc_common_truthvalue_conversion (location, op1);
11330 converted = 1;
11331 boolean_op = true;
11332 }
11333 if (code == TRUTH_ANDIF_EXPR)
11334 {
11335 int_const_or_overflow = (int_operands
11336 && TREE_CODE (orig_op0) == INTEGER_CST
11337 && (op0 == truthvalue_false_node
11338 || TREE_CODE (orig_op1) == INTEGER_CST));
11339 int_const = (int_const_or_overflow
11340 && !TREE_OVERFLOW (orig_op0)
11341 && (op0 == truthvalue_false_node
11342 || !TREE_OVERFLOW (orig_op1)));
11343 }
11344 else if (code == TRUTH_ORIF_EXPR)
11345 {
11346 int_const_or_overflow = (int_operands
11347 && TREE_CODE (orig_op0) == INTEGER_CST
11348 && (op0 == truthvalue_true_node
11349 || TREE_CODE (orig_op1) == INTEGER_CST));
11350 int_const = (int_const_or_overflow
11351 && !TREE_OVERFLOW (orig_op0)
11352 && (op0 == truthvalue_true_node
11353 || !TREE_OVERFLOW (orig_op1)));
11354 }
11355 break;
11356
11357 /* Shift operations: result has same type as first operand;
11358 always convert second operand to int.
11359 Also set SHORT_SHIFT if shifting rightward. */
11360
11361 case RSHIFT_EXPR:
11362 if (code0 == VECTOR_TYPE && code1 == VECTOR_TYPE
11363 && TREE_CODE (TREE_TYPE (type0)) == INTEGER_TYPE
11364 && TREE_CODE (TREE_TYPE (type1)) == INTEGER_TYPE
11365 && known_eq (TYPE_VECTOR_SUBPARTS (type0),
11366 TYPE_VECTOR_SUBPARTS (type1)))
11367 {
11368 result_type = type0;
11369 converted = 1;
11370 }
11371 else if ((code0 == INTEGER_TYPE || code0 == FIXED_POINT_TYPE
11372 || (code0 == VECTOR_TYPE
11373 && TREE_CODE (TREE_TYPE (type0)) == INTEGER_TYPE))
11374 && code1 == INTEGER_TYPE)
11375 {
11376 doing_shift = true;
11377 if (TREE_CODE (op1) == INTEGER_CST)
11378 {
11379 if (tree_int_cst_sgn (op1) < 0)
11380 {
11381 int_const = false;
11382 if (c_inhibit_evaluation_warnings == 0)
11383 warning_at (location, OPT_Wshift_count_negative,
11384 "right shift count is negative");
11385 }
11386 else if (code0 == VECTOR_TYPE)
11387 {
11388 if (compare_tree_int (op1,
11389 TYPE_PRECISION (TREE_TYPE (type0)))
11390 >= 0)
11391 {
11392 int_const = false;
11393 if (c_inhibit_evaluation_warnings == 0)
11394 warning_at (location, OPT_Wshift_count_overflow,
11395 "right shift count >= width of vector element");
11396 }
11397 }
11398 else
11399 {
11400 if (!integer_zerop (op1))
11401 short_shift = 1;
11402
11403 if (compare_tree_int (op1, TYPE_PRECISION (type0)) >= 0)
11404 {
11405 int_const = false;
11406 if (c_inhibit_evaluation_warnings == 0)
11407 warning_at (location, OPT_Wshift_count_overflow,
11408 "right shift count >= width of type");
11409 }
11410 }
11411 }
11412
11413 /* Use the type of the value to be shifted. */
11414 result_type = type0;
11415 /* Avoid converting op1 to result_type later. */
11416 converted = 1;
11417 }
11418 break;
11419
11420 case LSHIFT_EXPR:
11421 if (code0 == VECTOR_TYPE && code1 == VECTOR_TYPE
11422 && TREE_CODE (TREE_TYPE (type0)) == INTEGER_TYPE
11423 && TREE_CODE (TREE_TYPE (type1)) == INTEGER_TYPE
11424 && known_eq (TYPE_VECTOR_SUBPARTS (type0),
11425 TYPE_VECTOR_SUBPARTS (type1)))
11426 {
11427 result_type = type0;
11428 converted = 1;
11429 }
11430 else if ((code0 == INTEGER_TYPE || code0 == FIXED_POINT_TYPE
11431 || (code0 == VECTOR_TYPE
11432 && TREE_CODE (TREE_TYPE (type0)) == INTEGER_TYPE))
11433 && code1 == INTEGER_TYPE)
11434 {
11435 doing_shift = true;
11436 if (TREE_CODE (op0) == INTEGER_CST
11437 && tree_int_cst_sgn (op0) < 0)
11438 {
11439 /* Don't reject a left shift of a negative value in a context
11440 where a constant expression is needed in C90. */
11441 if (flag_isoc99)
11442 int_const = false;
11443 if (c_inhibit_evaluation_warnings == 0)
11444 warning_at (location, OPT_Wshift_negative_value,
11445 "left shift of negative value");
11446 }
11447 if (TREE_CODE (op1) == INTEGER_CST)
11448 {
11449 if (tree_int_cst_sgn (op1) < 0)
11450 {
11451 int_const = false;
11452 if (c_inhibit_evaluation_warnings == 0)
11453 warning_at (location, OPT_Wshift_count_negative,
11454 "left shift count is negative");
11455 }
11456 else if (code0 == VECTOR_TYPE)
11457 {
11458 if (compare_tree_int (op1,
11459 TYPE_PRECISION (TREE_TYPE (type0)))
11460 >= 0)
11461 {
11462 int_const = false;
11463 if (c_inhibit_evaluation_warnings == 0)
11464 warning_at (location, OPT_Wshift_count_overflow,
11465 "left shift count >= width of vector element");
11466 }
11467 }
11468 else if (compare_tree_int (op1, TYPE_PRECISION (type0)) >= 0)
11469 {
11470 int_const = false;
11471 if (c_inhibit_evaluation_warnings == 0)
11472 warning_at (location, OPT_Wshift_count_overflow,
11473 "left shift count >= width of type");
11474 }
11475 else if (TREE_CODE (op0) == INTEGER_CST
11476 && maybe_warn_shift_overflow (location, op0, op1)
11477 && flag_isoc99)
11478 int_const = false;
11479 }
11480
11481 /* Use the type of the value to be shifted. */
11482 result_type = type0;
11483 /* Avoid converting op1 to result_type later. */
11484 converted = 1;
11485 }
11486 break;
11487
11488 case EQ_EXPR:
11489 case NE_EXPR:
11490 if (code0 == VECTOR_TYPE && code1 == VECTOR_TYPE)
11491 {
11492 tree intt;
11493 if (!vector_types_compatible_elements_p (type0, type1))
11494 {
11495 error_at (location, "comparing vectors with different "
11496 "element types");
11497 return error_mark_node;
11498 }
11499
11500 if (maybe_ne (TYPE_VECTOR_SUBPARTS (type0),
11501 TYPE_VECTOR_SUBPARTS (type1)))
11502 {
11503 error_at (location, "comparing vectors with different "
11504 "number of elements");
11505 return error_mark_node;
11506 }
11507
11508 /* It's not precisely specified how the usual arithmetic
11509 conversions apply to the vector types. Here, we use
11510 the unsigned type if one of the operands is signed and
11511 the other one is unsigned. */
11512 if (TYPE_UNSIGNED (type0) != TYPE_UNSIGNED (type1))
11513 {
11514 if (!TYPE_UNSIGNED (type0))
11515 op0 = build1 (VIEW_CONVERT_EXPR, type1, op0);
11516 else
11517 op1 = build1 (VIEW_CONVERT_EXPR, type0, op1);
11518 warning_at (location, OPT_Wsign_compare, "comparison between "
11519 "types %qT and %qT", type0, type1);
11520 }
11521
11522 /* Always construct signed integer vector type. */
11523 intt = c_common_type_for_size (GET_MODE_BITSIZE
11524 (SCALAR_TYPE_MODE
11525 (TREE_TYPE (type0))), 0);
11526 if (!intt)
11527 {
11528 error_at (location, "could not find an integer type "
11529 "of the same size as %qT",
11530 TREE_TYPE (type0));
11531 return error_mark_node;
11532 }
11533 result_type = build_opaque_vector_type (intt,
11534 TYPE_VECTOR_SUBPARTS (type0));
11535 converted = 1;
11536 ret = build_vec_cmp (resultcode, result_type, op0, op1);
11537 goto return_build_binary_op;
11538 }
11539 if (FLOAT_TYPE_P (type0) || FLOAT_TYPE_P (type1))
11540 warning_at (location,
11541 OPT_Wfloat_equal,
11542 "comparing floating point with == or != is unsafe");
11543 /* Result of comparison is always int,
11544 but don't convert the args to int! */
11545 build_type = integer_type_node;
11546 if ((code0 == INTEGER_TYPE || code0 == REAL_TYPE
11547 || code0 == FIXED_POINT_TYPE || code0 == COMPLEX_TYPE)
11548 && (code1 == INTEGER_TYPE || code1 == REAL_TYPE
11549 || code1 == FIXED_POINT_TYPE || code1 == COMPLEX_TYPE))
11550 short_compare = 1;
11551 else if (code0 == POINTER_TYPE && null_pointer_constant_p (orig_op1))
11552 {
11553 if (TREE_CODE (op0) == ADDR_EXPR
11554 && decl_with_nonnull_addr_p (TREE_OPERAND (op0, 0))
11555 && !from_macro_expansion_at (location))
11556 {
11557 if (code == EQ_EXPR)
11558 warning_at (location,
11559 OPT_Waddress,
11560 "the comparison will always evaluate as %<false%> "
11561 "for the address of %qD will never be NULL",
11562 TREE_OPERAND (op0, 0));
11563 else
11564 warning_at (location,
11565 OPT_Waddress,
11566 "the comparison will always evaluate as %<true%> "
11567 "for the address of %qD will never be NULL",
11568 TREE_OPERAND (op0, 0));
11569 }
11570 result_type = type0;
11571 }
11572 else if (code1 == POINTER_TYPE && null_pointer_constant_p (orig_op0))
11573 {
11574 if (TREE_CODE (op1) == ADDR_EXPR
11575 && decl_with_nonnull_addr_p (TREE_OPERAND (op1, 0))
11576 && !from_macro_expansion_at (location))
11577 {
11578 if (code == EQ_EXPR)
11579 warning_at (location,
11580 OPT_Waddress,
11581 "the comparison will always evaluate as %<false%> "
11582 "for the address of %qD will never be NULL",
11583 TREE_OPERAND (op1, 0));
11584 else
11585 warning_at (location,
11586 OPT_Waddress,
11587 "the comparison will always evaluate as %<true%> "
11588 "for the address of %qD will never be NULL",
11589 TREE_OPERAND (op1, 0));
11590 }
11591 result_type = type1;
11592 }
11593 else if (code0 == POINTER_TYPE && code1 == POINTER_TYPE)
11594 {
11595 tree tt0 = TREE_TYPE (type0);
11596 tree tt1 = TREE_TYPE (type1);
11597 addr_space_t as0 = TYPE_ADDR_SPACE (tt0);
11598 addr_space_t as1 = TYPE_ADDR_SPACE (tt1);
11599 addr_space_t as_common = ADDR_SPACE_GENERIC;
11600
11601 /* Anything compares with void *. void * compares with anything.
11602 Otherwise, the targets must be compatible
11603 and both must be object or both incomplete. */
11604 if (comp_target_types (location, type0, type1))
11605 result_type = common_pointer_type (type0, type1);
11606 else if (!addr_space_superset (as0, as1, &as_common))
11607 {
11608 error_at (location, "comparison of pointers to "
11609 "disjoint address spaces");
11610 return error_mark_node;
11611 }
11612 else if (VOID_TYPE_P (tt0) && !TYPE_ATOMIC (tt0))
11613 {
11614 if (pedantic && TREE_CODE (tt1) == FUNCTION_TYPE)
11615 pedwarn (location, OPT_Wpedantic, "ISO C forbids "
11616 "comparison of %<void *%> with function pointer");
11617 }
11618 else if (VOID_TYPE_P (tt1) && !TYPE_ATOMIC (tt1))
11619 {
11620 if (pedantic && TREE_CODE (tt0) == FUNCTION_TYPE)
11621 pedwarn (location, OPT_Wpedantic, "ISO C forbids "
11622 "comparison of %<void *%> with function pointer");
11623 }
11624 else
11625 /* Avoid warning about the volatile ObjC EH puts on decls. */
11626 if (!objc_ok)
11627 pedwarn (location, 0,
11628 "comparison of distinct pointer types lacks a cast");
11629
11630 if (result_type == NULL_TREE)
11631 {
11632 int qual = ENCODE_QUAL_ADDR_SPACE (as_common);
11633 result_type = build_pointer_type
11634 (build_qualified_type (void_type_node, qual));
11635 }
11636 }
11637 else if (code0 == POINTER_TYPE && code1 == INTEGER_TYPE)
11638 {
11639 result_type = type0;
11640 pedwarn (location, 0, "comparison between pointer and integer");
11641 }
11642 else if (code0 == INTEGER_TYPE && code1 == POINTER_TYPE)
11643 {
11644 result_type = type1;
11645 pedwarn (location, 0, "comparison between pointer and integer");
11646 }
11647 if ((TREE_CODE (TREE_TYPE (orig_op0)) == BOOLEAN_TYPE
11648 || truth_value_p (TREE_CODE (orig_op0)))
11649 ^ (TREE_CODE (TREE_TYPE (orig_op1)) == BOOLEAN_TYPE
11650 || truth_value_p (TREE_CODE (orig_op1))))
11651 maybe_warn_bool_compare (location, code, orig_op0, orig_op1);
11652 break;
11653
11654 case LE_EXPR:
11655 case GE_EXPR:
11656 case LT_EXPR:
11657 case GT_EXPR:
11658 if (code0 == VECTOR_TYPE && code1 == VECTOR_TYPE)
11659 {
11660 tree intt;
11661 if (!vector_types_compatible_elements_p (type0, type1))
11662 {
11663 error_at (location, "comparing vectors with different "
11664 "element types");
11665 return error_mark_node;
11666 }
11667
11668 if (maybe_ne (TYPE_VECTOR_SUBPARTS (type0),
11669 TYPE_VECTOR_SUBPARTS (type1)))
11670 {
11671 error_at (location, "comparing vectors with different "
11672 "number of elements");
11673 return error_mark_node;
11674 }
11675
11676 /* It's not precisely specified how the usual arithmetic
11677 conversions apply to the vector types. Here, we use
11678 the unsigned type if one of the operands is signed and
11679 the other one is unsigned. */
11680 if (TYPE_UNSIGNED (type0) != TYPE_UNSIGNED (type1))
11681 {
11682 if (!TYPE_UNSIGNED (type0))
11683 op0 = build1 (VIEW_CONVERT_EXPR, type1, op0);
11684 else
11685 op1 = build1 (VIEW_CONVERT_EXPR, type0, op1);
11686 warning_at (location, OPT_Wsign_compare, "comparison between "
11687 "types %qT and %qT", type0, type1);
11688 }
11689
11690 /* Always construct signed integer vector type. */
11691 intt = c_common_type_for_size (GET_MODE_BITSIZE
11692 (SCALAR_TYPE_MODE
11693 (TREE_TYPE (type0))), 0);
11694 if (!intt)
11695 {
11696 error_at (location, "could not find an integer type "
11697 "of the same size as %qT",
11698 TREE_TYPE (type0));
11699 return error_mark_node;
11700 }
11701 result_type = build_opaque_vector_type (intt,
11702 TYPE_VECTOR_SUBPARTS (type0));
11703 converted = 1;
11704 ret = build_vec_cmp (resultcode, result_type, op0, op1);
11705 goto return_build_binary_op;
11706 }
11707 build_type = integer_type_node;
11708 if ((code0 == INTEGER_TYPE || code0 == REAL_TYPE
11709 || code0 == FIXED_POINT_TYPE)
11710 && (code1 == INTEGER_TYPE || code1 == REAL_TYPE
11711 || code1 == FIXED_POINT_TYPE))
11712 short_compare = 1;
11713 else if (code0 == POINTER_TYPE && code1 == POINTER_TYPE)
11714 {
11715 addr_space_t as0 = TYPE_ADDR_SPACE (TREE_TYPE (type0));
11716 addr_space_t as1 = TYPE_ADDR_SPACE (TREE_TYPE (type1));
11717 addr_space_t as_common;
11718
11719 if (comp_target_types (location, type0, type1))
11720 {
11721 result_type = common_pointer_type (type0, type1);
11722 if (!COMPLETE_TYPE_P (TREE_TYPE (type0))
11723 != !COMPLETE_TYPE_P (TREE_TYPE (type1)))
11724 pedwarn (location, 0,
11725 "comparison of complete and incomplete pointers");
11726 else if (TREE_CODE (TREE_TYPE (type0)) == FUNCTION_TYPE)
11727 pedwarn (location, OPT_Wpedantic, "ISO C forbids "
11728 "ordered comparisons of pointers to functions");
11729 else if (null_pointer_constant_p (orig_op0)
11730 || null_pointer_constant_p (orig_op1))
11731 warning_at (location, OPT_Wextra,
11732 "ordered comparison of pointer with null pointer");
11733
11734 }
11735 else if (!addr_space_superset (as0, as1, &as_common))
11736 {
11737 error_at (location, "comparison of pointers to "
11738 "disjoint address spaces");
11739 return error_mark_node;
11740 }
11741 else
11742 {
11743 int qual = ENCODE_QUAL_ADDR_SPACE (as_common);
11744 result_type = build_pointer_type
11745 (build_qualified_type (void_type_node, qual));
11746 pedwarn (location, 0,
11747 "comparison of distinct pointer types lacks a cast");
11748 }
11749 }
11750 else if (code0 == POINTER_TYPE && null_pointer_constant_p (orig_op1))
11751 {
11752 result_type = type0;
11753 if (pedantic)
11754 pedwarn (location, OPT_Wpedantic,
11755 "ordered comparison of pointer with integer zero");
11756 else if (extra_warnings)
11757 warning_at (location, OPT_Wextra,
11758 "ordered comparison of pointer with integer zero");
11759 }
11760 else if (code1 == POINTER_TYPE && null_pointer_constant_p (orig_op0))
11761 {
11762 result_type = type1;
11763 if (pedantic)
11764 pedwarn (location, OPT_Wpedantic,
11765 "ordered comparison of pointer with integer zero");
11766 else if (extra_warnings)
11767 warning_at (location, OPT_Wextra,
11768 "ordered comparison of pointer with integer zero");
11769 }
11770 else if (code0 == POINTER_TYPE && code1 == INTEGER_TYPE)
11771 {
11772 result_type = type0;
11773 pedwarn (location, 0, "comparison between pointer and integer");
11774 }
11775 else if (code0 == INTEGER_TYPE && code1 == POINTER_TYPE)
11776 {
11777 result_type = type1;
11778 pedwarn (location, 0, "comparison between pointer and integer");
11779 }
11780
11781 if ((code0 == POINTER_TYPE || code1 == POINTER_TYPE)
11782 && sanitize_flags_p (SANITIZE_POINTER_COMPARE))
11783 {
11784 op0 = save_expr (op0);
11785 op1 = save_expr (op1);
11786
11787 tree tt = builtin_decl_explicit (BUILT_IN_ASAN_POINTER_COMPARE);
11788 instrument_expr = build_call_expr_loc (location, tt, 2, op0, op1);
11789 }
11790
11791 if ((TREE_CODE (TREE_TYPE (orig_op0)) == BOOLEAN_TYPE
11792 || truth_value_p (TREE_CODE (orig_op0)))
11793 ^ (TREE_CODE (TREE_TYPE (orig_op1)) == BOOLEAN_TYPE
11794 || truth_value_p (TREE_CODE (orig_op1))))
11795 maybe_warn_bool_compare (location, code, orig_op0, orig_op1);
11796 break;
11797
11798 default:
11799 gcc_unreachable ();
11800 }
11801
11802 if (code0 == ERROR_MARK || code1 == ERROR_MARK)
11803 return error_mark_node;
11804
11805 if (code0 == VECTOR_TYPE && code1 == VECTOR_TYPE
11806 && (!tree_int_cst_equal (TYPE_SIZE (type0), TYPE_SIZE (type1))
11807 || !vector_types_compatible_elements_p (type0, type1)))
11808 {
11809 gcc_rich_location richloc (location);
11810 richloc.maybe_add_expr (orig_op0);
11811 richloc.maybe_add_expr (orig_op1);
11812 binary_op_error (&richloc, code, type0, type1);
11813 return error_mark_node;
11814 }
11815
11816 if ((code0 == INTEGER_TYPE || code0 == REAL_TYPE || code0 == COMPLEX_TYPE
11817 || code0 == FIXED_POINT_TYPE || code0 == VECTOR_TYPE)
11818 &&
11819 (code1 == INTEGER_TYPE || code1 == REAL_TYPE || code1 == COMPLEX_TYPE
11820 || code1 == FIXED_POINT_TYPE || code1 == VECTOR_TYPE))
11821 {
11822 bool first_complex = (code0 == COMPLEX_TYPE);
11823 bool second_complex = (code1 == COMPLEX_TYPE);
11824 int none_complex = (!first_complex && !second_complex);
11825
11826 if (shorten || common || short_compare)
11827 {
11828 result_type = c_common_type (type0, type1);
11829 do_warn_double_promotion (result_type, type0, type1,
11830 "implicit conversion from %qT to %qT "
11831 "to match other operand of binary "
11832 "expression",
11833 location);
11834 if (result_type == error_mark_node)
11835 return error_mark_node;
11836 }
11837
11838 if (first_complex != second_complex
11839 && (code == PLUS_EXPR
11840 || code == MINUS_EXPR
11841 || code == MULT_EXPR
11842 || (code == TRUNC_DIV_EXPR && first_complex))
11843 && TREE_CODE (TREE_TYPE (result_type)) == REAL_TYPE
11844 && flag_signed_zeros)
11845 {
11846 /* An operation on mixed real/complex operands must be
11847 handled specially, but the language-independent code can
11848 more easily optimize the plain complex arithmetic if
11849 -fno-signed-zeros. */
11850 tree real_type = TREE_TYPE (result_type);
11851 tree real, imag;
11852 if (type0 != orig_type0 || type1 != orig_type1)
11853 {
11854 gcc_assert (may_need_excess_precision && common);
11855 semantic_result_type = c_common_type (orig_type0, orig_type1);
11856 }
11857 if (first_complex)
11858 {
11859 if (TREE_TYPE (op0) != result_type)
11860 op0 = convert_and_check (location, result_type, op0);
11861 if (TREE_TYPE (op1) != real_type)
11862 op1 = convert_and_check (location, real_type, op1);
11863 }
11864 else
11865 {
11866 if (TREE_TYPE (op0) != real_type)
11867 op0 = convert_and_check (location, real_type, op0);
11868 if (TREE_TYPE (op1) != result_type)
11869 op1 = convert_and_check (location, result_type, op1);
11870 }
11871 if (TREE_CODE (op0) == ERROR_MARK || TREE_CODE (op1) == ERROR_MARK)
11872 return error_mark_node;
11873 if (first_complex)
11874 {
11875 op0 = save_expr (op0);
11876 real = build_unary_op (EXPR_LOCATION (orig_op0), REALPART_EXPR,
11877 op0, true);
11878 imag = build_unary_op (EXPR_LOCATION (orig_op0), IMAGPART_EXPR,
11879 op0, true);
11880 switch (code)
11881 {
11882 case MULT_EXPR:
11883 case TRUNC_DIV_EXPR:
11884 op1 = save_expr (op1);
11885 imag = build2 (resultcode, real_type, imag, op1);
11886 /* Fall through. */
11887 case PLUS_EXPR:
11888 case MINUS_EXPR:
11889 real = build2 (resultcode, real_type, real, op1);
11890 break;
11891 default:
11892 gcc_unreachable();
11893 }
11894 }
11895 else
11896 {
11897 op1 = save_expr (op1);
11898 real = build_unary_op (EXPR_LOCATION (orig_op1), REALPART_EXPR,
11899 op1, true);
11900 imag = build_unary_op (EXPR_LOCATION (orig_op1), IMAGPART_EXPR,
11901 op1, true);
11902 switch (code)
11903 {
11904 case MULT_EXPR:
11905 op0 = save_expr (op0);
11906 imag = build2 (resultcode, real_type, op0, imag);
11907 /* Fall through. */
11908 case PLUS_EXPR:
11909 real = build2 (resultcode, real_type, op0, real);
11910 break;
11911 case MINUS_EXPR:
11912 real = build2 (resultcode, real_type, op0, real);
11913 imag = build1 (NEGATE_EXPR, real_type, imag);
11914 break;
11915 default:
11916 gcc_unreachable();
11917 }
11918 }
11919 ret = build2 (COMPLEX_EXPR, result_type, real, imag);
11920 goto return_build_binary_op;
11921 }
11922
11923 /* For certain operations (which identify themselves by shorten != 0)
11924 if both args were extended from the same smaller type,
11925 do the arithmetic in that type and then extend.
11926
11927 shorten !=0 and !=1 indicates a bitwise operation.
11928 For them, this optimization is safe only if
11929 both args are zero-extended or both are sign-extended.
11930 Otherwise, we might change the result.
11931 Eg, (short)-1 | (unsigned short)-1 is (int)-1
11932 but calculated in (unsigned short) it would be (unsigned short)-1. */
11933
11934 if (shorten && none_complex)
11935 {
11936 final_type = result_type;
11937 result_type = shorten_binary_op (result_type, op0, op1,
11938 shorten == -1);
11939 }
11940
11941 /* Shifts can be shortened if shifting right. */
11942
11943 if (short_shift)
11944 {
11945 int unsigned_arg;
11946 tree arg0 = get_narrower (op0, &unsigned_arg);
11947
11948 final_type = result_type;
11949
11950 if (arg0 == op0 && final_type == TREE_TYPE (op0))
11951 unsigned_arg = TYPE_UNSIGNED (TREE_TYPE (op0));
11952
11953 if (TYPE_PRECISION (TREE_TYPE (arg0)) < TYPE_PRECISION (result_type)
11954 && tree_int_cst_sgn (op1) > 0
11955 /* We can shorten only if the shift count is less than the
11956 number of bits in the smaller type size. */
11957 && compare_tree_int (op1, TYPE_PRECISION (TREE_TYPE (arg0))) < 0
11958 /* We cannot drop an unsigned shift after sign-extension. */
11959 && (!TYPE_UNSIGNED (final_type) || unsigned_arg))
11960 {
11961 /* Do an unsigned shift if the operand was zero-extended. */
11962 result_type
11963 = c_common_signed_or_unsigned_type (unsigned_arg,
11964 TREE_TYPE (arg0));
11965 /* Convert value-to-be-shifted to that type. */
11966 if (TREE_TYPE (op0) != result_type)
11967 op0 = convert (result_type, op0);
11968 converted = 1;
11969 }
11970 }
11971
11972 /* Comparison operations are shortened too but differently.
11973 They identify themselves by setting short_compare = 1. */
11974
11975 if (short_compare)
11976 {
11977 /* Don't write &op0, etc., because that would prevent op0
11978 from being kept in a register.
11979 Instead, make copies of the our local variables and
11980 pass the copies by reference, then copy them back afterward. */
11981 tree xop0 = op0, xop1 = op1, xresult_type = result_type;
11982 enum tree_code xresultcode = resultcode;
11983 tree val
11984 = shorten_compare (location, &xop0, &xop1, &xresult_type,
11985 &xresultcode);
11986
11987 if (val != NULL_TREE)
11988 {
11989 ret = val;
11990 goto return_build_binary_op;
11991 }
11992
11993 op0 = xop0, op1 = xop1;
11994 converted = 1;
11995 resultcode = xresultcode;
11996
11997 if (c_inhibit_evaluation_warnings == 0)
11998 {
11999 bool op0_maybe_const = true;
12000 bool op1_maybe_const = true;
12001 tree orig_op0_folded, orig_op1_folded;
12002
12003 if (in_late_binary_op)
12004 {
12005 orig_op0_folded = orig_op0;
12006 orig_op1_folded = orig_op1;
12007 }
12008 else
12009 {
12010 /* Fold for the sake of possible warnings, as in
12011 build_conditional_expr. This requires the
12012 "original" values to be folded, not just op0 and
12013 op1. */
12014 c_inhibit_evaluation_warnings++;
12015 op0 = c_fully_fold (op0, require_constant_value,
12016 &op0_maybe_const);
12017 op1 = c_fully_fold (op1, require_constant_value,
12018 &op1_maybe_const);
12019 c_inhibit_evaluation_warnings--;
12020 orig_op0_folded = c_fully_fold (orig_op0,
12021 require_constant_value,
12022 NULL);
12023 orig_op1_folded = c_fully_fold (orig_op1,
12024 require_constant_value,
12025 NULL);
12026 }
12027
12028 if (warn_sign_compare)
12029 warn_for_sign_compare (location, orig_op0_folded,
12030 orig_op1_folded, op0, op1,
12031 result_type, resultcode);
12032 if (!in_late_binary_op && !int_operands)
12033 {
12034 if (!op0_maybe_const || TREE_CODE (op0) != INTEGER_CST)
12035 op0 = c_wrap_maybe_const (op0, !op0_maybe_const);
12036 if (!op1_maybe_const || TREE_CODE (op1) != INTEGER_CST)
12037 op1 = c_wrap_maybe_const (op1, !op1_maybe_const);
12038 }
12039 }
12040 }
12041 }
12042
12043 /* At this point, RESULT_TYPE must be nonzero to avoid an error message.
12044 If CONVERTED is zero, both args will be converted to type RESULT_TYPE.
12045 Then the expression will be built.
12046 It will be given type FINAL_TYPE if that is nonzero;
12047 otherwise, it will be given type RESULT_TYPE. */
12048
12049 if (!result_type)
12050 {
12051 gcc_rich_location richloc (location);
12052 richloc.maybe_add_expr (orig_op0);
12053 richloc.maybe_add_expr (orig_op1);
12054 binary_op_error (&richloc, code, TREE_TYPE (op0), TREE_TYPE (op1));
12055 return error_mark_node;
12056 }
12057
12058 if (build_type == NULL_TREE)
12059 {
12060 build_type = result_type;
12061 if ((type0 != orig_type0 || type1 != orig_type1)
12062 && !boolean_op)
12063 {
12064 gcc_assert (may_need_excess_precision && common);
12065 semantic_result_type = c_common_type (orig_type0, orig_type1);
12066 }
12067 }
12068
12069 if (!converted)
12070 {
12071 op0 = ep_convert_and_check (location, result_type, op0,
12072 semantic_result_type);
12073 op1 = ep_convert_and_check (location, result_type, op1,
12074 semantic_result_type);
12075
12076 /* This can happen if one operand has a vector type, and the other
12077 has a different type. */
12078 if (TREE_CODE (op0) == ERROR_MARK || TREE_CODE (op1) == ERROR_MARK)
12079 return error_mark_node;
12080 }
12081
12082 if (sanitize_flags_p ((SANITIZE_SHIFT
12083 | SANITIZE_DIVIDE | SANITIZE_FLOAT_DIVIDE))
12084 && current_function_decl != NULL_TREE
12085 && (doing_div_or_mod || doing_shift)
12086 && !require_constant_value)
12087 {
12088 /* OP0 and/or OP1 might have side-effects. */
12089 op0 = save_expr (op0);
12090 op1 = save_expr (op1);
12091 op0 = c_fully_fold (op0, false, NULL);
12092 op1 = c_fully_fold (op1, false, NULL);
12093 if (doing_div_or_mod && (sanitize_flags_p ((SANITIZE_DIVIDE
12094 | SANITIZE_FLOAT_DIVIDE))))
12095 instrument_expr = ubsan_instrument_division (location, op0, op1);
12096 else if (doing_shift && sanitize_flags_p (SANITIZE_SHIFT))
12097 instrument_expr = ubsan_instrument_shift (location, code, op0, op1);
12098 }
12099
12100 /* Treat expressions in initializers specially as they can't trap. */
12101 if (int_const_or_overflow)
12102 ret = (require_constant_value
12103 ? fold_build2_initializer_loc (location, resultcode, build_type,
12104 op0, op1)
12105 : fold_build2_loc (location, resultcode, build_type, op0, op1));
12106 else
12107 ret = build2 (resultcode, build_type, op0, op1);
12108 if (final_type != NULL_TREE)
12109 ret = convert (final_type, ret);
12110
12111 return_build_binary_op:
12112 gcc_assert (ret != error_mark_node);
12113 if (TREE_CODE (ret) == INTEGER_CST && !TREE_OVERFLOW (ret) && !int_const)
12114 ret = (int_operands
12115 ? note_integer_operands (ret)
12116 : build1 (NOP_EXPR, TREE_TYPE (ret), ret));
12117 else if (TREE_CODE (ret) != INTEGER_CST && int_operands
12118 && !in_late_binary_op)
12119 ret = note_integer_operands (ret);
12120 protected_set_expr_location (ret, location);
12121
12122 if (instrument_expr != NULL)
12123 ret = fold_build2 (COMPOUND_EXPR, TREE_TYPE (ret),
12124 instrument_expr, ret);
12125
12126 if (semantic_result_type)
12127 ret = build1_loc (location, EXCESS_PRECISION_EXPR,
12128 semantic_result_type, ret);
12129
12130 return ret;
12131 }
12132
12133
12134 /* Convert EXPR to be a truth-value, validating its type for this
12135 purpose. LOCATION is the source location for the expression. */
12136
12137 tree
12138 c_objc_common_truthvalue_conversion (location_t location, tree expr)
12139 {
12140 bool int_const, int_operands;
12141
12142 switch (TREE_CODE (TREE_TYPE (expr)))
12143 {
12144 case ARRAY_TYPE:
12145 error_at (location, "used array that cannot be converted to pointer where scalar is required");
12146 return error_mark_node;
12147
12148 case RECORD_TYPE:
12149 error_at (location, "used struct type value where scalar is required");
12150 return error_mark_node;
12151
12152 case UNION_TYPE:
12153 error_at (location, "used union type value where scalar is required");
12154 return error_mark_node;
12155
12156 case VOID_TYPE:
12157 error_at (location, "void value not ignored as it ought to be");
12158 return error_mark_node;
12159
12160 case POINTER_TYPE:
12161 if (reject_gcc_builtin (expr))
12162 return error_mark_node;
12163 break;
12164
12165 case FUNCTION_TYPE:
12166 gcc_unreachable ();
12167
12168 case VECTOR_TYPE:
12169 error_at (location, "used vector type where scalar is required");
12170 return error_mark_node;
12171
12172 default:
12173 break;
12174 }
12175
12176 int_const = (TREE_CODE (expr) == INTEGER_CST && !TREE_OVERFLOW (expr));
12177 int_operands = EXPR_INT_CONST_OPERANDS (expr);
12178 if (int_operands && TREE_CODE (expr) != INTEGER_CST)
12179 {
12180 expr = remove_c_maybe_const_expr (expr);
12181 expr = build2 (NE_EXPR, integer_type_node, expr,
12182 convert (TREE_TYPE (expr), integer_zero_node));
12183 expr = note_integer_operands (expr);
12184 }
12185 else
12186 /* ??? Should we also give an error for vectors rather than leaving
12187 those to give errors later? */
12188 expr = c_common_truthvalue_conversion (location, expr);
12189
12190 if (TREE_CODE (expr) == INTEGER_CST && int_operands && !int_const)
12191 {
12192 if (TREE_OVERFLOW (expr))
12193 return expr;
12194 else
12195 return note_integer_operands (expr);
12196 }
12197 if (TREE_CODE (expr) == INTEGER_CST && !int_const)
12198 return build1 (NOP_EXPR, TREE_TYPE (expr), expr);
12199 return expr;
12200 }
12201 \f
12202
12203 /* Convert EXPR to a contained DECL, updating *TC, *TI and *SE as
12204 required. */
12205
12206 tree
12207 c_expr_to_decl (tree expr, bool *tc ATTRIBUTE_UNUSED, bool *se)
12208 {
12209 if (TREE_CODE (expr) == COMPOUND_LITERAL_EXPR)
12210 {
12211 tree decl = COMPOUND_LITERAL_EXPR_DECL (expr);
12212 /* Executing a compound literal inside a function reinitializes
12213 it. */
12214 if (!TREE_STATIC (decl))
12215 *se = true;
12216 return decl;
12217 }
12218 else
12219 return expr;
12220 }
12221 \f
12222 /* Generate OMP construct CODE, with BODY and CLAUSES as its compound
12223 statement. LOC is the location of the construct. */
12224
12225 tree
12226 c_finish_omp_construct (location_t loc, enum tree_code code, tree body,
12227 tree clauses)
12228 {
12229 body = c_end_compound_stmt (loc, body, true);
12230
12231 tree stmt = make_node (code);
12232 TREE_TYPE (stmt) = void_type_node;
12233 OMP_BODY (stmt) = body;
12234 OMP_CLAUSES (stmt) = clauses;
12235 SET_EXPR_LOCATION (stmt, loc);
12236
12237 return add_stmt (stmt);
12238 }
12239
12240 /* Generate OACC_DATA, with CLAUSES and BLOCK as its compound
12241 statement. LOC is the location of the OACC_DATA. */
12242
12243 tree
12244 c_finish_oacc_data (location_t loc, tree clauses, tree block)
12245 {
12246 tree stmt;
12247
12248 block = c_end_compound_stmt (loc, block, true);
12249
12250 stmt = make_node (OACC_DATA);
12251 TREE_TYPE (stmt) = void_type_node;
12252 OACC_DATA_CLAUSES (stmt) = clauses;
12253 OACC_DATA_BODY (stmt) = block;
12254 SET_EXPR_LOCATION (stmt, loc);
12255
12256 return add_stmt (stmt);
12257 }
12258
12259 /* Generate OACC_HOST_DATA, with CLAUSES and BLOCK as its compound
12260 statement. LOC is the location of the OACC_HOST_DATA. */
12261
12262 tree
12263 c_finish_oacc_host_data (location_t loc, tree clauses, tree block)
12264 {
12265 tree stmt;
12266
12267 block = c_end_compound_stmt (loc, block, true);
12268
12269 stmt = make_node (OACC_HOST_DATA);
12270 TREE_TYPE (stmt) = void_type_node;
12271 OACC_HOST_DATA_CLAUSES (stmt) = clauses;
12272 OACC_HOST_DATA_BODY (stmt) = block;
12273 SET_EXPR_LOCATION (stmt, loc);
12274
12275 return add_stmt (stmt);
12276 }
12277
12278 /* Like c_begin_compound_stmt, except force the retention of the BLOCK. */
12279
12280 tree
12281 c_begin_omp_parallel (void)
12282 {
12283 tree block;
12284
12285 keep_next_level ();
12286 block = c_begin_compound_stmt (true);
12287
12288 return block;
12289 }
12290
12291 /* Generate OMP_PARALLEL, with CLAUSES and BLOCK as its compound
12292 statement. LOC is the location of the OMP_PARALLEL. */
12293
12294 tree
12295 c_finish_omp_parallel (location_t loc, tree clauses, tree block)
12296 {
12297 tree stmt;
12298
12299 block = c_end_compound_stmt (loc, block, true);
12300
12301 stmt = make_node (OMP_PARALLEL);
12302 TREE_TYPE (stmt) = void_type_node;
12303 OMP_PARALLEL_CLAUSES (stmt) = clauses;
12304 OMP_PARALLEL_BODY (stmt) = block;
12305 SET_EXPR_LOCATION (stmt, loc);
12306
12307 return add_stmt (stmt);
12308 }
12309
12310 /* Like c_begin_compound_stmt, except force the retention of the BLOCK. */
12311
12312 tree
12313 c_begin_omp_task (void)
12314 {
12315 tree block;
12316
12317 keep_next_level ();
12318 block = c_begin_compound_stmt (true);
12319
12320 return block;
12321 }
12322
12323 /* Generate OMP_TASK, with CLAUSES and BLOCK as its compound
12324 statement. LOC is the location of the #pragma. */
12325
12326 tree
12327 c_finish_omp_task (location_t loc, tree clauses, tree block)
12328 {
12329 tree stmt;
12330
12331 block = c_end_compound_stmt (loc, block, true);
12332
12333 stmt = make_node (OMP_TASK);
12334 TREE_TYPE (stmt) = void_type_node;
12335 OMP_TASK_CLAUSES (stmt) = clauses;
12336 OMP_TASK_BODY (stmt) = block;
12337 SET_EXPR_LOCATION (stmt, loc);
12338
12339 return add_stmt (stmt);
12340 }
12341
12342 /* Generate GOMP_cancel call for #pragma omp cancel. */
12343
12344 void
12345 c_finish_omp_cancel (location_t loc, tree clauses)
12346 {
12347 tree fn = builtin_decl_explicit (BUILT_IN_GOMP_CANCEL);
12348 int mask = 0;
12349 if (omp_find_clause (clauses, OMP_CLAUSE_PARALLEL))
12350 mask = 1;
12351 else if (omp_find_clause (clauses, OMP_CLAUSE_FOR))
12352 mask = 2;
12353 else if (omp_find_clause (clauses, OMP_CLAUSE_SECTIONS))
12354 mask = 4;
12355 else if (omp_find_clause (clauses, OMP_CLAUSE_TASKGROUP))
12356 mask = 8;
12357 else
12358 {
12359 error_at (loc, "%<#pragma omp cancel%> must specify one of "
12360 "%<parallel%>, %<for%>, %<sections%> or %<taskgroup%> "
12361 "clauses");
12362 return;
12363 }
12364 tree ifc = omp_find_clause (clauses, OMP_CLAUSE_IF);
12365 if (ifc != NULL_TREE)
12366 {
12367 tree type = TREE_TYPE (OMP_CLAUSE_IF_EXPR (ifc));
12368 ifc = fold_build2_loc (OMP_CLAUSE_LOCATION (ifc), NE_EXPR,
12369 boolean_type_node, OMP_CLAUSE_IF_EXPR (ifc),
12370 build_zero_cst (type));
12371 }
12372 else
12373 ifc = boolean_true_node;
12374 tree stmt = build_call_expr_loc (loc, fn, 2,
12375 build_int_cst (integer_type_node, mask),
12376 ifc);
12377 add_stmt (stmt);
12378 }
12379
12380 /* Generate GOMP_cancellation_point call for
12381 #pragma omp cancellation point. */
12382
12383 void
12384 c_finish_omp_cancellation_point (location_t loc, tree clauses)
12385 {
12386 tree fn = builtin_decl_explicit (BUILT_IN_GOMP_CANCELLATION_POINT);
12387 int mask = 0;
12388 if (omp_find_clause (clauses, OMP_CLAUSE_PARALLEL))
12389 mask = 1;
12390 else if (omp_find_clause (clauses, OMP_CLAUSE_FOR))
12391 mask = 2;
12392 else if (omp_find_clause (clauses, OMP_CLAUSE_SECTIONS))
12393 mask = 4;
12394 else if (omp_find_clause (clauses, OMP_CLAUSE_TASKGROUP))
12395 mask = 8;
12396 else
12397 {
12398 error_at (loc, "%<#pragma omp cancellation point%> must specify one of "
12399 "%<parallel%>, %<for%>, %<sections%> or %<taskgroup%> "
12400 "clauses");
12401 return;
12402 }
12403 tree stmt = build_call_expr_loc (loc, fn, 1,
12404 build_int_cst (integer_type_node, mask));
12405 add_stmt (stmt);
12406 }
12407
12408 /* Helper function for handle_omp_array_sections. Called recursively
12409 to handle multiple array-section-subscripts. C is the clause,
12410 T current expression (initially OMP_CLAUSE_DECL), which is either
12411 a TREE_LIST for array-section-subscript (TREE_PURPOSE is low-bound
12412 expression if specified, TREE_VALUE length expression if specified,
12413 TREE_CHAIN is what it has been specified after, or some decl.
12414 TYPES vector is populated with array section types, MAYBE_ZERO_LEN
12415 set to true if any of the array-section-subscript could have length
12416 of zero (explicit or implicit), FIRST_NON_ONE is the index of the
12417 first array-section-subscript which is known not to have length
12418 of one. Given say:
12419 map(a[:b][2:1][:c][:2][:d][e:f][2:5])
12420 FIRST_NON_ONE will be 3, array-section-subscript [:b], [2:1] and [:c]
12421 all are or may have length of 1, array-section-subscript [:2] is the
12422 first one known not to have length 1. For array-section-subscript
12423 <= FIRST_NON_ONE we diagnose non-contiguous arrays if low bound isn't
12424 0 or length isn't the array domain max + 1, for > FIRST_NON_ONE we
12425 can if MAYBE_ZERO_LEN is false. MAYBE_ZERO_LEN will be true in the above
12426 case though, as some lengths could be zero. */
12427
12428 static tree
12429 handle_omp_array_sections_1 (tree c, tree t, vec<tree> &types,
12430 bool &maybe_zero_len, unsigned int &first_non_one,
12431 enum c_omp_region_type ort)
12432 {
12433 tree ret, low_bound, length, type;
12434 if (TREE_CODE (t) != TREE_LIST)
12435 {
12436 if (error_operand_p (t))
12437 return error_mark_node;
12438 ret = t;
12439 if (OMP_CLAUSE_CODE (c) != OMP_CLAUSE_DEPEND
12440 && TYPE_ATOMIC (strip_array_types (TREE_TYPE (t))))
12441 {
12442 error_at (OMP_CLAUSE_LOCATION (c), "%<_Atomic%> %qE in %qs clause",
12443 t, omp_clause_code_name[OMP_CLAUSE_CODE (c)]);
12444 return error_mark_node;
12445 }
12446 if (TREE_CODE (t) == COMPONENT_REF
12447 && ort == C_ORT_OMP
12448 && (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_MAP
12449 || OMP_CLAUSE_CODE (c) == OMP_CLAUSE_TO
12450 || OMP_CLAUSE_CODE (c) == OMP_CLAUSE_FROM))
12451 {
12452 if (DECL_BIT_FIELD (TREE_OPERAND (t, 1)))
12453 {
12454 error_at (OMP_CLAUSE_LOCATION (c),
12455 "bit-field %qE in %qs clause",
12456 t, omp_clause_code_name[OMP_CLAUSE_CODE (c)]);
12457 return error_mark_node;
12458 }
12459 while (TREE_CODE (t) == COMPONENT_REF)
12460 {
12461 if (TREE_CODE (TREE_TYPE (TREE_OPERAND (t, 0))) == UNION_TYPE)
12462 {
12463 error_at (OMP_CLAUSE_LOCATION (c),
12464 "%qE is a member of a union", t);
12465 return error_mark_node;
12466 }
12467 t = TREE_OPERAND (t, 0);
12468 }
12469 }
12470 if (!VAR_P (t) && TREE_CODE (t) != PARM_DECL)
12471 {
12472 if (DECL_P (t))
12473 error_at (OMP_CLAUSE_LOCATION (c),
12474 "%qD is not a variable in %qs clause", t,
12475 omp_clause_code_name[OMP_CLAUSE_CODE (c)]);
12476 else
12477 error_at (OMP_CLAUSE_LOCATION (c),
12478 "%qE is not a variable in %qs clause", t,
12479 omp_clause_code_name[OMP_CLAUSE_CODE (c)]);
12480 return error_mark_node;
12481 }
12482 else if (OMP_CLAUSE_CODE (c) != OMP_CLAUSE_DEPEND
12483 && TYPE_ATOMIC (TREE_TYPE (t)))
12484 {
12485 error_at (OMP_CLAUSE_LOCATION (c), "%<_Atomic%> %qD in %qs clause",
12486 t, omp_clause_code_name[OMP_CLAUSE_CODE (c)]);
12487 return error_mark_node;
12488 }
12489 else if (OMP_CLAUSE_CODE (c) != OMP_CLAUSE_DEPEND
12490 && VAR_P (t)
12491 && DECL_THREAD_LOCAL_P (t))
12492 {
12493 error_at (OMP_CLAUSE_LOCATION (c),
12494 "%qD is threadprivate variable in %qs clause", t,
12495 omp_clause_code_name[OMP_CLAUSE_CODE (c)]);
12496 return error_mark_node;
12497 }
12498 if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_DEPEND
12499 && TYPE_ATOMIC (TREE_TYPE (t))
12500 && POINTER_TYPE_P (TREE_TYPE (t)))
12501 {
12502 /* If the array section is pointer based and the pointer
12503 itself is _Atomic qualified, we need to atomically load
12504 the pointer. */
12505 c_expr expr;
12506 memset (&expr, 0, sizeof (expr));
12507 expr.value = ret;
12508 expr = convert_lvalue_to_rvalue (OMP_CLAUSE_LOCATION (c),
12509 expr, false, false);
12510 ret = expr.value;
12511 }
12512 return ret;
12513 }
12514
12515 ret = handle_omp_array_sections_1 (c, TREE_CHAIN (t), types,
12516 maybe_zero_len, first_non_one, ort);
12517 if (ret == error_mark_node || ret == NULL_TREE)
12518 return ret;
12519
12520 type = TREE_TYPE (ret);
12521 low_bound = TREE_PURPOSE (t);
12522 length = TREE_VALUE (t);
12523
12524 if (low_bound == error_mark_node || length == error_mark_node)
12525 return error_mark_node;
12526
12527 if (low_bound && !INTEGRAL_TYPE_P (TREE_TYPE (low_bound)))
12528 {
12529 error_at (OMP_CLAUSE_LOCATION (c),
12530 "low bound %qE of array section does not have integral type",
12531 low_bound);
12532 return error_mark_node;
12533 }
12534 if (length && !INTEGRAL_TYPE_P (TREE_TYPE (length)))
12535 {
12536 error_at (OMP_CLAUSE_LOCATION (c),
12537 "length %qE of array section does not have integral type",
12538 length);
12539 return error_mark_node;
12540 }
12541 if (low_bound
12542 && TREE_CODE (low_bound) == INTEGER_CST
12543 && TYPE_PRECISION (TREE_TYPE (low_bound))
12544 > TYPE_PRECISION (sizetype))
12545 low_bound = fold_convert (sizetype, low_bound);
12546 if (length
12547 && TREE_CODE (length) == INTEGER_CST
12548 && TYPE_PRECISION (TREE_TYPE (length))
12549 > TYPE_PRECISION (sizetype))
12550 length = fold_convert (sizetype, length);
12551 if (low_bound == NULL_TREE)
12552 low_bound = integer_zero_node;
12553
12554 if (length != NULL_TREE)
12555 {
12556 if (!integer_nonzerop (length))
12557 {
12558 if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_DEPEND
12559 || OMP_CLAUSE_CODE (c) == OMP_CLAUSE_REDUCTION)
12560 {
12561 if (integer_zerop (length))
12562 {
12563 error_at (OMP_CLAUSE_LOCATION (c),
12564 "zero length array section in %qs clause",
12565 omp_clause_code_name[OMP_CLAUSE_CODE (c)]);
12566 return error_mark_node;
12567 }
12568 }
12569 else
12570 maybe_zero_len = true;
12571 }
12572 if (first_non_one == types.length ()
12573 && (TREE_CODE (length) != INTEGER_CST || integer_onep (length)))
12574 first_non_one++;
12575 }
12576 if (TREE_CODE (type) == ARRAY_TYPE)
12577 {
12578 if (length == NULL_TREE
12579 && (TYPE_DOMAIN (type) == NULL_TREE
12580 || TYPE_MAX_VALUE (TYPE_DOMAIN (type)) == NULL_TREE))
12581 {
12582 error_at (OMP_CLAUSE_LOCATION (c),
12583 "for unknown bound array type length expression must "
12584 "be specified");
12585 return error_mark_node;
12586 }
12587 if (TREE_CODE (low_bound) == INTEGER_CST
12588 && tree_int_cst_sgn (low_bound) == -1)
12589 {
12590 error_at (OMP_CLAUSE_LOCATION (c),
12591 "negative low bound in array section in %qs clause",
12592 omp_clause_code_name[OMP_CLAUSE_CODE (c)]);
12593 return error_mark_node;
12594 }
12595 if (length != NULL_TREE
12596 && TREE_CODE (length) == INTEGER_CST
12597 && tree_int_cst_sgn (length) == -1)
12598 {
12599 error_at (OMP_CLAUSE_LOCATION (c),
12600 "negative length in array section in %qs clause",
12601 omp_clause_code_name[OMP_CLAUSE_CODE (c)]);
12602 return error_mark_node;
12603 }
12604 if (TYPE_DOMAIN (type)
12605 && TYPE_MAX_VALUE (TYPE_DOMAIN (type))
12606 && TREE_CODE (TYPE_MAX_VALUE (TYPE_DOMAIN (type)))
12607 == INTEGER_CST)
12608 {
12609 tree size
12610 = fold_convert (sizetype, TYPE_MAX_VALUE (TYPE_DOMAIN (type)));
12611 size = size_binop (PLUS_EXPR, size, size_one_node);
12612 if (TREE_CODE (low_bound) == INTEGER_CST)
12613 {
12614 if (tree_int_cst_lt (size, low_bound))
12615 {
12616 error_at (OMP_CLAUSE_LOCATION (c),
12617 "low bound %qE above array section size "
12618 "in %qs clause", low_bound,
12619 omp_clause_code_name[OMP_CLAUSE_CODE (c)]);
12620 return error_mark_node;
12621 }
12622 if (tree_int_cst_equal (size, low_bound))
12623 {
12624 if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_DEPEND
12625 || OMP_CLAUSE_CODE (c) == OMP_CLAUSE_REDUCTION)
12626 {
12627 error_at (OMP_CLAUSE_LOCATION (c),
12628 "zero length array section in %qs clause",
12629 omp_clause_code_name[OMP_CLAUSE_CODE (c)]);
12630 return error_mark_node;
12631 }
12632 maybe_zero_len = true;
12633 }
12634 else if (length == NULL_TREE
12635 && first_non_one == types.length ()
12636 && tree_int_cst_equal
12637 (TYPE_MAX_VALUE (TYPE_DOMAIN (type)),
12638 low_bound))
12639 first_non_one++;
12640 }
12641 else if (length == NULL_TREE)
12642 {
12643 if (OMP_CLAUSE_CODE (c) != OMP_CLAUSE_DEPEND
12644 && OMP_CLAUSE_CODE (c) != OMP_CLAUSE_REDUCTION)
12645 maybe_zero_len = true;
12646 if (first_non_one == types.length ())
12647 first_non_one++;
12648 }
12649 if (length && TREE_CODE (length) == INTEGER_CST)
12650 {
12651 if (tree_int_cst_lt (size, length))
12652 {
12653 error_at (OMP_CLAUSE_LOCATION (c),
12654 "length %qE above array section size "
12655 "in %qs clause", length,
12656 omp_clause_code_name[OMP_CLAUSE_CODE (c)]);
12657 return error_mark_node;
12658 }
12659 if (TREE_CODE (low_bound) == INTEGER_CST)
12660 {
12661 tree lbpluslen
12662 = size_binop (PLUS_EXPR,
12663 fold_convert (sizetype, low_bound),
12664 fold_convert (sizetype, length));
12665 if (TREE_CODE (lbpluslen) == INTEGER_CST
12666 && tree_int_cst_lt (size, lbpluslen))
12667 {
12668 error_at (OMP_CLAUSE_LOCATION (c),
12669 "high bound %qE above array section size "
12670 "in %qs clause", lbpluslen,
12671 omp_clause_code_name[OMP_CLAUSE_CODE (c)]);
12672 return error_mark_node;
12673 }
12674 }
12675 }
12676 }
12677 else if (length == NULL_TREE)
12678 {
12679 if (OMP_CLAUSE_CODE (c) != OMP_CLAUSE_DEPEND
12680 && OMP_CLAUSE_CODE (c) != OMP_CLAUSE_REDUCTION)
12681 maybe_zero_len = true;
12682 if (first_non_one == types.length ())
12683 first_non_one++;
12684 }
12685
12686 /* For [lb:] we will need to evaluate lb more than once. */
12687 if (length == NULL_TREE && OMP_CLAUSE_CODE (c) != OMP_CLAUSE_DEPEND)
12688 {
12689 tree lb = save_expr (low_bound);
12690 if (lb != low_bound)
12691 {
12692 TREE_PURPOSE (t) = lb;
12693 low_bound = lb;
12694 }
12695 }
12696 }
12697 else if (TREE_CODE (type) == POINTER_TYPE)
12698 {
12699 if (length == NULL_TREE)
12700 {
12701 error_at (OMP_CLAUSE_LOCATION (c),
12702 "for pointer type length expression must be specified");
12703 return error_mark_node;
12704 }
12705 if (length != NULL_TREE
12706 && TREE_CODE (length) == INTEGER_CST
12707 && tree_int_cst_sgn (length) == -1)
12708 {
12709 error_at (OMP_CLAUSE_LOCATION (c),
12710 "negative length in array section in %qs clause",
12711 omp_clause_code_name[OMP_CLAUSE_CODE (c)]);
12712 return error_mark_node;
12713 }
12714 /* If there is a pointer type anywhere but in the very first
12715 array-section-subscript, the array section can't be contiguous. */
12716 if (OMP_CLAUSE_CODE (c) != OMP_CLAUSE_DEPEND
12717 && TREE_CODE (TREE_CHAIN (t)) == TREE_LIST)
12718 {
12719 error_at (OMP_CLAUSE_LOCATION (c),
12720 "array section is not contiguous in %qs clause",
12721 omp_clause_code_name[OMP_CLAUSE_CODE (c)]);
12722 return error_mark_node;
12723 }
12724 }
12725 else
12726 {
12727 error_at (OMP_CLAUSE_LOCATION (c),
12728 "%qE does not have pointer or array type", ret);
12729 return error_mark_node;
12730 }
12731 if (OMP_CLAUSE_CODE (c) != OMP_CLAUSE_DEPEND)
12732 types.safe_push (TREE_TYPE (ret));
12733 /* We will need to evaluate lb more than once. */
12734 tree lb = save_expr (low_bound);
12735 if (lb != low_bound)
12736 {
12737 TREE_PURPOSE (t) = lb;
12738 low_bound = lb;
12739 }
12740 ret = build_array_ref (OMP_CLAUSE_LOCATION (c), ret, low_bound);
12741 return ret;
12742 }
12743
12744 /* Handle array sections for clause C. */
12745
12746 static bool
12747 handle_omp_array_sections (tree c, enum c_omp_region_type ort)
12748 {
12749 bool maybe_zero_len = false;
12750 unsigned int first_non_one = 0;
12751 auto_vec<tree, 10> types;
12752 tree first = handle_omp_array_sections_1 (c, OMP_CLAUSE_DECL (c), types,
12753 maybe_zero_len, first_non_one,
12754 ort);
12755 if (first == error_mark_node)
12756 return true;
12757 if (first == NULL_TREE)
12758 return false;
12759 if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_DEPEND)
12760 {
12761 tree t = OMP_CLAUSE_DECL (c);
12762 tree tem = NULL_TREE;
12763 /* Need to evaluate side effects in the length expressions
12764 if any. */
12765 while (TREE_CODE (t) == TREE_LIST)
12766 {
12767 if (TREE_VALUE (t) && TREE_SIDE_EFFECTS (TREE_VALUE (t)))
12768 {
12769 if (tem == NULL_TREE)
12770 tem = TREE_VALUE (t);
12771 else
12772 tem = build2 (COMPOUND_EXPR, TREE_TYPE (tem),
12773 TREE_VALUE (t), tem);
12774 }
12775 t = TREE_CHAIN (t);
12776 }
12777 if (tem)
12778 first = build2 (COMPOUND_EXPR, TREE_TYPE (first), tem, first);
12779 first = c_fully_fold (first, false, NULL, true);
12780 OMP_CLAUSE_DECL (c) = first;
12781 }
12782 else
12783 {
12784 unsigned int num = types.length (), i;
12785 tree t, side_effects = NULL_TREE, size = NULL_TREE;
12786 tree condition = NULL_TREE;
12787
12788 if (int_size_in_bytes (TREE_TYPE (first)) <= 0)
12789 maybe_zero_len = true;
12790
12791 for (i = num, t = OMP_CLAUSE_DECL (c); i > 0;
12792 t = TREE_CHAIN (t))
12793 {
12794 tree low_bound = TREE_PURPOSE (t);
12795 tree length = TREE_VALUE (t);
12796
12797 i--;
12798 if (low_bound
12799 && TREE_CODE (low_bound) == INTEGER_CST
12800 && TYPE_PRECISION (TREE_TYPE (low_bound))
12801 > TYPE_PRECISION (sizetype))
12802 low_bound = fold_convert (sizetype, low_bound);
12803 if (length
12804 && TREE_CODE (length) == INTEGER_CST
12805 && TYPE_PRECISION (TREE_TYPE (length))
12806 > TYPE_PRECISION (sizetype))
12807 length = fold_convert (sizetype, length);
12808 if (low_bound == NULL_TREE)
12809 low_bound = integer_zero_node;
12810 if (!maybe_zero_len && i > first_non_one)
12811 {
12812 if (integer_nonzerop (low_bound))
12813 goto do_warn_noncontiguous;
12814 if (length != NULL_TREE
12815 && TREE_CODE (length) == INTEGER_CST
12816 && TYPE_DOMAIN (types[i])
12817 && TYPE_MAX_VALUE (TYPE_DOMAIN (types[i]))
12818 && TREE_CODE (TYPE_MAX_VALUE (TYPE_DOMAIN (types[i])))
12819 == INTEGER_CST)
12820 {
12821 tree size;
12822 size = size_binop (PLUS_EXPR,
12823 TYPE_MAX_VALUE (TYPE_DOMAIN (types[i])),
12824 size_one_node);
12825 if (!tree_int_cst_equal (length, size))
12826 {
12827 do_warn_noncontiguous:
12828 error_at (OMP_CLAUSE_LOCATION (c),
12829 "array section is not contiguous in %qs "
12830 "clause",
12831 omp_clause_code_name[OMP_CLAUSE_CODE (c)]);
12832 return true;
12833 }
12834 }
12835 if (length != NULL_TREE
12836 && TREE_SIDE_EFFECTS (length))
12837 {
12838 if (side_effects == NULL_TREE)
12839 side_effects = length;
12840 else
12841 side_effects = build2 (COMPOUND_EXPR,
12842 TREE_TYPE (side_effects),
12843 length, side_effects);
12844 }
12845 }
12846 else
12847 {
12848 tree l;
12849
12850 if (i > first_non_one
12851 && ((length && integer_nonzerop (length))
12852 || OMP_CLAUSE_CODE (c) == OMP_CLAUSE_REDUCTION))
12853 continue;
12854 if (length)
12855 l = fold_convert (sizetype, length);
12856 else
12857 {
12858 l = size_binop (PLUS_EXPR,
12859 TYPE_MAX_VALUE (TYPE_DOMAIN (types[i])),
12860 size_one_node);
12861 l = size_binop (MINUS_EXPR, l,
12862 fold_convert (sizetype, low_bound));
12863 }
12864 if (i > first_non_one)
12865 {
12866 l = fold_build2 (NE_EXPR, boolean_type_node, l,
12867 size_zero_node);
12868 if (condition == NULL_TREE)
12869 condition = l;
12870 else
12871 condition = fold_build2 (BIT_AND_EXPR, boolean_type_node,
12872 l, condition);
12873 }
12874 else if (size == NULL_TREE)
12875 {
12876 size = size_in_bytes (TREE_TYPE (types[i]));
12877 tree eltype = TREE_TYPE (types[num - 1]);
12878 while (TREE_CODE (eltype) == ARRAY_TYPE)
12879 eltype = TREE_TYPE (eltype);
12880 if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_REDUCTION)
12881 {
12882 if (integer_zerop (size)
12883 || integer_zerop (size_in_bytes (eltype)))
12884 {
12885 error_at (OMP_CLAUSE_LOCATION (c),
12886 "zero length array section in %qs clause",
12887 omp_clause_code_name[OMP_CLAUSE_CODE (c)]);
12888 return error_mark_node;
12889 }
12890 size = size_binop (EXACT_DIV_EXPR, size,
12891 size_in_bytes (eltype));
12892 }
12893 size = size_binop (MULT_EXPR, size, l);
12894 if (condition)
12895 size = fold_build3 (COND_EXPR, sizetype, condition,
12896 size, size_zero_node);
12897 }
12898 else
12899 size = size_binop (MULT_EXPR, size, l);
12900 }
12901 }
12902 if (side_effects)
12903 size = build2 (COMPOUND_EXPR, sizetype, side_effects, size);
12904 if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_REDUCTION)
12905 {
12906 size = size_binop (MINUS_EXPR, size, size_one_node);
12907 size = c_fully_fold (size, false, NULL);
12908 tree index_type = build_index_type (size);
12909 tree eltype = TREE_TYPE (first);
12910 while (TREE_CODE (eltype) == ARRAY_TYPE)
12911 eltype = TREE_TYPE (eltype);
12912 tree type = build_array_type (eltype, index_type);
12913 tree ptype = build_pointer_type (eltype);
12914 if (TREE_CODE (TREE_TYPE (t)) == ARRAY_TYPE)
12915 t = build_fold_addr_expr (t);
12916 tree t2 = build_fold_addr_expr (first);
12917 t2 = fold_convert_loc (OMP_CLAUSE_LOCATION (c),
12918 ptrdiff_type_node, t2);
12919 t2 = fold_build2_loc (OMP_CLAUSE_LOCATION (c), MINUS_EXPR,
12920 ptrdiff_type_node, t2,
12921 fold_convert_loc (OMP_CLAUSE_LOCATION (c),
12922 ptrdiff_type_node, t));
12923 t2 = c_fully_fold (t2, false, NULL);
12924 if (tree_fits_shwi_p (t2))
12925 t = build2 (MEM_REF, type, t,
12926 build_int_cst (ptype, tree_to_shwi (t2)));
12927 else
12928 {
12929 t2 = fold_convert_loc (OMP_CLAUSE_LOCATION (c), sizetype, t2);
12930 t = build2_loc (OMP_CLAUSE_LOCATION (c), POINTER_PLUS_EXPR,
12931 TREE_TYPE (t), t, t2);
12932 t = build2 (MEM_REF, type, t, build_int_cst (ptype, 0));
12933 }
12934 OMP_CLAUSE_DECL (c) = t;
12935 return false;
12936 }
12937 first = c_fully_fold (first, false, NULL);
12938 OMP_CLAUSE_DECL (c) = first;
12939 if (size)
12940 size = c_fully_fold (size, false, NULL);
12941 OMP_CLAUSE_SIZE (c) = size;
12942 if (OMP_CLAUSE_CODE (c) != OMP_CLAUSE_MAP
12943 || (TREE_CODE (t) == COMPONENT_REF
12944 && TREE_CODE (TREE_TYPE (t)) == ARRAY_TYPE))
12945 return false;
12946 gcc_assert (OMP_CLAUSE_MAP_KIND (c) != GOMP_MAP_FORCE_DEVICEPTR);
12947 if (ort == C_ORT_OMP || ort == C_ORT_ACC)
12948 switch (OMP_CLAUSE_MAP_KIND (c))
12949 {
12950 case GOMP_MAP_ALLOC:
12951 case GOMP_MAP_TO:
12952 case GOMP_MAP_FROM:
12953 case GOMP_MAP_TOFROM:
12954 case GOMP_MAP_ALWAYS_TO:
12955 case GOMP_MAP_ALWAYS_FROM:
12956 case GOMP_MAP_ALWAYS_TOFROM:
12957 case GOMP_MAP_RELEASE:
12958 case GOMP_MAP_DELETE:
12959 case GOMP_MAP_FORCE_TO:
12960 case GOMP_MAP_FORCE_FROM:
12961 case GOMP_MAP_FORCE_TOFROM:
12962 case GOMP_MAP_FORCE_PRESENT:
12963 OMP_CLAUSE_MAP_MAYBE_ZERO_LENGTH_ARRAY_SECTION (c) = 1;
12964 break;
12965 default:
12966 break;
12967 }
12968 tree c2 = build_omp_clause (OMP_CLAUSE_LOCATION (c), OMP_CLAUSE_MAP);
12969 if (ort != C_ORT_OMP && ort != C_ORT_ACC)
12970 OMP_CLAUSE_SET_MAP_KIND (c2, GOMP_MAP_POINTER);
12971 else if (TREE_CODE (t) == COMPONENT_REF)
12972 OMP_CLAUSE_SET_MAP_KIND (c2, GOMP_MAP_ALWAYS_POINTER);
12973 else
12974 OMP_CLAUSE_SET_MAP_KIND (c2, GOMP_MAP_FIRSTPRIVATE_POINTER);
12975 if (OMP_CLAUSE_MAP_KIND (c2) != GOMP_MAP_FIRSTPRIVATE_POINTER
12976 && !c_mark_addressable (t))
12977 return false;
12978 OMP_CLAUSE_DECL (c2) = t;
12979 t = build_fold_addr_expr (first);
12980 t = fold_convert_loc (OMP_CLAUSE_LOCATION (c), ptrdiff_type_node, t);
12981 tree ptr = OMP_CLAUSE_DECL (c2);
12982 if (!POINTER_TYPE_P (TREE_TYPE (ptr)))
12983 ptr = build_fold_addr_expr (ptr);
12984 t = fold_build2_loc (OMP_CLAUSE_LOCATION (c), MINUS_EXPR,
12985 ptrdiff_type_node, t,
12986 fold_convert_loc (OMP_CLAUSE_LOCATION (c),
12987 ptrdiff_type_node, ptr));
12988 t = c_fully_fold (t, false, NULL);
12989 OMP_CLAUSE_SIZE (c2) = t;
12990 OMP_CLAUSE_CHAIN (c2) = OMP_CLAUSE_CHAIN (c);
12991 OMP_CLAUSE_CHAIN (c) = c2;
12992 }
12993 return false;
12994 }
12995
12996 /* Helper function of finish_omp_clauses. Clone STMT as if we were making
12997 an inline call. But, remap
12998 the OMP_DECL1 VAR_DECL (omp_out resp. omp_orig) to PLACEHOLDER
12999 and OMP_DECL2 VAR_DECL (omp_in resp. omp_priv) to DECL. */
13000
13001 static tree
13002 c_clone_omp_udr (tree stmt, tree omp_decl1, tree omp_decl2,
13003 tree decl, tree placeholder)
13004 {
13005 copy_body_data id;
13006 hash_map<tree, tree> decl_map;
13007
13008 decl_map.put (omp_decl1, placeholder);
13009 decl_map.put (omp_decl2, decl);
13010 memset (&id, 0, sizeof (id));
13011 id.src_fn = DECL_CONTEXT (omp_decl1);
13012 id.dst_fn = current_function_decl;
13013 id.src_cfun = DECL_STRUCT_FUNCTION (id.src_fn);
13014 id.decl_map = &decl_map;
13015
13016 id.copy_decl = copy_decl_no_change;
13017 id.transform_call_graph_edges = CB_CGE_DUPLICATE;
13018 id.transform_new_cfg = true;
13019 id.transform_return_to_modify = false;
13020 id.transform_lang_insert_block = NULL;
13021 id.eh_lp_nr = 0;
13022 walk_tree (&stmt, copy_tree_body_r, &id, NULL);
13023 return stmt;
13024 }
13025
13026 /* Helper function of c_finish_omp_clauses, called via walk_tree.
13027 Find OMP_CLAUSE_PLACEHOLDER (passed in DATA) in *TP. */
13028
13029 static tree
13030 c_find_omp_placeholder_r (tree *tp, int *, void *data)
13031 {
13032 if (*tp == (tree) data)
13033 return *tp;
13034 return NULL_TREE;
13035 }
13036
13037 /* For all elements of CLAUSES, validate them against their constraints.
13038 Remove any elements from the list that are invalid. */
13039
13040 tree
13041 c_finish_omp_clauses (tree clauses, enum c_omp_region_type ort)
13042 {
13043 bitmap_head generic_head, firstprivate_head, lastprivate_head;
13044 bitmap_head aligned_head, map_head, map_field_head, oacc_reduction_head;
13045 tree c, t, type, *pc;
13046 tree simdlen = NULL_TREE, safelen = NULL_TREE;
13047 bool branch_seen = false;
13048 bool copyprivate_seen = false;
13049 bool linear_variable_step_check = false;
13050 tree *nowait_clause = NULL;
13051 bool ordered_seen = false;
13052 tree schedule_clause = NULL_TREE;
13053 bool oacc_async = false;
13054
13055 bitmap_obstack_initialize (NULL);
13056 bitmap_initialize (&generic_head, &bitmap_default_obstack);
13057 bitmap_initialize (&firstprivate_head, &bitmap_default_obstack);
13058 bitmap_initialize (&lastprivate_head, &bitmap_default_obstack);
13059 bitmap_initialize (&aligned_head, &bitmap_default_obstack);
13060 bitmap_initialize (&map_head, &bitmap_default_obstack);
13061 bitmap_initialize (&map_field_head, &bitmap_default_obstack);
13062 bitmap_initialize (&oacc_reduction_head, &bitmap_default_obstack);
13063
13064 if (ort & C_ORT_ACC)
13065 for (c = clauses; c; c = OMP_CLAUSE_CHAIN (c))
13066 if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_ASYNC)
13067 {
13068 oacc_async = true;
13069 break;
13070 }
13071
13072 for (pc = &clauses, c = clauses; c ; c = *pc)
13073 {
13074 bool remove = false;
13075 bool need_complete = false;
13076 bool need_implicitly_determined = false;
13077
13078 switch (OMP_CLAUSE_CODE (c))
13079 {
13080 case OMP_CLAUSE_SHARED:
13081 need_implicitly_determined = true;
13082 goto check_dup_generic;
13083
13084 case OMP_CLAUSE_PRIVATE:
13085 need_complete = true;
13086 need_implicitly_determined = true;
13087 goto check_dup_generic;
13088
13089 case OMP_CLAUSE_REDUCTION:
13090 need_implicitly_determined = true;
13091 t = OMP_CLAUSE_DECL (c);
13092 if (TREE_CODE (t) == TREE_LIST)
13093 {
13094 if (handle_omp_array_sections (c, ort))
13095 {
13096 remove = true;
13097 break;
13098 }
13099
13100 t = OMP_CLAUSE_DECL (c);
13101 }
13102 t = require_complete_type (OMP_CLAUSE_LOCATION (c), t);
13103 if (t == error_mark_node)
13104 {
13105 remove = true;
13106 break;
13107 }
13108 if (oacc_async)
13109 c_mark_addressable (t);
13110 type = TREE_TYPE (t);
13111 if (TREE_CODE (t) == MEM_REF)
13112 type = TREE_TYPE (type);
13113 if (TREE_CODE (type) == ARRAY_TYPE)
13114 {
13115 tree oatype = type;
13116 gcc_assert (TREE_CODE (t) != MEM_REF);
13117 while (TREE_CODE (type) == ARRAY_TYPE)
13118 type = TREE_TYPE (type);
13119 if (integer_zerop (TYPE_SIZE_UNIT (type)))
13120 {
13121 error_at (OMP_CLAUSE_LOCATION (c),
13122 "%qD in %<reduction%> clause is a zero size array",
13123 t);
13124 remove = true;
13125 break;
13126 }
13127 tree size = size_binop (EXACT_DIV_EXPR, TYPE_SIZE_UNIT (oatype),
13128 TYPE_SIZE_UNIT (type));
13129 if (integer_zerop (size))
13130 {
13131 error_at (OMP_CLAUSE_LOCATION (c),
13132 "%qD in %<reduction%> clause is a zero size array",
13133 t);
13134 remove = true;
13135 break;
13136 }
13137 size = size_binop (MINUS_EXPR, size, size_one_node);
13138 tree index_type = build_index_type (size);
13139 tree atype = build_array_type (type, index_type);
13140 tree ptype = build_pointer_type (type);
13141 if (TREE_CODE (TREE_TYPE (t)) == ARRAY_TYPE)
13142 t = build_fold_addr_expr (t);
13143 t = build2 (MEM_REF, atype, t, build_int_cst (ptype, 0));
13144 OMP_CLAUSE_DECL (c) = t;
13145 }
13146 if (TYPE_ATOMIC (type))
13147 {
13148 error_at (OMP_CLAUSE_LOCATION (c),
13149 "%<_Atomic%> %qE in %<reduction%> clause", t);
13150 remove = true;
13151 break;
13152 }
13153 if (OMP_CLAUSE_REDUCTION_PLACEHOLDER (c) == NULL_TREE
13154 && (FLOAT_TYPE_P (type)
13155 || TREE_CODE (type) == COMPLEX_TYPE))
13156 {
13157 enum tree_code r_code = OMP_CLAUSE_REDUCTION_CODE (c);
13158 const char *r_name = NULL;
13159
13160 switch (r_code)
13161 {
13162 case PLUS_EXPR:
13163 case MULT_EXPR:
13164 case MINUS_EXPR:
13165 break;
13166 case MIN_EXPR:
13167 if (TREE_CODE (type) == COMPLEX_TYPE)
13168 r_name = "min";
13169 break;
13170 case MAX_EXPR:
13171 if (TREE_CODE (type) == COMPLEX_TYPE)
13172 r_name = "max";
13173 break;
13174 case BIT_AND_EXPR:
13175 r_name = "&";
13176 break;
13177 case BIT_XOR_EXPR:
13178 r_name = "^";
13179 break;
13180 case BIT_IOR_EXPR:
13181 r_name = "|";
13182 break;
13183 case TRUTH_ANDIF_EXPR:
13184 if (FLOAT_TYPE_P (type))
13185 r_name = "&&";
13186 break;
13187 case TRUTH_ORIF_EXPR:
13188 if (FLOAT_TYPE_P (type))
13189 r_name = "||";
13190 break;
13191 default:
13192 gcc_unreachable ();
13193 }
13194 if (r_name)
13195 {
13196 error_at (OMP_CLAUSE_LOCATION (c),
13197 "%qE has invalid type for %<reduction(%s)%>",
13198 t, r_name);
13199 remove = true;
13200 break;
13201 }
13202 }
13203 else if (OMP_CLAUSE_REDUCTION_PLACEHOLDER (c) == error_mark_node)
13204 {
13205 error_at (OMP_CLAUSE_LOCATION (c),
13206 "user defined reduction not found for %qE", t);
13207 remove = true;
13208 break;
13209 }
13210 else if (OMP_CLAUSE_REDUCTION_PLACEHOLDER (c))
13211 {
13212 tree list = OMP_CLAUSE_REDUCTION_PLACEHOLDER (c);
13213 type = TYPE_MAIN_VARIANT (type);
13214 tree placeholder = build_decl (OMP_CLAUSE_LOCATION (c),
13215 VAR_DECL, NULL_TREE, type);
13216 tree decl_placeholder = NULL_TREE;
13217 OMP_CLAUSE_REDUCTION_PLACEHOLDER (c) = placeholder;
13218 DECL_ARTIFICIAL (placeholder) = 1;
13219 DECL_IGNORED_P (placeholder) = 1;
13220 if (TREE_CODE (t) == MEM_REF)
13221 {
13222 decl_placeholder = build_decl (OMP_CLAUSE_LOCATION (c),
13223 VAR_DECL, NULL_TREE, type);
13224 OMP_CLAUSE_REDUCTION_DECL_PLACEHOLDER (c) = decl_placeholder;
13225 DECL_ARTIFICIAL (decl_placeholder) = 1;
13226 DECL_IGNORED_P (decl_placeholder) = 1;
13227 }
13228 if (TREE_ADDRESSABLE (TREE_VEC_ELT (list, 0)))
13229 c_mark_addressable (placeholder);
13230 if (TREE_ADDRESSABLE (TREE_VEC_ELT (list, 1)))
13231 c_mark_addressable (decl_placeholder ? decl_placeholder
13232 : OMP_CLAUSE_DECL (c));
13233 OMP_CLAUSE_REDUCTION_MERGE (c)
13234 = c_clone_omp_udr (TREE_VEC_ELT (list, 2),
13235 TREE_VEC_ELT (list, 0),
13236 TREE_VEC_ELT (list, 1),
13237 decl_placeholder ? decl_placeholder
13238 : OMP_CLAUSE_DECL (c), placeholder);
13239 OMP_CLAUSE_REDUCTION_MERGE (c)
13240 = build3_loc (OMP_CLAUSE_LOCATION (c), BIND_EXPR,
13241 void_type_node, NULL_TREE,
13242 OMP_CLAUSE_REDUCTION_MERGE (c), NULL_TREE);
13243 TREE_SIDE_EFFECTS (OMP_CLAUSE_REDUCTION_MERGE (c)) = 1;
13244 if (TREE_VEC_LENGTH (list) == 6)
13245 {
13246 if (TREE_ADDRESSABLE (TREE_VEC_ELT (list, 3)))
13247 c_mark_addressable (decl_placeholder ? decl_placeholder
13248 : OMP_CLAUSE_DECL (c));
13249 if (TREE_ADDRESSABLE (TREE_VEC_ELT (list, 4)))
13250 c_mark_addressable (placeholder);
13251 tree init = TREE_VEC_ELT (list, 5);
13252 if (init == error_mark_node)
13253 init = DECL_INITIAL (TREE_VEC_ELT (list, 3));
13254 OMP_CLAUSE_REDUCTION_INIT (c)
13255 = c_clone_omp_udr (init, TREE_VEC_ELT (list, 4),
13256 TREE_VEC_ELT (list, 3),
13257 decl_placeholder ? decl_placeholder
13258 : OMP_CLAUSE_DECL (c), placeholder);
13259 if (TREE_VEC_ELT (list, 5) == error_mark_node)
13260 {
13261 tree v = decl_placeholder ? decl_placeholder : t;
13262 OMP_CLAUSE_REDUCTION_INIT (c)
13263 = build2 (INIT_EXPR, TREE_TYPE (v), v,
13264 OMP_CLAUSE_REDUCTION_INIT (c));
13265 }
13266 if (walk_tree (&OMP_CLAUSE_REDUCTION_INIT (c),
13267 c_find_omp_placeholder_r,
13268 placeholder, NULL))
13269 OMP_CLAUSE_REDUCTION_OMP_ORIG_REF (c) = 1;
13270 }
13271 else
13272 {
13273 tree init;
13274 tree v = decl_placeholder ? decl_placeholder : t;
13275 if (AGGREGATE_TYPE_P (TREE_TYPE (v)))
13276 init = build_constructor (TREE_TYPE (v), NULL);
13277 else
13278 init = fold_convert (TREE_TYPE (v), integer_zero_node);
13279 OMP_CLAUSE_REDUCTION_INIT (c)
13280 = build2 (INIT_EXPR, TREE_TYPE (v), v, init);
13281 }
13282 OMP_CLAUSE_REDUCTION_INIT (c)
13283 = build3_loc (OMP_CLAUSE_LOCATION (c), BIND_EXPR,
13284 void_type_node, NULL_TREE,
13285 OMP_CLAUSE_REDUCTION_INIT (c), NULL_TREE);
13286 TREE_SIDE_EFFECTS (OMP_CLAUSE_REDUCTION_INIT (c)) = 1;
13287 }
13288 if (TREE_CODE (t) == MEM_REF)
13289 {
13290 if (TYPE_SIZE_UNIT (TREE_TYPE (TREE_TYPE (t))) == NULL_TREE
13291 || TREE_CODE (TYPE_SIZE_UNIT (TREE_TYPE (TREE_TYPE (t))))
13292 != INTEGER_CST)
13293 {
13294 sorry ("variable length element type in array "
13295 "%<reduction%> clause");
13296 remove = true;
13297 break;
13298 }
13299 t = TREE_OPERAND (t, 0);
13300 if (TREE_CODE (t) == POINTER_PLUS_EXPR)
13301 t = TREE_OPERAND (t, 0);
13302 if (TREE_CODE (t) == ADDR_EXPR)
13303 t = TREE_OPERAND (t, 0);
13304 }
13305 goto check_dup_generic_t;
13306
13307 case OMP_CLAUSE_COPYPRIVATE:
13308 copyprivate_seen = true;
13309 if (nowait_clause)
13310 {
13311 error_at (OMP_CLAUSE_LOCATION (*nowait_clause),
13312 "%<nowait%> clause must not be used together "
13313 "with %<copyprivate%>");
13314 *nowait_clause = OMP_CLAUSE_CHAIN (*nowait_clause);
13315 nowait_clause = NULL;
13316 }
13317 goto check_dup_generic;
13318
13319 case OMP_CLAUSE_COPYIN:
13320 t = OMP_CLAUSE_DECL (c);
13321 if (!VAR_P (t) || !DECL_THREAD_LOCAL_P (t))
13322 {
13323 error_at (OMP_CLAUSE_LOCATION (c),
13324 "%qE must be %<threadprivate%> for %<copyin%>", t);
13325 remove = true;
13326 break;
13327 }
13328 goto check_dup_generic;
13329
13330 case OMP_CLAUSE_LINEAR:
13331 if (ort != C_ORT_OMP_DECLARE_SIMD)
13332 need_implicitly_determined = true;
13333 t = OMP_CLAUSE_DECL (c);
13334 if (ort != C_ORT_OMP_DECLARE_SIMD
13335 && OMP_CLAUSE_LINEAR_KIND (c) != OMP_CLAUSE_LINEAR_DEFAULT)
13336 {
13337 error_at (OMP_CLAUSE_LOCATION (c),
13338 "modifier should not be specified in %<linear%> "
13339 "clause on %<simd%> or %<for%> constructs");
13340 OMP_CLAUSE_LINEAR_KIND (c) = OMP_CLAUSE_LINEAR_DEFAULT;
13341 }
13342 if (!INTEGRAL_TYPE_P (TREE_TYPE (t))
13343 && TREE_CODE (TREE_TYPE (t)) != POINTER_TYPE)
13344 {
13345 error_at (OMP_CLAUSE_LOCATION (c),
13346 "linear clause applied to non-integral non-pointer "
13347 "variable with type %qT", TREE_TYPE (t));
13348 remove = true;
13349 break;
13350 }
13351 if (TYPE_ATOMIC (TREE_TYPE (t)))
13352 {
13353 error_at (OMP_CLAUSE_LOCATION (c),
13354 "%<_Atomic%> %qD in %<linear%> clause", t);
13355 remove = true;
13356 break;
13357 }
13358 if (ort == C_ORT_OMP_DECLARE_SIMD)
13359 {
13360 tree s = OMP_CLAUSE_LINEAR_STEP (c);
13361 if (TREE_CODE (s) == PARM_DECL)
13362 {
13363 OMP_CLAUSE_LINEAR_VARIABLE_STRIDE (c) = 1;
13364 /* map_head bitmap is used as uniform_head if
13365 declare_simd. */
13366 if (!bitmap_bit_p (&map_head, DECL_UID (s)))
13367 linear_variable_step_check = true;
13368 goto check_dup_generic;
13369 }
13370 if (TREE_CODE (s) != INTEGER_CST)
13371 {
13372 error_at (OMP_CLAUSE_LOCATION (c),
13373 "%<linear%> clause step %qE is neither constant "
13374 "nor a parameter", s);
13375 remove = true;
13376 break;
13377 }
13378 }
13379 if (TREE_CODE (TREE_TYPE (OMP_CLAUSE_DECL (c))) == POINTER_TYPE)
13380 {
13381 tree s = OMP_CLAUSE_LINEAR_STEP (c);
13382 s = pointer_int_sum (OMP_CLAUSE_LOCATION (c), PLUS_EXPR,
13383 OMP_CLAUSE_DECL (c), s);
13384 s = fold_build2_loc (OMP_CLAUSE_LOCATION (c), MINUS_EXPR,
13385 sizetype, fold_convert (sizetype, s),
13386 fold_convert
13387 (sizetype, OMP_CLAUSE_DECL (c)));
13388 if (s == error_mark_node)
13389 s = size_one_node;
13390 OMP_CLAUSE_LINEAR_STEP (c) = s;
13391 }
13392 else
13393 OMP_CLAUSE_LINEAR_STEP (c)
13394 = fold_convert (TREE_TYPE (t), OMP_CLAUSE_LINEAR_STEP (c));
13395 goto check_dup_generic;
13396
13397 check_dup_generic:
13398 t = OMP_CLAUSE_DECL (c);
13399 check_dup_generic_t:
13400 if (!VAR_P (t) && TREE_CODE (t) != PARM_DECL)
13401 {
13402 error_at (OMP_CLAUSE_LOCATION (c),
13403 "%qE is not a variable in clause %qs", t,
13404 omp_clause_code_name[OMP_CLAUSE_CODE (c)]);
13405 remove = true;
13406 }
13407 else if (ort == C_ORT_ACC
13408 && OMP_CLAUSE_CODE (c) == OMP_CLAUSE_REDUCTION)
13409 {
13410 if (bitmap_bit_p (&oacc_reduction_head, DECL_UID (t)))
13411 {
13412 error ("%qD appears more than once in reduction clauses", t);
13413 remove = true;
13414 }
13415 else
13416 bitmap_set_bit (&oacc_reduction_head, DECL_UID (t));
13417 }
13418 else if (bitmap_bit_p (&generic_head, DECL_UID (t))
13419 || bitmap_bit_p (&firstprivate_head, DECL_UID (t))
13420 || bitmap_bit_p (&lastprivate_head, DECL_UID (t)))
13421 {
13422 error_at (OMP_CLAUSE_LOCATION (c),
13423 "%qE appears more than once in data clauses", t);
13424 remove = true;
13425 }
13426 else if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_PRIVATE
13427 && bitmap_bit_p (&map_head, DECL_UID (t)))
13428 {
13429 if (ort == C_ORT_ACC)
13430 error ("%qD appears more than once in data clauses", t);
13431 else
13432 error ("%qD appears both in data and map clauses", t);
13433 remove = true;
13434 }
13435 else
13436 bitmap_set_bit (&generic_head, DECL_UID (t));
13437 break;
13438
13439 case OMP_CLAUSE_FIRSTPRIVATE:
13440 t = OMP_CLAUSE_DECL (c);
13441 need_complete = true;
13442 need_implicitly_determined = true;
13443 if (!VAR_P (t) && TREE_CODE (t) != PARM_DECL)
13444 {
13445 error_at (OMP_CLAUSE_LOCATION (c),
13446 "%qE is not a variable in clause %<firstprivate%>", t);
13447 remove = true;
13448 }
13449 else if (bitmap_bit_p (&generic_head, DECL_UID (t))
13450 || bitmap_bit_p (&firstprivate_head, DECL_UID (t)))
13451 {
13452 error_at (OMP_CLAUSE_LOCATION (c),
13453 "%qE appears more than once in data clauses", t);
13454 remove = true;
13455 }
13456 else if (bitmap_bit_p (&map_head, DECL_UID (t)))
13457 {
13458 if (ort == C_ORT_ACC)
13459 error ("%qD appears more than once in data clauses", t);
13460 else
13461 error ("%qD appears both in data and map clauses", t);
13462 remove = true;
13463 }
13464 else
13465 bitmap_set_bit (&firstprivate_head, DECL_UID (t));
13466 break;
13467
13468 case OMP_CLAUSE_LASTPRIVATE:
13469 t = OMP_CLAUSE_DECL (c);
13470 need_complete = true;
13471 need_implicitly_determined = true;
13472 if (!VAR_P (t) && TREE_CODE (t) != PARM_DECL)
13473 {
13474 error_at (OMP_CLAUSE_LOCATION (c),
13475 "%qE is not a variable in clause %<lastprivate%>", t);
13476 remove = true;
13477 }
13478 else if (bitmap_bit_p (&generic_head, DECL_UID (t))
13479 || bitmap_bit_p (&lastprivate_head, DECL_UID (t)))
13480 {
13481 error_at (OMP_CLAUSE_LOCATION (c),
13482 "%qE appears more than once in data clauses", t);
13483 remove = true;
13484 }
13485 else
13486 bitmap_set_bit (&lastprivate_head, DECL_UID (t));
13487 break;
13488
13489 case OMP_CLAUSE_ALIGNED:
13490 t = OMP_CLAUSE_DECL (c);
13491 if (!VAR_P (t) && TREE_CODE (t) != PARM_DECL)
13492 {
13493 error_at (OMP_CLAUSE_LOCATION (c),
13494 "%qE is not a variable in %<aligned%> clause", t);
13495 remove = true;
13496 }
13497 else if (!POINTER_TYPE_P (TREE_TYPE (t))
13498 && TREE_CODE (TREE_TYPE (t)) != ARRAY_TYPE)
13499 {
13500 error_at (OMP_CLAUSE_LOCATION (c),
13501 "%qE in %<aligned%> clause is neither a pointer nor "
13502 "an array", t);
13503 remove = true;
13504 }
13505 else if (TYPE_ATOMIC (TREE_TYPE (t)))
13506 {
13507 error_at (OMP_CLAUSE_LOCATION (c),
13508 "%<_Atomic%> %qD in %<aligned%> clause", t);
13509 remove = true;
13510 break;
13511 }
13512 else if (bitmap_bit_p (&aligned_head, DECL_UID (t)))
13513 {
13514 error_at (OMP_CLAUSE_LOCATION (c),
13515 "%qE appears more than once in %<aligned%> clauses",
13516 t);
13517 remove = true;
13518 }
13519 else
13520 bitmap_set_bit (&aligned_head, DECL_UID (t));
13521 break;
13522
13523 case OMP_CLAUSE_DEPEND:
13524 t = OMP_CLAUSE_DECL (c);
13525 if (t == NULL_TREE)
13526 {
13527 gcc_assert (OMP_CLAUSE_DEPEND_KIND (c)
13528 == OMP_CLAUSE_DEPEND_SOURCE);
13529 break;
13530 }
13531 if (OMP_CLAUSE_DEPEND_KIND (c) == OMP_CLAUSE_DEPEND_SINK)
13532 {
13533 gcc_assert (TREE_CODE (t) == TREE_LIST);
13534 for (; t; t = TREE_CHAIN (t))
13535 {
13536 tree decl = TREE_VALUE (t);
13537 if (TREE_CODE (TREE_TYPE (decl)) == POINTER_TYPE)
13538 {
13539 tree offset = TREE_PURPOSE (t);
13540 bool neg = wi::neg_p (wi::to_wide (offset));
13541 offset = fold_unary (ABS_EXPR, TREE_TYPE (offset), offset);
13542 tree t2 = pointer_int_sum (OMP_CLAUSE_LOCATION (c),
13543 neg ? MINUS_EXPR : PLUS_EXPR,
13544 decl, offset);
13545 t2 = fold_build2_loc (OMP_CLAUSE_LOCATION (c), MINUS_EXPR,
13546 sizetype,
13547 fold_convert (sizetype, t2),
13548 fold_convert (sizetype, decl));
13549 if (t2 == error_mark_node)
13550 {
13551 remove = true;
13552 break;
13553 }
13554 TREE_PURPOSE (t) = t2;
13555 }
13556 }
13557 break;
13558 }
13559 if (TREE_CODE (t) == TREE_LIST)
13560 {
13561 if (handle_omp_array_sections (c, ort))
13562 remove = true;
13563 break;
13564 }
13565 if (t == error_mark_node)
13566 remove = true;
13567 else if (!VAR_P (t) && TREE_CODE (t) != PARM_DECL)
13568 {
13569 error_at (OMP_CLAUSE_LOCATION (c),
13570 "%qE is not a variable in %<depend%> clause", t);
13571 remove = true;
13572 }
13573 else if (!c_mark_addressable (t))
13574 remove = true;
13575 break;
13576
13577 case OMP_CLAUSE_MAP:
13578 case OMP_CLAUSE_TO:
13579 case OMP_CLAUSE_FROM:
13580 case OMP_CLAUSE__CACHE_:
13581 t = OMP_CLAUSE_DECL (c);
13582 if (TREE_CODE (t) == TREE_LIST)
13583 {
13584 if (handle_omp_array_sections (c, ort))
13585 remove = true;
13586 else
13587 {
13588 t = OMP_CLAUSE_DECL (c);
13589 if (!lang_hooks.types.omp_mappable_type (TREE_TYPE (t)))
13590 {
13591 error_at (OMP_CLAUSE_LOCATION (c),
13592 "array section does not have mappable type "
13593 "in %qs clause",
13594 omp_clause_code_name[OMP_CLAUSE_CODE (c)]);
13595 remove = true;
13596 }
13597 else if (TYPE_ATOMIC (TREE_TYPE (t)))
13598 {
13599 error_at (OMP_CLAUSE_LOCATION (c),
13600 "%<_Atomic%> %qE in %qs clause", t,
13601 omp_clause_code_name[OMP_CLAUSE_CODE (c)]);
13602 remove = true;
13603 }
13604 while (TREE_CODE (t) == ARRAY_REF)
13605 t = TREE_OPERAND (t, 0);
13606 if (TREE_CODE (t) == COMPONENT_REF
13607 && TREE_CODE (TREE_TYPE (t)) == ARRAY_TYPE)
13608 {
13609 while (TREE_CODE (t) == COMPONENT_REF)
13610 t = TREE_OPERAND (t, 0);
13611 if (bitmap_bit_p (&map_field_head, DECL_UID (t)))
13612 break;
13613 if (bitmap_bit_p (&map_head, DECL_UID (t)))
13614 {
13615 if (OMP_CLAUSE_CODE (c) != OMP_CLAUSE_MAP)
13616 error ("%qD appears more than once in motion"
13617 " clauses", t);
13618 else if (ort == C_ORT_ACC)
13619 error ("%qD appears more than once in data"
13620 " clauses", t);
13621 else
13622 error ("%qD appears more than once in map"
13623 " clauses", t);
13624 remove = true;
13625 }
13626 else
13627 {
13628 bitmap_set_bit (&map_head, DECL_UID (t));
13629 bitmap_set_bit (&map_field_head, DECL_UID (t));
13630 }
13631 }
13632 }
13633 break;
13634 }
13635 if (t == error_mark_node)
13636 {
13637 remove = true;
13638 break;
13639 }
13640 if (TREE_CODE (t) == COMPONENT_REF
13641 && (ort & C_ORT_OMP)
13642 && OMP_CLAUSE_CODE (c) != OMP_CLAUSE__CACHE_)
13643 {
13644 if (DECL_BIT_FIELD (TREE_OPERAND (t, 1)))
13645 {
13646 error_at (OMP_CLAUSE_LOCATION (c),
13647 "bit-field %qE in %qs clause",
13648 t, omp_clause_code_name[OMP_CLAUSE_CODE (c)]);
13649 remove = true;
13650 }
13651 else if (!lang_hooks.types.omp_mappable_type (TREE_TYPE (t)))
13652 {
13653 error_at (OMP_CLAUSE_LOCATION (c),
13654 "%qE does not have a mappable type in %qs clause",
13655 t, omp_clause_code_name[OMP_CLAUSE_CODE (c)]);
13656 remove = true;
13657 }
13658 else if (TYPE_ATOMIC (TREE_TYPE (t)))
13659 {
13660 error_at (OMP_CLAUSE_LOCATION (c),
13661 "%<_Atomic%> %qE in %qs clause", t,
13662 omp_clause_code_name[OMP_CLAUSE_CODE (c)]);
13663 remove = true;
13664 }
13665 while (TREE_CODE (t) == COMPONENT_REF)
13666 {
13667 if (TREE_CODE (TREE_TYPE (TREE_OPERAND (t, 0)))
13668 == UNION_TYPE)
13669 {
13670 error_at (OMP_CLAUSE_LOCATION (c),
13671 "%qE is a member of a union", t);
13672 remove = true;
13673 break;
13674 }
13675 t = TREE_OPERAND (t, 0);
13676 }
13677 if (remove)
13678 break;
13679 if (VAR_P (t) || TREE_CODE (t) == PARM_DECL)
13680 {
13681 if (bitmap_bit_p (&map_field_head, DECL_UID (t)))
13682 break;
13683 }
13684 }
13685 if (!VAR_P (t) && TREE_CODE (t) != PARM_DECL)
13686 {
13687 error_at (OMP_CLAUSE_LOCATION (c),
13688 "%qE is not a variable in %qs clause", t,
13689 omp_clause_code_name[OMP_CLAUSE_CODE (c)]);
13690 remove = true;
13691 }
13692 else if (VAR_P (t) && DECL_THREAD_LOCAL_P (t))
13693 {
13694 error_at (OMP_CLAUSE_LOCATION (c),
13695 "%qD is threadprivate variable in %qs clause", t,
13696 omp_clause_code_name[OMP_CLAUSE_CODE (c)]);
13697 remove = true;
13698 }
13699 else if ((OMP_CLAUSE_CODE (c) != OMP_CLAUSE_MAP
13700 || (OMP_CLAUSE_MAP_KIND (c)
13701 != GOMP_MAP_FIRSTPRIVATE_POINTER))
13702 && !c_mark_addressable (t))
13703 remove = true;
13704 else if (!(OMP_CLAUSE_CODE (c) == OMP_CLAUSE_MAP
13705 && (OMP_CLAUSE_MAP_KIND (c) == GOMP_MAP_POINTER
13706 || (OMP_CLAUSE_MAP_KIND (c)
13707 == GOMP_MAP_FIRSTPRIVATE_POINTER)
13708 || (OMP_CLAUSE_MAP_KIND (c)
13709 == GOMP_MAP_FORCE_DEVICEPTR)))
13710 && t == OMP_CLAUSE_DECL (c)
13711 && !lang_hooks.types.omp_mappable_type (TREE_TYPE (t)))
13712 {
13713 error_at (OMP_CLAUSE_LOCATION (c),
13714 "%qD does not have a mappable type in %qs clause", t,
13715 omp_clause_code_name[OMP_CLAUSE_CODE (c)]);
13716 remove = true;
13717 }
13718 else if (TREE_TYPE (t) == error_mark_node)
13719 remove = true;
13720 else if (TYPE_ATOMIC (strip_array_types (TREE_TYPE (t))))
13721 {
13722 error_at (OMP_CLAUSE_LOCATION (c),
13723 "%<_Atomic%> %qE in %qs clause", t,
13724 omp_clause_code_name[OMP_CLAUSE_CODE (c)]);
13725 remove = true;
13726 }
13727 else if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_MAP
13728 && OMP_CLAUSE_MAP_KIND (c) == GOMP_MAP_FIRSTPRIVATE_POINTER)
13729 {
13730 if (bitmap_bit_p (&generic_head, DECL_UID (t))
13731 || bitmap_bit_p (&firstprivate_head, DECL_UID (t)))
13732 {
13733 error ("%qD appears more than once in data clauses", t);
13734 remove = true;
13735 }
13736 else if (bitmap_bit_p (&map_head, DECL_UID (t)))
13737 {
13738 if (ort == C_ORT_ACC)
13739 error ("%qD appears more than once in data clauses", t);
13740 else
13741 error ("%qD appears both in data and map clauses", t);
13742 remove = true;
13743 }
13744 else
13745 bitmap_set_bit (&generic_head, DECL_UID (t));
13746 }
13747 else if (bitmap_bit_p (&map_head, DECL_UID (t)))
13748 {
13749 if (OMP_CLAUSE_CODE (c) != OMP_CLAUSE_MAP)
13750 error ("%qD appears more than once in motion clauses", t);
13751 else if (ort == C_ORT_ACC)
13752 error ("%qD appears more than once in data clauses", t);
13753 else
13754 error ("%qD appears more than once in map clauses", t);
13755 remove = true;
13756 }
13757 else if (bitmap_bit_p (&generic_head, DECL_UID (t))
13758 || bitmap_bit_p (&firstprivate_head, DECL_UID (t)))
13759 {
13760 if (ort == C_ORT_ACC)
13761 error ("%qD appears more than once in data clauses", t);
13762 else
13763 error ("%qD appears both in data and map clauses", t);
13764 remove = true;
13765 }
13766 else
13767 {
13768 bitmap_set_bit (&map_head, DECL_UID (t));
13769 if (t != OMP_CLAUSE_DECL (c)
13770 && TREE_CODE (OMP_CLAUSE_DECL (c)) == COMPONENT_REF)
13771 bitmap_set_bit (&map_field_head, DECL_UID (t));
13772 }
13773 break;
13774
13775 case OMP_CLAUSE_TO_DECLARE:
13776 case OMP_CLAUSE_LINK:
13777 t = OMP_CLAUSE_DECL (c);
13778 if (TREE_CODE (t) == FUNCTION_DECL
13779 && OMP_CLAUSE_CODE (c) == OMP_CLAUSE_TO_DECLARE)
13780 ;
13781 else if (!VAR_P (t))
13782 {
13783 if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_TO_DECLARE)
13784 error_at (OMP_CLAUSE_LOCATION (c),
13785 "%qE is neither a variable nor a function name in "
13786 "clause %qs", t,
13787 omp_clause_code_name[OMP_CLAUSE_CODE (c)]);
13788 else
13789 error_at (OMP_CLAUSE_LOCATION (c),
13790 "%qE is not a variable in clause %qs", t,
13791 omp_clause_code_name[OMP_CLAUSE_CODE (c)]);
13792 remove = true;
13793 }
13794 else if (DECL_THREAD_LOCAL_P (t))
13795 {
13796 error_at (OMP_CLAUSE_LOCATION (c),
13797 "%qD is threadprivate variable in %qs clause", t,
13798 omp_clause_code_name[OMP_CLAUSE_CODE (c)]);
13799 remove = true;
13800 }
13801 else if (!lang_hooks.types.omp_mappable_type (TREE_TYPE (t)))
13802 {
13803 error_at (OMP_CLAUSE_LOCATION (c),
13804 "%qD does not have a mappable type in %qs clause", t,
13805 omp_clause_code_name[OMP_CLAUSE_CODE (c)]);
13806 remove = true;
13807 }
13808 if (remove)
13809 break;
13810 if (bitmap_bit_p (&generic_head, DECL_UID (t)))
13811 {
13812 error_at (OMP_CLAUSE_LOCATION (c),
13813 "%qE appears more than once on the same "
13814 "%<declare target%> directive", t);
13815 remove = true;
13816 }
13817 else
13818 bitmap_set_bit (&generic_head, DECL_UID (t));
13819 break;
13820
13821 case OMP_CLAUSE_UNIFORM:
13822 t = OMP_CLAUSE_DECL (c);
13823 if (TREE_CODE (t) != PARM_DECL)
13824 {
13825 if (DECL_P (t))
13826 error_at (OMP_CLAUSE_LOCATION (c),
13827 "%qD is not an argument in %<uniform%> clause", t);
13828 else
13829 error_at (OMP_CLAUSE_LOCATION (c),
13830 "%qE is not an argument in %<uniform%> clause", t);
13831 remove = true;
13832 break;
13833 }
13834 /* map_head bitmap is used as uniform_head if declare_simd. */
13835 bitmap_set_bit (&map_head, DECL_UID (t));
13836 goto check_dup_generic;
13837
13838 case OMP_CLAUSE_IS_DEVICE_PTR:
13839 case OMP_CLAUSE_USE_DEVICE_PTR:
13840 t = OMP_CLAUSE_DECL (c);
13841 if (TREE_CODE (TREE_TYPE (t)) != POINTER_TYPE
13842 && TREE_CODE (TREE_TYPE (t)) != ARRAY_TYPE)
13843 {
13844 error_at (OMP_CLAUSE_LOCATION (c),
13845 "%qs variable is neither a pointer nor an array",
13846 omp_clause_code_name[OMP_CLAUSE_CODE (c)]);
13847 remove = true;
13848 }
13849 goto check_dup_generic;
13850
13851 case OMP_CLAUSE_NOWAIT:
13852 if (copyprivate_seen)
13853 {
13854 error_at (OMP_CLAUSE_LOCATION (c),
13855 "%<nowait%> clause must not be used together "
13856 "with %<copyprivate%>");
13857 remove = true;
13858 break;
13859 }
13860 nowait_clause = pc;
13861 pc = &OMP_CLAUSE_CHAIN (c);
13862 continue;
13863
13864 case OMP_CLAUSE_IF:
13865 case OMP_CLAUSE_NUM_THREADS:
13866 case OMP_CLAUSE_NUM_TEAMS:
13867 case OMP_CLAUSE_THREAD_LIMIT:
13868 case OMP_CLAUSE_DEFAULT:
13869 case OMP_CLAUSE_UNTIED:
13870 case OMP_CLAUSE_COLLAPSE:
13871 case OMP_CLAUSE_FINAL:
13872 case OMP_CLAUSE_MERGEABLE:
13873 case OMP_CLAUSE_DEVICE:
13874 case OMP_CLAUSE_DIST_SCHEDULE:
13875 case OMP_CLAUSE_PARALLEL:
13876 case OMP_CLAUSE_FOR:
13877 case OMP_CLAUSE_SECTIONS:
13878 case OMP_CLAUSE_TASKGROUP:
13879 case OMP_CLAUSE_PROC_BIND:
13880 case OMP_CLAUSE_PRIORITY:
13881 case OMP_CLAUSE_GRAINSIZE:
13882 case OMP_CLAUSE_NUM_TASKS:
13883 case OMP_CLAUSE_NOGROUP:
13884 case OMP_CLAUSE_THREADS:
13885 case OMP_CLAUSE_SIMD:
13886 case OMP_CLAUSE_HINT:
13887 case OMP_CLAUSE_DEFAULTMAP:
13888 case OMP_CLAUSE_NUM_GANGS:
13889 case OMP_CLAUSE_NUM_WORKERS:
13890 case OMP_CLAUSE_VECTOR_LENGTH:
13891 case OMP_CLAUSE_ASYNC:
13892 case OMP_CLAUSE_WAIT:
13893 case OMP_CLAUSE_AUTO:
13894 case OMP_CLAUSE_INDEPENDENT:
13895 case OMP_CLAUSE_SEQ:
13896 case OMP_CLAUSE_GANG:
13897 case OMP_CLAUSE_WORKER:
13898 case OMP_CLAUSE_VECTOR:
13899 case OMP_CLAUSE_TILE:
13900 pc = &OMP_CLAUSE_CHAIN (c);
13901 continue;
13902
13903 case OMP_CLAUSE_SCHEDULE:
13904 if (OMP_CLAUSE_SCHEDULE_KIND (c) & OMP_CLAUSE_SCHEDULE_NONMONOTONIC)
13905 {
13906 const char *p = NULL;
13907 switch (OMP_CLAUSE_SCHEDULE_KIND (c) & OMP_CLAUSE_SCHEDULE_MASK)
13908 {
13909 case OMP_CLAUSE_SCHEDULE_STATIC: p = "static"; break;
13910 case OMP_CLAUSE_SCHEDULE_DYNAMIC: break;
13911 case OMP_CLAUSE_SCHEDULE_GUIDED: break;
13912 case OMP_CLAUSE_SCHEDULE_AUTO: p = "auto"; break;
13913 case OMP_CLAUSE_SCHEDULE_RUNTIME: p = "runtime"; break;
13914 default: gcc_unreachable ();
13915 }
13916 if (p)
13917 {
13918 error_at (OMP_CLAUSE_LOCATION (c),
13919 "%<nonmonotonic%> modifier specified for %qs "
13920 "schedule kind", p);
13921 OMP_CLAUSE_SCHEDULE_KIND (c)
13922 = (enum omp_clause_schedule_kind)
13923 (OMP_CLAUSE_SCHEDULE_KIND (c)
13924 & ~OMP_CLAUSE_SCHEDULE_NONMONOTONIC);
13925 }
13926 }
13927 schedule_clause = c;
13928 pc = &OMP_CLAUSE_CHAIN (c);
13929 continue;
13930
13931 case OMP_CLAUSE_ORDERED:
13932 ordered_seen = true;
13933 pc = &OMP_CLAUSE_CHAIN (c);
13934 continue;
13935
13936 case OMP_CLAUSE_SAFELEN:
13937 safelen = c;
13938 pc = &OMP_CLAUSE_CHAIN (c);
13939 continue;
13940 case OMP_CLAUSE_SIMDLEN:
13941 simdlen = c;
13942 pc = &OMP_CLAUSE_CHAIN (c);
13943 continue;
13944
13945 case OMP_CLAUSE_INBRANCH:
13946 case OMP_CLAUSE_NOTINBRANCH:
13947 if (branch_seen)
13948 {
13949 error_at (OMP_CLAUSE_LOCATION (c),
13950 "%<inbranch%> clause is incompatible with "
13951 "%<notinbranch%>");
13952 remove = true;
13953 break;
13954 }
13955 branch_seen = true;
13956 pc = &OMP_CLAUSE_CHAIN (c);
13957 continue;
13958
13959 default:
13960 gcc_unreachable ();
13961 }
13962
13963 if (!remove)
13964 {
13965 t = OMP_CLAUSE_DECL (c);
13966
13967 if (need_complete)
13968 {
13969 t = require_complete_type (OMP_CLAUSE_LOCATION (c), t);
13970 if (t == error_mark_node)
13971 remove = true;
13972 }
13973
13974 if (need_implicitly_determined)
13975 {
13976 const char *share_name = NULL;
13977
13978 if (VAR_P (t) && DECL_THREAD_LOCAL_P (t))
13979 share_name = "threadprivate";
13980 else switch (c_omp_predetermined_sharing (t))
13981 {
13982 case OMP_CLAUSE_DEFAULT_UNSPECIFIED:
13983 break;
13984 case OMP_CLAUSE_DEFAULT_SHARED:
13985 /* const vars may be specified in firstprivate clause. */
13986 if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_FIRSTPRIVATE
13987 && TREE_READONLY (t))
13988 break;
13989 share_name = "shared";
13990 break;
13991 case OMP_CLAUSE_DEFAULT_PRIVATE:
13992 share_name = "private";
13993 break;
13994 default:
13995 gcc_unreachable ();
13996 }
13997 if (share_name)
13998 {
13999 error_at (OMP_CLAUSE_LOCATION (c),
14000 "%qE is predetermined %qs for %qs",
14001 t, share_name,
14002 omp_clause_code_name[OMP_CLAUSE_CODE (c)]);
14003 remove = true;
14004 }
14005 }
14006 }
14007
14008 if (remove)
14009 *pc = OMP_CLAUSE_CHAIN (c);
14010 else
14011 pc = &OMP_CLAUSE_CHAIN (c);
14012 }
14013
14014 if (simdlen
14015 && safelen
14016 && tree_int_cst_lt (OMP_CLAUSE_SAFELEN_EXPR (safelen),
14017 OMP_CLAUSE_SIMDLEN_EXPR (simdlen)))
14018 {
14019 error_at (OMP_CLAUSE_LOCATION (simdlen),
14020 "%<simdlen%> clause value is bigger than "
14021 "%<safelen%> clause value");
14022 OMP_CLAUSE_SIMDLEN_EXPR (simdlen)
14023 = OMP_CLAUSE_SAFELEN_EXPR (safelen);
14024 }
14025
14026 if (ordered_seen
14027 && schedule_clause
14028 && (OMP_CLAUSE_SCHEDULE_KIND (schedule_clause)
14029 & OMP_CLAUSE_SCHEDULE_NONMONOTONIC))
14030 {
14031 error_at (OMP_CLAUSE_LOCATION (schedule_clause),
14032 "%<nonmonotonic%> schedule modifier specified together "
14033 "with %<ordered%> clause");
14034 OMP_CLAUSE_SCHEDULE_KIND (schedule_clause)
14035 = (enum omp_clause_schedule_kind)
14036 (OMP_CLAUSE_SCHEDULE_KIND (schedule_clause)
14037 & ~OMP_CLAUSE_SCHEDULE_NONMONOTONIC);
14038 }
14039
14040 if (linear_variable_step_check)
14041 for (pc = &clauses, c = clauses; c ; c = *pc)
14042 {
14043 bool remove = false;
14044 if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_LINEAR
14045 && OMP_CLAUSE_LINEAR_VARIABLE_STRIDE (c)
14046 && !bitmap_bit_p (&map_head,
14047 DECL_UID (OMP_CLAUSE_LINEAR_STEP (c))))
14048 {
14049 error_at (OMP_CLAUSE_LOCATION (c),
14050 "%<linear%> clause step is a parameter %qD not "
14051 "specified in %<uniform%> clause",
14052 OMP_CLAUSE_LINEAR_STEP (c));
14053 remove = true;
14054 }
14055
14056 if (remove)
14057 *pc = OMP_CLAUSE_CHAIN (c);
14058 else
14059 pc = &OMP_CLAUSE_CHAIN (c);
14060 }
14061
14062 bitmap_obstack_release (NULL);
14063 return clauses;
14064 }
14065
14066 /* Return code to initialize DST with a copy constructor from SRC.
14067 C doesn't have copy constructors nor assignment operators, only for
14068 _Atomic vars we need to perform __atomic_load from src into a temporary
14069 followed by __atomic_store of the temporary to dst. */
14070
14071 tree
14072 c_omp_clause_copy_ctor (tree clause, tree dst, tree src)
14073 {
14074 if (!really_atomic_lvalue (dst) && !really_atomic_lvalue (src))
14075 return build2 (MODIFY_EXPR, TREE_TYPE (dst), dst, src);
14076
14077 location_t loc = OMP_CLAUSE_LOCATION (clause);
14078 tree type = TREE_TYPE (dst);
14079 tree nonatomic_type = build_qualified_type (type, TYPE_UNQUALIFIED);
14080 tree tmp = create_tmp_var (nonatomic_type);
14081 tree tmp_addr = build_fold_addr_expr (tmp);
14082 TREE_ADDRESSABLE (tmp) = 1;
14083 TREE_NO_WARNING (tmp) = 1;
14084 tree src_addr = build_fold_addr_expr (src);
14085 tree dst_addr = build_fold_addr_expr (dst);
14086 tree seq_cst = build_int_cst (integer_type_node, MEMMODEL_SEQ_CST);
14087 vec<tree, va_gc> *params;
14088 /* Expansion of a generic atomic load may require an addition
14089 element, so allocate enough to prevent a resize. */
14090 vec_alloc (params, 4);
14091
14092 /* Build __atomic_load (&src, &tmp, SEQ_CST); */
14093 tree fndecl = builtin_decl_explicit (BUILT_IN_ATOMIC_LOAD);
14094 params->quick_push (src_addr);
14095 params->quick_push (tmp_addr);
14096 params->quick_push (seq_cst);
14097 tree load = c_build_function_call_vec (loc, vNULL, fndecl, params, NULL);
14098
14099 vec_alloc (params, 4);
14100
14101 /* Build __atomic_store (&dst, &tmp, SEQ_CST); */
14102 fndecl = builtin_decl_explicit (BUILT_IN_ATOMIC_STORE);
14103 params->quick_push (dst_addr);
14104 params->quick_push (tmp_addr);
14105 params->quick_push (seq_cst);
14106 tree store = c_build_function_call_vec (loc, vNULL, fndecl, params, NULL);
14107 return build2 (COMPOUND_EXPR, void_type_node, load, store);
14108 }
14109
14110 /* Create a transaction node. */
14111
14112 tree
14113 c_finish_transaction (location_t loc, tree block, int flags)
14114 {
14115 tree stmt = build_stmt (loc, TRANSACTION_EXPR, block);
14116 if (flags & TM_STMT_ATTR_OUTER)
14117 TRANSACTION_EXPR_OUTER (stmt) = 1;
14118 if (flags & TM_STMT_ATTR_RELAXED)
14119 TRANSACTION_EXPR_RELAXED (stmt) = 1;
14120 return add_stmt (stmt);
14121 }
14122
14123 /* Make a variant type in the proper way for C/C++, propagating qualifiers
14124 down to the element type of an array. If ORIG_QUAL_TYPE is not
14125 NULL, then it should be used as the qualified type
14126 ORIG_QUAL_INDIRECT levels down in array type derivation (to
14127 preserve information about the typedef name from which an array
14128 type was derived). */
14129
14130 tree
14131 c_build_qualified_type (tree type, int type_quals, tree orig_qual_type,
14132 size_t orig_qual_indirect)
14133 {
14134 if (type == error_mark_node)
14135 return type;
14136
14137 if (TREE_CODE (type) == ARRAY_TYPE)
14138 {
14139 tree t;
14140 tree element_type = c_build_qualified_type (TREE_TYPE (type),
14141 type_quals, orig_qual_type,
14142 orig_qual_indirect - 1);
14143
14144 /* See if we already have an identically qualified type. */
14145 if (orig_qual_type && orig_qual_indirect == 0)
14146 t = orig_qual_type;
14147 else
14148 for (t = TYPE_MAIN_VARIANT (type); t; t = TYPE_NEXT_VARIANT (t))
14149 {
14150 if (TYPE_QUALS (strip_array_types (t)) == type_quals
14151 && TYPE_NAME (t) == TYPE_NAME (type)
14152 && TYPE_CONTEXT (t) == TYPE_CONTEXT (type)
14153 && attribute_list_equal (TYPE_ATTRIBUTES (t),
14154 TYPE_ATTRIBUTES (type)))
14155 break;
14156 }
14157 if (!t)
14158 {
14159 tree domain = TYPE_DOMAIN (type);
14160
14161 t = build_variant_type_copy (type);
14162 TREE_TYPE (t) = element_type;
14163
14164 if (TYPE_STRUCTURAL_EQUALITY_P (element_type)
14165 || (domain && TYPE_STRUCTURAL_EQUALITY_P (domain)))
14166 SET_TYPE_STRUCTURAL_EQUALITY (t);
14167 else if (TYPE_CANONICAL (element_type) != element_type
14168 || (domain && TYPE_CANONICAL (domain) != domain))
14169 {
14170 tree unqualified_canon
14171 = build_array_type (TYPE_CANONICAL (element_type),
14172 domain? TYPE_CANONICAL (domain)
14173 : NULL_TREE);
14174 if (TYPE_REVERSE_STORAGE_ORDER (type))
14175 {
14176 unqualified_canon
14177 = build_distinct_type_copy (unqualified_canon);
14178 TYPE_REVERSE_STORAGE_ORDER (unqualified_canon) = 1;
14179 }
14180 TYPE_CANONICAL (t)
14181 = c_build_qualified_type (unqualified_canon, type_quals);
14182 }
14183 else
14184 TYPE_CANONICAL (t) = t;
14185 }
14186 return t;
14187 }
14188
14189 /* A restrict-qualified pointer type must be a pointer to object or
14190 incomplete type. Note that the use of POINTER_TYPE_P also allows
14191 REFERENCE_TYPEs, which is appropriate for C++. */
14192 if ((type_quals & TYPE_QUAL_RESTRICT)
14193 && (!POINTER_TYPE_P (type)
14194 || !C_TYPE_OBJECT_OR_INCOMPLETE_P (TREE_TYPE (type))))
14195 {
14196 error ("invalid use of %<restrict%>");
14197 type_quals &= ~TYPE_QUAL_RESTRICT;
14198 }
14199
14200 tree var_type = (orig_qual_type && orig_qual_indirect == 0
14201 ? orig_qual_type
14202 : build_qualified_type (type, type_quals));
14203 /* A variant type does not inherit the list of incomplete vars from the
14204 type main variant. */
14205 if (RECORD_OR_UNION_TYPE_P (var_type)
14206 && TYPE_MAIN_VARIANT (var_type) != var_type)
14207 C_TYPE_INCOMPLETE_VARS (var_type) = 0;
14208 return var_type;
14209 }
14210
14211 /* Build a VA_ARG_EXPR for the C parser. */
14212
14213 tree
14214 c_build_va_arg (location_t loc1, tree expr, location_t loc2, tree type)
14215 {
14216 if (error_operand_p (type))
14217 return error_mark_node;
14218 /* VA_ARG_EXPR cannot be used for a scalar va_list with reverse storage
14219 order because it takes the address of the expression. */
14220 else if (handled_component_p (expr)
14221 && reverse_storage_order_for_component_p (expr))
14222 {
14223 error_at (loc1, "cannot use %<va_arg%> with reverse storage order");
14224 return error_mark_node;
14225 }
14226 else if (!COMPLETE_TYPE_P (type))
14227 {
14228 error_at (loc2, "second argument to %<va_arg%> is of incomplete "
14229 "type %qT", type);
14230 return error_mark_node;
14231 }
14232 else if (warn_cxx_compat && TREE_CODE (type) == ENUMERAL_TYPE)
14233 warning_at (loc2, OPT_Wc___compat,
14234 "C++ requires promoted type, not enum type, in %<va_arg%>");
14235 return build_va_arg (loc2, expr, type);
14236 }
14237
14238 /* Return truthvalue of whether T1 is the same tree structure as T2.
14239 Return 1 if they are the same. Return false if they are different. */
14240
14241 bool
14242 c_tree_equal (tree t1, tree t2)
14243 {
14244 enum tree_code code1, code2;
14245
14246 if (t1 == t2)
14247 return true;
14248 if (!t1 || !t2)
14249 return false;
14250
14251 for (code1 = TREE_CODE (t1);
14252 CONVERT_EXPR_CODE_P (code1)
14253 || code1 == NON_LVALUE_EXPR;
14254 code1 = TREE_CODE (t1))
14255 t1 = TREE_OPERAND (t1, 0);
14256 for (code2 = TREE_CODE (t2);
14257 CONVERT_EXPR_CODE_P (code2)
14258 || code2 == NON_LVALUE_EXPR;
14259 code2 = TREE_CODE (t2))
14260 t2 = TREE_OPERAND (t2, 0);
14261
14262 /* They might have become equal now. */
14263 if (t1 == t2)
14264 return true;
14265
14266 if (code1 != code2)
14267 return false;
14268
14269 switch (code1)
14270 {
14271 case INTEGER_CST:
14272 return wi::to_wide (t1) == wi::to_wide (t2);
14273
14274 case REAL_CST:
14275 return real_equal (&TREE_REAL_CST (t1), &TREE_REAL_CST (t2));
14276
14277 case STRING_CST:
14278 return TREE_STRING_LENGTH (t1) == TREE_STRING_LENGTH (t2)
14279 && !memcmp (TREE_STRING_POINTER (t1), TREE_STRING_POINTER (t2),
14280 TREE_STRING_LENGTH (t1));
14281
14282 case FIXED_CST:
14283 return FIXED_VALUES_IDENTICAL (TREE_FIXED_CST (t1),
14284 TREE_FIXED_CST (t2));
14285
14286 case COMPLEX_CST:
14287 return c_tree_equal (TREE_REALPART (t1), TREE_REALPART (t2))
14288 && c_tree_equal (TREE_IMAGPART (t1), TREE_IMAGPART (t2));
14289
14290 case VECTOR_CST:
14291 return operand_equal_p (t1, t2, OEP_ONLY_CONST);
14292
14293 case CONSTRUCTOR:
14294 /* We need to do this when determining whether or not two
14295 non-type pointer to member function template arguments
14296 are the same. */
14297 if (!comptypes (TREE_TYPE (t1), TREE_TYPE (t2))
14298 || CONSTRUCTOR_NELTS (t1) != CONSTRUCTOR_NELTS (t2))
14299 return false;
14300 {
14301 tree field, value;
14302 unsigned int i;
14303 FOR_EACH_CONSTRUCTOR_ELT (CONSTRUCTOR_ELTS (t1), i, field, value)
14304 {
14305 constructor_elt *elt2 = CONSTRUCTOR_ELT (t2, i);
14306 if (!c_tree_equal (field, elt2->index)
14307 || !c_tree_equal (value, elt2->value))
14308 return false;
14309 }
14310 }
14311 return true;
14312
14313 case TREE_LIST:
14314 if (!c_tree_equal (TREE_PURPOSE (t1), TREE_PURPOSE (t2)))
14315 return false;
14316 if (!c_tree_equal (TREE_VALUE (t1), TREE_VALUE (t2)))
14317 return false;
14318 return c_tree_equal (TREE_CHAIN (t1), TREE_CHAIN (t2));
14319
14320 case SAVE_EXPR:
14321 return c_tree_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
14322
14323 case CALL_EXPR:
14324 {
14325 tree arg1, arg2;
14326 call_expr_arg_iterator iter1, iter2;
14327 if (!c_tree_equal (CALL_EXPR_FN (t1), CALL_EXPR_FN (t2)))
14328 return false;
14329 for (arg1 = first_call_expr_arg (t1, &iter1),
14330 arg2 = first_call_expr_arg (t2, &iter2);
14331 arg1 && arg2;
14332 arg1 = next_call_expr_arg (&iter1),
14333 arg2 = next_call_expr_arg (&iter2))
14334 if (!c_tree_equal (arg1, arg2))
14335 return false;
14336 if (arg1 || arg2)
14337 return false;
14338 return true;
14339 }
14340
14341 case TARGET_EXPR:
14342 {
14343 tree o1 = TREE_OPERAND (t1, 0);
14344 tree o2 = TREE_OPERAND (t2, 0);
14345
14346 /* Special case: if either target is an unallocated VAR_DECL,
14347 it means that it's going to be unified with whatever the
14348 TARGET_EXPR is really supposed to initialize, so treat it
14349 as being equivalent to anything. */
14350 if (VAR_P (o1) && DECL_NAME (o1) == NULL_TREE
14351 && !DECL_RTL_SET_P (o1))
14352 /*Nop*/;
14353 else if (VAR_P (o2) && DECL_NAME (o2) == NULL_TREE
14354 && !DECL_RTL_SET_P (o2))
14355 /*Nop*/;
14356 else if (!c_tree_equal (o1, o2))
14357 return false;
14358
14359 return c_tree_equal (TREE_OPERAND (t1, 1), TREE_OPERAND (t2, 1));
14360 }
14361
14362 case COMPONENT_REF:
14363 if (TREE_OPERAND (t1, 1) != TREE_OPERAND (t2, 1))
14364 return false;
14365 return c_tree_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
14366
14367 case PARM_DECL:
14368 case VAR_DECL:
14369 case CONST_DECL:
14370 case FIELD_DECL:
14371 case FUNCTION_DECL:
14372 case IDENTIFIER_NODE:
14373 case SSA_NAME:
14374 return false;
14375
14376 case TREE_VEC:
14377 {
14378 unsigned ix;
14379 if (TREE_VEC_LENGTH (t1) != TREE_VEC_LENGTH (t2))
14380 return false;
14381 for (ix = TREE_VEC_LENGTH (t1); ix--;)
14382 if (!c_tree_equal (TREE_VEC_ELT (t1, ix),
14383 TREE_VEC_ELT (t2, ix)))
14384 return false;
14385 return true;
14386 }
14387
14388 default:
14389 break;
14390 }
14391
14392 switch (TREE_CODE_CLASS (code1))
14393 {
14394 case tcc_unary:
14395 case tcc_binary:
14396 case tcc_comparison:
14397 case tcc_expression:
14398 case tcc_vl_exp:
14399 case tcc_reference:
14400 case tcc_statement:
14401 {
14402 int i, n = TREE_OPERAND_LENGTH (t1);
14403
14404 switch (code1)
14405 {
14406 case PREINCREMENT_EXPR:
14407 case PREDECREMENT_EXPR:
14408 case POSTINCREMENT_EXPR:
14409 case POSTDECREMENT_EXPR:
14410 n = 1;
14411 break;
14412 case ARRAY_REF:
14413 n = 2;
14414 break;
14415 default:
14416 break;
14417 }
14418
14419 if (TREE_CODE_CLASS (code1) == tcc_vl_exp
14420 && n != TREE_OPERAND_LENGTH (t2))
14421 return false;
14422
14423 for (i = 0; i < n; ++i)
14424 if (!c_tree_equal (TREE_OPERAND (t1, i), TREE_OPERAND (t2, i)))
14425 return false;
14426
14427 return true;
14428 }
14429
14430 case tcc_type:
14431 return comptypes (t1, t2);
14432 default:
14433 gcc_unreachable ();
14434 }
14435 /* We can get here with --disable-checking. */
14436 return false;
14437 }
14438
14439 /* Returns true when the function declaration FNDECL is implicit,
14440 introduced as a result of a call to an otherwise undeclared
14441 function, and false otherwise. */
14442
14443 bool
14444 c_decl_implicit (const_tree fndecl)
14445 {
14446 return C_DECL_IMPLICIT (fndecl);
14447 }