(constant_expression_warning)
[platform/upstream/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         /* Verify that first_arg_num points to the last argument, the ... */
324         while (argument)
325           arg_num++, argument = TREE_CHAIN (argument);
326         if (arg_num != first_arg_num)
327           {
328             error_with_decl (decl,
329                              "args to be formatted is not ..., for `%s'");
330             return;
331           }
332         
333         record_format_info (DECL_NAME (decl), is_scan, format_num,
334                             first_arg_num);
335       }
336 }
337 \f
338 /* Print a warning if a constant expression had overflow in folding.
339    Invoke this function on every expression that the language
340    requires to be a constant expression.
341    Note the ANSI C standard says it is erroneous for a
342    constant expression to overflow.  */
343
344 void
345 constant_expression_warning (value)
346      tree value;
347 {
348   if (TREE_CODE (value) == INTEGER_CST && TREE_CONSTANT_OVERFLOW (value))
349     {
350       /* ??? This is a warning, not a pedwarn, in 2.4,
351          because it happens in contexts that are not
352          "constant expressions" in ANSI C.
353          Fix the problem differently in 2.5.  */
354       warning ("overflow in constant expression");
355       /* Suppress duplicate warnings.  */
356       TREE_CONSTANT_OVERFLOW (value) = 0;
357     }
358 }
359
360 /* Print a warning if an expression had overflow in folding.
361    Invoke this function on every expression that
362    (1) appears in the source code, and
363    (2) might be a constant expression that overflowed, and
364    (3) is not already checked by convert_and_check;
365    however, do not invoke this function on operands of explicit casts.  */
366
367 void
368 overflow_warning (value)
369      tree value;
370 {
371   if (TREE_CODE (value) == INTEGER_CST && TREE_CONSTANT_OVERFLOW (value))
372     {
373       /* ??? This is a warning, not a pedwarn, in 2.4,
374          because it happens in contexts that are not
375          "constant expressions" in ANSI C.
376          Fix the problem differently in 2.5.  */
377       warning ("integer overflow in expression");
378       TREE_CONSTANT_OVERFLOW (value) = 0;
379     }
380 }
381
382 /* Print a warning if a large constant is truncated to unsigned,
383    or if -Wconversion is used and a constant < 0 is converted to unsigned.
384    Invoke this function on every expression that might be implicitly
385    converted to an unsigned type.  */
386
387 void
388 unsigned_conversion_warning (result, operand)
389      tree result, operand;
390 {
391   if (TREE_CODE (operand) == INTEGER_CST
392       && TREE_CODE (TREE_TYPE (result)) == INTEGER_TYPE
393       && TREE_UNSIGNED (TREE_TYPE (result))
394       && !int_fits_type_p (operand, TREE_TYPE (result)))
395     {
396       if (!int_fits_type_p (operand, signed_type (TREE_TYPE (result))))
397         /* This detects cases like converting -129 or 256 to unsigned char.  */
398         pedwarn ("large integer implicitly truncated to unsigned type");
399       else if (warn_conversion)
400         pedwarn ("negative integer implicitly converted to unsigned type");
401     }
402 }
403
404 /* Convert EXPR to TYPE, warning about conversion problems with constants.
405    Invoke this function on every expression that is converted implicitly,
406    i.e. because of language rules and not because of an explicit cast.  */
407
408 tree
409 convert_and_check (type, expr)
410      tree type, expr;
411 {
412   tree t = convert (type, expr);
413   if (TREE_CODE (t) == INTEGER_CST)
414     {
415       if (TREE_UNSIGNED (TREE_TYPE (expr))
416           && !TREE_UNSIGNED (type)
417           && TREE_CODE (TREE_TYPE (expr)) == INTEGER_TYPE
418           && TYPE_PRECISION (type) == TYPE_PRECISION (TREE_TYPE (expr)))
419         /* No warning for converting 0x80000000 to int.  */
420         TREE_CONSTANT_OVERFLOW (t) = 0;
421       else if (TREE_CONSTANT_OVERFLOW (t))
422         {
423           /* ??? This is a warning, not a pedwarn, in 2.4,
424              because it happens in contexts that are not
425              "constant expressions" in ANSI C.
426              Fix the problem differently in 2.5.  */
427           warning ("overflow in implicit constant conversion");
428           TREE_CONSTANT_OVERFLOW (t) = 0;
429         }
430       else
431         unsigned_conversion_warning (t, expr);
432     }
433   return t;
434 }
435 \f
436 void
437 c_expand_expr_stmt (expr)
438      tree expr;
439 {
440   /* Do default conversion if safe and possibly important,
441      in case within ({...}).  */
442   if ((TREE_CODE (TREE_TYPE (expr)) == ARRAY_TYPE && lvalue_p (expr))
443       || TREE_CODE (TREE_TYPE (expr)) == FUNCTION_TYPE)
444     expr = default_conversion (expr);
445
446   if (TREE_TYPE (expr) != error_mark_node
447       && TYPE_SIZE (TREE_TYPE (expr)) == 0
448       && TREE_CODE (TREE_TYPE (expr)) != ARRAY_TYPE)
449     error ("expression statement has incomplete type");
450
451   expand_expr_stmt (expr);
452 }
453 \f
454 /* Validate the expression after `case' and apply default promotions.  */
455
456 tree
457 check_case_value (value)
458      tree value;
459 {
460   if (value == NULL_TREE)
461     return value;
462
463   /* Strip NON_LVALUE_EXPRs since we aren't using as an lvalue.  */
464   STRIP_TYPE_NOPS (value);
465
466   if (TREE_CODE (value) != INTEGER_CST
467       && value != error_mark_node)
468     {
469       error ("case label does not reduce to an integer constant");
470       value = error_mark_node;
471     }
472   else
473     /* Promote char or short to int.  */
474     value = default_conversion (value);
475
476   constant_expression_warning (value);
477
478   return value;
479 }
480 \f
481 /* Return an integer type with BITS bits of precision,
482    that is unsigned if UNSIGNEDP is nonzero, otherwise signed.  */
483
484 tree
485 type_for_size (bits, unsignedp)
486      unsigned bits;
487      int unsignedp;
488 {
489   if (bits == TYPE_PRECISION (signed_char_type_node))
490     return unsignedp ? unsigned_char_type_node : signed_char_type_node;
491
492   if (bits == TYPE_PRECISION (short_integer_type_node))
493     return unsignedp ? short_unsigned_type_node : short_integer_type_node;
494
495   if (bits == TYPE_PRECISION (integer_type_node))
496     return unsignedp ? unsigned_type_node : integer_type_node;
497
498   if (bits == TYPE_PRECISION (long_integer_type_node))
499     return unsignedp ? long_unsigned_type_node : long_integer_type_node;
500
501   if (bits == TYPE_PRECISION (long_long_integer_type_node))
502     return (unsignedp ? long_long_unsigned_type_node
503             : long_long_integer_type_node);
504
505   if (bits <= TYPE_PRECISION (intQI_type_node))
506     return unsignedp ? unsigned_intQI_type_node : intQI_type_node;
507
508   if (bits <= TYPE_PRECISION (intHI_type_node))
509     return unsignedp ? unsigned_intHI_type_node : intHI_type_node;
510
511   if (bits <= TYPE_PRECISION (intSI_type_node))
512     return unsignedp ? unsigned_intSI_type_node : intSI_type_node;
513
514   if (bits <= TYPE_PRECISION (intDI_type_node))
515     return unsignedp ? unsigned_intDI_type_node : intDI_type_node;
516
517   return 0;
518 }
519
520 /* Return a data type that has machine mode MODE.
521    If the mode is an integer,
522    then UNSIGNEDP selects between signed and unsigned types.  */
523
524 tree
525 type_for_mode (mode, unsignedp)
526      enum machine_mode mode;
527      int unsignedp;
528 {
529   if (mode == TYPE_MODE (signed_char_type_node))
530     return unsignedp ? unsigned_char_type_node : signed_char_type_node;
531
532   if (mode == TYPE_MODE (short_integer_type_node))
533     return unsignedp ? short_unsigned_type_node : short_integer_type_node;
534
535   if (mode == TYPE_MODE (integer_type_node))
536     return unsignedp ? unsigned_type_node : integer_type_node;
537
538   if (mode == TYPE_MODE (long_integer_type_node))
539     return unsignedp ? long_unsigned_type_node : long_integer_type_node;
540
541   if (mode == TYPE_MODE (long_long_integer_type_node))
542     return unsignedp ? long_long_unsigned_type_node : long_long_integer_type_node;
543
544   if (mode == TYPE_MODE (intQI_type_node))
545     return unsignedp ? unsigned_intQI_type_node : intQI_type_node;
546
547   if (mode == TYPE_MODE (intHI_type_node))
548     return unsignedp ? unsigned_intHI_type_node : intHI_type_node;
549
550   if (mode == TYPE_MODE (intSI_type_node))
551     return unsignedp ? unsigned_intSI_type_node : intSI_type_node;
552
553   if (mode == TYPE_MODE (intDI_type_node))
554     return unsignedp ? unsigned_intDI_type_node : intDI_type_node;
555
556   if (mode == TYPE_MODE (float_type_node))
557     return float_type_node;
558
559   if (mode == TYPE_MODE (double_type_node))
560     return double_type_node;
561
562   if (mode == TYPE_MODE (long_double_type_node))
563     return long_double_type_node;
564
565   if (mode == TYPE_MODE (build_pointer_type (char_type_node)))
566     return build_pointer_type (char_type_node);
567
568   if (mode == TYPE_MODE (build_pointer_type (integer_type_node)))
569     return build_pointer_type (integer_type_node);
570
571   return 0;
572 }
573 \f
574 /* Print an error message for invalid operands to arith operation CODE.
575    NOP_EXPR is used as a special case (see truthvalue_conversion).  */
576
577 void
578 binary_op_error (code)
579      enum tree_code code;
580 {
581   register char *opname;
582   switch (code)
583     {
584     case NOP_EXPR:
585       error ("invalid truth-value expression");
586       return;
587
588     case PLUS_EXPR:
589       opname = "+"; break;
590     case MINUS_EXPR:
591       opname = "-"; break;
592     case MULT_EXPR:
593       opname = "*"; break;
594     case MAX_EXPR:
595       opname = "max"; break;
596     case MIN_EXPR:
597       opname = "min"; break;
598     case EQ_EXPR:
599       opname = "=="; break;
600     case NE_EXPR:
601       opname = "!="; break;
602     case LE_EXPR:
603       opname = "<="; break;
604     case GE_EXPR:
605       opname = ">="; break;
606     case LT_EXPR:
607       opname = "<"; break;
608     case GT_EXPR:
609       opname = ">"; break;
610     case LSHIFT_EXPR:
611       opname = "<<"; break;
612     case RSHIFT_EXPR:
613       opname = ">>"; break;
614     case TRUNC_MOD_EXPR:
615     case FLOOR_MOD_EXPR:
616       opname = "%"; break;
617     case TRUNC_DIV_EXPR:
618     case FLOOR_DIV_EXPR:
619       opname = "/"; break;
620     case BIT_AND_EXPR:
621       opname = "&"; break;
622     case BIT_IOR_EXPR:
623       opname = "|"; break;
624     case TRUTH_ANDIF_EXPR:
625       opname = "&&"; break;
626     case TRUTH_ORIF_EXPR:
627       opname = "||"; break;
628     case BIT_XOR_EXPR:
629       opname = "^"; break;
630     case LROTATE_EXPR:
631     case RROTATE_EXPR:
632       opname = "rotate"; break;
633     }
634   error ("invalid operands to binary %s", opname);
635 }
636 \f
637 /* Subroutine of build_binary_op, used for comparison operations.
638    See if the operands have both been converted from subword integer types
639    and, if so, perhaps change them both back to their original type.
640
641    The arguments of this function are all pointers to local variables
642    of build_binary_op: OP0_PTR is &OP0, OP1_PTR is &OP1,
643    RESTYPE_PTR is &RESULT_TYPE and RESCODE_PTR is &RESULTCODE.
644
645    If this function returns nonzero, it means that the comparison has
646    a constant value.  What this function returns is an expression for
647    that value.  */
648
649 tree
650 shorten_compare (op0_ptr, op1_ptr, restype_ptr, rescode_ptr)
651      tree *op0_ptr, *op1_ptr;
652      tree *restype_ptr;
653      enum tree_code *rescode_ptr;
654 {
655   register tree type;
656   tree op0 = *op0_ptr;
657   tree op1 = *op1_ptr;
658   int unsignedp0, unsignedp1;
659   int real1, real2;
660   tree primop0, primop1;
661   enum tree_code code = *rescode_ptr;
662
663   /* Throw away any conversions to wider types
664      already present in the operands.  */
665
666   primop0 = get_narrower (op0, &unsignedp0);
667   primop1 = get_narrower (op1, &unsignedp1);
668
669   /* Handle the case that OP0 does not *contain* a conversion
670      but it *requires* conversion to FINAL_TYPE.  */
671
672   if (op0 == primop0 && TREE_TYPE (op0) != *restype_ptr)
673     unsignedp0 = TREE_UNSIGNED (TREE_TYPE (op0));
674   if (op1 == primop1 && TREE_TYPE (op1) != *restype_ptr)
675     unsignedp1 = TREE_UNSIGNED (TREE_TYPE (op1));
676
677   /* If one of the operands must be floated, we cannot optimize.  */
678   real1 = TREE_CODE (TREE_TYPE (primop0)) == REAL_TYPE;
679   real2 = TREE_CODE (TREE_TYPE (primop1)) == REAL_TYPE;
680
681   /* If first arg is constant, swap the args (changing operation
682      so value is preserved), for canonicalization.  */
683
684   if (TREE_CONSTANT (primop0))
685     {
686       register tree tem = primop0;
687       register int temi = unsignedp0;
688       primop0 = primop1;
689       primop1 = tem;
690       tem = op0;
691       op0 = op1;
692       op1 = tem;
693       *op0_ptr = op0;
694       *op1_ptr = op1;
695       unsignedp0 = unsignedp1;
696       unsignedp1 = temi;
697       temi = real1;
698       real1 = real2;
699       real2 = temi;
700
701       switch (code)
702         {
703         case LT_EXPR:
704           code = GT_EXPR;
705           break;
706         case GT_EXPR:
707           code = LT_EXPR;
708           break;
709         case LE_EXPR:
710           code = GE_EXPR;
711           break;
712         case GE_EXPR:
713           code = LE_EXPR;
714           break;
715         }
716       *rescode_ptr = code;
717     }
718
719   /* If comparing an integer against a constant more bits wide,
720      maybe we can deduce a value of 1 or 0 independent of the data.
721      Or else truncate the constant now
722      rather than extend the variable at run time.
723
724      This is only interesting if the constant is the wider arg.
725      Also, it is not safe if the constant is unsigned and the
726      variable arg is signed, since in this case the variable
727      would be sign-extended and then regarded as unsigned.
728      Our technique fails in this case because the lowest/highest
729      possible unsigned results don't follow naturally from the
730      lowest/highest possible values of the variable operand.
731      For just EQ_EXPR and NE_EXPR there is another technique that
732      could be used: see if the constant can be faithfully represented
733      in the other operand's type, by truncating it and reextending it
734      and see if that preserves the constant's value.  */
735
736   if (!real1 && !real2
737       && TREE_CODE (primop1) == INTEGER_CST
738       && TYPE_PRECISION (TREE_TYPE (primop0)) < TYPE_PRECISION (*restype_ptr))
739     {
740       int min_gt, max_gt, min_lt, max_lt;
741       tree maxval, minval;
742       /* 1 if comparison is nominally unsigned.  */
743       int unsignedp = TREE_UNSIGNED (*restype_ptr);
744       tree val;
745
746       type = signed_or_unsigned_type (unsignedp0, TREE_TYPE (primop0));
747
748       maxval = TYPE_MAX_VALUE (type);
749       minval = TYPE_MIN_VALUE (type);
750
751       if (unsignedp && !unsignedp0)
752         *restype_ptr = signed_type (*restype_ptr);
753
754       if (TREE_TYPE (primop1) != *restype_ptr)
755         primop1 = convert (*restype_ptr, primop1);
756       if (type != *restype_ptr)
757         {
758           minval = convert (*restype_ptr, minval);
759           maxval = convert (*restype_ptr, maxval);
760         }
761
762       if (unsignedp && unsignedp0)
763         {
764           min_gt = INT_CST_LT_UNSIGNED (primop1, minval);
765           max_gt = INT_CST_LT_UNSIGNED (primop1, maxval);
766           min_lt = INT_CST_LT_UNSIGNED (minval, primop1);
767           max_lt = INT_CST_LT_UNSIGNED (maxval, primop1);
768         }
769       else
770         {
771           min_gt = INT_CST_LT (primop1, minval);
772           max_gt = INT_CST_LT (primop1, maxval);
773           min_lt = INT_CST_LT (minval, primop1);
774           max_lt = INT_CST_LT (maxval, primop1);
775         }
776
777       val = 0;
778       /* This used to be a switch, but Genix compiler can't handle that.  */
779       if (code == NE_EXPR)
780         {
781           if (max_lt || min_gt)
782             val = integer_one_node;
783         }
784       else if (code == EQ_EXPR)
785         {
786           if (max_lt || min_gt)
787             val = integer_zero_node;
788         }
789       else if (code == LT_EXPR)
790         {
791           if (max_lt)
792             val = integer_one_node;
793           if (!min_lt)
794             val = integer_zero_node;
795         }
796       else if (code == GT_EXPR)
797         {
798           if (min_gt)
799             val = integer_one_node;
800           if (!max_gt)
801             val = integer_zero_node;
802         }
803       else if (code == LE_EXPR)
804         {
805           if (!max_gt)
806             val = integer_one_node;
807           if (min_gt)
808             val = integer_zero_node;
809         }
810       else if (code == GE_EXPR)
811         {
812           if (!min_lt)
813             val = integer_one_node;
814           if (max_lt)
815             val = integer_zero_node;
816         }
817
818       /* If primop0 was sign-extended and unsigned comparison specd,
819          we did a signed comparison above using the signed type bounds.
820          But the comparison we output must be unsigned.
821
822          Also, for inequalities, VAL is no good; but if the signed
823          comparison had *any* fixed result, it follows that the
824          unsigned comparison just tests the sign in reverse
825          (positive values are LE, negative ones GE).
826          So we can generate an unsigned comparison
827          against an extreme value of the signed type.  */
828
829       if (unsignedp && !unsignedp0)
830         {
831           if (val != 0)
832             switch (code)
833               {
834               case LT_EXPR:
835               case GE_EXPR:
836                 primop1 = TYPE_MIN_VALUE (type);
837                 val = 0;
838                 break;
839
840               case LE_EXPR:
841               case GT_EXPR:
842                 primop1 = TYPE_MAX_VALUE (type);
843                 val = 0;
844                 break;
845               }
846           type = unsigned_type (type);
847         }
848
849       if (!max_gt && !unsignedp0)
850         {
851           /* This is the case of (char)x >?< 0x80, which people used to use
852              expecting old C compilers to change the 0x80 into -0x80.  */
853           if (val == integer_zero_node)
854             warning ("comparison is always 0 due to limited range of data type");
855           if (val == integer_one_node)
856             warning ("comparison is always 1 due to limited range of data type");
857         }
858
859       if (!min_lt && unsignedp0)
860         {
861           /* This is the case of (unsigned char)x >?< -1 or < 0.  */
862           if (val == integer_zero_node)
863             warning ("comparison is always 0 due to limited range of data type");
864           if (val == integer_one_node)
865             warning ("comparison is always 1 due to limited range of data type");
866         }
867
868       if (val != 0)
869         {
870           /* Don't forget to evaluate PRIMOP0 if it has side effects.  */
871           if (TREE_SIDE_EFFECTS (primop0))
872             return build (COMPOUND_EXPR, TREE_TYPE (val), primop0, val);
873           return val;
874         }
875
876       /* Value is not predetermined, but do the comparison
877          in the type of the operand that is not constant.
878          TYPE is already properly set.  */
879     }
880   else if (real1 && real2
881            && (TYPE_PRECISION (TREE_TYPE (primop0))
882                == TYPE_PRECISION (TREE_TYPE (primop1))))
883     type = TREE_TYPE (primop0);
884
885   /* If args' natural types are both narrower than nominal type
886      and both extend in the same manner, compare them
887      in the type of the wider arg.
888      Otherwise must actually extend both to the nominal
889      common type lest different ways of extending
890      alter the result.
891      (eg, (short)-1 == (unsigned short)-1  should be 0.)  */
892
893   else if (unsignedp0 == unsignedp1 && real1 == real2
894            && TYPE_PRECISION (TREE_TYPE (primop0)) < TYPE_PRECISION (*restype_ptr)
895            && TYPE_PRECISION (TREE_TYPE (primop1)) < TYPE_PRECISION (*restype_ptr))
896     {
897       type = common_type (TREE_TYPE (primop0), TREE_TYPE (primop1));
898       type = signed_or_unsigned_type (unsignedp0
899                                       || TREE_UNSIGNED (*restype_ptr),
900                                       type);
901       /* Make sure shorter operand is extended the right way
902          to match the longer operand.  */
903       primop0 = convert (signed_or_unsigned_type (unsignedp0, TREE_TYPE (primop0)),
904                          primop0);
905       primop1 = convert (signed_or_unsigned_type (unsignedp1, TREE_TYPE (primop1)),
906                          primop1);
907     }
908   else
909     {
910       /* Here we must do the comparison on the nominal type
911          using the args exactly as we received them.  */
912       type = *restype_ptr;
913       primop0 = op0;
914       primop1 = op1;
915
916       if (!real1 && !real2 && integer_zerop (primop1)
917           && TREE_UNSIGNED (TREE_TYPE (primop0)))
918         {
919           tree value = 0;
920           switch (code)
921             {
922             case GE_EXPR:
923               if (extra_warnings)
924                 warning ("unsigned value >= 0 is always 1");
925               value = integer_one_node;
926               break;
927
928             case LT_EXPR:
929               if (extra_warnings)
930                 warning ("unsigned value < 0 is always 0");
931               value = integer_zero_node;
932             }
933
934           if (value != 0)
935             {
936               /* Don't forget to evaluate PRIMOP0 if it has side effects.  */
937               if (TREE_SIDE_EFFECTS (primop0))
938                 return build (COMPOUND_EXPR, TREE_TYPE (value),
939                               primop0, value);
940               return value;
941             }
942         }
943     }
944
945   *op0_ptr = convert (type, primop0);
946   *op1_ptr = convert (type, primop1);
947
948   *restype_ptr = integer_type_node;
949
950   return 0;
951 }
952 \f
953 /* Prepare expr to be an argument of a TRUTH_NOT_EXPR,
954    or validate its data type for an `if' or `while' statement or ?..: exp.
955
956    This preparation consists of taking the ordinary
957    representation of an expression expr and producing a valid tree
958    boolean expression describing whether expr is nonzero.  We could
959    simply always do build_binary_op (NE_EXPR, expr, integer_zero_node, 1),
960    but we optimize comparisons, &&, ||, and !.
961
962    The resulting type should always be `integer_type_node'.  */
963
964 tree
965 truthvalue_conversion (expr)
966      tree expr;
967 {
968   register enum tree_code code;
969
970   if (TREE_CODE (expr) == ERROR_MARK)
971     return expr;
972
973 #if 0 /* This appears to be wrong for C++.  */
974   /* These really should return error_mark_node after 2.4 is stable.
975      But not all callers handle ERROR_MARK properly.  */
976   switch (TREE_CODE (TREE_TYPE (expr)))
977     {
978     case RECORD_TYPE:
979       error ("struct type value used where scalar is required");
980       return integer_zero_node;
981
982     case UNION_TYPE:
983       error ("union type value used where scalar is required");
984       return integer_zero_node;
985
986     case ARRAY_TYPE:
987       error ("array type value used where scalar is required");
988       return integer_zero_node;
989
990     default:
991       break;
992     }
993 #endif /* 0 */
994
995   switch (TREE_CODE (expr))
996     {
997       /* It is simpler and generates better code to have only TRUTH_*_EXPR
998          or comparison expressions as truth values at this level.  */
999 #if 0
1000     case COMPONENT_REF:
1001       /* A one-bit unsigned bit-field is already acceptable.  */
1002       if (1 == TREE_INT_CST_LOW (DECL_SIZE (TREE_OPERAND (expr, 1)))
1003           && TREE_UNSIGNED (TREE_OPERAND (expr, 1)))
1004         return expr;
1005       break;
1006 #endif
1007
1008     case EQ_EXPR:
1009       /* It is simpler and generates better code to have only TRUTH_*_EXPR
1010          or comparison expressions as truth values at this level.  */
1011 #if 0
1012       if (integer_zerop (TREE_OPERAND (expr, 1)))
1013         return build_unary_op (TRUTH_NOT_EXPR, TREE_OPERAND (expr, 0), 0);
1014 #endif
1015     case NE_EXPR: case LE_EXPR: case GE_EXPR: case LT_EXPR: case GT_EXPR:
1016     case TRUTH_ANDIF_EXPR:
1017     case TRUTH_ORIF_EXPR:
1018     case TRUTH_AND_EXPR:
1019     case TRUTH_OR_EXPR:
1020     case TRUTH_XOR_EXPR:
1021     case ERROR_MARK:
1022       return expr;
1023
1024     case INTEGER_CST:
1025       return integer_zerop (expr) ? integer_zero_node : integer_one_node;
1026
1027     case REAL_CST:
1028       return real_zerop (expr) ? integer_zero_node : integer_one_node;
1029
1030     case ADDR_EXPR:
1031       if (TREE_SIDE_EFFECTS (TREE_OPERAND (expr, 0)))
1032         return build (COMPOUND_EXPR, integer_type_node,
1033                       TREE_OPERAND (expr, 0), integer_one_node);
1034       else
1035         return integer_one_node;
1036
1037     case COMPLEX_EXPR:
1038       return build_binary_op ((TREE_SIDE_EFFECTS (TREE_OPERAND (expr, 1))
1039                                ? TRUTH_AND_EXPR : TRUTH_ANDIF_EXPR),
1040                               truthvalue_conversion (TREE_OPERAND (expr, 0)),
1041                               truthvalue_conversion (TREE_OPERAND (expr, 1)),
1042                               0);
1043
1044     case NEGATE_EXPR:
1045     case ABS_EXPR:
1046     case FLOAT_EXPR:
1047     case FFS_EXPR:
1048       /* These don't change whether an object is non-zero or zero.  */
1049       return truthvalue_conversion (TREE_OPERAND (expr, 0));
1050
1051     case LROTATE_EXPR:
1052     case RROTATE_EXPR:
1053       /* These don't change whether an object is zero or non-zero, but
1054          we can't ignore them if their second arg has side-effects.  */
1055       if (TREE_SIDE_EFFECTS (TREE_OPERAND (expr, 1)))
1056         return build (COMPOUND_EXPR, integer_type_node, TREE_OPERAND (expr, 1),
1057                       truthvalue_conversion (TREE_OPERAND (expr, 0)));
1058       else
1059         return truthvalue_conversion (TREE_OPERAND (expr, 0));
1060       
1061     case COND_EXPR:
1062       /* Distribute the conversion into the arms of a COND_EXPR.  */
1063       return fold (build (COND_EXPR, integer_type_node, TREE_OPERAND (expr, 0),
1064                           truthvalue_conversion (TREE_OPERAND (expr, 1)),
1065                           truthvalue_conversion (TREE_OPERAND (expr, 2))));
1066
1067     case CONVERT_EXPR:
1068       /* Don't cancel the effect of a CONVERT_EXPR from a REFERENCE_TYPE,
1069          since that affects how `default_conversion' will behave.  */
1070       if (TREE_CODE (TREE_TYPE (expr)) == REFERENCE_TYPE
1071           || TREE_CODE (TREE_TYPE (TREE_OPERAND (expr, 0))) == REFERENCE_TYPE)
1072         break;
1073       /* fall through... */
1074     case NOP_EXPR:
1075       /* If this is widening the argument, we can ignore it.  */
1076       if (TYPE_PRECISION (TREE_TYPE (expr))
1077           >= TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (expr, 0))))
1078         return truthvalue_conversion (TREE_OPERAND (expr, 0));
1079       break;
1080
1081     case MINUS_EXPR:
1082       /* With IEEE arithmetic, x - x may not equal 0, so we can't optimize
1083          this case.  */
1084       if (TARGET_FLOAT_FORMAT == IEEE_FLOAT_FORMAT
1085           && TREE_CODE (TREE_TYPE (expr)) == REAL_TYPE)
1086         break;
1087       /* fall through... */
1088     case BIT_XOR_EXPR:
1089       /* This and MINUS_EXPR can be changed into a comparison of the
1090          two objects.  */
1091       if (TREE_TYPE (TREE_OPERAND (expr, 0))
1092           == TREE_TYPE (TREE_OPERAND (expr, 1)))
1093         return build_binary_op (NE_EXPR, TREE_OPERAND (expr, 0),
1094                                 TREE_OPERAND (expr, 1), 1);
1095       return build_binary_op (NE_EXPR, TREE_OPERAND (expr, 0),
1096                               fold (build1 (NOP_EXPR,
1097                                             TREE_TYPE (TREE_OPERAND (expr, 0)),
1098                                             TREE_OPERAND (expr, 1))), 1);
1099
1100     case MODIFY_EXPR:
1101       if (warn_parentheses && C_EXP_ORIGINAL_CODE (expr) == MODIFY_EXPR)
1102         warning ("suggest parentheses around assignment used as truth value");
1103       break;
1104     }
1105
1106   if (TREE_CODE (TREE_TYPE (expr)) == COMPLEX_TYPE)
1107     return (build_binary_op
1108             ((TREE_SIDE_EFFECTS (expr)
1109               ? TRUTH_AND_EXPR : TRUTH_ANDIF_EXPR),
1110              truthvalue_conversion (build_unary_op (REALPART_EXPR, expr, 0)),
1111              truthvalue_conversion (build_unary_op (IMAGPART_EXPR, expr, 0)),
1112              0));
1113
1114   return build_binary_op (NE_EXPR, expr, integer_zero_node, 1);
1115 }
1116 \f
1117 /* Read the rest of a #-directive from input stream FINPUT.
1118    In normal use, the directive name and the white space after it
1119    have already been read, so they won't be included in the result.
1120    We allow for the fact that the directive line may contain
1121    a newline embedded within a character or string literal which forms
1122    a part of the directive.
1123
1124    The value is a string in a reusable buffer.  It remains valid
1125    only until the next time this function is called.  */
1126
1127 char *
1128 get_directive_line (finput)
1129      register FILE *finput;
1130 {
1131   static char *directive_buffer = NULL;
1132   static unsigned buffer_length = 0;
1133   register char *p;
1134   register char *buffer_limit;
1135   register int looking_for = 0;
1136   register int char_escaped = 0;
1137
1138   if (buffer_length == 0)
1139     {
1140       directive_buffer = (char *)xmalloc (128);
1141       buffer_length = 128;
1142     }
1143
1144   buffer_limit = &directive_buffer[buffer_length];
1145
1146   for (p = directive_buffer; ; )
1147     {
1148       int c;
1149
1150       /* Make buffer bigger if it is full.  */
1151       if (p >= buffer_limit)
1152         {
1153           register unsigned bytes_used = (p - directive_buffer);
1154
1155           buffer_length *= 2;
1156           directive_buffer
1157             = (char *)xrealloc (directive_buffer, buffer_length);
1158           p = &directive_buffer[bytes_used];
1159           buffer_limit = &directive_buffer[buffer_length];
1160         }
1161
1162       c = getc (finput);
1163
1164       /* Discard initial whitespace.  */
1165       if ((c == ' ' || c == '\t') && p == directive_buffer)
1166         continue;
1167
1168       /* Detect the end of the directive.  */
1169       if (c == '\n' && looking_for == 0)
1170         {
1171           ungetc (c, finput);
1172           c = '\0';
1173         }
1174
1175       *p++ = c;
1176
1177       if (c == 0)
1178         return directive_buffer;
1179
1180       /* Handle string and character constant syntax.  */
1181       if (looking_for)
1182         {
1183           if (looking_for == c && !char_escaped)
1184             looking_for = 0;    /* Found terminator... stop looking.  */
1185         }
1186       else
1187         if (c == '\'' || c == '"')
1188           looking_for = c;      /* Don't stop buffering until we see another
1189                                    another one of these (or an EOF).  */
1190
1191       /* Handle backslash.  */
1192       char_escaped = (c == '\\' && ! char_escaped);
1193     }
1194 }
1195 \f
1196 /* Make a variant type in the proper way for C/C++, propagating qualifiers
1197    down to the element type of an array.  */
1198
1199 tree
1200 c_build_type_variant (type, constp, volatilep)
1201      tree type;
1202      int constp, volatilep;
1203 {
1204   if (TREE_CODE (type) == ARRAY_TYPE)
1205     {
1206       tree real_main_variant = TYPE_MAIN_VARIANT (type);
1207       int permanent = TREE_PERMANENT (type);
1208
1209       if (permanent)
1210         push_obstacks (&permanent_obstack, &permanent_obstack);
1211       type = build_array_type (c_build_type_variant (TREE_TYPE (type),
1212                                                      constp, volatilep),
1213                                TYPE_DOMAIN (type));
1214       TYPE_MAIN_VARIANT (type) = real_main_variant;
1215       if (permanent)
1216         pop_obstacks ();
1217     }
1218   return build_type_variant (type, constp, volatilep);
1219 }