OSDN Git Service

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