OSDN Git Service

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