]> gcc.gnu.org Git - gcc.git/blob - gcc/c-common.c
(decl_attributes): If first_arg_num is 0, no error for it.
[gcc.git] / gcc / c-common.c
1 /* Subroutines shared by all languages that are variants of C.
2 Copyright (C) 1992 Free Software Foundation, Inc.
3
4 This file is part of GNU CC.
5
6 GNU CC is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 2, or (at your option)
9 any later version.
10
11 GNU CC is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
15
16 You should have received a copy of the GNU General Public License
17 along with GNU CC; see the file COPYING. If not, write to
18 the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
19
20 #include "config.h"
21 #include "tree.h"
22 #include "c-lex.h"
23 #include "c-tree.h"
24 #include "flags.h"
25 #include "obstack.h"
26 #include <stdio.h>
27
28 extern struct obstack permanent_obstack;
29
30 /* Make bindings for __FUNCTION__ and __PRETTY_FUNCTION__. */
31
32 void
33 declare_function_name ()
34 {
35 tree decl, type, init;
36 char *name, *printable_name;
37 int len;
38
39 if (current_function_decl == NULL)
40 {
41 name = "";
42 printable_name = "top level";
43 }
44 else
45 {
46 char *kind = "function";
47 if (TREE_CODE (TREE_TYPE (current_function_decl)) == METHOD_TYPE)
48 kind = "method";
49 /* Allow functions to be nameless (such as artificial ones). */
50 if (DECL_NAME (current_function_decl))
51 name = IDENTIFIER_POINTER (DECL_NAME (current_function_decl));
52 else
53 name = "";
54 printable_name = (*decl_printable_name) (current_function_decl, &kind);
55 }
56
57 /* If the default size of char arrays isn't big enough for the name,
58 make a bigger one. */
59 len = strlen (name) + 1;
60 type = char_array_type_node;
61 if (TREE_INT_CST_LOW (TYPE_MAX_VALUE (TREE_TYPE (char_array_type_node)))
62 < len)
63 type = build_array_type (char_type_node,
64 build_index_type (build_int_2 (len, 0)));
65
66 push_obstacks_nochange ();
67 decl = build_decl (VAR_DECL, get_identifier ("__FUNCTION__"), type);
68 TREE_STATIC (decl) = 1;
69 TREE_READONLY (decl) = 1;
70 DECL_SOURCE_LINE (decl) = 0;
71 DECL_IN_SYSTEM_HEADER (decl) = 1;
72 DECL_IGNORED_P (decl) = 1;
73 init = build_string (len, name);
74 TREE_TYPE (init) = type;
75 DECL_INITIAL (decl) = init;
76 finish_decl (pushdecl (decl), init, NULL_TREE);
77
78 len = strlen (printable_name) + 1;
79 type = char_array_type_node;
80 if (TREE_INT_CST_LOW (TYPE_MAX_VALUE (TREE_TYPE (char_array_type_node)))
81 < len)
82 type = build_array_type (char_type_node,
83 build_index_type (build_int_2 (len, 0)));
84
85 push_obstacks_nochange ();
86 decl = build_decl (VAR_DECL, get_identifier ("__PRETTY_FUNCTION__"), type);
87 TREE_STATIC (decl) = 1;
88 TREE_READONLY (decl) = 1;
89 DECL_SOURCE_LINE (decl) = 0;
90 DECL_IN_SYSTEM_HEADER (decl) = 1;
91 DECL_IGNORED_P (decl) = 1;
92 init = build_string (len, printable_name);
93 TREE_TYPE (init) = type;
94 DECL_INITIAL (decl) = init;
95 finish_decl (pushdecl (decl), init, NULL_TREE);
96 }
97
98 /* Given a chain of STRING_CST nodes,
99 concatenate them into one STRING_CST
100 and give it a suitable array-of-chars data type. */
101
102 tree
103 combine_strings (strings)
104 tree strings;
105 {
106 register tree value, t;
107 register int length = 1;
108 int wide_length = 0;
109 int wide_flag = 0;
110 int wchar_bytes = TYPE_PRECISION (wchar_type_node) / BITS_PER_UNIT;
111 int nchars;
112
113 if (TREE_CHAIN (strings))
114 {
115 /* More than one in the chain, so concatenate. */
116 register char *p, *q;
117
118 /* Don't include the \0 at the end of each substring,
119 except for the last one.
120 Count wide strings and ordinary strings separately. */
121 for (t = strings; t; t = TREE_CHAIN (t))
122 {
123 if (TREE_TYPE (t) == wchar_array_type_node)
124 {
125 wide_length += (TREE_STRING_LENGTH (t) - wchar_bytes);
126 wide_flag = 1;
127 }
128 else
129 length += (TREE_STRING_LENGTH (t) - 1);
130 }
131
132 /* If anything is wide, the non-wides will be converted,
133 which makes them take more space. */
134 if (wide_flag)
135 length = length * wchar_bytes + wide_length;
136
137 p = savealloc (length);
138
139 /* Copy the individual strings into the new combined string.
140 If the combined string is wide, convert the chars to ints
141 for any individual strings that are not wide. */
142
143 q = p;
144 for (t = strings; t; t = TREE_CHAIN (t))
145 {
146 int len = (TREE_STRING_LENGTH (t)
147 - ((TREE_TYPE (t) == wchar_array_type_node)
148 ? wchar_bytes : 1));
149 if ((TREE_TYPE (t) == wchar_array_type_node) == wide_flag)
150 {
151 bcopy (TREE_STRING_POINTER (t), q, len);
152 q += len;
153 }
154 else
155 {
156 int i;
157 for (i = 0; i < len; i++)
158 ((int *) q)[i] = TREE_STRING_POINTER (t)[i];
159 q += len * wchar_bytes;
160 }
161 }
162 if (wide_flag)
163 {
164 int i;
165 for (i = 0; i < wchar_bytes; i++)
166 *q++ = 0;
167 }
168 else
169 *q = 0;
170
171 value = make_node (STRING_CST);
172 TREE_STRING_POINTER (value) = p;
173 TREE_STRING_LENGTH (value) = length;
174 TREE_CONSTANT (value) = 1;
175 }
176 else
177 {
178 value = strings;
179 length = TREE_STRING_LENGTH (value);
180 if (TREE_TYPE (value) == wchar_array_type_node)
181 wide_flag = 1;
182 }
183
184 /* Compute the number of elements, for the array type. */
185 nchars = wide_flag ? length / wchar_bytes : length;
186
187 /* Create the array type for the string constant.
188 -Wwrite-strings says make the string constant an array of const char
189 so that copying it to a non-const pointer will get a warning. */
190 if (warn_write_strings
191 && (! flag_traditional && ! flag_writable_strings))
192 {
193 tree elements
194 = build_type_variant (wide_flag ? wchar_type_node : char_type_node,
195 1, 0);
196 TREE_TYPE (value)
197 = build_array_type (elements,
198 build_index_type (build_int_2 (nchars - 1, 0)));
199 }
200 else
201 TREE_TYPE (value)
202 = build_array_type (wide_flag ? wchar_type_node : char_type_node,
203 build_index_type (build_int_2 (nchars - 1, 0)));
204 TREE_CONSTANT (value) = 1;
205 TREE_STATIC (value) = 1;
206 return value;
207 }
208 \f
209 /* Process the attributes listed in ATTRIBUTES
210 and install them in DECL. */
211
212 void
213 decl_attributes (decl, attributes)
214 tree decl, attributes;
215 {
216 tree a;
217 for (a = attributes; a; a = TREE_CHAIN (a))
218 if (TREE_VALUE (a) == get_identifier ("packed"))
219 {
220 if (TREE_CODE (decl) == FIELD_DECL)
221 DECL_PACKED (decl) = 1;
222 /* We can't set DECL_PACKED for a VAR_DECL, because the bit is
223 used for DECL_REGISTER. It wouldn't mean anything anyway. */
224 }
225 else if (TREE_VALUE (a) != 0
226 && TREE_CODE (TREE_VALUE (a)) == TREE_LIST
227 && TREE_PURPOSE (TREE_VALUE (a)) == get_identifier ("mode"))
228 {
229 int i;
230 char *specified_name
231 = IDENTIFIER_POINTER (TREE_VALUE (TREE_VALUE (a)));
232
233 /* Give this decl a type with the specified mode. */
234 for (i = 0; i < NUM_MACHINE_MODES; i++)
235 if (!strcmp (specified_name, GET_MODE_NAME (i)))
236 {
237 tree type
238 = type_for_mode (i, TREE_UNSIGNED (TREE_TYPE (decl)));
239 if (type != 0)
240 {
241 TREE_TYPE (decl) = type;
242 DECL_SIZE (decl) = 0;
243 layout_decl (decl, 0);
244 }
245 else
246 error ("no data type for mode `%s'", specified_name);
247 break;
248 }
249 if (i == NUM_MACHINE_MODES)
250 error ("unknown machine mode `%s'", specified_name);
251 }
252 else if (TREE_VALUE (a) != 0
253 && TREE_CODE (TREE_VALUE (a)) == TREE_LIST
254 && TREE_PURPOSE (TREE_VALUE (a)) == get_identifier ("aligned"))
255 {
256 int align = TREE_INT_CST_LOW (TREE_VALUE (TREE_VALUE (a)))
257 * BITS_PER_UNIT;
258
259 if (exact_log2 (align) == -1)
260 error_with_decl (decl,
261 "requested alignment of `%s' is not a power of 2");
262 else if (TREE_CODE (decl) != VAR_DECL
263 && TREE_CODE (decl) != FIELD_DECL)
264 error_with_decl (decl,
265 "alignment specified for `%s'");
266 else
267 DECL_ALIGN (decl) = align;
268 }
269 else if (TREE_VALUE (a) != 0
270 && TREE_CODE (TREE_VALUE (a)) == TREE_LIST
271 && TREE_PURPOSE (TREE_VALUE (a)) == get_identifier ("format"))
272 {
273 tree list = TREE_VALUE (TREE_VALUE (a));
274 tree format_type = TREE_PURPOSE (list);
275 int format_num = TREE_INT_CST_LOW (TREE_PURPOSE (TREE_VALUE (list)));
276 int first_arg_num = TREE_INT_CST_LOW (TREE_VALUE (TREE_VALUE (list)));
277 int is_scan;
278 tree argument;
279 int arg_num;
280
281 if (TREE_CODE (decl) != FUNCTION_DECL)
282 {
283 error_with_decl (decl,
284 "argument format specified for non-function `%s'");
285 return;
286 }
287
288 if (format_type == get_identifier ("printf"))
289 is_scan = 0;
290 else if (format_type == get_identifier ("scanf"))
291 is_scan = 1;
292 else
293 {
294 error_with_decl (decl, "unrecognized format specifier for `%s'");
295 return;
296 }
297
298 if (first_arg_num != 0 && first_arg_num <= format_num)
299 {
300 error_with_decl (decl,
301 "format string arg follows the args to be formatted, for `%s'");
302 return;
303 }
304
305 /* Verify that the format_num argument is actually a string, in case
306 the format attribute is in error. */
307 argument = TYPE_ARG_TYPES (TREE_TYPE (decl));
308 for (arg_num = 1; ; ++arg_num)
309 {
310 if (argument == 0 || arg_num == format_num)
311 break;
312 argument = TREE_CHAIN (argument);
313 }
314 if (! argument
315 || TREE_CODE (TREE_VALUE (argument)) != POINTER_TYPE
316 || (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_VALUE (argument)))
317 != char_type_node))
318 {
319 error_with_decl (decl,
320 "format string arg not a string type, for `%s'");
321 return;
322 }
323 if (first_arg_num != 0)
324 {
325 /* Verify that first_arg_num points to the last arg, the ... */
326 while (argument)
327 arg_num++, argument = TREE_CHAIN (argument);
328 if (arg_num != first_arg_num)
329 {
330 error_with_decl (decl,
331 "args to be formatted is not ..., for `%s'");
332 return;
333 }
334 }
335
336 record_format_info (DECL_NAME (decl), is_scan, format_num,
337 first_arg_num);
338 }
339 }
340 \f
341 /* Print a warning if a constant expression had overflow in folding.
342 Invoke this function on every expression that the language
343 requires to be a constant expression.
344 Note the ANSI C standard says it is erroneous for a
345 constant expression to overflow. */
346
347 void
348 constant_expression_warning (value)
349 tree value;
350 {
351 if (TREE_CODE (value) == INTEGER_CST && TREE_CONSTANT_OVERFLOW (value))
352 {
353 /* ??? This is a warning, not a pedwarn, in 2.4,
354 because it happens in contexts that are not
355 "constant expressions" in ANSI C.
356 Fix the problem differently in 2.5. */
357 warning ("overflow in constant expression");
358 /* Suppress duplicate warnings. */
359 TREE_CONSTANT_OVERFLOW (value) = 0;
360 }
361 }
362
363 /* Print a warning if an expression had overflow in folding.
364 Invoke this function on every expression that
365 (1) appears in the source code, and
366 (2) might be a constant expression that overflowed, and
367 (3) is not already checked by convert_and_check;
368 however, do not invoke this function on operands of explicit casts. */
369
370 void
371 overflow_warning (value)
372 tree value;
373 {
374 if (TREE_CODE (value) == INTEGER_CST && TREE_CONSTANT_OVERFLOW (value))
375 {
376 /* ??? This is a warning, not a pedwarn, in 2.4,
377 because it happens in contexts that are not
378 "constant expressions" in ANSI C.
379 Fix the problem differently in 2.5. */
380 warning ("integer overflow in expression");
381 TREE_CONSTANT_OVERFLOW (value) = 0;
382 }
383 }
384
385 /* Print a warning if a large constant is truncated to unsigned,
386 or if -Wconversion is used and a constant < 0 is converted to unsigned.
387 Invoke this function on every expression that might be implicitly
388 converted to an unsigned type. */
389
390 void
391 unsigned_conversion_warning (result, operand)
392 tree result, operand;
393 {
394 if (TREE_CODE (operand) == INTEGER_CST
395 && TREE_CODE (TREE_TYPE (result)) == INTEGER_TYPE
396 && TREE_UNSIGNED (TREE_TYPE (result))
397 && !int_fits_type_p (operand, TREE_TYPE (result)))
398 {
399 if (!int_fits_type_p (operand, signed_type (TREE_TYPE (result))))
400 /* This detects cases like converting -129 or 256 to unsigned char. */
401 pedwarn ("large integer implicitly truncated to unsigned type");
402 else if (warn_conversion)
403 pedwarn ("negative integer implicitly converted to unsigned type");
404 }
405 }
406
407 /* Convert EXPR to TYPE, warning about conversion problems with constants.
408 Invoke this function on every expression that is converted implicitly,
409 i.e. because of language rules and not because of an explicit cast. */
410
411 tree
412 convert_and_check (type, expr)
413 tree type, expr;
414 {
415 tree t = convert (type, expr);
416 if (TREE_CODE (t) == INTEGER_CST)
417 {
418 if (TREE_UNSIGNED (TREE_TYPE (expr))
419 && !TREE_UNSIGNED (type)
420 && TREE_CODE (TREE_TYPE (expr)) == INTEGER_TYPE
421 && TYPE_PRECISION (type) == TYPE_PRECISION (TREE_TYPE (expr)))
422 /* No warning for converting 0x80000000 to int. */
423 TREE_CONSTANT_OVERFLOW (t) = 0;
424 else if (TREE_CONSTANT_OVERFLOW (t))
425 {
426 /* ??? This is a warning, not a pedwarn, in 2.4,
427 because it happens in contexts that are not
428 "constant expressions" in ANSI C.
429 Fix the problem differently in 2.5. */
430 warning ("overflow in implicit constant conversion");
431 TREE_CONSTANT_OVERFLOW (t) = 0;
432 }
433 else
434 unsigned_conversion_warning (t, expr);
435 }
436 return t;
437 }
438 \f
439 void
440 c_expand_expr_stmt (expr)
441 tree expr;
442 {
443 /* Do default conversion if safe and possibly important,
444 in case within ({...}). */
445 if ((TREE_CODE (TREE_TYPE (expr)) == ARRAY_TYPE && lvalue_p (expr))
446 || TREE_CODE (TREE_TYPE (expr)) == FUNCTION_TYPE)
447 expr = default_conversion (expr);
448
449 if (TREE_TYPE (expr) != error_mark_node
450 && TYPE_SIZE (TREE_TYPE (expr)) == 0
451 && TREE_CODE (TREE_TYPE (expr)) != ARRAY_TYPE)
452 error ("expression statement has incomplete type");
453
454 expand_expr_stmt (expr);
455 }
456 \f
457 /* Validate the expression after `case' and apply default promotions. */
458
459 tree
460 check_case_value (value)
461 tree value;
462 {
463 if (value == NULL_TREE)
464 return value;
465
466 /* Strip NON_LVALUE_EXPRs since we aren't using as an lvalue. */
467 STRIP_TYPE_NOPS (value);
468
469 if (TREE_CODE (value) != INTEGER_CST
470 && value != error_mark_node)
471 {
472 error ("case label does not reduce to an integer constant");
473 value = error_mark_node;
474 }
475 else
476 /* Promote char or short to int. */
477 value = default_conversion (value);
478
479 constant_expression_warning (value);
480
481 return value;
482 }
483 \f
484 /* Return an integer type with BITS bits of precision,
485 that is unsigned if UNSIGNEDP is nonzero, otherwise signed. */
486
487 tree
488 type_for_size (bits, unsignedp)
489 unsigned bits;
490 int unsignedp;
491 {
492 if (bits == TYPE_PRECISION (signed_char_type_node))
493 return unsignedp ? unsigned_char_type_node : signed_char_type_node;
494
495 if (bits == TYPE_PRECISION (short_integer_type_node))
496 return unsignedp ? short_unsigned_type_node : short_integer_type_node;
497
498 if (bits == TYPE_PRECISION (integer_type_node))
499 return unsignedp ? unsigned_type_node : integer_type_node;
500
501 if (bits == TYPE_PRECISION (long_integer_type_node))
502 return unsignedp ? long_unsigned_type_node : long_integer_type_node;
503
504 if (bits == TYPE_PRECISION (long_long_integer_type_node))
505 return (unsignedp ? long_long_unsigned_type_node
506 : long_long_integer_type_node);
507
508 if (bits <= TYPE_PRECISION (intQI_type_node))
509 return unsignedp ? unsigned_intQI_type_node : intQI_type_node;
510
511 if (bits <= TYPE_PRECISION (intHI_type_node))
512 return unsignedp ? unsigned_intHI_type_node : intHI_type_node;
513
514 if (bits <= TYPE_PRECISION (intSI_type_node))
515 return unsignedp ? unsigned_intSI_type_node : intSI_type_node;
516
517 if (bits <= TYPE_PRECISION (intDI_type_node))
518 return unsignedp ? unsigned_intDI_type_node : intDI_type_node;
519
520 return 0;
521 }
522
523 /* Return a data type that has machine mode MODE.
524 If the mode is an integer,
525 then UNSIGNEDP selects between signed and unsigned types. */
526
527 tree
528 type_for_mode (mode, unsignedp)
529 enum machine_mode mode;
530 int unsignedp;
531 {
532 if (mode == TYPE_MODE (signed_char_type_node))
533 return unsignedp ? unsigned_char_type_node : signed_char_type_node;
534
535 if (mode == TYPE_MODE (short_integer_type_node))
536 return unsignedp ? short_unsigned_type_node : short_integer_type_node;
537
538 if (mode == TYPE_MODE (integer_type_node))
539 return unsignedp ? unsigned_type_node : integer_type_node;
540
541 if (mode == TYPE_MODE (long_integer_type_node))
542 return unsignedp ? long_unsigned_type_node : long_integer_type_node;
543
544 if (mode == TYPE_MODE (long_long_integer_type_node))
545 return unsignedp ? long_long_unsigned_type_node : long_long_integer_type_node;
546
547 if (mode == TYPE_MODE (intQI_type_node))
548 return unsignedp ? unsigned_intQI_type_node : intQI_type_node;
549
550 if (mode == TYPE_MODE (intHI_type_node))
551 return unsignedp ? unsigned_intHI_type_node : intHI_type_node;
552
553 if (mode == TYPE_MODE (intSI_type_node))
554 return unsignedp ? unsigned_intSI_type_node : intSI_type_node;
555
556 if (mode == TYPE_MODE (intDI_type_node))
557 return unsignedp ? unsigned_intDI_type_node : intDI_type_node;
558
559 if (mode == TYPE_MODE (float_type_node))
560 return float_type_node;
561
562 if (mode == TYPE_MODE (double_type_node))
563 return double_type_node;
564
565 if (mode == TYPE_MODE (long_double_type_node))
566 return long_double_type_node;
567
568 if (mode == TYPE_MODE (build_pointer_type (char_type_node)))
569 return build_pointer_type (char_type_node);
570
571 if (mode == TYPE_MODE (build_pointer_type (integer_type_node)))
572 return build_pointer_type (integer_type_node);
573
574 return 0;
575 }
576 \f
577 /* Print an error message for invalid operands to arith operation CODE.
578 NOP_EXPR is used as a special case (see truthvalue_conversion). */
579
580 void
581 binary_op_error (code)
582 enum tree_code code;
583 {
584 register char *opname;
585 switch (code)
586 {
587 case NOP_EXPR:
588 error ("invalid truth-value expression");
589 return;
590
591 case PLUS_EXPR:
592 opname = "+"; break;
593 case MINUS_EXPR:
594 opname = "-"; break;
595 case MULT_EXPR:
596 opname = "*"; break;
597 case MAX_EXPR:
598 opname = "max"; break;
599 case MIN_EXPR:
600 opname = "min"; break;
601 case EQ_EXPR:
602 opname = "=="; break;
603 case NE_EXPR:
604 opname = "!="; break;
605 case LE_EXPR:
606 opname = "<="; break;
607 case GE_EXPR:
608 opname = ">="; break;
609 case LT_EXPR:
610 opname = "<"; break;
611 case GT_EXPR:
612 opname = ">"; break;
613 case LSHIFT_EXPR:
614 opname = "<<"; break;
615 case RSHIFT_EXPR:
616 opname = ">>"; break;
617 case TRUNC_MOD_EXPR:
618 case FLOOR_MOD_EXPR:
619 opname = "%"; break;
620 case TRUNC_DIV_EXPR:
621 case FLOOR_DIV_EXPR:
622 opname = "/"; break;
623 case BIT_AND_EXPR:
624 opname = "&"; break;
625 case BIT_IOR_EXPR:
626 opname = "|"; break;
627 case TRUTH_ANDIF_EXPR:
628 opname = "&&"; break;
629 case TRUTH_ORIF_EXPR:
630 opname = "||"; break;
631 case BIT_XOR_EXPR:
632 opname = "^"; break;
633 case LROTATE_EXPR:
634 case RROTATE_EXPR:
635 opname = "rotate"; break;
636 }
637 error ("invalid operands to binary %s", opname);
638 }
639 \f
640 /* Subroutine of build_binary_op, used for comparison operations.
641 See if the operands have both been converted from subword integer types
642 and, if so, perhaps change them both back to their original type.
643
644 The arguments of this function are all pointers to local variables
645 of build_binary_op: OP0_PTR is &OP0, OP1_PTR is &OP1,
646 RESTYPE_PTR is &RESULT_TYPE and RESCODE_PTR is &RESULTCODE.
647
648 If this function returns nonzero, it means that the comparison has
649 a constant value. What this function returns is an expression for
650 that value. */
651
652 tree
653 shorten_compare (op0_ptr, op1_ptr, restype_ptr, rescode_ptr)
654 tree *op0_ptr, *op1_ptr;
655 tree *restype_ptr;
656 enum tree_code *rescode_ptr;
657 {
658 register tree type;
659 tree op0 = *op0_ptr;
660 tree op1 = *op1_ptr;
661 int unsignedp0, unsignedp1;
662 int real1, real2;
663 tree primop0, primop1;
664 enum tree_code code = *rescode_ptr;
665
666 /* Throw away any conversions to wider types
667 already present in the operands. */
668
669 primop0 = get_narrower (op0, &unsignedp0);
670 primop1 = get_narrower (op1, &unsignedp1);
671
672 /* Handle the case that OP0 does not *contain* a conversion
673 but it *requires* conversion to FINAL_TYPE. */
674
675 if (op0 == primop0 && TREE_TYPE (op0) != *restype_ptr)
676 unsignedp0 = TREE_UNSIGNED (TREE_TYPE (op0));
677 if (op1 == primop1 && TREE_TYPE (op1) != *restype_ptr)
678 unsignedp1 = TREE_UNSIGNED (TREE_TYPE (op1));
679
680 /* If one of the operands must be floated, we cannot optimize. */
681 real1 = TREE_CODE (TREE_TYPE (primop0)) == REAL_TYPE;
682 real2 = TREE_CODE (TREE_TYPE (primop1)) == REAL_TYPE;
683
684 /* If first arg is constant, swap the args (changing operation
685 so value is preserved), for canonicalization. */
686
687 if (TREE_CONSTANT (primop0))
688 {
689 register tree tem = primop0;
690 register int temi = unsignedp0;
691 primop0 = primop1;
692 primop1 = tem;
693 tem = op0;
694 op0 = op1;
695 op1 = tem;
696 *op0_ptr = op0;
697 *op1_ptr = op1;
698 unsignedp0 = unsignedp1;
699 unsignedp1 = temi;
700 temi = real1;
701 real1 = real2;
702 real2 = temi;
703
704 switch (code)
705 {
706 case LT_EXPR:
707 code = GT_EXPR;
708 break;
709 case GT_EXPR:
710 code = LT_EXPR;
711 break;
712 case LE_EXPR:
713 code = GE_EXPR;
714 break;
715 case GE_EXPR:
716 code = LE_EXPR;
717 break;
718 }
719 *rescode_ptr = code;
720 }
721
722 /* If comparing an integer against a constant more bits wide,
723 maybe we can deduce a value of 1 or 0 independent of the data.
724 Or else truncate the constant now
725 rather than extend the variable at run time.
726
727 This is only interesting if the constant is the wider arg.
728 Also, it is not safe if the constant is unsigned and the
729 variable arg is signed, since in this case the variable
730 would be sign-extended and then regarded as unsigned.
731 Our technique fails in this case because the lowest/highest
732 possible unsigned results don't follow naturally from the
733 lowest/highest possible values of the variable operand.
734 For just EQ_EXPR and NE_EXPR there is another technique that
735 could be used: see if the constant can be faithfully represented
736 in the other operand's type, by truncating it and reextending it
737 and see if that preserves the constant's value. */
738
739 if (!real1 && !real2
740 && TREE_CODE (primop1) == INTEGER_CST
741 && TYPE_PRECISION (TREE_TYPE (primop0)) < TYPE_PRECISION (*restype_ptr))
742 {
743 int min_gt, max_gt, min_lt, max_lt;
744 tree maxval, minval;
745 /* 1 if comparison is nominally unsigned. */
746 int unsignedp = TREE_UNSIGNED (*restype_ptr);
747 tree val;
748
749 type = signed_or_unsigned_type (unsignedp0, TREE_TYPE (primop0));
750
751 maxval = TYPE_MAX_VALUE (type);
752 minval = TYPE_MIN_VALUE (type);
753
754 if (unsignedp && !unsignedp0)
755 *restype_ptr = signed_type (*restype_ptr);
756
757 if (TREE_TYPE (primop1) != *restype_ptr)
758 primop1 = convert (*restype_ptr, primop1);
759 if (type != *restype_ptr)
760 {
761 minval = convert (*restype_ptr, minval);
762 maxval = convert (*restype_ptr, maxval);
763 }
764
765 if (unsignedp && unsignedp0)
766 {
767 min_gt = INT_CST_LT_UNSIGNED (primop1, minval);
768 max_gt = INT_CST_LT_UNSIGNED (primop1, maxval);
769 min_lt = INT_CST_LT_UNSIGNED (minval, primop1);
770 max_lt = INT_CST_LT_UNSIGNED (maxval, primop1);
771 }
772 else
773 {
774 min_gt = INT_CST_LT (primop1, minval);
775 max_gt = INT_CST_LT (primop1, maxval);
776 min_lt = INT_CST_LT (minval, primop1);
777 max_lt = INT_CST_LT (maxval, primop1);
778 }
779
780 val = 0;
781 /* This used to be a switch, but Genix compiler can't handle that. */
782 if (code == NE_EXPR)
783 {
784 if (max_lt || min_gt)
785 val = integer_one_node;
786 }
787 else if (code == EQ_EXPR)
788 {
789 if (max_lt || min_gt)
790 val = integer_zero_node;
791 }
792 else if (code == LT_EXPR)
793 {
794 if (max_lt)
795 val = integer_one_node;
796 if (!min_lt)
797 val = integer_zero_node;
798 }
799 else if (code == GT_EXPR)
800 {
801 if (min_gt)
802 val = integer_one_node;
803 if (!max_gt)
804 val = integer_zero_node;
805 }
806 else if (code == LE_EXPR)
807 {
808 if (!max_gt)
809 val = integer_one_node;
810 if (min_gt)
811 val = integer_zero_node;
812 }
813 else if (code == GE_EXPR)
814 {
815 if (!min_lt)
816 val = integer_one_node;
817 if (max_lt)
818 val = integer_zero_node;
819 }
820
821 /* If primop0 was sign-extended and unsigned comparison specd,
822 we did a signed comparison above using the signed type bounds.
823 But the comparison we output must be unsigned.
824
825 Also, for inequalities, VAL is no good; but if the signed
826 comparison had *any* fixed result, it follows that the
827 unsigned comparison just tests the sign in reverse
828 (positive values are LE, negative ones GE).
829 So we can generate an unsigned comparison
830 against an extreme value of the signed type. */
831
832 if (unsignedp && !unsignedp0)
833 {
834 if (val != 0)
835 switch (code)
836 {
837 case LT_EXPR:
838 case GE_EXPR:
839 primop1 = TYPE_MIN_VALUE (type);
840 val = 0;
841 break;
842
843 case LE_EXPR:
844 case GT_EXPR:
845 primop1 = TYPE_MAX_VALUE (type);
846 val = 0;
847 break;
848 }
849 type = unsigned_type (type);
850 }
851
852 if (!max_gt && !unsignedp0)
853 {
854 /* This is the case of (char)x >?< 0x80, which people used to use
855 expecting old C compilers to change the 0x80 into -0x80. */
856 if (val == integer_zero_node)
857 warning ("comparison is always 0 due to limited range of data type");
858 if (val == integer_one_node)
859 warning ("comparison is always 1 due to limited range of data type");
860 }
861
862 if (!min_lt && unsignedp0)
863 {
864 /* This is the case of (unsigned char)x >?< -1 or < 0. */
865 if (val == integer_zero_node)
866 warning ("comparison is always 0 due to limited range of data type");
867 if (val == integer_one_node)
868 warning ("comparison is always 1 due to limited range of data type");
869 }
870
871 if (val != 0)
872 {
873 /* Don't forget to evaluate PRIMOP0 if it has side effects. */
874 if (TREE_SIDE_EFFECTS (primop0))
875 return build (COMPOUND_EXPR, TREE_TYPE (val), primop0, val);
876 return val;
877 }
878
879 /* Value is not predetermined, but do the comparison
880 in the type of the operand that is not constant.
881 TYPE is already properly set. */
882 }
883 else if (real1 && real2
884 && (TYPE_PRECISION (TREE_TYPE (primop0))
885 == TYPE_PRECISION (TREE_TYPE (primop1))))
886 type = TREE_TYPE (primop0);
887
888 /* If args' natural types are both narrower than nominal type
889 and both extend in the same manner, compare them
890 in the type of the wider arg.
891 Otherwise must actually extend both to the nominal
892 common type lest different ways of extending
893 alter the result.
894 (eg, (short)-1 == (unsigned short)-1 should be 0.) */
895
896 else if (unsignedp0 == unsignedp1 && real1 == real2
897 && TYPE_PRECISION (TREE_TYPE (primop0)) < TYPE_PRECISION (*restype_ptr)
898 && TYPE_PRECISION (TREE_TYPE (primop1)) < TYPE_PRECISION (*restype_ptr))
899 {
900 type = common_type (TREE_TYPE (primop0), TREE_TYPE (primop1));
901 type = signed_or_unsigned_type (unsignedp0
902 || TREE_UNSIGNED (*restype_ptr),
903 type);
904 /* Make sure shorter operand is extended the right way
905 to match the longer operand. */
906 primop0 = convert (signed_or_unsigned_type (unsignedp0, TREE_TYPE (primop0)),
907 primop0);
908 primop1 = convert (signed_or_unsigned_type (unsignedp1, TREE_TYPE (primop1)),
909 primop1);
910 }
911 else
912 {
913 /* Here we must do the comparison on the nominal type
914 using the args exactly as we received them. */
915 type = *restype_ptr;
916 primop0 = op0;
917 primop1 = op1;
918
919 if (!real1 && !real2 && integer_zerop (primop1)
920 && TREE_UNSIGNED (TREE_TYPE (primop0)))
921 {
922 tree value = 0;
923 switch (code)
924 {
925 case GE_EXPR:
926 if (extra_warnings)
927 warning ("unsigned value >= 0 is always 1");
928 value = integer_one_node;
929 break;
930
931 case LT_EXPR:
932 if (extra_warnings)
933 warning ("unsigned value < 0 is always 0");
934 value = integer_zero_node;
935 }
936
937 if (value != 0)
938 {
939 /* Don't forget to evaluate PRIMOP0 if it has side effects. */
940 if (TREE_SIDE_EFFECTS (primop0))
941 return build (COMPOUND_EXPR, TREE_TYPE (value),
942 primop0, value);
943 return value;
944 }
945 }
946 }
947
948 *op0_ptr = convert (type, primop0);
949 *op1_ptr = convert (type, primop1);
950
951 *restype_ptr = integer_type_node;
952
953 return 0;
954 }
955 \f
956 /* Prepare expr to be an argument of a TRUTH_NOT_EXPR,
957 or validate its data type for an `if' or `while' statement or ?..: exp.
958
959 This preparation consists of taking the ordinary
960 representation of an expression expr and producing a valid tree
961 boolean expression describing whether expr is nonzero. We could
962 simply always do build_binary_op (NE_EXPR, expr, integer_zero_node, 1),
963 but we optimize comparisons, &&, ||, and !.
964
965 The resulting type should always be `integer_type_node'. */
966
967 tree
968 truthvalue_conversion (expr)
969 tree expr;
970 {
971 register enum tree_code code;
972
973 if (TREE_CODE (expr) == ERROR_MARK)
974 return expr;
975
976 #if 0 /* This appears to be wrong for C++. */
977 /* These really should return error_mark_node after 2.4 is stable.
978 But not all callers handle ERROR_MARK properly. */
979 switch (TREE_CODE (TREE_TYPE (expr)))
980 {
981 case RECORD_TYPE:
982 error ("struct type value used where scalar is required");
983 return integer_zero_node;
984
985 case UNION_TYPE:
986 error ("union type value used where scalar is required");
987 return integer_zero_node;
988
989 case ARRAY_TYPE:
990 error ("array type value used where scalar is required");
991 return integer_zero_node;
992
993 default:
994 break;
995 }
996 #endif /* 0 */
997
998 switch (TREE_CODE (expr))
999 {
1000 /* It is simpler and generates better code to have only TRUTH_*_EXPR
1001 or comparison expressions as truth values at this level. */
1002 #if 0
1003 case COMPONENT_REF:
1004 /* A one-bit unsigned bit-field is already acceptable. */
1005 if (1 == TREE_INT_CST_LOW (DECL_SIZE (TREE_OPERAND (expr, 1)))
1006 && TREE_UNSIGNED (TREE_OPERAND (expr, 1)))
1007 return expr;
1008 break;
1009 #endif
1010
1011 case EQ_EXPR:
1012 /* It is simpler and generates better code to have only TRUTH_*_EXPR
1013 or comparison expressions as truth values at this level. */
1014 #if 0
1015 if (integer_zerop (TREE_OPERAND (expr, 1)))
1016 return build_unary_op (TRUTH_NOT_EXPR, TREE_OPERAND (expr, 0), 0);
1017 #endif
1018 case NE_EXPR: case LE_EXPR: case GE_EXPR: case LT_EXPR: case GT_EXPR:
1019 case TRUTH_ANDIF_EXPR:
1020 case TRUTH_ORIF_EXPR:
1021 case TRUTH_AND_EXPR:
1022 case TRUTH_OR_EXPR:
1023 case TRUTH_XOR_EXPR:
1024 case ERROR_MARK:
1025 return expr;
1026
1027 case INTEGER_CST:
1028 return integer_zerop (expr) ? integer_zero_node : integer_one_node;
1029
1030 case REAL_CST:
1031 return real_zerop (expr) ? integer_zero_node : integer_one_node;
1032
1033 case ADDR_EXPR:
1034 if (TREE_SIDE_EFFECTS (TREE_OPERAND (expr, 0)))
1035 return build (COMPOUND_EXPR, integer_type_node,
1036 TREE_OPERAND (expr, 0), integer_one_node);
1037 else
1038 return integer_one_node;
1039
1040 case COMPLEX_EXPR:
1041 return build_binary_op ((TREE_SIDE_EFFECTS (TREE_OPERAND (expr, 1))
1042 ? TRUTH_AND_EXPR : TRUTH_ANDIF_EXPR),
1043 truthvalue_conversion (TREE_OPERAND (expr, 0)),
1044 truthvalue_conversion (TREE_OPERAND (expr, 1)),
1045 0);
1046
1047 case NEGATE_EXPR:
1048 case ABS_EXPR:
1049 case FLOAT_EXPR:
1050 case FFS_EXPR:
1051 /* These don't change whether an object is non-zero or zero. */
1052 return truthvalue_conversion (TREE_OPERAND (expr, 0));
1053
1054 case LROTATE_EXPR:
1055 case RROTATE_EXPR:
1056 /* These don't change whether an object is zero or non-zero, but
1057 we can't ignore them if their second arg has side-effects. */
1058 if (TREE_SIDE_EFFECTS (TREE_OPERAND (expr, 1)))
1059 return build (COMPOUND_EXPR, integer_type_node, TREE_OPERAND (expr, 1),
1060 truthvalue_conversion (TREE_OPERAND (expr, 0)));
1061 else
1062 return truthvalue_conversion (TREE_OPERAND (expr, 0));
1063
1064 case COND_EXPR:
1065 /* Distribute the conversion into the arms of a COND_EXPR. */
1066 return fold (build (COND_EXPR, integer_type_node, TREE_OPERAND (expr, 0),
1067 truthvalue_conversion (TREE_OPERAND (expr, 1)),
1068 truthvalue_conversion (TREE_OPERAND (expr, 2))));
1069
1070 case CONVERT_EXPR:
1071 /* Don't cancel the effect of a CONVERT_EXPR from a REFERENCE_TYPE,
1072 since that affects how `default_conversion' will behave. */
1073 if (TREE_CODE (TREE_TYPE (expr)) == REFERENCE_TYPE
1074 || TREE_CODE (TREE_TYPE (TREE_OPERAND (expr, 0))) == REFERENCE_TYPE)
1075 break;
1076 /* fall through... */
1077 case NOP_EXPR:
1078 /* If this is widening the argument, we can ignore it. */
1079 if (TYPE_PRECISION (TREE_TYPE (expr))
1080 >= TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (expr, 0))))
1081 return truthvalue_conversion (TREE_OPERAND (expr, 0));
1082 break;
1083
1084 case MINUS_EXPR:
1085 /* With IEEE arithmetic, x - x may not equal 0, so we can't optimize
1086 this case. */
1087 if (TARGET_FLOAT_FORMAT == IEEE_FLOAT_FORMAT
1088 && TREE_CODE (TREE_TYPE (expr)) == REAL_TYPE)
1089 break;
1090 /* fall through... */
1091 case BIT_XOR_EXPR:
1092 /* This and MINUS_EXPR can be changed into a comparison of the
1093 two objects. */
1094 if (TREE_TYPE (TREE_OPERAND (expr, 0))
1095 == TREE_TYPE (TREE_OPERAND (expr, 1)))
1096 return build_binary_op (NE_EXPR, TREE_OPERAND (expr, 0),
1097 TREE_OPERAND (expr, 1), 1);
1098 return build_binary_op (NE_EXPR, TREE_OPERAND (expr, 0),
1099 fold (build1 (NOP_EXPR,
1100 TREE_TYPE (TREE_OPERAND (expr, 0)),
1101 TREE_OPERAND (expr, 1))), 1);
1102
1103 case MODIFY_EXPR:
1104 if (warn_parentheses && C_EXP_ORIGINAL_CODE (expr) == MODIFY_EXPR)
1105 warning ("suggest parentheses around assignment used as truth value");
1106 break;
1107 }
1108
1109 if (TREE_CODE (TREE_TYPE (expr)) == COMPLEX_TYPE)
1110 return (build_binary_op
1111 ((TREE_SIDE_EFFECTS (expr)
1112 ? TRUTH_AND_EXPR : TRUTH_ANDIF_EXPR),
1113 truthvalue_conversion (build_unary_op (REALPART_EXPR, expr, 0)),
1114 truthvalue_conversion (build_unary_op (IMAGPART_EXPR, expr, 0)),
1115 0));
1116
1117 return build_binary_op (NE_EXPR, expr, integer_zero_node, 1);
1118 }
1119 \f
1120 /* Read the rest of a #-directive from input stream FINPUT.
1121 In normal use, the directive name and the white space after it
1122 have already been read, so they won't be included in the result.
1123 We allow for the fact that the directive line may contain
1124 a newline embedded within a character or string literal which forms
1125 a part of the directive.
1126
1127 The value is a string in a reusable buffer. It remains valid
1128 only until the next time this function is called. */
1129
1130 char *
1131 get_directive_line (finput)
1132 register FILE *finput;
1133 {
1134 static char *directive_buffer = NULL;
1135 static unsigned buffer_length = 0;
1136 register char *p;
1137 register char *buffer_limit;
1138 register int looking_for = 0;
1139 register int char_escaped = 0;
1140
1141 if (buffer_length == 0)
1142 {
1143 directive_buffer = (char *)xmalloc (128);
1144 buffer_length = 128;
1145 }
1146
1147 buffer_limit = &directive_buffer[buffer_length];
1148
1149 for (p = directive_buffer; ; )
1150 {
1151 int c;
1152
1153 /* Make buffer bigger if it is full. */
1154 if (p >= buffer_limit)
1155 {
1156 register unsigned bytes_used = (p - directive_buffer);
1157
1158 buffer_length *= 2;
1159 directive_buffer
1160 = (char *)xrealloc (directive_buffer, buffer_length);
1161 p = &directive_buffer[bytes_used];
1162 buffer_limit = &directive_buffer[buffer_length];
1163 }
1164
1165 c = getc (finput);
1166
1167 /* Discard initial whitespace. */
1168 if ((c == ' ' || c == '\t') && p == directive_buffer)
1169 continue;
1170
1171 /* Detect the end of the directive. */
1172 if (c == '\n' && looking_for == 0)
1173 {
1174 ungetc (c, finput);
1175 c = '\0';
1176 }
1177
1178 *p++ = c;
1179
1180 if (c == 0)
1181 return directive_buffer;
1182
1183 /* Handle string and character constant syntax. */
1184 if (looking_for)
1185 {
1186 if (looking_for == c && !char_escaped)
1187 looking_for = 0; /* Found terminator... stop looking. */
1188 }
1189 else
1190 if (c == '\'' || c == '"')
1191 looking_for = c; /* Don't stop buffering until we see another
1192 another one of these (or an EOF). */
1193
1194 /* Handle backslash. */
1195 char_escaped = (c == '\\' && ! char_escaped);
1196 }
1197 }
1198 \f
1199 /* Make a variant type in the proper way for C/C++, propagating qualifiers
1200 down to the element type of an array. */
1201
1202 tree
1203 c_build_type_variant (type, constp, volatilep)
1204 tree type;
1205 int constp, volatilep;
1206 {
1207 if (TREE_CODE (type) == ARRAY_TYPE)
1208 {
1209 tree real_main_variant = TYPE_MAIN_VARIANT (type);
1210 int permanent = TREE_PERMANENT (type);
1211
1212 if (permanent)
1213 push_obstacks (&permanent_obstack, &permanent_obstack);
1214 type = build_array_type (c_build_type_variant (TREE_TYPE (type),
1215 constp, volatilep),
1216 TYPE_DOMAIN (type));
1217 TYPE_MAIN_VARIANT (type) = real_main_variant;
1218 if (permanent)
1219 pop_obstacks ();
1220 }
1221 return build_type_variant (type, constp, volatilep);
1222 }
This page took 0.093615 seconds and 6 git commands to generate.