OSDN Git Service

* g++.dg/other/debug1.C: Fix typos.
[pf3gnuchains/gcc-fork.git] / gcc / c-common.c
1 /* Subroutines shared by all languages that are variants of C.
2    Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
3    Free Software Foundation, Inc.
4
5 This file is part of GCC.
6
7 GCC is free software; you can redistribute it and/or modify it under
8 the terms of the GNU General Public License as published by the Free
9 Software Foundation; either version 2, or (at your option) any later
10 version.
11
12 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
13 WARRANTY; without even the implied warranty of MERCHANTABILITY or
14 FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
15 for more details.
16
17 You should have received a copy of the GNU General Public License
18 along with GCC; see the file COPYING.  If not, write to the Free
19 Software Foundation, 59 Temple Place - Suite 330, Boston, MA
20 02111-1307, USA.  */
21
22 #include "config.h"
23 #include "system.h"
24 #include "tree.h"
25 #include "flags.h"
26 #include "toplev.h"
27 #include "output.h"
28 #include "c-pragma.h"
29 #include "rtl.h"
30 #include "ggc.h"
31 #include "expr.h"
32 #include "c-common.h"
33 #include "tm_p.h"
34 #include "obstack.h"
35 #include "cpplib.h"
36 #include "target.h"
37 cpp_reader *parse_in;           /* Declared in c-lex.h.  */
38
39 #undef WCHAR_TYPE_SIZE
40 #define WCHAR_TYPE_SIZE TYPE_PRECISION (wchar_type_node)
41
42 /* We let tm.h override the types used here, to handle trivial differences
43    such as the choice of unsigned int or long unsigned int for size_t.
44    When machines start needing nontrivial differences in the size type,
45    it would be best to do something here to figure out automatically
46    from other information what type to use.  */
47
48 #ifndef SIZE_TYPE
49 #define SIZE_TYPE "long unsigned int"
50 #endif
51
52 #ifndef WCHAR_TYPE
53 #define WCHAR_TYPE "int"
54 #endif
55
56 #ifndef PTRDIFF_TYPE
57 #define PTRDIFF_TYPE "long int"
58 #endif
59
60 #ifndef WINT_TYPE
61 #define WINT_TYPE "unsigned int"
62 #endif
63
64 #ifndef INTMAX_TYPE
65 #define INTMAX_TYPE ((INT_TYPE_SIZE == LONG_LONG_TYPE_SIZE)     \
66                      ? "int"                                    \
67                      : ((LONG_TYPE_SIZE == LONG_LONG_TYPE_SIZE) \
68                         ? "long int"                            \
69                         : "long long int"))
70 #endif
71
72 #ifndef UINTMAX_TYPE
73 #define UINTMAX_TYPE ((INT_TYPE_SIZE == LONG_LONG_TYPE_SIZE)    \
74                      ? "unsigned int"                           \
75                      : ((LONG_TYPE_SIZE == LONG_LONG_TYPE_SIZE) \
76                         ? "long unsigned int"                   \
77                         : "long long unsigned int"))
78 #endif
79
80 /* The following symbols are subsumed in the c_global_trees array, and
81    listed here individually for documentation purposes.
82
83    INTEGER_TYPE and REAL_TYPE nodes for the standard data types.
84
85         tree short_integer_type_node;
86         tree long_integer_type_node;
87         tree long_long_integer_type_node;
88
89         tree short_unsigned_type_node;
90         tree long_unsigned_type_node;
91         tree long_long_unsigned_type_node;
92
93         tree boolean_type_node;
94         tree boolean_false_node;
95         tree boolean_true_node;
96
97         tree ptrdiff_type_node;
98
99         tree unsigned_char_type_node;
100         tree signed_char_type_node;
101         tree wchar_type_node;
102         tree signed_wchar_type_node;
103         tree unsigned_wchar_type_node;
104
105         tree float_type_node;
106         tree double_type_node;
107         tree long_double_type_node;
108
109         tree complex_integer_type_node;
110         tree complex_float_type_node;
111         tree complex_double_type_node;
112         tree complex_long_double_type_node;
113
114         tree intQI_type_node;
115         tree intHI_type_node;
116         tree intSI_type_node;
117         tree intDI_type_node;
118         tree intTI_type_node;
119
120         tree unsigned_intQI_type_node;
121         tree unsigned_intHI_type_node;
122         tree unsigned_intSI_type_node;
123         tree unsigned_intDI_type_node;
124         tree unsigned_intTI_type_node;
125
126         tree widest_integer_literal_type_node;
127         tree widest_unsigned_literal_type_node;
128
129    Nodes for types `void *' and `const void *'.
130
131         tree ptr_type_node, const_ptr_type_node;
132
133    Nodes for types `char *' and `const char *'.
134
135         tree string_type_node, const_string_type_node;
136
137    Type `char[SOMENUMBER]'.
138    Used when an array of char is needed and the size is irrelevant.
139
140         tree char_array_type_node;
141
142    Type `int[SOMENUMBER]' or something like it.
143    Used when an array of int needed and the size is irrelevant.
144
145         tree int_array_type_node;
146
147    Type `wchar_t[SOMENUMBER]' or something like it.
148    Used when a wide string literal is created.
149
150         tree wchar_array_type_node;
151
152    Type `int ()' -- used for implicit declaration of functions.
153
154         tree default_function_type;
155
156    A VOID_TYPE node, packaged in a TREE_LIST.
157
158         tree void_list_node;
159
160   The lazily created VAR_DECLs for __FUNCTION__, __PRETTY_FUNCTION__,
161   and __func__. (C doesn't generate __FUNCTION__ and__PRETTY_FUNCTION__
162   VAR_DECLS, but C++ does.)
163
164         tree function_name_decl_node;
165         tree pretty_function_name_decl_node;
166         tree c99_function_name_decl_node;
167
168   Stack of nested function name VAR_DECLs.
169   
170         tree saved_function_name_decls;
171
172 */
173
174 tree c_global_trees[CTI_MAX];
175
176 /* Nonzero means don't recognize the non-ANSI builtin functions.  */
177
178 int flag_no_builtin;
179
180 /* Nonzero means don't recognize the non-ANSI builtin functions.
181    -ansi sets this.  */
182
183 int flag_no_nonansi_builtin;
184
185 /* Nonzero means give `double' the same size as `float'.  */
186
187 int flag_short_double;
188
189 /* Nonzero means give `wchar_t' the same size as `short'.  */
190
191 int flag_short_wchar;
192
193 /* Nonzero means warn about possible violations of sequence point rules.  */
194
195 int warn_sequence_point;
196
197 /* Nonzero means to warn about compile-time division by zero.  */
198 int warn_div_by_zero = 1;
199
200 /* The elements of `ridpointers' are identifier nodes for the reserved
201    type names and storage classes.  It is indexed by a RID_... value.  */
202 tree *ridpointers;
203
204 tree (*make_fname_decl)                PARAMS ((tree, int));
205
206 /* If non-NULL, the address of a language-specific function that
207    returns 1 for language-specific statement codes.  */
208 int (*lang_statement_code_p)           PARAMS ((enum tree_code));
209
210 /* If non-NULL, the address of a language-specific function that takes
211    any action required right before expand_function_end is called.  */
212 void (*lang_expand_function_end)       PARAMS ((void));
213
214 /* If this variable is defined to a non-NULL value, it will be called
215    after the file has been completely parsed.  */
216 void (*back_end_hook) PARAMS ((tree));
217
218 /* Nonzero means the expression being parsed will never be evaluated.
219    This is a count, since unevaluated expressions can nest.  */
220 int skip_evaluation;
221
222 /* Information about how a function name is generated.  */
223 struct fname_var_t
224 {
225   tree *const decl;     /* pointer to the VAR_DECL.  */
226   const unsigned rid;   /* RID number for the identifier.  */
227   const int pretty;     /* How pretty is it? */
228 };
229
230 /* The three ways of getting then name of the current function.  */
231
232 const struct fname_var_t fname_vars[] =
233 {
234   /* C99 compliant __func__, must be first.  */
235   {&c99_function_name_decl_node, RID_C99_FUNCTION_NAME, 0},
236   /* GCC __FUNCTION__ compliant.  */
237   {&function_name_decl_node, RID_FUNCTION_NAME, 0},
238   /* GCC __PRETTY_FUNCTION__ compliant.  */
239   {&pretty_function_name_decl_node, RID_PRETTY_FUNCTION_NAME, 1},
240   {NULL, 0, 0},
241 };
242
243 static int constant_fits_type_p         PARAMS ((tree, tree));
244
245 /* Keep a stack of if statements.  We record the number of compound
246    statements seen up to the if keyword, as well as the line number
247    and file of the if.  If a potentially ambiguous else is seen, that
248    fact is recorded; the warning is issued when we can be sure that
249    the enclosing if statement does not have an else branch.  */
250 typedef struct
251 {
252   int compstmt_count;
253   int line;
254   const char *file;
255   int needs_warning;
256   tree if_stmt;
257 } if_elt;
258
259 static if_elt *if_stack;
260
261 /* Amount of space in the if statement stack.  */
262 static int if_stack_space = 0;
263
264 /* Stack pointer.  */
265 static int if_stack_pointer = 0;
266
267 /* Record the start of an if-then, and record the start of it
268    for ambiguous else detection.  */
269
270 void
271 c_expand_start_cond (cond, compstmt_count)
272      tree cond;
273      int compstmt_count;
274 {
275   tree if_stmt;
276
277   /* Make sure there is enough space on the stack.  */
278   if (if_stack_space == 0)
279     {
280       if_stack_space = 10;
281       if_stack = (if_elt *)xmalloc (10 * sizeof (if_elt));
282     }
283   else if (if_stack_space == if_stack_pointer)
284     {
285       if_stack_space += 10;
286       if_stack = (if_elt *)xrealloc (if_stack, if_stack_space * sizeof (if_elt));
287     }
288
289   if_stmt = build_stmt (IF_STMT, NULL_TREE, NULL_TREE, NULL_TREE);
290   IF_COND (if_stmt) = cond;
291   add_stmt (if_stmt);
292
293   /* Record this if statement.  */
294   if_stack[if_stack_pointer].compstmt_count = compstmt_count;
295   if_stack[if_stack_pointer].file = input_filename;
296   if_stack[if_stack_pointer].line = lineno;
297   if_stack[if_stack_pointer].needs_warning = 0;
298   if_stack[if_stack_pointer].if_stmt = if_stmt;
299   if_stack_pointer++;
300 }
301
302 /* Called after the then-clause for an if-statement is processed.  */
303
304 void
305 c_finish_then ()
306 {
307   tree if_stmt = if_stack[if_stack_pointer - 1].if_stmt;
308   RECHAIN_STMTS (if_stmt, THEN_CLAUSE (if_stmt));
309 }
310
311 /* Record the end of an if-then.  Optionally warn if a nested
312    if statement had an ambiguous else clause.  */
313
314 void
315 c_expand_end_cond ()
316 {
317   if_stack_pointer--;
318   if (if_stack[if_stack_pointer].needs_warning)
319     warning_with_file_and_line (if_stack[if_stack_pointer].file,
320                                 if_stack[if_stack_pointer].line,
321                                 "suggest explicit braces to avoid ambiguous `else'");
322   last_expr_type = NULL_TREE;
323 }
324
325 /* Called between the then-clause and the else-clause
326    of an if-then-else.  */
327
328 void
329 c_expand_start_else ()
330 {
331   /* An ambiguous else warning must be generated for the enclosing if
332      statement, unless we see an else branch for that one, too.  */
333   if (warn_parentheses
334       && if_stack_pointer > 1
335       && (if_stack[if_stack_pointer - 1].compstmt_count
336           == if_stack[if_stack_pointer - 2].compstmt_count))
337     if_stack[if_stack_pointer - 2].needs_warning = 1;
338
339   /* Even if a nested if statement had an else branch, it can't be
340      ambiguous if this one also has an else.  So don't warn in that
341      case.  Also don't warn for any if statements nested in this else.  */
342   if_stack[if_stack_pointer - 1].needs_warning = 0;
343   if_stack[if_stack_pointer - 1].compstmt_count--;
344 }
345
346 /* Called after the else-clause for an if-statement is processed.  */
347
348 void
349 c_finish_else ()
350 {
351   tree if_stmt = if_stack[if_stack_pointer - 1].if_stmt;
352   RECHAIN_STMTS (if_stmt, ELSE_CLAUSE (if_stmt));
353 }
354
355 /* Push current bindings for the function name VAR_DECLS.  */
356
357 void
358 start_fname_decls ()
359 {
360   unsigned ix;
361   tree saved = NULL_TREE;
362   
363   for (ix = 0; fname_vars[ix].decl; ix++)
364     {
365       tree decl = *fname_vars[ix].decl;
366
367       if (decl)
368         {
369           saved = tree_cons (decl, build_int_2 (ix, 0), saved);
370           *fname_vars[ix].decl = NULL_TREE;
371         }
372     }
373   if (saved || saved_function_name_decls)
374     /* Normally they'll have been NULL, so only push if we've got a
375        stack, or they are non-NULL.  */
376     saved_function_name_decls = tree_cons (saved, NULL_TREE,
377                                            saved_function_name_decls);
378 }
379
380 /* Finish up the current bindings, adding them into the
381    current function's statement tree. This is done by wrapping the
382    function's body in a COMPOUND_STMT containing these decls too. This
383    must be done _before_ finish_stmt_tree is called. If there is no
384    current function, we must be at file scope and no statements are
385    involved. Pop the previous bindings.  */
386
387 void
388 finish_fname_decls ()
389 {
390   unsigned ix;
391   tree body = NULL_TREE;
392   tree stack = saved_function_name_decls;
393
394   for (; stack && TREE_VALUE (stack); stack = TREE_CHAIN (stack))
395     body = chainon (TREE_VALUE (stack), body);
396   
397   if (body)
398     {
399       /* They were called into existence, so add to statement tree.  */
400       body = chainon (body,
401                       TREE_CHAIN (DECL_SAVED_TREE (current_function_decl)));
402       body = build_stmt (COMPOUND_STMT, body);
403       
404       COMPOUND_STMT_NO_SCOPE (body) = 1;
405       TREE_CHAIN (DECL_SAVED_TREE (current_function_decl)) = body;
406     }
407   
408   for (ix = 0; fname_vars[ix].decl; ix++)
409     *fname_vars[ix].decl = NULL_TREE;
410   
411   if (stack)
412     {
413       /* We had saved values, restore them.  */
414       tree saved;
415
416       for (saved = TREE_PURPOSE (stack); saved; saved = TREE_CHAIN (saved))
417         {
418           tree decl = TREE_PURPOSE (saved);
419           unsigned ix = TREE_INT_CST_LOW (TREE_VALUE (saved));
420           
421           *fname_vars[ix].decl = decl;
422         }
423       stack = TREE_CHAIN (stack);
424     }
425   saved_function_name_decls = stack;
426 }
427
428 /* Return the text name of the current function, suitable prettified
429    by PRETTY_P.  */
430
431 const char *
432 fname_as_string (pretty_p)
433      int pretty_p;
434 {
435   const char *name = NULL;
436   
437   if (pretty_p)
438     name = (current_function_decl
439             ? (*decl_printable_name) (current_function_decl, 2)
440             : "top level");
441   else if (current_function_decl && DECL_NAME (current_function_decl))
442     name = IDENTIFIER_POINTER (DECL_NAME (current_function_decl));
443   else
444     name = "";
445   return name;
446 }
447
448 /* Return the text name of the current function, formatted as
449    required by the supplied RID value.  */
450
451 const char *
452 fname_string (rid)
453      unsigned rid;
454 {
455   unsigned ix;
456   
457   for (ix = 0; fname_vars[ix].decl; ix++)
458     if (fname_vars[ix].rid == rid)
459       break;
460   return fname_as_string (fname_vars[ix].pretty);
461 }
462
463 /* Return the VAR_DECL for a const char array naming the current
464    function. If the VAR_DECL has not yet been created, create it
465    now. RID indicates how it should be formatted and IDENTIFIER_NODE
466    ID is its name (unfortunately C and C++ hold the RID values of
467    keywords in different places, so we can't derive RID from ID in
468    this language independent code.  */
469
470 tree
471 fname_decl (rid, id)
472      unsigned rid;
473      tree id;
474 {
475   unsigned ix;
476   tree decl = NULL_TREE;
477
478   for (ix = 0; fname_vars[ix].decl; ix++)
479     if (fname_vars[ix].rid == rid)
480       break;
481
482   decl = *fname_vars[ix].decl;
483   if (!decl)
484     {
485       tree saved_last_tree = last_tree;
486       
487       decl = (*make_fname_decl) (id, fname_vars[ix].pretty);
488       if (last_tree != saved_last_tree)
489         {
490           /* We created some statement tree for the decl. This belongs
491              at the start of the function, so remove it now and reinsert
492              it after the function is complete.  */
493           tree stmts = TREE_CHAIN (saved_last_tree);
494
495           TREE_CHAIN (saved_last_tree) = NULL_TREE;
496           last_tree = saved_last_tree;
497           saved_function_name_decls = tree_cons (decl, stmts,
498                                                  saved_function_name_decls);
499         }
500       *fname_vars[ix].decl = decl;
501     }
502   if (!ix && !current_function_decl)
503     pedwarn_with_decl (decl, "`%s' is not defined outside of function scope");
504   
505   return decl;
506 }
507
508 /* Given a chain of STRING_CST nodes,
509    concatenate them into one STRING_CST
510    and give it a suitable array-of-chars data type.  */
511
512 tree
513 combine_strings (strings)
514      tree strings;
515 {
516   tree value, t;
517   int length = 1;
518   int wide_length = 0;
519   int wide_flag = 0;
520   int wchar_bytes = TYPE_PRECISION (wchar_type_node) / BITS_PER_UNIT;
521   int nchars;
522   const int nchars_max = flag_isoc99 ? 4095 : 509;
523
524   if (TREE_CHAIN (strings))
525     {
526       /* More than one in the chain, so concatenate.  */
527       char *p, *q;
528
529       /* Don't include the \0 at the end of each substring,
530          except for the last one.
531          Count wide strings and ordinary strings separately.  */
532       for (t = strings; t; t = TREE_CHAIN (t))
533         {
534           if (TREE_TYPE (t) == wchar_array_type_node)
535             {
536               wide_length += (TREE_STRING_LENGTH (t) - wchar_bytes);
537               wide_flag = 1;
538             }
539           else
540             length += (TREE_STRING_LENGTH (t) - 1);
541         }
542
543       /* If anything is wide, the non-wides will be converted,
544          which makes them take more space.  */
545       if (wide_flag)
546         length = length * wchar_bytes + wide_length;
547
548       p = alloca (length);
549
550       /* Copy the individual strings into the new combined string.
551          If the combined string is wide, convert the chars to ints
552          for any individual strings that are not wide.  */
553
554       q = p;
555       for (t = strings; t; t = TREE_CHAIN (t))
556         {
557           int len = (TREE_STRING_LENGTH (t)
558                      - ((TREE_TYPE (t) == wchar_array_type_node)
559                         ? wchar_bytes : 1));
560           if ((TREE_TYPE (t) == wchar_array_type_node) == wide_flag)
561             {
562               memcpy (q, TREE_STRING_POINTER (t), len);
563               q += len;
564             }
565           else
566             {
567               int i, j;
568               for (i = 0; i < len; i++)
569                 {
570                   if (BYTES_BIG_ENDIAN)
571                     {
572                       for (j=0; j<(WCHAR_TYPE_SIZE / BITS_PER_UNIT)-1; j++)
573                         *q++ = 0;
574                       *q++ = TREE_STRING_POINTER (t)[i];
575                     }
576                   else
577                     {
578                       *q++ = TREE_STRING_POINTER (t)[i];
579                       for (j=0; j<(WCHAR_TYPE_SIZE / BITS_PER_UNIT)-1; j++)
580                         *q++ = 0;
581                     }
582                 }
583             }
584         }
585       if (wide_flag)
586         {
587           int i;
588           for (i = 0; i < wchar_bytes; i++)
589             *q++ = 0;
590         }
591       else
592         *q = 0;
593
594       value = build_string (length, p);
595     }
596   else
597     {
598       value = strings;
599       length = TREE_STRING_LENGTH (value);
600       if (TREE_TYPE (value) == wchar_array_type_node)
601         wide_flag = 1;
602     }
603
604   /* Compute the number of elements, for the array type.  */
605   nchars = wide_flag ? length / wchar_bytes : length;
606
607   if (pedantic && nchars - 1 > nchars_max && c_language == clk_c)
608     pedwarn ("string length `%d' is greater than the length `%d' ISO C%d compilers are required to support",
609              nchars - 1, nchars_max, flag_isoc99 ? 99 : 89);
610
611   /* Create the array type for the string constant.
612      -Wwrite-strings says make the string constant an array of const char
613      so that copying it to a non-const pointer will get a warning.
614      For C++, this is the standard behavior.  */
615   if (flag_const_strings
616       && (! flag_traditional  && ! flag_writable_strings))
617     {
618       tree elements
619         = build_type_variant (wide_flag ? wchar_type_node : char_type_node,
620                               1, 0);
621       TREE_TYPE (value)
622         = build_array_type (elements,
623                             build_index_type (build_int_2 (nchars - 1, 0)));
624     }
625   else
626     TREE_TYPE (value)
627       = build_array_type (wide_flag ? wchar_type_node : char_type_node,
628                           build_index_type (build_int_2 (nchars - 1, 0)));
629
630   TREE_CONSTANT (value) = 1;
631   TREE_READONLY (value) = ! flag_writable_strings;
632   TREE_STATIC (value) = 1;
633   return value;
634 }
635 \f
636 static int is_valid_printf_arglist PARAMS ((tree));
637 static rtx c_expand_builtin PARAMS ((tree, rtx, enum machine_mode, enum expand_modifier));
638 static rtx c_expand_builtin_printf PARAMS ((tree, rtx, enum machine_mode,
639                                             enum expand_modifier, int));
640 static rtx c_expand_builtin_fprintf PARAMS ((tree, rtx, enum machine_mode,
641                                              enum expand_modifier, int));
642 \f
643 /* Print a warning if a constant expression had overflow in folding.
644    Invoke this function on every expression that the language
645    requires to be a constant expression.
646    Note the ANSI C standard says it is erroneous for a
647    constant expression to overflow.  */
648
649 void
650 constant_expression_warning (value)
651      tree value;
652 {
653   if ((TREE_CODE (value) == INTEGER_CST || TREE_CODE (value) == REAL_CST
654        || TREE_CODE (value) == COMPLEX_CST)
655       && TREE_CONSTANT_OVERFLOW (value) && pedantic)
656     pedwarn ("overflow in constant expression");
657 }
658
659 /* Print a warning if an expression had overflow in folding.
660    Invoke this function on every expression that
661    (1) appears in the source code, and
662    (2) might be a constant expression that overflowed, and
663    (3) is not already checked by convert_and_check;
664    however, do not invoke this function on operands of explicit casts.  */
665
666 void
667 overflow_warning (value)
668      tree value;
669 {
670   if ((TREE_CODE (value) == INTEGER_CST
671        || (TREE_CODE (value) == COMPLEX_CST
672            && TREE_CODE (TREE_REALPART (value)) == INTEGER_CST))
673       && TREE_OVERFLOW (value))
674     {
675       TREE_OVERFLOW (value) = 0;
676       if (skip_evaluation == 0)
677         warning ("integer overflow in expression");
678     }
679   else if ((TREE_CODE (value) == REAL_CST
680             || (TREE_CODE (value) == COMPLEX_CST
681                 && TREE_CODE (TREE_REALPART (value)) == REAL_CST))
682            && TREE_OVERFLOW (value))
683     {
684       TREE_OVERFLOW (value) = 0;
685       if (skip_evaluation == 0)
686         warning ("floating point overflow in expression");
687     }
688 }
689
690 /* Print a warning if a large constant is truncated to unsigned,
691    or if -Wconversion is used and a constant < 0 is converted to unsigned.
692    Invoke this function on every expression that might be implicitly
693    converted to an unsigned type.  */
694
695 void
696 unsigned_conversion_warning (result, operand)
697      tree result, operand;
698 {
699   if (TREE_CODE (operand) == INTEGER_CST
700       && TREE_CODE (TREE_TYPE (result)) == INTEGER_TYPE
701       && TREE_UNSIGNED (TREE_TYPE (result))
702       && skip_evaluation == 0
703       && !int_fits_type_p (operand, TREE_TYPE (result)))
704     {
705       if (!int_fits_type_p (operand, signed_type (TREE_TYPE (result))))
706         /* This detects cases like converting -129 or 256 to unsigned char.  */
707         warning ("large integer implicitly truncated to unsigned type");
708       else if (warn_conversion)
709         warning ("negative integer implicitly converted to unsigned type");
710     }
711 }
712
713 /* Nonzero if constant C has a value that is permissible
714    for type TYPE (an INTEGER_TYPE).  */
715
716 static int
717 constant_fits_type_p (c, type)
718      tree c, type;
719 {
720   if (TREE_CODE (c) == INTEGER_CST)
721     return int_fits_type_p (c, type);
722
723   c = convert (type, c);
724   return !TREE_OVERFLOW (c);
725 }     
726
727 /* Convert EXPR to TYPE, warning about conversion problems with constants.
728    Invoke this function on every expression that is converted implicitly,
729    i.e. because of language rules and not because of an explicit cast.  */
730
731 tree
732 convert_and_check (type, expr)
733      tree type, expr;
734 {
735   tree t = convert (type, expr);
736   if (TREE_CODE (t) == INTEGER_CST)
737     {
738       if (TREE_OVERFLOW (t))
739         {
740           TREE_OVERFLOW (t) = 0;
741
742           /* Do not diagnose overflow in a constant expression merely
743              because a conversion overflowed.  */
744           TREE_CONSTANT_OVERFLOW (t) = TREE_CONSTANT_OVERFLOW (expr);
745
746           /* No warning for converting 0x80000000 to int.  */
747           if (!(TREE_UNSIGNED (type) < TREE_UNSIGNED (TREE_TYPE (expr))
748                 && TREE_CODE (TREE_TYPE (expr)) == INTEGER_TYPE
749                 && TYPE_PRECISION (type) == TYPE_PRECISION (TREE_TYPE (expr))))
750             /* If EXPR fits in the unsigned version of TYPE,
751                don't warn unless pedantic.  */
752             if ((pedantic
753                  || TREE_UNSIGNED (type)
754                  || ! constant_fits_type_p (expr, unsigned_type (type)))
755                 && skip_evaluation == 0)
756               warning ("overflow in implicit constant conversion");
757         }
758       else
759         unsigned_conversion_warning (t, expr);
760     }
761   return t;
762 }
763 \f
764 /* A node in a list that describes references to variables (EXPR), which are
765    either read accesses if WRITER is zero, or write accesses, in which case
766    WRITER is the parent of EXPR.  */
767 struct tlist
768 {
769   struct tlist *next;
770   tree expr, writer;
771 };
772
773 /* Used to implement a cache the results of a call to verify_tree.  We only
774    use this for SAVE_EXPRs.  */
775 struct tlist_cache
776 {
777   struct tlist_cache *next;
778   struct tlist *cache_before_sp;
779   struct tlist *cache_after_sp;
780   tree expr;
781 };
782
783 /* Obstack to use when allocating tlist structures, and corresponding
784    firstobj.  */
785 static struct obstack tlist_obstack;
786 static char *tlist_firstobj = 0;
787
788 /* Keep track of the identifiers we've warned about, so we can avoid duplicate
789    warnings.  */
790 static struct tlist *warned_ids;
791 /* SAVE_EXPRs need special treatment.  We process them only once and then
792    cache the results.  */
793 static struct tlist_cache *save_expr_cache;
794
795 static void add_tlist PARAMS ((struct tlist **, struct tlist *, tree, int));
796 static void merge_tlist PARAMS ((struct tlist **, struct tlist *, int));
797 static void verify_tree PARAMS ((tree, struct tlist **, struct tlist **, tree));
798 static int warning_candidate_p PARAMS ((tree));
799 static void warn_for_collisions PARAMS ((struct tlist *));
800 static void warn_for_collisions_1 PARAMS ((tree, tree, struct tlist *, int));
801 static struct tlist *new_tlist PARAMS ((struct tlist *, tree, tree));
802 static void verify_sequence_points PARAMS ((tree));
803
804 /* Create a new struct tlist and fill in its fields.  */
805 static struct tlist *
806 new_tlist (next, t, writer)
807      struct tlist *next;
808      tree t;
809      tree writer;
810 {
811   struct tlist *l;
812   l = (struct tlist *) obstack_alloc (&tlist_obstack, sizeof *l);
813   l->next = next;
814   l->expr = t;
815   l->writer = writer;
816   return l;
817 }
818
819 /* Add duplicates of the nodes found in ADD to the list *TO.  If EXCLUDE_WRITER
820    is nonnull, we ignore any node we find which has a writer equal to it.  */
821
822 static void
823 add_tlist (to, add, exclude_writer, copy)
824      struct tlist **to;
825      struct tlist *add;
826      tree exclude_writer;
827      int copy;
828 {
829   while (add)
830     {
831       struct tlist *next = add->next;
832       if (! copy)
833         add->next = *to;
834       if (! exclude_writer || add->writer != exclude_writer)
835         *to = copy ? new_tlist (*to, add->expr, add->writer) : add;
836       add = next;
837     }
838 }
839
840 /* Merge the nodes of ADD into TO.  This merging process is done so that for
841    each variable that already exists in TO, no new node is added; however if
842    there is a write access recorded in ADD, and an occurrence on TO is only
843    a read access, then the occurrence in TO will be modified to record the
844    write.  */
845
846 static void
847 merge_tlist (to, add, copy)
848      struct tlist **to;
849      struct tlist *add;
850      int copy;
851 {
852   struct tlist **end = to;
853
854   while (*end)
855     end = &(*end)->next;
856
857   while (add)
858     {
859       int found = 0;
860       struct tlist *tmp2;
861       struct tlist *next = add->next;
862
863       for (tmp2 = *to; tmp2; tmp2 = tmp2->next)
864         if (tmp2->expr == add->expr)
865           {
866             found = 1;
867             if (! tmp2->writer)
868               tmp2->writer = add->writer;
869           }
870       if (! found)
871         {
872           *end = copy ? add : new_tlist (NULL, add->expr, add->writer);
873           end = &(*end)->next;
874           *end = 0;
875         }
876       add = next;
877     }
878 }
879
880 /* WRITTEN is a variable, WRITER is its parent.  Warn if any of the variable
881    references in list LIST conflict with it, excluding reads if ONLY writers
882    is nonzero.  */
883
884 static void
885 warn_for_collisions_1 (written, writer, list, only_writes)
886      tree written, writer;
887      struct tlist *list;
888      int only_writes;
889 {
890   struct tlist *tmp;
891
892   /* Avoid duplicate warnings.  */
893   for (tmp = warned_ids; tmp; tmp = tmp->next)
894     if (tmp->expr == written)
895       return;
896
897   while (list)
898     {
899       if (list->expr == written
900           && list->writer != writer
901           && (! only_writes || list->writer))
902         {
903           warned_ids = new_tlist (warned_ids, written, NULL_TREE);
904           warning ("operation on `%s' may be undefined",
905                    IDENTIFIER_POINTER (DECL_NAME (list->expr)));
906         }
907       list = list->next;
908     }
909 }
910
911 /* Given a list LIST of references to variables, find whether any of these
912    can cause conflicts due to missing sequence points.  */
913
914 static void
915 warn_for_collisions (list)
916      struct tlist *list;
917 {
918   struct tlist *tmp;
919   
920   for (tmp = list; tmp; tmp = tmp->next)
921     {
922       if (tmp->writer)
923         warn_for_collisions_1 (tmp->expr, tmp->writer, list, 0);
924     }
925 }
926
927 /* Return nonzero if X is a tree that can be verified by the sequence point
928    warnings.  */
929 static int
930 warning_candidate_p (x)
931      tree x;
932 {
933   return TREE_CODE (x) == VAR_DECL || TREE_CODE (x) == PARM_DECL;
934 }
935
936 /* Walk the tree X, and record accesses to variables.  If X is written by the
937    parent tree, WRITER is the parent.
938    We store accesses in one of the two lists: PBEFORE_SP, and PNO_SP.  If this
939    expression or its only operand forces a sequence point, then everything up
940    to the sequence point is stored in PBEFORE_SP.  Everything else gets stored
941    in PNO_SP.
942    Once we return, we will have emitted warnings if any subexpression before
943    such a sequence point could be undefined.  On a higher level, however, the
944    sequence point may not be relevant, and we'll merge the two lists.
945
946    Example: (b++, a) + b;
947    The call that processes the COMPOUND_EXPR will store the increment of B
948    in PBEFORE_SP, and the use of A in PNO_SP.  The higher-level call that
949    processes the PLUS_EXPR will need to merge the two lists so that
950    eventually, all accesses end up on the same list (and we'll warn about the
951    unordered subexpressions b++ and b.
952
953    A note on merging.  If we modify the former example so that our expression
954    becomes
955      (b++, b) + a
956    care must be taken not simply to add all three expressions into the final
957    PNO_SP list.  The function merge_tlist takes care of that by merging the
958    before-SP list of the COMPOUND_EXPR into its after-SP list in a special
959    way, so that no more than one access to B is recorded.  */
960
961 static void
962 verify_tree (x, pbefore_sp, pno_sp, writer)
963      tree x;
964      struct tlist **pbefore_sp, **pno_sp;
965      tree writer;
966 {
967   struct tlist *tmp_before, *tmp_nosp, *tmp_list2, *tmp_list3;
968   enum tree_code code;
969   char class;
970
971   /* X may be NULL if it is the operand of an empty statement expression
972      ({ }).  */
973   if (x == NULL)
974     return;
975
976  restart:
977   code = TREE_CODE (x);
978   class = TREE_CODE_CLASS (code);
979
980   if (warning_candidate_p (x))
981     {
982       *pno_sp = new_tlist (*pno_sp, x, writer);
983       return;
984     }
985
986   switch (code)
987     {
988     case CONSTRUCTOR:
989       return;
990
991     case COMPOUND_EXPR:
992     case TRUTH_ANDIF_EXPR:
993     case TRUTH_ORIF_EXPR:
994       tmp_before = tmp_nosp = tmp_list3 = 0;
995       verify_tree (TREE_OPERAND (x, 0), &tmp_before, &tmp_nosp, NULL_TREE);
996       warn_for_collisions (tmp_nosp);
997       merge_tlist (pbefore_sp, tmp_before, 0);
998       merge_tlist (pbefore_sp, tmp_nosp, 0);
999       verify_tree (TREE_OPERAND (x, 1), &tmp_list3, pno_sp, NULL_TREE);
1000       merge_tlist (pbefore_sp, tmp_list3, 0);
1001       return;
1002
1003     case COND_EXPR:
1004       tmp_before = tmp_list2 = 0;
1005       verify_tree (TREE_OPERAND (x, 0), &tmp_before, &tmp_list2, NULL_TREE);
1006       warn_for_collisions (tmp_list2);
1007       merge_tlist (pbefore_sp, tmp_before, 0);
1008       merge_tlist (pbefore_sp, tmp_list2, 1);
1009
1010       tmp_list3 = tmp_nosp = 0;
1011       verify_tree (TREE_OPERAND (x, 1), &tmp_list3, &tmp_nosp, NULL_TREE);
1012       warn_for_collisions (tmp_nosp);
1013       merge_tlist (pbefore_sp, tmp_list3, 0);
1014
1015       tmp_list3 = tmp_list2 = 0;
1016       verify_tree (TREE_OPERAND (x, 2), &tmp_list3, &tmp_list2, NULL_TREE);
1017       warn_for_collisions (tmp_list2);
1018       merge_tlist (pbefore_sp, tmp_list3, 0);
1019       /* Rather than add both tmp_nosp and tmp_list2, we have to merge the
1020          two first, to avoid warning for (a ? b++ : b++).  */
1021       merge_tlist (&tmp_nosp, tmp_list2, 0);
1022       add_tlist (pno_sp, tmp_nosp, NULL_TREE, 0);
1023       return;
1024
1025     case PREDECREMENT_EXPR:
1026     case PREINCREMENT_EXPR:
1027     case POSTDECREMENT_EXPR:
1028     case POSTINCREMENT_EXPR:
1029       verify_tree (TREE_OPERAND (x, 0), pno_sp, pno_sp, x);
1030       return;
1031
1032     case MODIFY_EXPR:
1033       tmp_before = tmp_nosp = tmp_list3 = 0;
1034       verify_tree (TREE_OPERAND (x, 1), &tmp_before, &tmp_nosp, NULL_TREE);
1035       verify_tree (TREE_OPERAND (x, 0), &tmp_list3, &tmp_list3, x);
1036       /* Expressions inside the LHS are not ordered wrt. the sequence points
1037          in the RHS.  Example:
1038            *a = (a++, 2)
1039          Despite the fact that the modification of "a" is in the before_sp
1040          list (tmp_before), it conflicts with the use of "a" in the LHS.
1041          We can handle this by adding the contents of tmp_list3
1042          to those of tmp_before, and redoing the collision warnings for that
1043          list.  */
1044       add_tlist (&tmp_before, tmp_list3, x, 1);
1045       warn_for_collisions (tmp_before);
1046       /* Exclude the LHS itself here; we first have to merge it into the
1047          tmp_nosp list.  This is done to avoid warning for "a = a"; if we
1048          didn't exclude the LHS, we'd get it twice, once as a read and once
1049          as a write.  */
1050       add_tlist (pno_sp, tmp_list3, x, 0);
1051       warn_for_collisions_1 (TREE_OPERAND (x, 0), x, tmp_nosp, 1);
1052
1053       merge_tlist (pbefore_sp, tmp_before, 0);
1054       if (warning_candidate_p (TREE_OPERAND (x, 0)))
1055         merge_tlist (&tmp_nosp, new_tlist (NULL, TREE_OPERAND (x, 0), x), 0);
1056       add_tlist (pno_sp, tmp_nosp, NULL_TREE, 1);
1057       return;
1058
1059     case CALL_EXPR:
1060       /* We need to warn about conflicts among arguments and conflicts between
1061          args and the function address.  Side effects of the function address,
1062          however, are not ordered by the sequence point of the call.  */
1063       tmp_before = tmp_nosp = tmp_list2 = tmp_list3 = 0;
1064       verify_tree (TREE_OPERAND (x, 0), &tmp_before, &tmp_nosp, NULL_TREE);
1065       if (TREE_OPERAND (x, 1))
1066         verify_tree (TREE_OPERAND (x, 1), &tmp_list2, &tmp_list3, NULL_TREE);
1067       merge_tlist (&tmp_list3, tmp_list2, 0);
1068       add_tlist (&tmp_before, tmp_list3, NULL_TREE, 0);
1069       add_tlist (&tmp_before, tmp_nosp, NULL_TREE, 0);
1070       warn_for_collisions (tmp_before);
1071       add_tlist (pbefore_sp, tmp_before, NULL_TREE, 0);
1072       return;
1073
1074     case TREE_LIST:
1075       /* Scan all the list, e.g. indices of multi dimensional array.  */
1076       while (x)
1077         {
1078           tmp_before = tmp_nosp = 0;
1079           verify_tree (TREE_VALUE (x), &tmp_before, &tmp_nosp, NULL_TREE);
1080           merge_tlist (&tmp_nosp, tmp_before, 0);
1081           add_tlist (pno_sp, tmp_nosp, NULL_TREE, 0);
1082           x = TREE_CHAIN (x);
1083         }
1084       return;
1085
1086     case SAVE_EXPR:
1087       {
1088         struct tlist_cache *t;
1089         for (t = save_expr_cache; t; t = t->next)
1090           if (t->expr == x)
1091             break;
1092
1093         if (! t)
1094           {
1095             t = (struct tlist_cache *) obstack_alloc (&tlist_obstack,
1096                                                       sizeof *t);
1097             t->next = save_expr_cache;
1098             t->expr = x;
1099             save_expr_cache = t;
1100
1101             tmp_before = tmp_nosp = 0;
1102             verify_tree (TREE_OPERAND (x, 0), &tmp_before, &tmp_nosp, NULL_TREE);
1103             warn_for_collisions (tmp_nosp);
1104
1105             tmp_list3 = 0;
1106             while (tmp_nosp)
1107               {
1108                 struct tlist *t = tmp_nosp;
1109                 tmp_nosp = t->next;
1110                 merge_tlist (&tmp_list3, t, 0);
1111               }
1112             t->cache_before_sp = tmp_before;
1113             t->cache_after_sp = tmp_list3;
1114           }
1115         merge_tlist (pbefore_sp, t->cache_before_sp, 1);
1116         add_tlist (pno_sp, t->cache_after_sp, NULL_TREE, 1);
1117         return;
1118       }
1119     default:
1120       break;
1121     }
1122
1123   if (class == '1')
1124     {
1125       if (first_rtl_op (code) == 0)
1126         return;
1127       x = TREE_OPERAND (x, 0);
1128       writer = 0;
1129       goto restart;
1130     }
1131
1132   switch (class)
1133     {
1134     case 'r':
1135     case '<':
1136     case '2':
1137     case 'b':
1138     case 'e':
1139     case 's':
1140     case 'x':
1141       {
1142         int lp;
1143         int max = first_rtl_op (TREE_CODE (x));
1144         for (lp = 0; lp < max; lp++)
1145           {
1146             tmp_before = tmp_nosp = 0;
1147             verify_tree (TREE_OPERAND (x, lp), &tmp_before, &tmp_nosp, NULL_TREE);
1148             merge_tlist (&tmp_nosp, tmp_before, 0);
1149             add_tlist (pno_sp, tmp_nosp, NULL_TREE, 0);
1150           }
1151         break;
1152       }
1153     }
1154 }
1155
1156 /* Try to warn for undefined behaviour in EXPR due to missing sequence
1157    points.  */
1158
1159 static void
1160 verify_sequence_points (expr)
1161      tree expr;
1162 {
1163   struct tlist *before_sp = 0, *after_sp = 0;
1164
1165   warned_ids = 0;
1166   save_expr_cache = 0;
1167   if (tlist_firstobj == 0)
1168     {
1169       gcc_obstack_init (&tlist_obstack);
1170       tlist_firstobj = obstack_alloc (&tlist_obstack, 0);
1171     }
1172
1173   verify_tree (expr, &before_sp, &after_sp, 0);
1174   warn_for_collisions (after_sp);
1175   obstack_free (&tlist_obstack, tlist_firstobj);
1176 }
1177
1178 tree
1179 c_expand_expr_stmt (expr)
1180      tree expr;
1181 {
1182   /* Do default conversion if safe and possibly important,
1183      in case within ({...}).  */
1184   if ((TREE_CODE (TREE_TYPE (expr)) == ARRAY_TYPE && lvalue_p (expr))
1185       || TREE_CODE (TREE_TYPE (expr)) == FUNCTION_TYPE)
1186     expr = default_conversion (expr);
1187
1188   if (warn_sequence_point)
1189     verify_sequence_points (expr);
1190
1191   if (TREE_TYPE (expr) != error_mark_node
1192       && !COMPLETE_OR_VOID_TYPE_P (TREE_TYPE (expr))
1193       && TREE_CODE (TREE_TYPE (expr)) != ARRAY_TYPE)
1194     error ("expression statement has incomplete type");
1195
1196   last_expr_type = TREE_TYPE (expr); 
1197   return add_stmt (build_stmt (EXPR_STMT, expr));
1198 }
1199 \f
1200 /* Validate the expression after `case' and apply default promotions.  */
1201
1202 tree
1203 check_case_value (value)
1204      tree value;
1205 {
1206   if (value == NULL_TREE)
1207     return value;
1208
1209   /* Strip NON_LVALUE_EXPRs since we aren't using as an lvalue.  */
1210   STRIP_TYPE_NOPS (value);
1211   /* In C++, the following is allowed:
1212
1213        const int i = 3;
1214        switch (...) { case i: ... }
1215
1216      So, we try to reduce the VALUE to a constant that way.  */
1217   if (c_language == clk_cplusplus)
1218     {
1219       value = decl_constant_value (value);
1220       STRIP_TYPE_NOPS (value);
1221       value = fold (value);
1222     }
1223
1224   if (TREE_CODE (value) != INTEGER_CST
1225       && value != error_mark_node)
1226     {
1227       error ("case label does not reduce to an integer constant");
1228       value = error_mark_node;
1229     }
1230   else
1231     /* Promote char or short to int.  */
1232     value = default_conversion (value);
1233
1234   constant_expression_warning (value);
1235
1236   return value;
1237 }
1238 \f
1239 /* Return an integer type with BITS bits of precision,
1240    that is unsigned if UNSIGNEDP is nonzero, otherwise signed.  */
1241
1242 tree
1243 type_for_size (bits, unsignedp)
1244      unsigned bits;
1245      int unsignedp;
1246 {
1247   if (bits == TYPE_PRECISION (integer_type_node))
1248     return unsignedp ? unsigned_type_node : integer_type_node;
1249
1250   if (bits == TYPE_PRECISION (signed_char_type_node))
1251     return unsignedp ? unsigned_char_type_node : signed_char_type_node;
1252
1253   if (bits == TYPE_PRECISION (short_integer_type_node))
1254     return unsignedp ? short_unsigned_type_node : short_integer_type_node;
1255
1256   if (bits == TYPE_PRECISION (long_integer_type_node))
1257     return unsignedp ? long_unsigned_type_node : long_integer_type_node;
1258
1259   if (bits == TYPE_PRECISION (long_long_integer_type_node))
1260     return (unsignedp ? long_long_unsigned_type_node
1261             : long_long_integer_type_node);
1262
1263   if (bits == TYPE_PRECISION (widest_integer_literal_type_node))
1264     return (unsignedp ? widest_unsigned_literal_type_node
1265             : widest_integer_literal_type_node);
1266
1267   if (bits <= TYPE_PRECISION (intQI_type_node))
1268     return unsignedp ? unsigned_intQI_type_node : intQI_type_node;
1269
1270   if (bits <= TYPE_PRECISION (intHI_type_node))
1271     return unsignedp ? unsigned_intHI_type_node : intHI_type_node;
1272
1273   if (bits <= TYPE_PRECISION (intSI_type_node))
1274     return unsignedp ? unsigned_intSI_type_node : intSI_type_node;
1275
1276   if (bits <= TYPE_PRECISION (intDI_type_node))
1277     return unsignedp ? unsigned_intDI_type_node : intDI_type_node;
1278
1279   return 0;
1280 }
1281
1282 /* Return a data type that has machine mode MODE.
1283    If the mode is an integer,
1284    then UNSIGNEDP selects between signed and unsigned types.  */
1285
1286 tree
1287 type_for_mode (mode, unsignedp)
1288      enum machine_mode mode;
1289      int unsignedp;
1290 {
1291   if (mode == TYPE_MODE (integer_type_node))
1292     return unsignedp ? unsigned_type_node : integer_type_node;
1293
1294   if (mode == TYPE_MODE (signed_char_type_node))
1295     return unsignedp ? unsigned_char_type_node : signed_char_type_node;
1296
1297   if (mode == TYPE_MODE (short_integer_type_node))
1298     return unsignedp ? short_unsigned_type_node : short_integer_type_node;
1299
1300   if (mode == TYPE_MODE (long_integer_type_node))
1301     return unsignedp ? long_unsigned_type_node : long_integer_type_node;
1302
1303   if (mode == TYPE_MODE (long_long_integer_type_node))
1304     return unsignedp ? long_long_unsigned_type_node : long_long_integer_type_node;
1305
1306   if (mode == TYPE_MODE (widest_integer_literal_type_node))
1307     return unsignedp ? widest_unsigned_literal_type_node
1308                      : widest_integer_literal_type_node;
1309
1310   if (mode == TYPE_MODE (intQI_type_node))
1311     return unsignedp ? unsigned_intQI_type_node : intQI_type_node;
1312
1313   if (mode == TYPE_MODE (intHI_type_node))
1314     return unsignedp ? unsigned_intHI_type_node : intHI_type_node;
1315
1316   if (mode == TYPE_MODE (intSI_type_node))
1317     return unsignedp ? unsigned_intSI_type_node : intSI_type_node;
1318
1319   if (mode == TYPE_MODE (intDI_type_node))
1320     return unsignedp ? unsigned_intDI_type_node : intDI_type_node;
1321
1322 #if HOST_BITS_PER_WIDE_INT >= 64
1323   if (mode == TYPE_MODE (intTI_type_node))
1324     return unsignedp ? unsigned_intTI_type_node : intTI_type_node;
1325 #endif
1326
1327   if (mode == TYPE_MODE (float_type_node))
1328     return float_type_node;
1329
1330   if (mode == TYPE_MODE (double_type_node))
1331     return double_type_node;
1332
1333   if (mode == TYPE_MODE (long_double_type_node))
1334     return long_double_type_node;
1335
1336   if (mode == TYPE_MODE (build_pointer_type (char_type_node)))
1337     return build_pointer_type (char_type_node);
1338
1339   if (mode == TYPE_MODE (build_pointer_type (integer_type_node)))
1340     return build_pointer_type (integer_type_node);
1341
1342 #ifdef VECTOR_MODE_SUPPORTED_P
1343   if (mode == TYPE_MODE (V16QI_type_node) && VECTOR_MODE_SUPPORTED_P (mode))
1344     return V16QI_type_node;
1345   if (mode == TYPE_MODE (V8HI_type_node) && VECTOR_MODE_SUPPORTED_P (mode))
1346     return V8HI_type_node;
1347   if (mode == TYPE_MODE (V4SF_type_node) && VECTOR_MODE_SUPPORTED_P (mode))
1348     return V4SF_type_node;
1349   if (mode == TYPE_MODE (V4SI_type_node) && VECTOR_MODE_SUPPORTED_P (mode))
1350     return V4SI_type_node;
1351   if (mode == TYPE_MODE (V2SI_type_node) && VECTOR_MODE_SUPPORTED_P (mode))
1352     return V2SI_type_node;
1353   if (mode == TYPE_MODE (V4HI_type_node) && VECTOR_MODE_SUPPORTED_P (mode))
1354     return V4HI_type_node;
1355   if (mode == TYPE_MODE (V8QI_type_node) && VECTOR_MODE_SUPPORTED_P (mode))
1356     return V8QI_type_node;
1357   if (mode == TYPE_MODE (V2SF_type_node) && VECTOR_MODE_SUPPORTED_P (mode))
1358     return V2SF_type_node;
1359 #endif
1360
1361   return 0;
1362 }
1363
1364 /* Return an unsigned type the same as TYPE in other respects.  */
1365 tree
1366 unsigned_type (type)
1367      tree type;
1368 {
1369   tree type1 = TYPE_MAIN_VARIANT (type);
1370   if (type1 == signed_char_type_node || type1 == char_type_node)
1371     return unsigned_char_type_node;
1372   if (type1 == integer_type_node)
1373     return unsigned_type_node;
1374   if (type1 == short_integer_type_node)
1375     return short_unsigned_type_node;
1376   if (type1 == long_integer_type_node)
1377     return long_unsigned_type_node;
1378   if (type1 == long_long_integer_type_node)
1379     return long_long_unsigned_type_node;
1380   if (type1 == widest_integer_literal_type_node)
1381     return widest_unsigned_literal_type_node;
1382 #if HOST_BITS_PER_WIDE_INT >= 64
1383   if (type1 == intTI_type_node)
1384     return unsigned_intTI_type_node;
1385 #endif
1386   if (type1 == intDI_type_node)
1387     return unsigned_intDI_type_node;
1388   if (type1 == intSI_type_node)
1389     return unsigned_intSI_type_node;
1390   if (type1 == intHI_type_node)
1391     return unsigned_intHI_type_node;
1392   if (type1 == intQI_type_node)
1393     return unsigned_intQI_type_node;
1394
1395   return signed_or_unsigned_type (1, type);
1396 }
1397
1398 /* Return a signed type the same as TYPE in other respects.  */
1399
1400 tree
1401 signed_type (type)
1402      tree type;
1403 {
1404   tree type1 = TYPE_MAIN_VARIANT (type);
1405   if (type1 == unsigned_char_type_node || type1 == char_type_node)
1406     return signed_char_type_node;
1407   if (type1 == unsigned_type_node)
1408     return integer_type_node;
1409   if (type1 == short_unsigned_type_node)
1410     return short_integer_type_node;
1411   if (type1 == long_unsigned_type_node)
1412     return long_integer_type_node;
1413   if (type1 == long_long_unsigned_type_node)
1414     return long_long_integer_type_node;
1415   if (type1 == widest_unsigned_literal_type_node)
1416     return widest_integer_literal_type_node;
1417 #if HOST_BITS_PER_WIDE_INT >= 64
1418   if (type1 == unsigned_intTI_type_node)
1419     return intTI_type_node;
1420 #endif
1421   if (type1 == unsigned_intDI_type_node)
1422     return intDI_type_node;
1423   if (type1 == unsigned_intSI_type_node)
1424     return intSI_type_node;
1425   if (type1 == unsigned_intHI_type_node)
1426     return intHI_type_node;
1427   if (type1 == unsigned_intQI_type_node)
1428     return intQI_type_node;
1429
1430   return signed_or_unsigned_type (0, type);
1431 }
1432
1433 /* Return a type the same as TYPE except unsigned or
1434    signed according to UNSIGNEDP.  */
1435
1436 tree
1437 signed_or_unsigned_type (unsignedp, type)
1438      int unsignedp;
1439      tree type;
1440 {
1441   if (! INTEGRAL_TYPE_P (type)
1442       || TREE_UNSIGNED (type) == unsignedp)
1443     return type;
1444
1445   if (TYPE_PRECISION (type) == TYPE_PRECISION (signed_char_type_node))
1446     return unsignedp ? unsigned_char_type_node : signed_char_type_node;
1447   if (TYPE_PRECISION (type) == TYPE_PRECISION (integer_type_node))
1448     return unsignedp ? unsigned_type_node : integer_type_node;
1449   if (TYPE_PRECISION (type) == TYPE_PRECISION (short_integer_type_node))
1450     return unsignedp ? short_unsigned_type_node : short_integer_type_node;
1451   if (TYPE_PRECISION (type) == TYPE_PRECISION (long_integer_type_node))
1452     return unsignedp ? long_unsigned_type_node : long_integer_type_node;
1453   if (TYPE_PRECISION (type) == TYPE_PRECISION (long_long_integer_type_node))
1454     return (unsignedp ? long_long_unsigned_type_node
1455             : long_long_integer_type_node);
1456   if (TYPE_PRECISION (type) == TYPE_PRECISION (widest_integer_literal_type_node))
1457     return (unsignedp ? widest_unsigned_literal_type_node
1458             : widest_integer_literal_type_node);
1459
1460 #if HOST_BITS_PER_WIDE_INT >= 64
1461   if (TYPE_PRECISION (type) == TYPE_PRECISION (intTI_type_node))
1462     return unsignedp ? unsigned_intTI_type_node : intTI_type_node;
1463 #endif
1464   if (TYPE_PRECISION (type) == TYPE_PRECISION (intDI_type_node))
1465     return unsignedp ? unsigned_intDI_type_node : intDI_type_node;
1466   if (TYPE_PRECISION (type) == TYPE_PRECISION (intSI_type_node))
1467     return unsignedp ? unsigned_intSI_type_node : intSI_type_node;
1468   if (TYPE_PRECISION (type) == TYPE_PRECISION (intHI_type_node))
1469     return unsignedp ? unsigned_intHI_type_node : intHI_type_node;
1470   if (TYPE_PRECISION (type) == TYPE_PRECISION (intQI_type_node))
1471     return unsignedp ? unsigned_intQI_type_node : intQI_type_node;
1472
1473   return type;
1474 }
1475 \f
1476 /* Return the minimum number of bits needed to represent VALUE in a
1477    signed or unsigned type, UNSIGNEDP says which.  */
1478
1479 unsigned int
1480 min_precision (value, unsignedp)
1481      tree value;
1482      int unsignedp;
1483 {
1484   int log;
1485
1486   /* If the value is negative, compute its negative minus 1.  The latter
1487      adjustment is because the absolute value of the largest negative value
1488      is one larger than the largest positive value.  This is equivalent to
1489      a bit-wise negation, so use that operation instead.  */
1490
1491   if (tree_int_cst_sgn (value) < 0)
1492     value = fold (build1 (BIT_NOT_EXPR, TREE_TYPE (value), value));
1493
1494   /* Return the number of bits needed, taking into account the fact
1495      that we need one more bit for a signed than unsigned type.  */
1496
1497   if (integer_zerop (value))
1498     log = 0;
1499   else
1500     log = tree_floor_log2 (value);
1501
1502   return log + 1 + ! unsignedp;
1503 }
1504 \f
1505 /* Print an error message for invalid operands to arith operation CODE.
1506    NOP_EXPR is used as a special case (see truthvalue_conversion).  */
1507
1508 void
1509 binary_op_error (code)
1510      enum tree_code code;
1511 {
1512   const char *opname;
1513
1514   switch (code)
1515     {
1516     case NOP_EXPR:
1517       error ("invalid truth-value expression");
1518       return;
1519
1520     case PLUS_EXPR:
1521       opname = "+"; break;
1522     case MINUS_EXPR:
1523       opname = "-"; break;
1524     case MULT_EXPR:
1525       opname = "*"; break;
1526     case MAX_EXPR:
1527       opname = "max"; break;
1528     case MIN_EXPR:
1529       opname = "min"; break;
1530     case EQ_EXPR:
1531       opname = "=="; break;
1532     case NE_EXPR:
1533       opname = "!="; break;
1534     case LE_EXPR:
1535       opname = "<="; break;
1536     case GE_EXPR:
1537       opname = ">="; break;
1538     case LT_EXPR:
1539       opname = "<"; break;
1540     case GT_EXPR:
1541       opname = ">"; break;
1542     case LSHIFT_EXPR:
1543       opname = "<<"; break;
1544     case RSHIFT_EXPR:
1545       opname = ">>"; break;
1546     case TRUNC_MOD_EXPR:
1547     case FLOOR_MOD_EXPR:
1548       opname = "%"; break;
1549     case TRUNC_DIV_EXPR:
1550     case FLOOR_DIV_EXPR:
1551       opname = "/"; break;
1552     case BIT_AND_EXPR:
1553       opname = "&"; break;
1554     case BIT_IOR_EXPR:
1555       opname = "|"; break;
1556     case TRUTH_ANDIF_EXPR:
1557       opname = "&&"; break;
1558     case TRUTH_ORIF_EXPR:
1559       opname = "||"; break;
1560     case BIT_XOR_EXPR:
1561       opname = "^"; break;
1562     case LROTATE_EXPR:
1563     case RROTATE_EXPR:
1564       opname = "rotate"; break;
1565     default:
1566       opname = "unknown"; break;
1567     }
1568   error ("invalid operands to binary %s", opname);
1569 }
1570 \f
1571 /* Subroutine of build_binary_op, used for comparison operations.
1572    See if the operands have both been converted from subword integer types
1573    and, if so, perhaps change them both back to their original type.
1574    This function is also responsible for converting the two operands
1575    to the proper common type for comparison.
1576
1577    The arguments of this function are all pointers to local variables
1578    of build_binary_op: OP0_PTR is &OP0, OP1_PTR is &OP1,
1579    RESTYPE_PTR is &RESULT_TYPE and RESCODE_PTR is &RESULTCODE.
1580
1581    If this function returns nonzero, it means that the comparison has
1582    a constant value.  What this function returns is an expression for
1583    that value.  */
1584
1585 tree
1586 shorten_compare (op0_ptr, op1_ptr, restype_ptr, rescode_ptr)
1587      tree *op0_ptr, *op1_ptr;
1588      tree *restype_ptr;
1589      enum tree_code *rescode_ptr;
1590 {
1591   tree type;
1592   tree op0 = *op0_ptr;
1593   tree op1 = *op1_ptr;
1594   int unsignedp0, unsignedp1;
1595   int real1, real2;
1596   tree primop0, primop1;
1597   enum tree_code code = *rescode_ptr;
1598
1599   /* Throw away any conversions to wider types
1600      already present in the operands.  */
1601
1602   primop0 = get_narrower (op0, &unsignedp0);
1603   primop1 = get_narrower (op1, &unsignedp1);
1604
1605   /* Handle the case that OP0 does not *contain* a conversion
1606      but it *requires* conversion to FINAL_TYPE.  */
1607
1608   if (op0 == primop0 && TREE_TYPE (op0) != *restype_ptr)
1609     unsignedp0 = TREE_UNSIGNED (TREE_TYPE (op0));
1610   if (op1 == primop1 && TREE_TYPE (op1) != *restype_ptr)
1611     unsignedp1 = TREE_UNSIGNED (TREE_TYPE (op1));
1612
1613   /* If one of the operands must be floated, we cannot optimize.  */
1614   real1 = TREE_CODE (TREE_TYPE (primop0)) == REAL_TYPE;
1615   real2 = TREE_CODE (TREE_TYPE (primop1)) == REAL_TYPE;
1616
1617   /* If first arg is constant, swap the args (changing operation
1618      so value is preserved), for canonicalization.  Don't do this if
1619      the second arg is 0.  */
1620
1621   if (TREE_CONSTANT (primop0)
1622       && ! integer_zerop (primop1) && ! real_zerop (primop1))
1623     {
1624       tree tem = primop0;
1625       int temi = unsignedp0;
1626       primop0 = primop1;
1627       primop1 = tem;
1628       tem = op0;
1629       op0 = op1;
1630       op1 = tem;
1631       *op0_ptr = op0;
1632       *op1_ptr = op1;
1633       unsignedp0 = unsignedp1;
1634       unsignedp1 = temi;
1635       temi = real1;
1636       real1 = real2;
1637       real2 = temi;
1638
1639       switch (code)
1640         {
1641         case LT_EXPR:
1642           code = GT_EXPR;
1643           break;
1644         case GT_EXPR:
1645           code = LT_EXPR;
1646           break;
1647         case LE_EXPR:
1648           code = GE_EXPR;
1649           break;
1650         case GE_EXPR:
1651           code = LE_EXPR;
1652           break;
1653         default:
1654           break;
1655         }
1656       *rescode_ptr = code;
1657     }
1658
1659   /* If comparing an integer against a constant more bits wide,
1660      maybe we can deduce a value of 1 or 0 independent of the data.
1661      Or else truncate the constant now
1662      rather than extend the variable at run time.
1663
1664      This is only interesting if the constant is the wider arg.
1665      Also, it is not safe if the constant is unsigned and the
1666      variable arg is signed, since in this case the variable
1667      would be sign-extended and then regarded as unsigned.
1668      Our technique fails in this case because the lowest/highest
1669      possible unsigned results don't follow naturally from the
1670      lowest/highest possible values of the variable operand.
1671      For just EQ_EXPR and NE_EXPR there is another technique that
1672      could be used: see if the constant can be faithfully represented
1673      in the other operand's type, by truncating it and reextending it
1674      and see if that preserves the constant's value.  */
1675
1676   if (!real1 && !real2
1677       && TREE_CODE (primop1) == INTEGER_CST
1678       && TYPE_PRECISION (TREE_TYPE (primop0)) < TYPE_PRECISION (*restype_ptr))
1679     {
1680       int min_gt, max_gt, min_lt, max_lt;
1681       tree maxval, minval;
1682       /* 1 if comparison is nominally unsigned.  */
1683       int unsignedp = TREE_UNSIGNED (*restype_ptr);
1684       tree val;
1685
1686       type = signed_or_unsigned_type (unsignedp0, TREE_TYPE (primop0));
1687
1688       /* If TYPE is an enumeration, then we need to get its min/max
1689          values from it's underlying integral type, not the enumerated
1690          type itself.  */
1691       if (TREE_CODE (type) == ENUMERAL_TYPE)
1692         type = type_for_size (TYPE_PRECISION (type), unsignedp0);
1693
1694       maxval = TYPE_MAX_VALUE (type);
1695       minval = TYPE_MIN_VALUE (type);
1696
1697       if (unsignedp && !unsignedp0)
1698         *restype_ptr = signed_type (*restype_ptr);
1699
1700       if (TREE_TYPE (primop1) != *restype_ptr)
1701         primop1 = convert (*restype_ptr, primop1);
1702       if (type != *restype_ptr)
1703         {
1704           minval = convert (*restype_ptr, minval);
1705           maxval = convert (*restype_ptr, maxval);
1706         }
1707
1708       if (unsignedp && unsignedp0)
1709         {
1710           min_gt = INT_CST_LT_UNSIGNED (primop1, minval);
1711           max_gt = INT_CST_LT_UNSIGNED (primop1, maxval);
1712           min_lt = INT_CST_LT_UNSIGNED (minval, primop1);
1713           max_lt = INT_CST_LT_UNSIGNED (maxval, primop1);
1714         }
1715       else
1716         {
1717           min_gt = INT_CST_LT (primop1, minval);
1718           max_gt = INT_CST_LT (primop1, maxval);
1719           min_lt = INT_CST_LT (minval, primop1);
1720           max_lt = INT_CST_LT (maxval, primop1);
1721         }
1722
1723       val = 0;
1724       /* This used to be a switch, but Genix compiler can't handle that.  */
1725       if (code == NE_EXPR)
1726         {
1727           if (max_lt || min_gt)
1728             val = boolean_true_node;
1729         }
1730       else if (code == EQ_EXPR)
1731         {
1732           if (max_lt || min_gt)
1733             val = boolean_false_node;
1734         }
1735       else if (code == LT_EXPR)
1736         {
1737           if (max_lt)
1738             val = boolean_true_node;
1739           if (!min_lt)
1740             val = boolean_false_node;
1741         }
1742       else if (code == GT_EXPR)
1743         {
1744           if (min_gt)
1745             val = boolean_true_node;
1746           if (!max_gt)
1747             val = boolean_false_node;
1748         }
1749       else if (code == LE_EXPR)
1750         {
1751           if (!max_gt)
1752             val = boolean_true_node;
1753           if (min_gt)
1754             val = boolean_false_node;
1755         }
1756       else if (code == GE_EXPR)
1757         {
1758           if (!min_lt)
1759             val = boolean_true_node;
1760           if (max_lt)
1761             val = boolean_false_node;
1762         }
1763
1764       /* If primop0 was sign-extended and unsigned comparison specd,
1765          we did a signed comparison above using the signed type bounds.
1766          But the comparison we output must be unsigned.
1767
1768          Also, for inequalities, VAL is no good; but if the signed
1769          comparison had *any* fixed result, it follows that the
1770          unsigned comparison just tests the sign in reverse
1771          (positive values are LE, negative ones GE).
1772          So we can generate an unsigned comparison
1773          against an extreme value of the signed type.  */
1774
1775       if (unsignedp && !unsignedp0)
1776         {
1777           if (val != 0)
1778             switch (code)
1779               {
1780               case LT_EXPR:
1781               case GE_EXPR:
1782                 primop1 = TYPE_MIN_VALUE (type);
1783                 val = 0;
1784                 break;
1785
1786               case LE_EXPR:
1787               case GT_EXPR:
1788                 primop1 = TYPE_MAX_VALUE (type);
1789                 val = 0;
1790                 break;
1791
1792               default:
1793                 break;
1794               }
1795           type = unsigned_type (type);
1796         }
1797
1798       if (!max_gt && !unsignedp0 && TREE_CODE (primop0) != INTEGER_CST)
1799         {
1800           /* This is the case of (char)x >?< 0x80, which people used to use
1801              expecting old C compilers to change the 0x80 into -0x80.  */
1802           if (val == boolean_false_node)
1803             warning ("comparison is always false due to limited range of data type");
1804           if (val == boolean_true_node)
1805             warning ("comparison is always true due to limited range of data type");
1806         }
1807
1808       if (!min_lt && unsignedp0 && TREE_CODE (primop0) != INTEGER_CST)
1809         {
1810           /* This is the case of (unsigned char)x >?< -1 or < 0.  */
1811           if (val == boolean_false_node)
1812             warning ("comparison is always false due to limited range of data type");
1813           if (val == boolean_true_node)
1814             warning ("comparison is always true due to limited range of data type");
1815         }
1816
1817       if (val != 0)
1818         {
1819           /* Don't forget to evaluate PRIMOP0 if it has side effects.  */
1820           if (TREE_SIDE_EFFECTS (primop0))
1821             return build (COMPOUND_EXPR, TREE_TYPE (val), primop0, val);
1822           return val;
1823         }
1824
1825       /* Value is not predetermined, but do the comparison
1826          in the type of the operand that is not constant.
1827          TYPE is already properly set.  */
1828     }
1829   else if (real1 && real2
1830            && (TYPE_PRECISION (TREE_TYPE (primop0))
1831                == TYPE_PRECISION (TREE_TYPE (primop1))))
1832     type = TREE_TYPE (primop0);
1833
1834   /* If args' natural types are both narrower than nominal type
1835      and both extend in the same manner, compare them
1836      in the type of the wider arg.
1837      Otherwise must actually extend both to the nominal
1838      common type lest different ways of extending
1839      alter the result.
1840      (eg, (short)-1 == (unsigned short)-1  should be 0.)  */
1841
1842   else if (unsignedp0 == unsignedp1 && real1 == real2
1843            && TYPE_PRECISION (TREE_TYPE (primop0)) < TYPE_PRECISION (*restype_ptr)
1844            && TYPE_PRECISION (TREE_TYPE (primop1)) < TYPE_PRECISION (*restype_ptr))
1845     {
1846       type = common_type (TREE_TYPE (primop0), TREE_TYPE (primop1));
1847       type = signed_or_unsigned_type (unsignedp0
1848                                       || TREE_UNSIGNED (*restype_ptr),
1849                                       type);
1850       /* Make sure shorter operand is extended the right way
1851          to match the longer operand.  */
1852       primop0 = convert (signed_or_unsigned_type (unsignedp0, TREE_TYPE (primop0)),
1853                          primop0);
1854       primop1 = convert (signed_or_unsigned_type (unsignedp1, TREE_TYPE (primop1)),
1855                          primop1);
1856     }
1857   else
1858     {
1859       /* Here we must do the comparison on the nominal type
1860          using the args exactly as we received them.  */
1861       type = *restype_ptr;
1862       primop0 = op0;
1863       primop1 = op1;
1864
1865       if (!real1 && !real2 && integer_zerop (primop1)
1866           && TREE_UNSIGNED (*restype_ptr))
1867         {
1868           tree value = 0;
1869           switch (code)
1870             {
1871             case GE_EXPR:
1872               /* All unsigned values are >= 0, so we warn if extra warnings
1873                  are requested.  However, if OP0 is a constant that is
1874                  >= 0, the signedness of the comparison isn't an issue,
1875                  so suppress the warning.  */
1876               if (extra_warnings && !in_system_header
1877                   && ! (TREE_CODE (primop0) == INTEGER_CST
1878                         && ! TREE_OVERFLOW (convert (signed_type (type),
1879                                                      primop0))))
1880                 warning ("comparison of unsigned expression >= 0 is always true");
1881               value = boolean_true_node;
1882               break;
1883
1884             case LT_EXPR:
1885               if (extra_warnings && !in_system_header
1886                   && ! (TREE_CODE (primop0) == INTEGER_CST
1887                         && ! TREE_OVERFLOW (convert (signed_type (type),
1888                                                      primop0))))
1889                 warning ("comparison of unsigned expression < 0 is always false");
1890               value = boolean_false_node;
1891               break;
1892
1893             default:
1894               break;
1895             }
1896
1897           if (value != 0)
1898             {
1899               /* Don't forget to evaluate PRIMOP0 if it has side effects.  */
1900               if (TREE_SIDE_EFFECTS (primop0))
1901                 return build (COMPOUND_EXPR, TREE_TYPE (value),
1902                               primop0, value);
1903               return value;
1904             }
1905         }
1906     }
1907
1908   *op0_ptr = convert (type, primop0);
1909   *op1_ptr = convert (type, primop1);
1910
1911   *restype_ptr = boolean_type_node;
1912
1913   return 0;
1914 }
1915 \f
1916 /* Prepare expr to be an argument of a TRUTH_NOT_EXPR,
1917    or validate its data type for an `if' or `while' statement or ?..: exp.
1918
1919    This preparation consists of taking the ordinary
1920    representation of an expression expr and producing a valid tree
1921    boolean expression describing whether expr is nonzero.  We could
1922    simply always do build_binary_op (NE_EXPR, expr, boolean_false_node, 1),
1923    but we optimize comparisons, &&, ||, and !.
1924
1925    The resulting type should always be `boolean_type_node'.  */
1926
1927 tree
1928 truthvalue_conversion (expr)
1929      tree expr;
1930 {
1931   if (TREE_CODE (expr) == ERROR_MARK)
1932     return expr;
1933
1934 #if 0 /* This appears to be wrong for C++.  */
1935   /* These really should return error_mark_node after 2.4 is stable.
1936      But not all callers handle ERROR_MARK properly.  */
1937   switch (TREE_CODE (TREE_TYPE (expr)))
1938     {
1939     case RECORD_TYPE:
1940       error ("struct type value used where scalar is required");
1941       return boolean_false_node;
1942
1943     case UNION_TYPE:
1944       error ("union type value used where scalar is required");
1945       return boolean_false_node;
1946
1947     case ARRAY_TYPE:
1948       error ("array type value used where scalar is required");
1949       return boolean_false_node;
1950
1951     default:
1952       break;
1953     }
1954 #endif /* 0 */
1955
1956   switch (TREE_CODE (expr))
1957     {
1958     case EQ_EXPR:
1959     case NE_EXPR: case LE_EXPR: case GE_EXPR: case LT_EXPR: case GT_EXPR:
1960     case TRUTH_ANDIF_EXPR:
1961     case TRUTH_ORIF_EXPR:
1962     case TRUTH_AND_EXPR:
1963     case TRUTH_OR_EXPR:
1964     case TRUTH_XOR_EXPR:
1965     case TRUTH_NOT_EXPR:
1966       TREE_TYPE (expr) = boolean_type_node;
1967       return expr;
1968
1969     case ERROR_MARK:
1970       return expr;
1971
1972     case INTEGER_CST:
1973       return integer_zerop (expr) ? boolean_false_node : boolean_true_node;
1974
1975     case REAL_CST:
1976       return real_zerop (expr) ? boolean_false_node : boolean_true_node;
1977
1978     case ADDR_EXPR:
1979       /* If we are taking the address of an external decl, it might be zero
1980          if it is weak, so we cannot optimize.  */
1981       if (DECL_P (TREE_OPERAND (expr, 0))
1982           && DECL_EXTERNAL (TREE_OPERAND (expr, 0)))
1983         break;
1984
1985       if (TREE_SIDE_EFFECTS (TREE_OPERAND (expr, 0)))
1986         return build (COMPOUND_EXPR, boolean_type_node,
1987                       TREE_OPERAND (expr, 0), boolean_true_node);
1988       else
1989         return boolean_true_node;
1990
1991     case COMPLEX_EXPR:
1992       return build_binary_op ((TREE_SIDE_EFFECTS (TREE_OPERAND (expr, 1))
1993                                ? TRUTH_OR_EXPR : TRUTH_ORIF_EXPR),
1994                               truthvalue_conversion (TREE_OPERAND (expr, 0)),
1995                               truthvalue_conversion (TREE_OPERAND (expr, 1)),
1996                               0);
1997
1998     case NEGATE_EXPR:
1999     case ABS_EXPR:
2000     case FLOAT_EXPR:
2001     case FFS_EXPR:
2002       /* These don't change whether an object is non-zero or zero.  */
2003       return truthvalue_conversion (TREE_OPERAND (expr, 0));
2004
2005     case LROTATE_EXPR:
2006     case RROTATE_EXPR:
2007       /* These don't change whether an object is zero or non-zero, but
2008          we can't ignore them if their second arg has side-effects.  */
2009       if (TREE_SIDE_EFFECTS (TREE_OPERAND (expr, 1)))
2010         return build (COMPOUND_EXPR, boolean_type_node, TREE_OPERAND (expr, 1),
2011                       truthvalue_conversion (TREE_OPERAND (expr, 0)));
2012       else
2013         return truthvalue_conversion (TREE_OPERAND (expr, 0));
2014
2015     case COND_EXPR:
2016       /* Distribute the conversion into the arms of a COND_EXPR.  */
2017       return fold (build (COND_EXPR, boolean_type_node, TREE_OPERAND (expr, 0),
2018                           truthvalue_conversion (TREE_OPERAND (expr, 1)),
2019                           truthvalue_conversion (TREE_OPERAND (expr, 2))));
2020
2021     case CONVERT_EXPR:
2022       /* Don't cancel the effect of a CONVERT_EXPR from a REFERENCE_TYPE,
2023          since that affects how `default_conversion' will behave.  */
2024       if (TREE_CODE (TREE_TYPE (expr)) == REFERENCE_TYPE
2025           || TREE_CODE (TREE_TYPE (TREE_OPERAND (expr, 0))) == REFERENCE_TYPE)
2026         break;
2027       /* fall through...  */
2028     case NOP_EXPR:
2029       /* If this is widening the argument, we can ignore it.  */
2030       if (TYPE_PRECISION (TREE_TYPE (expr))
2031           >= TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (expr, 0))))
2032         return truthvalue_conversion (TREE_OPERAND (expr, 0));
2033       break;
2034
2035     case MINUS_EXPR:
2036       /* With IEEE arithmetic, x - x may not equal 0, so we can't optimize
2037          this case.  */
2038       if (TARGET_FLOAT_FORMAT == IEEE_FLOAT_FORMAT
2039           && TREE_CODE (TREE_TYPE (expr)) == REAL_TYPE)
2040         break;
2041       /* fall through...  */
2042     case BIT_XOR_EXPR:
2043       /* This and MINUS_EXPR can be changed into a comparison of the
2044          two objects.  */
2045       if (TREE_TYPE (TREE_OPERAND (expr, 0))
2046           == TREE_TYPE (TREE_OPERAND (expr, 1)))
2047         return build_binary_op (NE_EXPR, TREE_OPERAND (expr, 0),
2048                                 TREE_OPERAND (expr, 1), 1);
2049       return build_binary_op (NE_EXPR, TREE_OPERAND (expr, 0),
2050                               fold (build1 (NOP_EXPR,
2051                                             TREE_TYPE (TREE_OPERAND (expr, 0)),
2052                                             TREE_OPERAND (expr, 1))), 1);
2053
2054     case BIT_AND_EXPR:
2055       if (integer_onep (TREE_OPERAND (expr, 1))
2056           && TREE_TYPE (expr) != boolean_type_node)
2057         /* Using convert here would cause infinite recursion.  */
2058         return build1 (NOP_EXPR, boolean_type_node, expr);
2059       break;
2060
2061     case MODIFY_EXPR:
2062       if (warn_parentheses && C_EXP_ORIGINAL_CODE (expr) == MODIFY_EXPR)
2063         warning ("suggest parentheses around assignment used as truth value");
2064       break;
2065
2066     default:
2067       break;
2068     }
2069
2070   if (TREE_CODE (TREE_TYPE (expr)) == COMPLEX_TYPE)
2071     {
2072       tree tem = save_expr (expr);
2073       return (build_binary_op
2074               ((TREE_SIDE_EFFECTS (expr)
2075                 ? TRUTH_OR_EXPR : TRUTH_ORIF_EXPR),
2076                truthvalue_conversion (build_unary_op (REALPART_EXPR, tem, 0)),
2077                truthvalue_conversion (build_unary_op (IMAGPART_EXPR, tem, 0)),
2078                0));
2079     }
2080
2081   return build_binary_op (NE_EXPR, expr, integer_zero_node, 1);
2082 }
2083 \f
2084 static tree builtin_function_2 PARAMS ((const char *, const char *, tree, tree,
2085                                         int, enum built_in_class, int, int,
2086                                         int));
2087
2088 /* Make a variant type in the proper way for C/C++, propagating qualifiers
2089    down to the element type of an array.  */
2090
2091 tree
2092 c_build_qualified_type (type, type_quals)
2093      tree type;
2094      int type_quals;
2095 {
2096   /* A restrict-qualified pointer type must be a pointer to object or
2097      incomplete type.  Note that the use of POINTER_TYPE_P also allows
2098      REFERENCE_TYPEs, which is appropriate for C++.  Unfortunately,
2099      the C++ front-end also use POINTER_TYPE for pointer-to-member
2100      values, so even though it should be illegal to use `restrict'
2101      with such an entity we don't flag that here.  Thus, special case
2102      code for that case is required in the C++ front-end.  */
2103   if ((type_quals & TYPE_QUAL_RESTRICT)
2104       && (!POINTER_TYPE_P (type)
2105           || !C_TYPE_OBJECT_OR_INCOMPLETE_P (TREE_TYPE (type))))
2106     {
2107       error ("invalid use of `restrict'");
2108       type_quals &= ~TYPE_QUAL_RESTRICT;
2109     }
2110
2111   if (TREE_CODE (type) == ARRAY_TYPE)
2112     return build_array_type (c_build_qualified_type (TREE_TYPE (type),
2113                                                      type_quals),
2114                              TYPE_DOMAIN (type));
2115   return build_qualified_type (type, type_quals);
2116 }
2117
2118 /* Apply the TYPE_QUALS to the new DECL.  */
2119
2120 void
2121 c_apply_type_quals_to_decl (type_quals, decl)
2122      int type_quals;
2123      tree decl;
2124 {
2125   if ((type_quals & TYPE_QUAL_CONST)
2126       || (TREE_TYPE (decl) 
2127           && TREE_CODE (TREE_TYPE (decl)) == REFERENCE_TYPE))
2128     TREE_READONLY (decl) = 1;
2129   if (type_quals & TYPE_QUAL_VOLATILE)
2130     {
2131       TREE_SIDE_EFFECTS (decl) = 1;
2132       TREE_THIS_VOLATILE (decl) = 1;
2133     }
2134   if (type_quals & TYPE_QUAL_RESTRICT)
2135     {
2136       if (!TREE_TYPE (decl)
2137           || !POINTER_TYPE_P (TREE_TYPE (decl))
2138           || !C_TYPE_OBJECT_OR_INCOMPLETE_P (TREE_TYPE (TREE_TYPE (decl))))
2139         error ("invalid use of `restrict'");
2140       else if (flag_strict_aliasing)
2141         /* Indicate we need to make a unique alias set for this pointer.
2142            We can't do it here because it might be pointing to an
2143            incomplete type.  */
2144         DECL_POINTER_ALIAS_SET (decl) = -2;
2145     }
2146 }
2147
2148
2149 /* Return the typed-based alias set for T, which may be an expression
2150    or a type.  Return -1 if we don't do anything special.  */
2151
2152 HOST_WIDE_INT
2153 c_common_get_alias_set (t)
2154      tree t;
2155 {
2156   tree u;
2157   
2158   /* We know nothing about vector types */
2159   if (TREE_CODE (t) == VECTOR_TYPE)
2160     return 0;          
2161   
2162   /* Permit type-punning when accessing a union, provided the access
2163      is directly through the union.  For example, this code does not
2164      permit taking the address of a union member and then storing
2165      through it.  Even the type-punning allowed here is a GCC
2166      extension, albeit a common and useful one; the C standard says
2167      that such accesses have implementation-defined behavior.  */
2168   for (u = t;
2169        TREE_CODE (u) == COMPONENT_REF || TREE_CODE (u) == ARRAY_REF;
2170        u = TREE_OPERAND (u, 0))
2171     if (TREE_CODE (u) == COMPONENT_REF
2172         && TREE_CODE (TREE_TYPE (TREE_OPERAND (u, 0))) == UNION_TYPE)
2173       return 0;
2174
2175   /* If this is a char *, the ANSI C standard says it can alias
2176      anything.  Note that all references need do this.  */
2177   if (TREE_CODE_CLASS (TREE_CODE (t)) == 'r'
2178       && TREE_CODE (TREE_TYPE (t)) == INTEGER_TYPE
2179       && TYPE_PRECISION (TREE_TYPE (t)) == TYPE_PRECISION (char_type_node))
2180     return 0;
2181
2182   /* That's all the expressions we handle specially.  */
2183   if (! TYPE_P (t))
2184     return -1;
2185
2186   /* The C standard specifically allows aliasing between signed and
2187      unsigned variants of the same type.  We treat the signed
2188      variant as canonical.  */
2189   if (TREE_CODE (t) == INTEGER_TYPE && TREE_UNSIGNED (t))
2190     {
2191       tree t1 = signed_type (t);
2192
2193       /* t1 == t can happen for boolean nodes which are always unsigned.  */
2194       if (t1 != t)
2195         return get_alias_set (t1);
2196     }
2197   else if (POINTER_TYPE_P (t))
2198     {
2199       tree t1;
2200
2201       /* Unfortunately, there is no canonical form of a pointer type.
2202          In particular, if we have `typedef int I', then `int *', and
2203          `I *' are different types.  So, we have to pick a canonical
2204          representative.  We do this below.
2205
2206          Technically, this approach is actually more conservative that
2207          it needs to be.  In particular, `const int *' and `int *'
2208          should be in different alias sets, according to the C and C++
2209          standard, since their types are not the same, and so,
2210          technically, an `int **' and `const int **' cannot point at
2211          the same thing.
2212
2213          But, the standard is wrong.  In particular, this code is
2214          legal C++:
2215
2216             int *ip;
2217             int **ipp = &ip;
2218             const int* const* cipp = &ipp;
2219
2220          And, it doesn't make sense for that to be legal unless you
2221          can dereference IPP and CIPP.  So, we ignore cv-qualifiers on
2222          the pointed-to types.  This issue has been reported to the
2223          C++ committee.  */
2224       t1 = build_type_no_quals (t);
2225       if (t1 != t)
2226         return get_alias_set (t1);
2227     }
2228
2229   return -1;
2230 }
2231 \f
2232 /* Implement the __alignof keyword: Return the minimum required
2233    alignment of TYPE, measured in bytes.  */
2234
2235 tree
2236 c_alignof (type)
2237      tree type;
2238 {
2239   enum tree_code code = TREE_CODE (type);
2240   tree t;
2241
2242   /* In C++, sizeof applies to the referent.  Handle alignof the same way.  */
2243   if (code == REFERENCE_TYPE)
2244     {
2245       type = TREE_TYPE (type);
2246       code = TREE_CODE (type);
2247     }
2248
2249   if (code == FUNCTION_TYPE)
2250     t = size_int (FUNCTION_BOUNDARY / BITS_PER_UNIT);
2251   else if (code == VOID_TYPE || code == ERROR_MARK)
2252     t = size_one_node;
2253   else if (!COMPLETE_TYPE_P (type))
2254     {
2255       error ("__alignof__ applied to an incomplete type");
2256       t = size_zero_node;
2257     }
2258   else
2259     t = size_int (TYPE_ALIGN (type) / BITS_PER_UNIT);
2260
2261   return fold (build1 (NOP_EXPR, c_size_type_node, t));
2262 }
2263
2264 /* Implement the __alignof keyword: Return the minimum required
2265    alignment of EXPR, measured in bytes.  For VAR_DECL's and
2266    FIELD_DECL's return DECL_ALIGN (which can be set from an
2267    "aligned" __attribute__ specification).  */
2268
2269 tree
2270 c_alignof_expr (expr)
2271      tree expr;
2272 {
2273   tree t;
2274
2275   if (TREE_CODE (expr) == VAR_DECL)
2276     t = size_int (DECL_ALIGN (expr) / BITS_PER_UNIT);
2277  
2278   else if (TREE_CODE (expr) == COMPONENT_REF
2279            && DECL_C_BIT_FIELD (TREE_OPERAND (expr, 1)))
2280     {
2281       error ("`__alignof' applied to a bit-field");
2282       t = size_one_node;
2283     }
2284   else if (TREE_CODE (expr) == COMPONENT_REF
2285       && TREE_CODE (TREE_OPERAND (expr, 1)) == FIELD_DECL)
2286     t = size_int (DECL_ALIGN (TREE_OPERAND (expr, 1)) / BITS_PER_UNIT);
2287  
2288   else if (TREE_CODE (expr) == INDIRECT_REF)
2289     {
2290       tree t = TREE_OPERAND (expr, 0);
2291       tree best = t;
2292       int bestalign = TYPE_ALIGN (TREE_TYPE (TREE_TYPE (t)));
2293  
2294       while (TREE_CODE (t) == NOP_EXPR
2295               && TREE_CODE (TREE_TYPE (TREE_OPERAND (t, 0))) == POINTER_TYPE)
2296         {
2297           int thisalign;
2298
2299           t = TREE_OPERAND (t, 0);
2300           thisalign = TYPE_ALIGN (TREE_TYPE (TREE_TYPE (t)));
2301           if (thisalign > bestalign)
2302             best = t, bestalign = thisalign;
2303         }
2304       return c_alignof (TREE_TYPE (TREE_TYPE (best)));
2305     }
2306   else
2307     return c_alignof (TREE_TYPE (expr));
2308
2309   return fold (build1 (NOP_EXPR, c_size_type_node, t));
2310 }
2311 \f
2312 /* Give the specifications for the format attributes, used by C and all
2313    descendents.  */
2314
2315 static const struct attribute_spec c_format_attribute_table[] =
2316 {
2317   /* { name, min_len, max_len, decl_req, type_req, fn_type_req, handler } */
2318   { "format",                 3, 3, false, true,  true,
2319                               handle_format_attribute },
2320   { "format_arg",             1, 1, false, true,  true,
2321                               handle_format_arg_attribute },
2322   { NULL,                     0, 0, false, false, false, NULL }
2323 };
2324
2325 /* Build tree nodes and builtin functions common to both C and C++ language
2326    frontends.  */
2327
2328 void
2329 c_common_nodes_and_builtins ()
2330 {
2331   enum builtin_type 
2332   {
2333 #define DEF_PRIMITIVE_TYPE(NAME, VALUE) NAME,
2334 #define DEF_FUNCTION_TYPE_0(NAME, RETURN) NAME,
2335 #define DEF_FUNCTION_TYPE_1(NAME, RETURN, ARG1) NAME,
2336 #define DEF_FUNCTION_TYPE_2(NAME, RETURN, ARG1, ARG2) NAME,
2337 #define DEF_FUNCTION_TYPE_3(NAME, RETURN, ARG1, ARG2, ARG3) NAME,
2338 #define DEF_FUNCTION_TYPE_4(NAME, RETURN, ARG1, ARG2, ARG3, ARG4) NAME,
2339 #define DEF_FUNCTION_TYPE_VAR_0(NAME, RETURN) NAME,
2340 #define DEF_FUNCTION_TYPE_VAR_1(NAME, RETURN, ARG1) NAME,
2341 #define DEF_FUNCTION_TYPE_VAR_2(NAME, RETURN, ARG1, ARG2) NAME,
2342 #define DEF_POINTER_TYPE(NAME, TYPE) NAME,
2343 #include "builtin-types.def"
2344 #undef DEF_PRIMITIVE_TYPE
2345 #undef DEF_FUNCTION_TYPE_0
2346 #undef DEF_FUNCTION_TYPE_1
2347 #undef DEF_FUNCTION_TYPE_2
2348 #undef DEF_FUNCTION_TYPE_3
2349 #undef DEF_FUNCTION_TYPE_4
2350 #undef DEF_FUNCTION_TYPE_VAR_0
2351 #undef DEF_FUNCTION_TYPE_VAR_1
2352 #undef DEF_FUNCTION_TYPE_VAR_2
2353 #undef DEF_POINTER_TYPE
2354     BT_LAST
2355   };
2356
2357   typedef enum builtin_type builtin_type;
2358
2359   tree builtin_types[(int)BT_LAST];
2360   int wchar_type_size;
2361   tree array_domain_type;
2362   /* Either char* or void*.  */
2363   tree traditional_ptr_type_node;
2364   /* Either const char* or const void*.  */
2365   tree traditional_cptr_type_node;
2366   tree traditional_len_type_node;
2367   tree va_list_ref_type_node;
2368   tree va_list_arg_type_node;
2369
2370   /* We must initialize this before any builtin functions (which might have
2371      attributes) are declared.  (c_common_lang_init is too late.)  */
2372   format_attribute_table = c_format_attribute_table;
2373
2374   /* Define `int' and `char' first so that dbx will output them first.  */
2375   record_builtin_type (RID_INT, NULL, integer_type_node);
2376   record_builtin_type (RID_CHAR, "char", char_type_node);
2377
2378   /* `signed' is the same as `int'.  FIXME: the declarations of "signed",
2379      "unsigned long", "long long unsigned" and "unsigned short" were in C++
2380      but not C.  Are the conditionals here needed?  */
2381   if (c_language == clk_cplusplus)
2382     record_builtin_type (RID_SIGNED, NULL, integer_type_node);
2383   record_builtin_type (RID_LONG, "long int", long_integer_type_node);
2384   record_builtin_type (RID_UNSIGNED, "unsigned int", unsigned_type_node);
2385   record_builtin_type (RID_MAX, "long unsigned int",
2386                        long_unsigned_type_node);
2387   if (c_language == clk_cplusplus)
2388     record_builtin_type (RID_MAX, "unsigned long", long_unsigned_type_node);
2389   record_builtin_type (RID_MAX, "long long int",
2390                        long_long_integer_type_node);
2391   record_builtin_type (RID_MAX, "long long unsigned int",
2392                        long_long_unsigned_type_node);
2393   if (c_language == clk_cplusplus)
2394     record_builtin_type (RID_MAX, "long long unsigned",
2395                          long_long_unsigned_type_node);
2396   record_builtin_type (RID_SHORT, "short int", short_integer_type_node);
2397   record_builtin_type (RID_MAX, "short unsigned int",
2398                        short_unsigned_type_node);
2399   if (c_language == clk_cplusplus)
2400     record_builtin_type (RID_MAX, "unsigned short",
2401                          short_unsigned_type_node);
2402
2403   /* Define both `signed char' and `unsigned char'.  */
2404   record_builtin_type (RID_MAX, "signed char", signed_char_type_node);
2405   record_builtin_type (RID_MAX, "unsigned char", unsigned_char_type_node);
2406
2407   /* These are types that type_for_size and type_for_mode use.  */
2408   pushdecl (build_decl (TYPE_DECL, NULL_TREE, intQI_type_node));
2409   pushdecl (build_decl (TYPE_DECL, NULL_TREE, intHI_type_node));
2410   pushdecl (build_decl (TYPE_DECL, NULL_TREE, intSI_type_node));
2411   pushdecl (build_decl (TYPE_DECL, NULL_TREE, intDI_type_node));
2412 #if HOST_BITS_PER_WIDE_INT >= 64
2413   pushdecl (build_decl (TYPE_DECL, get_identifier ("__int128_t"), intTI_type_node));
2414 #endif
2415   pushdecl (build_decl (TYPE_DECL, NULL_TREE, unsigned_intQI_type_node));
2416   pushdecl (build_decl (TYPE_DECL, NULL_TREE, unsigned_intHI_type_node));
2417   pushdecl (build_decl (TYPE_DECL, NULL_TREE, unsigned_intSI_type_node));
2418   pushdecl (build_decl (TYPE_DECL, NULL_TREE, unsigned_intDI_type_node));
2419 #if HOST_BITS_PER_WIDE_INT >= 64
2420   pushdecl (build_decl (TYPE_DECL, get_identifier ("__uint128_t"), unsigned_intTI_type_node));
2421 #endif
2422
2423   /* Create the widest literal types.  */
2424   widest_integer_literal_type_node
2425     = make_signed_type (HOST_BITS_PER_WIDE_INT * 2);
2426   pushdecl (build_decl (TYPE_DECL, NULL_TREE,
2427                         widest_integer_literal_type_node));
2428
2429   widest_unsigned_literal_type_node
2430     = make_unsigned_type (HOST_BITS_PER_WIDE_INT * 2);
2431   pushdecl (build_decl (TYPE_DECL, NULL_TREE,
2432                         widest_unsigned_literal_type_node));
2433
2434   /* `unsigned long' is the standard type for sizeof.
2435      Note that stddef.h uses `unsigned long',
2436      and this must agree, even if long and int are the same size.  */
2437   c_size_type_node =
2438     TREE_TYPE (identifier_global_value (get_identifier (SIZE_TYPE)));
2439   signed_size_type_node = signed_type (c_size_type_node);
2440   if (flag_traditional)
2441     c_size_type_node = signed_size_type_node;
2442   set_sizetype (c_size_type_node);
2443
2444   build_common_tree_nodes_2 (flag_short_double);
2445
2446   record_builtin_type (RID_FLOAT, NULL, float_type_node);
2447   record_builtin_type (RID_DOUBLE, NULL, double_type_node);
2448   record_builtin_type (RID_MAX, "long double", long_double_type_node);
2449
2450   pushdecl (build_decl (TYPE_DECL, get_identifier ("complex int"),
2451                         complex_integer_type_node));
2452   pushdecl (build_decl (TYPE_DECL, get_identifier ("complex float"),
2453                         complex_float_type_node));
2454   pushdecl (build_decl (TYPE_DECL, get_identifier ("complex double"),
2455                         complex_double_type_node));
2456   pushdecl (build_decl (TYPE_DECL, get_identifier ("complex long double"),
2457                         complex_long_double_type_node));
2458
2459   record_builtin_type (RID_VOID, NULL, void_type_node);
2460
2461   void_zero_node = build_int_2 (0, 0);
2462   TREE_TYPE (void_zero_node) = void_type_node;
2463
2464   void_list_node = build_void_list_node ();
2465
2466   /* Make a type to be the domain of a few array types
2467      whose domains don't really matter.
2468      200 is small enough that it always fits in size_t
2469      and large enough that it can hold most function names for the
2470      initializations of __FUNCTION__ and __PRETTY_FUNCTION__.  */
2471   array_domain_type = build_index_type (size_int (200));
2472
2473   /* Make a type for arrays of characters.
2474      With luck nothing will ever really depend on the length of this
2475      array type.  */
2476   char_array_type_node
2477     = build_array_type (char_type_node, array_domain_type);
2478
2479   /* Likewise for arrays of ints.  */
2480   int_array_type_node
2481     = build_array_type (integer_type_node, array_domain_type);
2482
2483   string_type_node = build_pointer_type (char_type_node);
2484   const_string_type_node
2485     = build_pointer_type (build_qualified_type
2486                           (char_type_node, TYPE_QUAL_CONST));
2487
2488   traditional_ptr_type_node = ((flag_traditional && 
2489                                 c_language != clk_cplusplus)
2490                                ? string_type_node : ptr_type_node);
2491   traditional_cptr_type_node = ((flag_traditional && 
2492                                  c_language != clk_cplusplus)
2493                                ? const_string_type_node : const_ptr_type_node);
2494
2495   (*targetm.init_builtins) ();
2496
2497   /* This is special for C++ so functions can be overloaded.  */
2498   wchar_type_node = get_identifier (flag_short_wchar
2499                                     ? "short unsigned int"
2500                                     : WCHAR_TYPE);
2501   wchar_type_node = TREE_TYPE (identifier_global_value (wchar_type_node));
2502   wchar_type_size = TYPE_PRECISION (wchar_type_node);
2503   if (c_language == clk_cplusplus)
2504     {
2505       if (TREE_UNSIGNED (wchar_type_node))
2506         wchar_type_node = make_unsigned_type (wchar_type_size);
2507       else
2508         wchar_type_node = make_signed_type (wchar_type_size);
2509       record_builtin_type (RID_WCHAR, "wchar_t", wchar_type_node);
2510     }
2511   else
2512     {
2513       signed_wchar_type_node = signed_type (wchar_type_node);
2514       unsigned_wchar_type_node = unsigned_type (wchar_type_node);
2515     }
2516
2517   /* This is for wide string constants.  */
2518   wchar_array_type_node
2519     = build_array_type (wchar_type_node, array_domain_type);
2520
2521   wint_type_node =
2522     TREE_TYPE (identifier_global_value (get_identifier (WINT_TYPE)));
2523
2524   intmax_type_node =
2525     TREE_TYPE (identifier_global_value (get_identifier (INTMAX_TYPE)));
2526   uintmax_type_node =
2527     TREE_TYPE (identifier_global_value (get_identifier (UINTMAX_TYPE)));
2528
2529   default_function_type = build_function_type (integer_type_node, NULL_TREE);
2530   ptrdiff_type_node
2531     = TREE_TYPE (identifier_global_value (get_identifier (PTRDIFF_TYPE)));
2532   unsigned_ptrdiff_type_node = unsigned_type (ptrdiff_type_node);
2533
2534   pushdecl (build_decl (TYPE_DECL, get_identifier ("__builtin_va_list"),
2535                         va_list_type_node));
2536
2537   pushdecl (build_decl (TYPE_DECL, get_identifier ("__builtin_ptrdiff_t"),
2538                         ptrdiff_type_node));
2539
2540   pushdecl (build_decl (TYPE_DECL, get_identifier ("__builtin_size_t"),
2541                         sizetype));
2542
2543   if (TREE_CODE (va_list_type_node) == ARRAY_TYPE)
2544     {
2545       va_list_arg_type_node = va_list_ref_type_node =
2546         build_pointer_type (TREE_TYPE (va_list_type_node));
2547     }
2548   else
2549     {
2550       va_list_arg_type_node = va_list_type_node;
2551       va_list_ref_type_node = build_reference_type (va_list_type_node);
2552     }
2553  
2554   traditional_len_type_node = ((flag_traditional && 
2555                                 c_language != clk_cplusplus)
2556                                ? integer_type_node : sizetype);
2557
2558 #define DEF_PRIMITIVE_TYPE(ENUM, VALUE) \
2559   builtin_types[(int) ENUM] = VALUE;
2560 #define DEF_FUNCTION_TYPE_0(ENUM, RETURN)               \
2561   builtin_types[(int) ENUM]                             \
2562     = build_function_type (builtin_types[(int) RETURN], \
2563                            void_list_node);
2564 #define DEF_FUNCTION_TYPE_1(ENUM, RETURN, ARG1)                         \
2565   builtin_types[(int) ENUM]                                             \
2566     = build_function_type (builtin_types[(int) RETURN],                 \
2567                            tree_cons (NULL_TREE,                        \
2568                                       builtin_types[(int) ARG1],        \
2569                                       void_list_node));
2570 #define DEF_FUNCTION_TYPE_2(ENUM, RETURN, ARG1, ARG2)   \
2571   builtin_types[(int) ENUM]                             \
2572     = build_function_type                               \
2573       (builtin_types[(int) RETURN],                     \
2574        tree_cons (NULL_TREE,                            \
2575                   builtin_types[(int) ARG1],            \
2576                   tree_cons (NULL_TREE,                 \
2577                              builtin_types[(int) ARG2], \
2578                              void_list_node)));
2579 #define DEF_FUNCTION_TYPE_3(ENUM, RETURN, ARG1, ARG2, ARG3)              \
2580   builtin_types[(int) ENUM]                                              \
2581     = build_function_type                                                \
2582       (builtin_types[(int) RETURN],                                      \
2583        tree_cons (NULL_TREE,                                             \
2584                   builtin_types[(int) ARG1],                             \
2585                   tree_cons (NULL_TREE,                                  \
2586                              builtin_types[(int) ARG2],                  \
2587                              tree_cons (NULL_TREE,                       \
2588                                         builtin_types[(int) ARG3],       \
2589                                         void_list_node))));
2590 #define DEF_FUNCTION_TYPE_4(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4)       \
2591   builtin_types[(int) ENUM]                                             \
2592     = build_function_type                                               \
2593       (builtin_types[(int) RETURN],                                     \
2594        tree_cons (NULL_TREE,                                            \
2595                   builtin_types[(int) ARG1],                            \
2596                   tree_cons (NULL_TREE,                                 \
2597                              builtin_types[(int) ARG2],                 \
2598                              tree_cons                                  \
2599                              (NULL_TREE,                                \
2600                               builtin_types[(int) ARG3],                \
2601                               tree_cons (NULL_TREE,                     \
2602                                          builtin_types[(int) ARG4],     \
2603                                          void_list_node)))));
2604 #define DEF_FUNCTION_TYPE_VAR_0(ENUM, RETURN)                           \
2605   builtin_types[(int) ENUM]                                             \
2606     = build_function_type (builtin_types[(int) RETURN], NULL_TREE);
2607 #define DEF_FUNCTION_TYPE_VAR_1(ENUM, RETURN, ARG1)                      \
2608    builtin_types[(int) ENUM]                                             \
2609     = build_function_type (builtin_types[(int) RETURN],                  \
2610                            tree_cons (NULL_TREE,                         \
2611                                       builtin_types[(int) ARG1],         \
2612                                       NULL_TREE));
2613
2614 #define DEF_FUNCTION_TYPE_VAR_2(ENUM, RETURN, ARG1, ARG2)       \
2615    builtin_types[(int) ENUM]                                    \
2616     = build_function_type                                       \
2617       (builtin_types[(int) RETURN],                             \
2618        tree_cons (NULL_TREE,                                    \
2619                   builtin_types[(int) ARG1],                    \
2620                   tree_cons (NULL_TREE,                         \
2621                              builtin_types[(int) ARG2],         \
2622                              NULL_TREE)));
2623 #define DEF_POINTER_TYPE(ENUM, TYPE)                    \
2624   builtin_types[(int) ENUM]                             \
2625     = build_pointer_type (builtin_types[(int) TYPE]);
2626 #include "builtin-types.def"
2627 #undef DEF_PRIMITIVE_TYPE
2628 #undef DEF_FUNCTION_TYPE_1
2629 #undef DEF_FUNCTION_TYPE_2
2630 #undef DEF_FUNCTION_TYPE_3
2631 #undef DEF_FUNCTION_TYPE_4
2632 #undef DEF_FUNCTION_TYPE_VAR_0
2633 #undef DEF_FUNCTION_TYPE_VAR_1
2634 #undef DEF_POINTER_TYPE
2635
2636 #define DEF_BUILTIN(ENUM, NAME, CLASS,                                  \
2637                     TYPE, LIBTYPE, BOTH_P, FALLBACK_P, NONANSI_P)       \
2638   if (NAME)                                                             \
2639     {                                                                   \
2640       tree decl;                                                        \
2641                                                                         \
2642       if (strncmp (NAME, "__builtin_", strlen ("__builtin_")) != 0)     \
2643         abort ();                                                       \
2644                                                                         \
2645       if (!BOTH_P)                                                      \
2646         decl = builtin_function (NAME, builtin_types[TYPE], ENUM,       \
2647                                  CLASS,                                 \
2648                                  (FALLBACK_P                            \
2649                                   ? (NAME + strlen ("__builtin_"))      \
2650                                   : NULL));                             \
2651       else                                                              \
2652         decl = builtin_function_2 (NAME,                                \
2653                                    NAME + strlen ("__builtin_"),        \
2654                                    builtin_types[TYPE],                 \
2655                                    builtin_types[LIBTYPE],              \
2656                                    ENUM,                                \
2657                                    CLASS,                               \
2658                                    FALLBACK_P,                          \
2659                                    NONANSI_P,                           \
2660                                    /*noreturn_p=*/0);                   \
2661                                                                         \
2662       built_in_decls[(int) ENUM] = decl;                                \
2663     }                                                                   
2664 #include "builtins.def"
2665 #undef DEF_BUILTIN
2666
2667   /* Declare _exit and _Exit just to mark them as non-returning.  */
2668   builtin_function_2 (NULL, "_exit", NULL_TREE, 
2669                       builtin_types[BT_FN_VOID_INT],
2670                       0, NOT_BUILT_IN, 0, 1, 1);
2671   builtin_function_2 (NULL, "_Exit", NULL_TREE, 
2672                       builtin_types[BT_FN_VOID_INT],
2673                       0, NOT_BUILT_IN, 0, !flag_isoc99, 1);
2674
2675   /* Declare these functions non-returning
2676      to avoid spurious "control drops through" warnings.  */
2677   builtin_function_2 (NULL, "abort",
2678                       NULL_TREE, ((c_language == clk_cplusplus)
2679                                   ? builtin_types[BT_FN_VOID]
2680                                   : builtin_types[BT_FN_VOID_VAR]),
2681                       0, NOT_BUILT_IN, 0, 0, 1);
2682
2683   builtin_function_2 (NULL, "exit",
2684                       NULL_TREE, ((c_language == clk_cplusplus)
2685                                   ? builtin_types[BT_FN_VOID_INT]
2686                                   : builtin_types[BT_FN_VOID_VAR]),
2687                       0, NOT_BUILT_IN, 0, 0, 1);
2688
2689   main_identifier_node = get_identifier ("main");
2690
2691   /* ??? Perhaps there's a better place to do this.  But it is related
2692      to __builtin_va_arg, so it isn't that off-the-wall.  */
2693   lang_type_promotes_to = simple_type_promotes_to;
2694 }
2695
2696 tree
2697 build_va_arg (expr, type)
2698      tree expr, type;
2699 {
2700   return build1 (VA_ARG_EXPR, type, expr);
2701 }
2702
2703
2704 /* Possibly define a builtin function with one or two names.  BUILTIN_NAME
2705    is an __builtin_-prefixed name; NAME is the ordinary name; one or both
2706    of these may be NULL (though both being NULL is useless).
2707    BUILTIN_TYPE is the type of the __builtin_-prefixed function;
2708    TYPE is the type of the function with the ordinary name.  These
2709    may differ if the ordinary name is declared with a looser type to avoid
2710    conflicts with headers.  FUNCTION_CODE and CLASS are as for
2711    builtin_function.  If LIBRARY_NAME_P is nonzero, NAME is passed as
2712    the LIBRARY_NAME parameter to builtin_function when declaring BUILTIN_NAME.
2713    If NONANSI_P is nonzero, the name NAME is treated as a non-ANSI name; if
2714    NORETURN_P is nonzero, the function is marked as non-returning.
2715    Returns the declaration of BUILTIN_NAME, if any, otherwise
2716    the declaration of NAME.  Does not declare NAME if flag_no_builtin,
2717    or if NONANSI_P and flag_no_nonansi_builtin.  */
2718
2719 static tree
2720 builtin_function_2 (builtin_name, name, builtin_type, type, function_code,
2721                     class, library_name_p, nonansi_p, noreturn_p)
2722      const char *builtin_name;
2723      const char *name;
2724      tree builtin_type;
2725      tree type;
2726      int function_code;
2727      enum built_in_class class;
2728      int library_name_p;
2729      int nonansi_p;
2730      int noreturn_p;
2731 {
2732   tree bdecl = NULL_TREE;
2733   tree decl = NULL_TREE;
2734   if (builtin_name != 0)
2735     {
2736       bdecl = builtin_function (builtin_name, builtin_type, function_code,
2737                                 class, library_name_p ? name : NULL);
2738       if (noreturn_p)
2739         {
2740           TREE_THIS_VOLATILE (bdecl) = 1;
2741           TREE_SIDE_EFFECTS (bdecl) = 1;
2742         }
2743     }
2744   if (name != 0 && !flag_no_builtin && !(nonansi_p && flag_no_nonansi_builtin))
2745     {
2746       decl = builtin_function (name, type, function_code, class, NULL);
2747       if (nonansi_p)
2748         DECL_BUILT_IN_NONANSI (decl) = 1;
2749       if (noreturn_p)
2750         {
2751           TREE_THIS_VOLATILE (decl) = 1;
2752           TREE_SIDE_EFFECTS (decl) = 1;
2753         }
2754     }
2755   return (bdecl != 0 ? bdecl : decl);
2756 }
2757 \f
2758 /* Nonzero if the type T promotes to int.  This is (nearly) the
2759    integral promotions defined in ISO C99 6.3.1.1/2.  */
2760
2761 bool
2762 c_promoting_integer_type_p (t)
2763      tree t;
2764 {
2765   switch (TREE_CODE (t))
2766     {
2767     case INTEGER_TYPE:
2768       return (TYPE_MAIN_VARIANT (t) == char_type_node
2769               || TYPE_MAIN_VARIANT (t) == signed_char_type_node
2770               || TYPE_MAIN_VARIANT (t) == unsigned_char_type_node
2771               || TYPE_MAIN_VARIANT (t) == short_integer_type_node
2772               || TYPE_MAIN_VARIANT (t) == short_unsigned_type_node
2773               || TYPE_PRECISION (t) < TYPE_PRECISION (integer_type_node));
2774
2775     case ENUMERAL_TYPE:
2776       /* ??? Technically all enumerations not larger than an int
2777          promote to an int.  But this is used along code paths
2778          that only want to notice a size change.  */
2779       return TYPE_PRECISION (t) < TYPE_PRECISION (integer_type_node);
2780
2781     case BOOLEAN_TYPE:
2782       return 1;
2783
2784     default:
2785       return 0;
2786     }
2787 }
2788
2789 /* Given a type, apply default promotions wrt unnamed function arguments
2790    and return the new type.  Return NULL_TREE if no change.  */
2791 /* ??? There is a function of the same name in the C++ front end that
2792    does something similar, but is more thorough and does not return NULL
2793    if no change.  We could perhaps share code, but it would make the
2794    self_promoting_type property harder to identify.  */
2795
2796 tree
2797 simple_type_promotes_to (type)
2798      tree type;
2799 {
2800   if (TYPE_MAIN_VARIANT (type) == float_type_node)
2801     return double_type_node;
2802
2803   if (c_promoting_integer_type_p (type))
2804     {
2805       /* Traditionally, unsignedness is preserved in default promotions.
2806          Also preserve unsignedness if not really getting any wider.  */
2807       if (TREE_UNSIGNED (type)
2808           && (flag_traditional
2809               || TYPE_PRECISION (type) == TYPE_PRECISION (integer_type_node)))
2810         return unsigned_type_node;
2811       return integer_type_node;
2812     }
2813
2814   return NULL_TREE;
2815 }
2816
2817 /* Return 1 if PARMS specifies a fixed number of parameters
2818    and none of their types is affected by default promotions.  */
2819
2820 int
2821 self_promoting_args_p (parms)
2822      tree parms;
2823 {
2824   tree t;
2825   for (t = parms; t; t = TREE_CHAIN (t))
2826     {
2827       tree type = TREE_VALUE (t);
2828
2829       if (TREE_CHAIN (t) == 0 && type != void_type_node)
2830         return 0;
2831
2832       if (type == 0)
2833         return 0;
2834
2835       if (TYPE_MAIN_VARIANT (type) == float_type_node)
2836         return 0;
2837
2838       if (c_promoting_integer_type_p (type))
2839         return 0;
2840     }
2841   return 1;
2842 }
2843
2844 /* Recursively examines the array elements of TYPE, until a non-array
2845    element type is found.  */
2846
2847 tree
2848 strip_array_types (type)
2849      tree type;
2850 {
2851   while (TREE_CODE (type) == ARRAY_TYPE)
2852     type = TREE_TYPE (type);
2853
2854   return type;
2855 }
2856
2857 /* Recognize certain built-in functions so we can make tree-codes
2858    other than CALL_EXPR.  We do this when it enables fold-const.c
2859    to do something useful.  */
2860 /* ??? By rights this should go in builtins.c, but only C and C++
2861    implement build_{binary,unary}_op.  Not exactly sure what bits
2862    of functionality are actually needed from those functions, or
2863    where the similar functionality exists in the other front ends.  */
2864
2865 tree
2866 expand_tree_builtin (function, params, coerced_params)
2867      tree function, params, coerced_params;
2868 {
2869   enum tree_code code;
2870
2871   if (DECL_BUILT_IN_CLASS (function) != BUILT_IN_NORMAL)
2872     return NULL_TREE;
2873
2874   switch (DECL_FUNCTION_CODE (function))
2875     {
2876     case BUILT_IN_ABS:
2877     case BUILT_IN_LABS:
2878     case BUILT_IN_LLABS:
2879     case BUILT_IN_IMAXABS:
2880     case BUILT_IN_FABS:
2881     case BUILT_IN_FABSL:
2882     case BUILT_IN_FABSF:
2883       if (coerced_params == 0)
2884         return integer_zero_node;
2885       return build_unary_op (ABS_EXPR, TREE_VALUE (coerced_params), 0);
2886
2887     case BUILT_IN_CONJ:
2888     case BUILT_IN_CONJF:
2889     case BUILT_IN_CONJL:
2890       if (coerced_params == 0)
2891         return integer_zero_node;
2892       return build_unary_op (CONJ_EXPR, TREE_VALUE (coerced_params), 0);
2893
2894     case BUILT_IN_CREAL:
2895     case BUILT_IN_CREALF:
2896     case BUILT_IN_CREALL:
2897       if (coerced_params == 0)
2898         return integer_zero_node;
2899       return build_unary_op (REALPART_EXPR, TREE_VALUE (coerced_params), 0);
2900
2901     case BUILT_IN_CIMAG:
2902     case BUILT_IN_CIMAGF:
2903     case BUILT_IN_CIMAGL:
2904       if (coerced_params == 0)
2905         return integer_zero_node;
2906       return build_unary_op (IMAGPART_EXPR, TREE_VALUE (coerced_params), 0);
2907
2908     case BUILT_IN_ISGREATER:
2909       if (TARGET_FLOAT_FORMAT == IEEE_FLOAT_FORMAT)
2910         code = UNLE_EXPR;
2911       else
2912         code = LE_EXPR;
2913       goto unordered_cmp;
2914
2915     case BUILT_IN_ISGREATEREQUAL:
2916       if (TARGET_FLOAT_FORMAT == IEEE_FLOAT_FORMAT)
2917         code = UNLT_EXPR;
2918       else
2919         code = LT_EXPR;
2920       goto unordered_cmp;
2921
2922     case BUILT_IN_ISLESS:
2923       if (TARGET_FLOAT_FORMAT == IEEE_FLOAT_FORMAT)
2924         code = UNGE_EXPR;
2925       else
2926         code = GE_EXPR;
2927       goto unordered_cmp;
2928
2929     case BUILT_IN_ISLESSEQUAL:
2930       if (TARGET_FLOAT_FORMAT == IEEE_FLOAT_FORMAT)
2931         code = UNGT_EXPR;
2932       else
2933         code = GT_EXPR;
2934       goto unordered_cmp;
2935
2936     case BUILT_IN_ISLESSGREATER:
2937       if (TARGET_FLOAT_FORMAT == IEEE_FLOAT_FORMAT)
2938         code = UNEQ_EXPR;
2939       else
2940         code = EQ_EXPR;
2941       goto unordered_cmp;
2942
2943     case BUILT_IN_ISUNORDERED:
2944       if (TARGET_FLOAT_FORMAT != IEEE_FLOAT_FORMAT)
2945         return integer_zero_node;
2946       code = UNORDERED_EXPR;
2947       goto unordered_cmp;
2948
2949     unordered_cmp:
2950       {
2951         tree arg0, arg1;
2952
2953         if (params == 0
2954             || TREE_CHAIN (params) == 0)
2955           {
2956             error ("too few arguments to function `%s'",
2957                    IDENTIFIER_POINTER (DECL_NAME (function)));
2958             return error_mark_node;
2959           }
2960         else if (TREE_CHAIN (TREE_CHAIN (params)) != 0)
2961           {
2962             error ("too many arguments to function `%s'",
2963                    IDENTIFIER_POINTER (DECL_NAME (function)));
2964             return error_mark_node;
2965           }
2966
2967         arg0 = TREE_VALUE (params);
2968         arg1 = TREE_VALUE (TREE_CHAIN (params));
2969         arg0 = build_binary_op (code, arg0, arg1, 0);
2970         if (code != UNORDERED_EXPR)
2971           arg0 = build_unary_op (TRUTH_NOT_EXPR, arg0, 0);
2972         return arg0;
2973       }
2974       break;
2975
2976     default:
2977       break;
2978     }
2979
2980   return NULL_TREE;
2981 }
2982
2983 /* Returns non-zero if CODE is the code for a statement.  */
2984
2985 int
2986 statement_code_p (code)
2987      enum tree_code code;
2988 {
2989   switch (code)
2990     {
2991     case EXPR_STMT:
2992     case COMPOUND_STMT:
2993     case DECL_STMT:
2994     case IF_STMT:
2995     case FOR_STMT:
2996     case WHILE_STMT:
2997     case DO_STMT:
2998     case RETURN_STMT:
2999     case BREAK_STMT:
3000     case CONTINUE_STMT:
3001     case SCOPE_STMT:
3002     case SWITCH_STMT:
3003     case GOTO_STMT:
3004     case LABEL_STMT:
3005     case ASM_STMT:
3006     case CASE_LABEL:
3007       return 1;
3008
3009     default:
3010       if (lang_statement_code_p)
3011         return (*lang_statement_code_p) (code);
3012       return 0;
3013     }
3014 }
3015
3016 /* Walk the statement tree, rooted at *tp.  Apply FUNC to all the
3017    sub-trees of *TP in a pre-order traversal.  FUNC is called with the
3018    DATA and the address of each sub-tree.  If FUNC returns a non-NULL
3019    value, the traversal is aborted, and the value returned by FUNC is
3020    returned.  If FUNC sets WALK_SUBTREES to zero, then the subtrees of
3021    the node being visited are not walked.
3022
3023    We don't need a without_duplicates variant of this one because the
3024    statement tree is a tree, not a graph.  */
3025
3026 tree 
3027 walk_stmt_tree (tp, func, data)
3028      tree *tp;
3029      walk_tree_fn func;
3030      void *data;
3031 {
3032   enum tree_code code;
3033   int walk_subtrees;
3034   tree result;
3035   int i, len;
3036
3037 #define WALK_SUBTREE(NODE)                              \
3038   do                                                    \
3039     {                                                   \
3040       result = walk_stmt_tree (&(NODE), func, data);    \
3041       if (result)                                       \
3042         return result;                                  \
3043     }                                                   \
3044   while (0)
3045
3046   /* Skip empty subtrees.  */
3047   if (!*tp)
3048     return NULL_TREE;
3049
3050   /* Skip subtrees below non-statement nodes.  */
3051   if (!statement_code_p (TREE_CODE (*tp)))
3052     return NULL_TREE;
3053
3054   /* Call the function.  */
3055   walk_subtrees = 1;
3056   result = (*func) (tp, &walk_subtrees, data);
3057
3058   /* If we found something, return it.  */
3059   if (result)
3060     return result;
3061
3062   /* FUNC may have modified the tree, recheck that we're looking at a
3063      statement node.  */
3064   code = TREE_CODE (*tp);
3065   if (!statement_code_p (code))
3066     return NULL_TREE;
3067
3068   /* Visit the subtrees unless FUNC decided that there was nothing
3069      interesting below this point in the tree.  */
3070   if (walk_subtrees)
3071     {
3072       /* Walk over all the sub-trees of this operand.  Statement nodes
3073          never contain RTL, and we needn't worry about TARGET_EXPRs.  */
3074       len = TREE_CODE_LENGTH (code);
3075
3076       /* Go through the subtrees.  We need to do this in forward order so
3077          that the scope of a FOR_EXPR is handled properly.  */
3078       for (i = 0; i < len; ++i)
3079         WALK_SUBTREE (TREE_OPERAND (*tp, i));
3080     }
3081
3082   /* Finally visit the chain.  This can be tail-recursion optimized if
3083      we write it this way.  */
3084   return walk_stmt_tree (&TREE_CHAIN (*tp), func, data);
3085
3086 #undef WALK_SUBTREE
3087 }
3088
3089 /* Used to compare case labels.  K1 and K2 are actually tree nodes
3090    representing case labels, or NULL_TREE for a `default' label.
3091    Returns -1 if K1 is ordered before K2, -1 if K1 is ordered after
3092    K2, and 0 if K1 and K2 are equal.  */
3093
3094 int
3095 case_compare (k1, k2)
3096      splay_tree_key k1;
3097      splay_tree_key k2;
3098 {
3099   /* Consider a NULL key (such as arises with a `default' label) to be
3100      smaller than anything else.  */
3101   if (!k1)
3102     return k2 ? -1 : 0;
3103   else if (!k2)
3104     return k1 ? 1 : 0;
3105
3106   return tree_int_cst_compare ((tree) k1, (tree) k2);
3107 }
3108
3109 /* Process a case label for the range LOW_VALUE ... HIGH_VALUE.  If
3110    LOW_VALUE and HIGH_VALUE are both NULL_TREE then this case label is
3111    actually a `default' label.  If only HIGH_VALUE is NULL_TREE, then
3112    case label was declared using the usual C/C++ syntax, rather than
3113    the GNU case range extension.  CASES is a tree containing all the
3114    case ranges processed so far; COND is the condition for the
3115    switch-statement itself.  Returns the CASE_LABEL created, or
3116    ERROR_MARK_NODE if no CASE_LABEL is created.  */
3117
3118 tree
3119 c_add_case_label (cases, cond, low_value, high_value)
3120      splay_tree cases;
3121      tree cond;
3122      tree low_value;
3123      tree high_value;
3124 {
3125   tree type;
3126   tree label;
3127   tree case_label;
3128   splay_tree_node node;
3129
3130   /* Create the LABEL_DECL itself.  */
3131   label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
3132   DECL_CONTEXT (label) = current_function_decl;
3133
3134   /* If there was an error processing the switch condition, bail now
3135      before we get more confused.  */
3136   if (!cond || cond == error_mark_node)
3137     {
3138       /* Add a label anyhow so that the back-end doesn't think that
3139          the beginning of the switch is unreachable.  */
3140       if (!cases->root)
3141         add_stmt (build_case_label (NULL_TREE, NULL_TREE, label));
3142       return error_mark_node;
3143     }
3144
3145   if ((low_value && TREE_TYPE (low_value) 
3146        && POINTER_TYPE_P (TREE_TYPE (low_value))) 
3147       || (high_value && TREE_TYPE (high_value)
3148           && POINTER_TYPE_P (TREE_TYPE (high_value))))
3149     error ("pointers are not permitted as case values");
3150
3151   /* Case ranges are a GNU extension.  */
3152   if (high_value && pedantic)
3153     {
3154       if (c_language == clk_cplusplus)
3155         pedwarn ("ISO C++ forbids range expressions in switch statements");
3156       else
3157         pedwarn ("ISO C forbids range expressions in switch statements");
3158     }
3159
3160   type = TREE_TYPE (cond);
3161   if (low_value)
3162     {
3163       low_value = check_case_value (low_value);
3164       low_value = convert_and_check (type, low_value);
3165     }
3166   if (high_value)
3167     {
3168       high_value = check_case_value (high_value);
3169       high_value = convert_and_check (type, high_value);
3170     }
3171
3172   /* If an error has occurred, bail out now.  */
3173   if (low_value == error_mark_node || high_value == error_mark_node)
3174     {
3175       if (!cases->root)
3176         add_stmt (build_case_label (NULL_TREE, NULL_TREE, label));
3177       return error_mark_node;
3178     }
3179
3180   /* If the LOW_VALUE and HIGH_VALUE are the same, then this isn't
3181      really a case range, even though it was written that way.  Remove
3182      the HIGH_VALUE to simplify later processing.  */
3183   if (tree_int_cst_equal (low_value, high_value))
3184     high_value = NULL_TREE;
3185   if (low_value && high_value 
3186       && !tree_int_cst_lt (low_value, high_value)) 
3187     warning ("empty range specified");
3188
3189   /* Look up the LOW_VALUE in the table of case labels we already
3190      have.  */
3191   node = splay_tree_lookup (cases, (splay_tree_key) low_value);
3192   /* If there was not an exact match, check for overlapping ranges.
3193      There's no need to do this if there's no LOW_VALUE or HIGH_VALUE;
3194      that's a `default' label and the only overlap is an exact match.  */
3195   if (!node && (low_value || high_value))
3196     {
3197       splay_tree_node low_bound;
3198       splay_tree_node high_bound;
3199
3200       /* Even though there wasn't an exact match, there might be an
3201          overlap between this case range and another case range.
3202          Since we've (inductively) not allowed any overlapping case
3203          ranges, we simply need to find the greatest low case label
3204          that is smaller that LOW_VALUE, and the smallest low case
3205          label that is greater than LOW_VALUE.  If there is an overlap
3206          it will occur in one of these two ranges.  */
3207       low_bound = splay_tree_predecessor (cases,
3208                                           (splay_tree_key) low_value);
3209       high_bound = splay_tree_successor (cases,
3210                                          (splay_tree_key) low_value);
3211
3212       /* Check to see if the LOW_BOUND overlaps.  It is smaller than
3213          the LOW_VALUE, so there is no need to check unless the
3214          LOW_BOUND is in fact itself a case range.  */
3215       if (low_bound
3216           && CASE_HIGH ((tree) low_bound->value)
3217           && tree_int_cst_compare (CASE_HIGH ((tree) low_bound->value),
3218                                     low_value) >= 0)
3219         node = low_bound;
3220       /* Check to see if the HIGH_BOUND overlaps.  The low end of that
3221          range is bigger than the low end of the current range, so we
3222          are only interested if the current range is a real range, and
3223          not an ordinary case label.  */
3224       else if (high_bound 
3225                && high_value
3226                && (tree_int_cst_compare ((tree) high_bound->key,
3227                                          high_value)
3228                    <= 0))
3229         node = high_bound;
3230     }
3231   /* If there was an overlap, issue an error.  */
3232   if (node)
3233     {
3234       tree duplicate = CASE_LABEL_DECL ((tree) node->value);
3235
3236       if (high_value)
3237         {
3238           error ("duplicate (or overlapping) case value");
3239           error_with_decl (duplicate, 
3240                            "this is the first entry overlapping that value");
3241         }
3242       else if (low_value)
3243         {
3244           error ("duplicate case value") ;
3245           error_with_decl (duplicate, "previously used here");
3246         }
3247       else
3248         {
3249           error ("multiple default labels in one switch");
3250           error_with_decl (duplicate, "this is the first default label");
3251         }
3252       if (!cases->root)
3253         add_stmt (build_case_label (NULL_TREE, NULL_TREE, label));
3254     }
3255
3256   /* Add a CASE_LABEL to the statement-tree.  */
3257   case_label = add_stmt (build_case_label (low_value, high_value, label));
3258   /* Register this case label in the splay tree.  */
3259   splay_tree_insert (cases, 
3260                      (splay_tree_key) low_value,
3261                      (splay_tree_value) case_label);
3262
3263   return case_label;
3264 }
3265
3266 /* Finish an expression taking the address of LABEL.  Returns an
3267    expression for the address.  */
3268
3269 tree 
3270 finish_label_address_expr (label)
3271      tree label;
3272 {
3273   tree result;
3274
3275   if (pedantic)
3276     {
3277       if (c_language == clk_cplusplus)
3278         pedwarn ("ISO C++ forbids taking the address of a label");
3279       else
3280         pedwarn ("ISO C forbids taking the address of a label");
3281     }
3282
3283   label = lookup_label (label);
3284   if (label == NULL_TREE)
3285     result = null_pointer_node;
3286   else
3287     {
3288       TREE_USED (label) = 1;
3289       result = build1 (ADDR_EXPR, ptr_type_node, label);
3290       TREE_CONSTANT (result) = 1;
3291       /* The current function in not necessarily uninlinable.
3292          Computed gotos are incompatible with inlining, but the value
3293          here could be used only in a diagnostic, for example.  */
3294     }
3295
3296   return result;
3297 }
3298
3299 /* Mark P (a stmt_tree) for GC.  The use of a `void *' for the
3300    parameter allows this function to be used as a GC-marking
3301    function.  */
3302
3303 void
3304 mark_stmt_tree (p)
3305      void *p;
3306 {
3307   stmt_tree st = (stmt_tree) p;
3308
3309   ggc_mark_tree (st->x_last_stmt);
3310   ggc_mark_tree (st->x_last_expr_type);
3311 }
3312
3313 /* Mark LD for GC.  */
3314
3315 void
3316 c_mark_lang_decl (c)
3317      struct c_lang_decl *c ATTRIBUTE_UNUSED;
3318 {
3319 }
3320
3321 /* Mark F for GC.  */
3322
3323 void
3324 mark_c_language_function (f)
3325      struct language_function *f;
3326 {
3327   if (!f)
3328     return;
3329
3330   mark_stmt_tree (&f->x_stmt_tree);
3331   ggc_mark_tree (f->x_scope_stmt_stack);
3332 }
3333
3334 /* Hook used by expand_expr to expand language-specific tree codes.  */
3335
3336 rtx
3337 c_expand_expr (exp, target, tmode, modifier)
3338      tree exp;
3339      rtx target;
3340      enum machine_mode tmode;
3341      enum expand_modifier modifier;
3342 {
3343   switch (TREE_CODE (exp))
3344     {
3345     case STMT_EXPR:
3346       {
3347         tree rtl_expr;
3348         rtx result;
3349
3350         /* Since expand_expr_stmt calls free_temp_slots after every
3351            expression statement, we must call push_temp_slots here.
3352            Otherwise, any temporaries in use now would be considered
3353            out-of-scope after the first EXPR_STMT from within the
3354            STMT_EXPR.  */
3355         push_temp_slots ();
3356         rtl_expr = expand_start_stmt_expr ();
3357         expand_stmt (STMT_EXPR_STMT (exp));
3358         expand_end_stmt_expr (rtl_expr);
3359         result = expand_expr (rtl_expr, target, tmode, modifier);
3360         pop_temp_slots ();
3361         return result;
3362       }
3363       break;
3364       
3365     case CALL_EXPR:
3366       {
3367         if (TREE_CODE (TREE_OPERAND (exp, 0)) == ADDR_EXPR
3368             && (TREE_CODE (TREE_OPERAND (TREE_OPERAND (exp, 0), 0))
3369                 == FUNCTION_DECL)
3370             && DECL_BUILT_IN (TREE_OPERAND (TREE_OPERAND (exp, 0), 0))
3371             && (DECL_BUILT_IN_CLASS (TREE_OPERAND (TREE_OPERAND (exp, 0), 0))
3372                 == BUILT_IN_FRONTEND))
3373           return c_expand_builtin (exp, target, tmode, modifier);
3374         else
3375           abort();
3376       }
3377       break;
3378
3379     default:
3380       abort ();
3381     }
3382
3383   abort ();
3384   return NULL;
3385 }
3386
3387 /* Hook used by safe_from_p to handle language-specific tree codes.  */
3388
3389 int
3390 c_safe_from_p (target, exp)
3391      rtx target;
3392      tree exp;
3393 {
3394   /* We can see statements here when processing the body of a
3395      statement-expression.  For a declaration statement declaring a
3396      variable, look at the variable's initializer.  */
3397   if (TREE_CODE (exp) == DECL_STMT) 
3398     {
3399       tree decl = DECL_STMT_DECL (exp);
3400
3401       if (TREE_CODE (decl) == VAR_DECL
3402           && DECL_INITIAL (decl)
3403           && !safe_from_p (target, DECL_INITIAL (decl), /*top_p=*/0))
3404         return 0;
3405     }
3406
3407   /* For any statement, we must follow the statement-chain.  */
3408   if (statement_code_p (TREE_CODE (exp)) && TREE_CHAIN (exp))
3409     return safe_from_p (target, TREE_CHAIN (exp), /*top_p=*/0);
3410
3411   /* Assume everything else is safe.  */
3412   return 1;
3413 }
3414
3415 /* Hook used by unsafe_for_reeval to handle language-specific tree codes.  */
3416
3417 int
3418 c_unsafe_for_reeval (exp)
3419      tree exp;
3420 {
3421   /* Statement expressions may not be reevaluated.  */
3422   if (TREE_CODE (exp) == STMT_EXPR)
3423     return 2;
3424
3425   /* Walk all other expressions.  */
3426   return -1;
3427 }
3428
3429 /* Tree code classes.  */
3430
3431 #define DEFTREECODE(SYM, NAME, TYPE, LENGTH) TYPE,
3432
3433 static const char c_tree_code_type[] = {
3434   'x',
3435 #include "c-common.def"
3436 };
3437 #undef DEFTREECODE
3438
3439 /* Table indexed by tree code giving number of expression
3440    operands beyond the fixed part of the node structure.
3441    Not used for types or decls.  */
3442
3443 #define DEFTREECODE(SYM, NAME, TYPE, LENGTH) LENGTH,
3444
3445 static const int c_tree_code_length[] = {
3446   0,
3447 #include "c-common.def"
3448 };
3449 #undef DEFTREECODE
3450
3451 /* Names of tree components.
3452    Used for printing out the tree and error messages.  */
3453 #define DEFTREECODE(SYM, NAME, TYPE, LEN) NAME,
3454
3455 static const char *const c_tree_code_name[] = {
3456   "@@dummy",
3457 #include "c-common.def"
3458 };
3459 #undef DEFTREECODE
3460
3461 /* Adds the tree codes specific to the C front end to the list of all
3462    tree codes.  */
3463
3464 void
3465 add_c_tree_codes ()
3466 {
3467   memcpy (tree_code_type + (int) LAST_AND_UNUSED_TREE_CODE,
3468           c_tree_code_type,
3469           (int)LAST_C_TREE_CODE - (int)LAST_AND_UNUSED_TREE_CODE);
3470   memcpy (tree_code_length + (int) LAST_AND_UNUSED_TREE_CODE,
3471           c_tree_code_length,
3472           (LAST_C_TREE_CODE - (int)LAST_AND_UNUSED_TREE_CODE) * sizeof (int));
3473   memcpy (tree_code_name + (int) LAST_AND_UNUSED_TREE_CODE,
3474           c_tree_code_name,
3475           (LAST_C_TREE_CODE - (int)LAST_AND_UNUSED_TREE_CODE) * sizeof (char *));
3476   lang_unsafe_for_reeval = c_unsafe_for_reeval;
3477 }
3478
3479 #define CALLED_AS_BUILT_IN(NODE) \
3480    (!strncmp (IDENTIFIER_POINTER (DECL_NAME (NODE)), "__builtin_", 10))
3481
3482 static rtx
3483 c_expand_builtin (exp, target, tmode, modifier)
3484      tree exp;
3485      rtx target;
3486      enum machine_mode tmode;
3487      enum expand_modifier modifier;
3488 {
3489   tree type = TREE_TYPE (exp);
3490   tree fndecl = TREE_OPERAND (TREE_OPERAND (exp, 0), 0);
3491   tree arglist = TREE_OPERAND (exp, 1);
3492   enum built_in_function fcode = DECL_FUNCTION_CODE (fndecl);
3493   enum tree_code code = TREE_CODE (exp);
3494   const int ignore = (target == const0_rtx
3495                       || ((code == NON_LVALUE_EXPR || code == NOP_EXPR
3496                            || code == CONVERT_EXPR || code == REFERENCE_EXPR
3497                            || code == COND_EXPR)
3498                           && TREE_CODE (type) == VOID_TYPE));
3499
3500   if (! optimize && ! CALLED_AS_BUILT_IN (fndecl))
3501     return expand_call (exp, target, ignore);
3502
3503   switch (fcode)
3504     {
3505     case BUILT_IN_PRINTF:
3506       target = c_expand_builtin_printf (arglist, target, tmode,
3507                                         modifier, ignore);
3508       if (target)
3509         return target;
3510       break;
3511
3512     case BUILT_IN_FPRINTF:
3513       target = c_expand_builtin_fprintf (arglist, target, tmode,
3514                                          modifier, ignore);
3515       if (target)
3516         return target;
3517       break;
3518
3519     default:                    /* just do library call, if unknown builtin */
3520       error ("built-in function `%s' not currently supported",
3521              IDENTIFIER_POINTER (DECL_NAME (fndecl)));
3522     }
3523
3524   /* The switch statement above can drop through to cause the function
3525      to be called normally.  */
3526   return expand_call (exp, target, ignore);
3527 }
3528
3529 /* Check an arglist to *printf for problems.  The arglist should start
3530    at the format specifier, with the remaining arguments immediately
3531    following it.  */
3532 static int
3533 is_valid_printf_arglist (arglist)
3534   tree arglist;
3535 {
3536   /* Save this value so we can restore it later.  */
3537   const int SAVE_pedantic = pedantic;
3538   int diagnostic_occurred = 0;
3539   tree attrs;
3540
3541   /* Set this to a known value so the user setting won't affect code
3542      generation.  */
3543   pedantic = 1;
3544   /* Check to make sure there are no format specifier errors.  */
3545   attrs = tree_cons (get_identifier ("format"),
3546                      tree_cons (NULL_TREE,
3547                                 get_identifier ("printf"),
3548                                 tree_cons (NULL_TREE,
3549                                            integer_one_node,
3550                                            tree_cons (NULL_TREE,
3551                                                       build_int_2 (2, 0),
3552                                                       NULL_TREE))),
3553                      NULL_TREE);
3554   check_function_format (&diagnostic_occurred, attrs, arglist);
3555
3556   /* Restore the value of `pedantic'.  */
3557   pedantic = SAVE_pedantic;
3558
3559   /* If calling `check_function_format_ptr' produces a warning, we
3560      return false, otherwise we return true.  */
3561   return ! diagnostic_occurred;
3562 }
3563
3564 /* If the arguments passed to printf are suitable for optimizations,
3565    we attempt to transform the call.  */
3566 static rtx
3567 c_expand_builtin_printf (arglist, target, tmode, modifier, ignore)
3568      tree arglist;
3569      rtx target;
3570      enum machine_mode tmode;
3571      enum expand_modifier modifier;
3572      int ignore;
3573 {
3574   tree fn_putchar = built_in_decls[BUILT_IN_PUTCHAR],
3575     fn_puts = built_in_decls[BUILT_IN_PUTS];
3576   tree fn, format_arg, stripped_string;
3577
3578   /* If the return value is used, or the replacement _DECL isn't
3579      initialized, don't do the transformation.  */
3580   if (!ignore || !fn_putchar || !fn_puts)
3581     return 0;
3582
3583   /* Verify the required arguments in the original call.  */
3584   if (arglist == 0
3585       || (TREE_CODE (TREE_TYPE (TREE_VALUE (arglist))) != POINTER_TYPE))
3586     return 0;
3587   
3588   /* Check the specifier vs. the parameters.  */
3589   if (!is_valid_printf_arglist (arglist))
3590     return 0;
3591   
3592   format_arg = TREE_VALUE (arglist);
3593   stripped_string = format_arg;
3594   STRIP_NOPS (stripped_string);
3595   if (stripped_string && TREE_CODE (stripped_string) == ADDR_EXPR)
3596     stripped_string = TREE_OPERAND (stripped_string, 0);
3597
3598   /* If the format specifier isn't a STRING_CST, punt.  */
3599   if (TREE_CODE (stripped_string) != STRING_CST)
3600     return 0;
3601   
3602   /* OK!  We can attempt optimization.  */
3603
3604   /* If the format specifier was "%s\n", call __builtin_puts(arg2).  */
3605   if (strcmp (TREE_STRING_POINTER (stripped_string), "%s\n") == 0)
3606     {
3607       arglist = TREE_CHAIN (arglist);
3608       fn = fn_puts;
3609     }
3610   /* If the format specifier was "%c", call __builtin_putchar (arg2).  */
3611   else if (strcmp (TREE_STRING_POINTER (stripped_string), "%c") == 0)
3612     {
3613       arglist = TREE_CHAIN (arglist);
3614       fn = fn_putchar;
3615     }
3616   else
3617     {
3618      /* We can't handle anything else with % args or %% ... yet.  */
3619       if (strchr (TREE_STRING_POINTER (stripped_string), '%'))
3620         return 0;
3621       
3622       /* If the resulting constant string has a length of 1, call
3623          putchar.  Note, TREE_STRING_LENGTH includes the terminating
3624          NULL in its count.  */
3625       if (TREE_STRING_LENGTH (stripped_string) == 2)
3626         {
3627           /* Given printf("c"), (where c is any one character,)
3628              convert "c"[0] to an int and pass that to the replacement
3629              function.  */
3630           arglist = build_int_2 (TREE_STRING_POINTER (stripped_string)[0], 0);
3631           arglist = build_tree_list (NULL_TREE, arglist);
3632           
3633           fn = fn_putchar;
3634         }
3635       /* If the resulting constant was "string\n", call
3636          __builtin_puts("string").  Ensure "string" has at least one
3637          character besides the trailing \n.  Note, TREE_STRING_LENGTH
3638          includes the terminating NULL in its count.  */
3639       else if (TREE_STRING_LENGTH (stripped_string) > 2
3640                && TREE_STRING_POINTER (stripped_string)
3641                [TREE_STRING_LENGTH (stripped_string) - 2] == '\n')
3642         {
3643           /* Create a NULL-terminated string that's one char shorter
3644              than the original, stripping off the trailing '\n'.  */
3645           const int newlen = TREE_STRING_LENGTH (stripped_string) - 1;
3646           char *newstr = (char *) alloca (newlen);
3647           memcpy (newstr, TREE_STRING_POINTER (stripped_string), newlen - 1);
3648           newstr[newlen - 1] = 0;
3649           
3650           arglist = combine_strings (build_string (newlen, newstr));
3651           arglist = build_tree_list (NULL_TREE, arglist);
3652           fn = fn_puts;
3653         }
3654       else
3655         /* We'd like to arrange to call fputs(string) here, but we
3656            need stdout and don't have a way to get it ... yet.  */
3657         return 0;
3658     }
3659   
3660   return expand_expr (build_function_call (fn, arglist),
3661                       (ignore ? const0_rtx : target),
3662                       tmode, modifier);
3663 }
3664
3665 /* If the arguments passed to fprintf are suitable for optimizations,
3666    we attempt to transform the call.  */
3667 static rtx
3668 c_expand_builtin_fprintf (arglist, target, tmode, modifier, ignore)
3669      tree arglist;
3670      rtx target;
3671      enum machine_mode tmode;
3672      enum expand_modifier modifier;
3673      int ignore;
3674 {
3675   tree fn_fputc = built_in_decls[BUILT_IN_FPUTC],
3676     fn_fputs = built_in_decls[BUILT_IN_FPUTS];
3677   tree fn, format_arg, stripped_string;
3678
3679   /* If the return value is used, or the replacement _DECL isn't
3680      initialized, don't do the transformation.  */
3681   if (!ignore || !fn_fputc || !fn_fputs)
3682     return 0;
3683
3684   /* Verify the required arguments in the original call.  */
3685   if (arglist == 0
3686       || (TREE_CODE (TREE_TYPE (TREE_VALUE (arglist))) != POINTER_TYPE)
3687       || (TREE_CHAIN (arglist) == 0)
3688       || (TREE_CODE (TREE_TYPE (TREE_VALUE (TREE_CHAIN (arglist)))) !=
3689           POINTER_TYPE))
3690     return 0;
3691   
3692   /* Check the specifier vs. the parameters.  */
3693   if (!is_valid_printf_arglist (TREE_CHAIN (arglist)))
3694     return 0;
3695   
3696   format_arg = TREE_VALUE (TREE_CHAIN (arglist));
3697   stripped_string = format_arg;
3698   STRIP_NOPS (stripped_string);
3699   if (stripped_string && TREE_CODE (stripped_string) == ADDR_EXPR)
3700     stripped_string = TREE_OPERAND (stripped_string, 0);
3701
3702   /* If the format specifier isn't a STRING_CST, punt.  */
3703   if (TREE_CODE (stripped_string) != STRING_CST)
3704     return 0;
3705   
3706   /* OK!  We can attempt optimization.  */
3707
3708   /* If the format specifier was "%s", call __builtin_fputs(arg3, arg1).  */
3709   if (strcmp (TREE_STRING_POINTER (stripped_string), "%s") == 0)
3710     {
3711       tree newarglist = build_tree_list (NULL_TREE, TREE_VALUE (arglist));
3712       arglist = tree_cons (NULL_TREE,
3713                            TREE_VALUE (TREE_CHAIN (TREE_CHAIN (arglist))),
3714                            newarglist);
3715       fn = fn_fputs;
3716     }
3717   /* If the format specifier was "%c", call __builtin_fputc (arg3, arg1).  */
3718   else if (strcmp (TREE_STRING_POINTER (stripped_string), "%c") == 0)
3719     {
3720       tree newarglist = build_tree_list (NULL_TREE, TREE_VALUE (arglist));
3721       arglist = tree_cons (NULL_TREE,
3722                            TREE_VALUE (TREE_CHAIN (TREE_CHAIN (arglist))),
3723                            newarglist);
3724       fn = fn_fputc;
3725     }
3726   else
3727     {
3728      /* We can't handle anything else with % args or %% ... yet.  */
3729       if (strchr (TREE_STRING_POINTER (stripped_string), '%'))
3730         return 0;
3731       
3732       /* When "string" doesn't contain %, replace all cases of
3733          fprintf(stream,string) with fputs(string,stream).  The fputs
3734          builtin will take take of special cases like length==1.  */
3735       arglist = tree_cons (NULL_TREE, TREE_VALUE (TREE_CHAIN (arglist)),
3736                            build_tree_list (NULL_TREE, TREE_VALUE (arglist)));
3737       fn = fn_fputs;
3738     }
3739   
3740   return expand_expr (build_function_call (fn, arglist),
3741                       (ignore ? const0_rtx : target),
3742                       tmode, modifier);
3743 }
3744 \f
3745
3746 /* Given a boolean expression ARG, return a tree representing an increment
3747    or decrement (as indicated by CODE) of ARG.  The front end must check for
3748    invalid cases (e.g., decrement in C++).  */
3749 tree
3750 boolean_increment (code, arg)
3751      enum tree_code code;
3752      tree arg;
3753 {
3754   tree val;
3755   tree true_res = (c_language == clk_cplusplus
3756                    ? boolean_true_node
3757                    : c_bool_true_node);
3758   arg = stabilize_reference (arg);
3759   switch (code)
3760     {
3761     case PREINCREMENT_EXPR:
3762       val = build (MODIFY_EXPR, TREE_TYPE (arg), arg, true_res);
3763       break;
3764     case POSTINCREMENT_EXPR:
3765       val = build (MODIFY_EXPR, TREE_TYPE (arg), arg, true_res);
3766       arg = save_expr (arg);
3767       val = build (COMPOUND_EXPR, TREE_TYPE (arg), val, arg);
3768       val = build (COMPOUND_EXPR, TREE_TYPE (arg), arg, val);
3769       break;
3770     case PREDECREMENT_EXPR:
3771       val = build (MODIFY_EXPR, TREE_TYPE (arg), arg, invert_truthvalue (arg));
3772       break;
3773     case POSTDECREMENT_EXPR:
3774       val = build (MODIFY_EXPR, TREE_TYPE (arg), arg, invert_truthvalue (arg));
3775       arg = save_expr (arg);
3776       val = build (COMPOUND_EXPR, TREE_TYPE (arg), val, arg);
3777       val = build (COMPOUND_EXPR, TREE_TYPE (arg), arg, val);
3778       break;
3779     default:
3780       abort ();
3781     }
3782   TREE_SIDE_EFFECTS (val) = 1;
3783   return val;
3784 }
3785 \f
3786 /* Handle C and C++ default attributes.  */
3787
3788 enum built_in_attribute
3789 {
3790 #define DEF_ATTR_NULL_TREE(ENUM) ENUM,
3791 #define DEF_ATTR_INT(ENUM, VALUE) ENUM,
3792 #define DEF_ATTR_IDENT(ENUM, STRING) ENUM,
3793 #define DEF_ATTR_TREE_LIST(ENUM, PURPOSE, VALUE, CHAIN) ENUM,
3794 #define DEF_FN_ATTR(NAME, ATTRS, PREDICATE) /* No entry needed in enum.  */
3795 #include "builtin-attrs.def"
3796 #undef DEF_ATTR_NULL_TREE
3797 #undef DEF_ATTR_INT
3798 #undef DEF_ATTR_IDENT
3799 #undef DEF_ATTR_TREE_LIST
3800 #undef DEF_FN_ATTR
3801   ATTR_LAST
3802 };
3803
3804 static tree built_in_attributes[(int) ATTR_LAST];
3805
3806 static bool c_attrs_initialized = false;
3807
3808 static void c_init_attributes PARAMS ((void));
3809
3810 /* Do the parts of lang_init common to C and C++.  */
3811 void
3812 c_common_lang_init ()
3813 {
3814   /* If still "unspecified", make it match -fbounded-pointers.  */
3815   if (flag_bounds_check < 0)
3816     flag_bounds_check = flag_bounded_pointers;
3817
3818   /* Special format checking options don't work without -Wformat; warn if
3819      they are used.  */
3820   if (warn_format_y2k && !warn_format)
3821     warning ("-Wformat-y2k ignored without -Wformat");
3822   if (warn_format_extra_args && !warn_format)
3823     warning ("-Wformat-extra-args ignored without -Wformat");
3824   if (warn_format_nonliteral && !warn_format)
3825     warning ("-Wformat-nonliteral ignored without -Wformat");
3826   if (warn_format_security && !warn_format)
3827     warning ("-Wformat-security ignored without -Wformat");
3828   if (warn_missing_format_attribute && !warn_format)
3829     warning ("-Wmissing-format-attribute ignored without -Wformat");
3830
3831   if (!c_attrs_initialized)
3832     c_init_attributes ();
3833 }
3834
3835 static void
3836 c_init_attributes ()
3837 {
3838   /* Fill in the built_in_attributes array.  */
3839 #define DEF_ATTR_NULL_TREE(ENUM)                \
3840   built_in_attributes[(int) ENUM] = NULL_TREE;
3841 #define DEF_ATTR_INT(ENUM, VALUE)                                            \
3842   built_in_attributes[(int) ENUM] = build_int_2 (VALUE, VALUE < 0 ? -1 : 0);
3843 #define DEF_ATTR_IDENT(ENUM, STRING)                            \
3844   built_in_attributes[(int) ENUM] = get_identifier (STRING);
3845 #define DEF_ATTR_TREE_LIST(ENUM, PURPOSE, VALUE, CHAIN) \
3846   built_in_attributes[(int) ENUM]                       \
3847     = tree_cons (built_in_attributes[(int) PURPOSE],    \
3848                  built_in_attributes[(int) VALUE],      \
3849                  built_in_attributes[(int) CHAIN]);
3850 #define DEF_FN_ATTR(NAME, ATTRS, PREDICATE) /* No initialization needed.  */
3851 #include "builtin-attrs.def"
3852 #undef DEF_ATTR_NULL_TREE
3853 #undef DEF_ATTR_INT
3854 #undef DEF_ATTR_IDENT
3855 #undef DEF_ATTR_TREE_LIST
3856 #undef DEF_FN_ATTR
3857   ggc_add_tree_root (built_in_attributes, (int) ATTR_LAST);
3858   c_attrs_initialized = true;
3859 }
3860
3861 /* Depending on the name of DECL, apply default attributes to it.  */
3862
3863 void
3864 c_common_insert_default_attributes (decl)
3865      tree decl;
3866 {
3867   tree name = DECL_NAME (decl);
3868
3869   if (!c_attrs_initialized)
3870     c_init_attributes ();
3871
3872 #define DEF_ATTR_NULL_TREE(ENUM) /* Nothing needed after initialization.  */
3873 #define DEF_ATTR_INT(ENUM, VALUE)
3874 #define DEF_ATTR_IDENT(ENUM, STRING)
3875 #define DEF_ATTR_TREE_LIST(ENUM, PURPOSE, VALUE, CHAIN)
3876 #define DEF_FN_ATTR(NAME, ATTRS, PREDICATE)                     \
3877   if ((PREDICATE) && name == built_in_attributes[(int) NAME])   \
3878     decl_attributes (&decl, built_in_attributes[(int) ATTRS],   \
3879                      ATTR_FLAG_BUILT_IN);
3880 #include "builtin-attrs.def"
3881 #undef DEF_ATTR_NULL_TREE
3882 #undef DEF_ATTR_INT
3883 #undef DEF_ATTR_IDENT
3884 #undef DEF_ATTR_TREE_LIST
3885 #undef DEF_FN_ATTR
3886 }