OSDN Git Service

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