OSDN Git Service

bf48029fd497767220078ab2787db3314070385f
[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, 2003, 2004 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 "coretypes.h"
25 #include "tm.h"
26 #include "intl.h"
27 #include "tree.h"
28 #include "flags.h"
29 #include "output.h"
30 #include "c-pragma.h"
31 #include "rtl.h"
32 #include "ggc.h"
33 #include "varray.h"
34 #include "expr.h"
35 #include "c-common.h"
36 #include "diagnostic.h"
37 #include "tm_p.h"
38 #include "obstack.h"
39 #include "cpplib.h"
40 #include "target.h"
41 #include "langhooks.h"
42 #include "tree-inline.h"
43 #include "c-tree.h"
44 #include "toplev.h"
45 #include "tree-iterator.h"
46 #include "hashtab.h"
47 #include "tree-mudflap.h"
48 #include "opts.h"
49
50 cpp_reader *parse_in;           /* Declared in c-pragma.h.  */
51
52 /* We let tm.h override the types used here, to handle trivial differences
53    such as the choice of unsigned int or long unsigned int for size_t.
54    When machines start needing nontrivial differences in the size type,
55    it would be best to do something here to figure out automatically
56    from other information what type to use.  */
57
58 #ifndef SIZE_TYPE
59 #define SIZE_TYPE "long unsigned int"
60 #endif
61
62 #ifndef PID_TYPE
63 #define PID_TYPE "int"
64 #endif
65
66 #ifndef WCHAR_TYPE
67 #define WCHAR_TYPE "int"
68 #endif
69
70 /* WCHAR_TYPE gets overridden by -fshort-wchar.  */
71 #define MODIFIED_WCHAR_TYPE \
72         (flag_short_wchar ? "short unsigned int" : WCHAR_TYPE)
73
74 #ifndef PTRDIFF_TYPE
75 #define PTRDIFF_TYPE "long int"
76 #endif
77
78 #ifndef WINT_TYPE
79 #define WINT_TYPE "unsigned int"
80 #endif
81
82 #ifndef INTMAX_TYPE
83 #define INTMAX_TYPE ((INT_TYPE_SIZE == LONG_LONG_TYPE_SIZE)     \
84                      ? "int"                                    \
85                      : ((LONG_TYPE_SIZE == LONG_LONG_TYPE_SIZE) \
86                         ? "long int"                            \
87                         : "long long int"))
88 #endif
89
90 #ifndef UINTMAX_TYPE
91 #define UINTMAX_TYPE ((INT_TYPE_SIZE == LONG_LONG_TYPE_SIZE)    \
92                      ? "unsigned int"                           \
93                      : ((LONG_TYPE_SIZE == LONG_LONG_TYPE_SIZE) \
94                         ? "long unsigned int"                   \
95                         : "long long unsigned int"))
96 #endif
97
98 /* The following symbols are subsumed in the c_global_trees array, and
99    listed here individually for documentation purposes.
100
101    INTEGER_TYPE and REAL_TYPE nodes for the standard data types.
102
103         tree short_integer_type_node;
104         tree long_integer_type_node;
105         tree long_long_integer_type_node;
106
107         tree short_unsigned_type_node;
108         tree long_unsigned_type_node;
109         tree long_long_unsigned_type_node;
110
111         tree truthvalue_type_node;
112         tree truthvalue_false_node;
113         tree truthvalue_true_node;
114
115         tree ptrdiff_type_node;
116
117         tree unsigned_char_type_node;
118         tree signed_char_type_node;
119         tree wchar_type_node;
120         tree signed_wchar_type_node;
121         tree unsigned_wchar_type_node;
122
123         tree float_type_node;
124         tree double_type_node;
125         tree long_double_type_node;
126
127         tree complex_integer_type_node;
128         tree complex_float_type_node;
129         tree complex_double_type_node;
130         tree complex_long_double_type_node;
131
132         tree intQI_type_node;
133         tree intHI_type_node;
134         tree intSI_type_node;
135         tree intDI_type_node;
136         tree intTI_type_node;
137
138         tree unsigned_intQI_type_node;
139         tree unsigned_intHI_type_node;
140         tree unsigned_intSI_type_node;
141         tree unsigned_intDI_type_node;
142         tree unsigned_intTI_type_node;
143
144         tree widest_integer_literal_type_node;
145         tree widest_unsigned_literal_type_node;
146
147    Nodes for types `void *' and `const void *'.
148
149         tree ptr_type_node, const_ptr_type_node;
150
151    Nodes for types `char *' and `const char *'.
152
153         tree string_type_node, const_string_type_node;
154
155    Type `char[SOMENUMBER]'.
156    Used when an array of char is needed and the size is irrelevant.
157
158         tree char_array_type_node;
159
160    Type `int[SOMENUMBER]' or something like it.
161    Used when an array of int needed and the size is irrelevant.
162
163         tree int_array_type_node;
164
165    Type `wchar_t[SOMENUMBER]' or something like it.
166    Used when a wide string literal is created.
167
168         tree wchar_array_type_node;
169
170    Type `int ()' -- used for implicit declaration of functions.
171
172         tree default_function_type;
173
174    A VOID_TYPE node, packaged in a TREE_LIST.
175
176         tree void_list_node;
177
178   The lazily created VAR_DECLs for __FUNCTION__, __PRETTY_FUNCTION__,
179   and __func__. (C doesn't generate __FUNCTION__ and__PRETTY_FUNCTION__
180   VAR_DECLS, but C++ does.)
181
182         tree function_name_decl_node;
183         tree pretty_function_name_decl_node;
184         tree c99_function_name_decl_node;
185
186   Stack of nested function name VAR_DECLs.
187
188         tree saved_function_name_decls;
189
190 */
191
192 tree c_global_trees[CTI_MAX];
193
194 /* TRUE if a code represents a statement.  The front end init
195    langhook should take care of initialization of this array.  */
196
197 bool statement_code_p[MAX_TREE_CODES];
198 \f
199 /* Switches common to the C front ends.  */
200
201 /* Nonzero if prepreprocessing only.  */
202
203 int flag_preprocess_only;
204
205 /* Nonzero means don't output line number information.  */
206
207 char flag_no_line_commands;
208
209 /* Nonzero causes -E output not to be done, but directives such as
210    #define that have side effects are still obeyed.  */
211
212 char flag_no_output;
213
214 /* Nonzero means dump macros in some fashion.  */
215
216 char flag_dump_macros;
217
218 /* Nonzero means pass #include lines through to the output.  */
219
220 char flag_dump_includes;
221
222 /* Nonzero means process PCH files while preprocessing.  */
223
224 bool flag_pch_preprocess;
225
226 /* The file name to which we should write a precompiled header, or
227    NULL if no header will be written in this compile.  */
228
229 const char *pch_file;
230
231 /* Nonzero if an ISO standard was selected.  It rejects macros in the
232    user's namespace.  */
233 int flag_iso;
234
235 /* Nonzero if -undef was given.  It suppresses target built-in macros
236    and assertions.  */
237 int flag_undef;
238
239 /* Nonzero means don't recognize the non-ANSI builtin functions.  */
240
241 int flag_no_builtin;
242
243 /* Nonzero means don't recognize the non-ANSI builtin functions.
244    -ansi sets this.  */
245
246 int flag_no_nonansi_builtin;
247
248 /* Nonzero means give `double' the same size as `float'.  */
249
250 int flag_short_double;
251
252 /* Nonzero means give `wchar_t' the same size as `short'.  */
253
254 int flag_short_wchar;
255
256 /* Nonzero means allow Microsoft extensions without warnings or errors.  */
257 int flag_ms_extensions;
258
259 /* Nonzero means don't recognize the keyword `asm'.  */
260
261 int flag_no_asm;
262
263 /* Nonzero means give string constants the type `const char *', as mandated
264    by the standard.  */
265
266 int flag_const_strings;
267
268 /* Nonzero means to treat bitfields as signed unless they say `unsigned'.  */
269
270 int flag_signed_bitfields = 1;
271 int explicit_flag_signed_bitfields;
272
273 /* Nonzero means warn about deprecated conversion from string constant to
274    `char *'.  */
275
276 int warn_write_strings;
277
278 /* Warn about #pragma directives that are not recognized.  */
279
280 int warn_unknown_pragmas; /* Tri state variable.  */
281
282 /* Warn about format/argument anomalies in calls to formatted I/O functions
283    (*printf, *scanf, strftime, strfmon, etc.).  */
284
285 int warn_format;
286
287 /* Zero means that faster, ...NonNil variants of objc_msgSend...
288    calls will be used in ObjC; passing nil receivers to such calls
289    will most likely result in crashes.  */
290 int flag_nil_receivers = 1;
291
292 /* Nonzero means that we will allow new ObjC exception syntax (@throw,
293    @try, etc.) in source code.  */
294 int flag_objc_exceptions = 0;
295
296 /* Nonzero means that we generate NeXT setjmp based exceptions.  */
297 int flag_objc_sjlj_exceptions = -1;
298
299 /* Nonzero means that code generation will be altered to support
300    "zero-link" execution.  This currently affects ObjC only, but may
301    affect other languages in the future.  */
302 int flag_zero_link = 0;
303
304 /* Nonzero means emit an '__OBJC, __image_info' for the current translation
305    unit.  It will inform the ObjC runtime that class definition(s) herein
306    contained are to replace one(s) previously loaded.  */
307 int flag_replace_objc_classes = 0;
308
309 /* C/ObjC language option variables.  */
310
311
312 /* Nonzero means allow type mismatches in conditional expressions;
313    just make their values `void'.  */
314
315 int flag_cond_mismatch;
316
317 /* Nonzero means enable C89 Amendment 1 features.  */
318
319 int flag_isoc94;
320
321 /* Nonzero means use the ISO C99 dialect of C.  */
322
323 int flag_isoc99;
324
325 /* Nonzero means that we have builtin functions, and main is an int.  */
326
327 int flag_hosted = 1;
328
329 /* Warn if main is suspicious.  */
330
331 int warn_main;
332
333
334 /* ObjC language option variables.  */
335
336
337 /* Open and close the file for outputting class declarations, if
338    requested (ObjC).  */
339
340 int flag_gen_declaration;
341
342 /* Generate code for GNU or NeXT runtime environment.  */
343
344 #ifdef NEXT_OBJC_RUNTIME
345 int flag_next_runtime = 1;
346 #else
347 int flag_next_runtime = 0;
348 #endif
349
350 /* Tells the compiler that this is a special run.  Do not perform any
351    compiling, instead we are to test some platform dependent features
352    and output a C header file with appropriate definitions.  */
353
354 int print_struct_values;
355
356 /* ???.  Undocumented.  */
357
358 const char *constant_string_class_name;
359
360
361 /* C++ language option variables.  */
362
363
364 /* Nonzero means don't recognize any extension keywords.  */
365
366 int flag_no_gnu_keywords;
367
368 /* Nonzero means do emit exported implementations of functions even if
369    they can be inlined.  */
370
371 int flag_implement_inlines = 1;
372
373 /* Nonzero means that implicit instantiations will be emitted if needed.  */
374
375 int flag_implicit_templates = 1;
376
377 /* Nonzero means that implicit instantiations of inline templates will be
378    emitted if needed, even if instantiations of non-inline templates
379    aren't.  */
380
381 int flag_implicit_inline_templates = 1;
382
383 /* Nonzero means generate separate instantiation control files and
384    juggle them at link time.  */
385
386 int flag_use_repository;
387
388 /* Nonzero if we want to issue diagnostics that the standard says are not
389    required.  */
390
391 int flag_optional_diags = 1;
392
393 /* Nonzero means we should attempt to elide constructors when possible.  */
394
395 int flag_elide_constructors = 1;
396
397 /* Nonzero means that member functions defined in class scope are
398    inline by default.  */
399
400 int flag_default_inline = 1;
401
402 /* Controls whether compiler generates 'type descriptor' that give
403    run-time type information.  */
404
405 int flag_rtti = 1;
406
407 /* Nonzero if we want to conserve space in the .o files.  We do this
408    by putting uninitialized data and runtime initialized data into
409    .common instead of .data at the expense of not flagging multiple
410    definitions.  */
411
412 int flag_conserve_space;
413
414 /* Nonzero if we want to obey access control semantics.  */
415
416 int flag_access_control = 1;
417
418 /* Nonzero if we want to check the return value of new and avoid calling
419    constructors if it is a null pointer.  */
420
421 int flag_check_new;
422
423 /* Nonzero if we want the new ISO rules for pushing a new scope for `for'
424    initialization variables.
425    0: Old rules, set by -fno-for-scope.
426    2: New ISO rules, set by -ffor-scope.
427    1: Try to implement new ISO rules, but with backup compatibility
428    (and warnings).  This is the default, for now.  */
429
430 int flag_new_for_scope = 1;
431
432 /* Nonzero if we want to emit defined symbols with common-like linkage as
433    weak symbols where possible, in order to conform to C++ semantics.
434    Otherwise, emit them as local symbols.  */
435
436 int flag_weak = 1;
437
438 /* 0 means we want the preprocessor to not emit line directives for
439    the current working directory.  1 means we want it to do it.  -1
440    means we should decide depending on whether debugging information
441    is being emitted or not.  */
442
443 int flag_working_directory = -1;
444
445 /* Nonzero to use __cxa_atexit, rather than atexit, to register
446    destructors for local statics and global objects.  */
447
448 int flag_use_cxa_atexit = DEFAULT_USE_CXA_ATEXIT;
449
450 /* Nonzero means make the default pedwarns warnings instead of errors.
451    The value of this flag is ignored if -pedantic is specified.  */
452
453 int flag_permissive;
454
455 /* Nonzero means to implement standard semantics for exception
456    specifications, calling unexpected if an exception is thrown that
457    doesn't match the specification.  Zero means to treat them as
458    assertions and optimize accordingly, but not check them.  */
459
460 int flag_enforce_eh_specs = 1;
461
462 /* Nonzero means to generate thread-safe code for initializing local
463    statics.  */
464
465 int flag_threadsafe_statics = 1;
466
467 /* Nonzero means warn about implicit declarations.  */
468
469 int warn_implicit = 1;
470
471 /* Maximum template instantiation depth.  This limit is rather
472    arbitrary, but it exists to limit the time it takes to notice
473    infinite template instantiations.  */
474
475 int max_tinst_depth = 500;
476
477
478
479 /* The elements of `ridpointers' are identifier nodes for the reserved
480    type names and storage classes.  It is indexed by a RID_... value.  */
481 tree *ridpointers;
482
483 tree (*make_fname_decl) (tree, int);
484
485 /* If non-NULL, the address of a language-specific function that
486    returns 1 for language-specific statement codes.  */
487 int (*lang_statement_code_p) (enum tree_code);
488
489 /* If non-NULL, the address of a language-specific function that takes
490    any action required right before expand_function_end is called.  */
491 void (*lang_expand_function_end) (void);
492
493 /* Nonzero means the expression being parsed will never be evaluated.
494    This is a count, since unevaluated expressions can nest.  */
495 int skip_evaluation;
496
497 /* Information about how a function name is generated.  */
498 struct fname_var_t
499 {
500   tree *const decl;     /* pointer to the VAR_DECL.  */
501   const unsigned rid;   /* RID number for the identifier.  */
502   const int pretty;     /* How pretty is it? */
503 };
504
505 /* The three ways of getting then name of the current function.  */
506
507 const struct fname_var_t fname_vars[] =
508 {
509   /* C99 compliant __func__, must be first.  */
510   {&c99_function_name_decl_node, RID_C99_FUNCTION_NAME, 0},
511   /* GCC __FUNCTION__ compliant.  */
512   {&function_name_decl_node, RID_FUNCTION_NAME, 0},
513   /* GCC __PRETTY_FUNCTION__ compliant.  */
514   {&pretty_function_name_decl_node, RID_PRETTY_FUNCTION_NAME, 1},
515   {NULL, 0, 0},
516 };
517
518 static int constant_fits_type_p (tree, tree);
519 static tree check_case_value (tree);
520 static bool check_case_bounds (tree, tree, tree *, tree *);
521
522 static tree handle_packed_attribute (tree *, tree, tree, int, bool *);
523 static tree handle_nocommon_attribute (tree *, tree, tree, int, bool *);
524 static tree handle_common_attribute (tree *, tree, tree, int, bool *);
525 static tree handle_noreturn_attribute (tree *, tree, tree, int, bool *);
526 static tree handle_noinline_attribute (tree *, tree, tree, int, bool *);
527 static tree handle_always_inline_attribute (tree *, tree, tree, int,
528                                             bool *);
529 static tree handle_used_attribute (tree *, tree, tree, int, bool *);
530 static tree handle_unused_attribute (tree *, tree, tree, int, bool *);
531 static tree handle_const_attribute (tree *, tree, tree, int, bool *);
532 static tree handle_transparent_union_attribute (tree *, tree, tree,
533                                                 int, bool *);
534 static tree handle_constructor_attribute (tree *, tree, tree, int, bool *);
535 static tree handle_destructor_attribute (tree *, tree, tree, int, bool *);
536 static tree handle_mode_attribute (tree *, tree, tree, int, bool *);
537 static tree handle_section_attribute (tree *, tree, tree, int, bool *);
538 static tree handle_aligned_attribute (tree *, tree, tree, int, bool *);
539 static tree handle_weak_attribute (tree *, tree, tree, int, bool *) ;
540 static tree handle_alias_attribute (tree *, tree, tree, int, bool *);
541 static tree handle_visibility_attribute (tree *, tree, tree, int,
542                                          bool *);
543 static tree handle_tls_model_attribute (tree *, tree, tree, int,
544                                         bool *);
545 static tree handle_no_instrument_function_attribute (tree *, tree,
546                                                      tree, int, bool *);
547 static tree handle_malloc_attribute (tree *, tree, tree, int, bool *);
548 static tree handle_no_limit_stack_attribute (tree *, tree, tree, int,
549                                              bool *);
550 static tree handle_pure_attribute (tree *, tree, tree, int, bool *);
551 static tree handle_deprecated_attribute (tree *, tree, tree, int,
552                                          bool *);
553 static tree handle_vector_size_attribute (tree *, tree, tree, int,
554                                           bool *);
555 static tree handle_nonnull_attribute (tree *, tree, tree, int, bool *);
556 static tree handle_nothrow_attribute (tree *, tree, tree, int, bool *);
557 static tree handle_cleanup_attribute (tree *, tree, tree, int, bool *);
558 static tree handle_warn_unused_result_attribute (tree *, tree, tree, int,
559                                                  bool *);
560 static tree handle_sentinel_attribute (tree *, tree, tree, int, bool *);
561
562 static void check_function_nonnull (tree, tree);
563 static void check_nonnull_arg (void *, tree, unsigned HOST_WIDE_INT);
564 static bool nonnull_check_p (tree, unsigned HOST_WIDE_INT);
565 static bool get_nonnull_operand (tree, unsigned HOST_WIDE_INT *);
566 static int resort_field_decl_cmp (const void *, const void *);
567
568 /* Table of machine-independent attributes common to all C-like languages.  */
569 const struct attribute_spec c_common_attribute_table[] =
570 {
571   /* { name, min_len, max_len, decl_req, type_req, fn_type_req, handler } */
572   { "packed",                 0, 0, false, false, false,
573                               handle_packed_attribute },
574   { "nocommon",               0, 0, true,  false, false,
575                               handle_nocommon_attribute },
576   { "common",                 0, 0, true,  false, false,
577                               handle_common_attribute },
578   /* FIXME: logically, noreturn attributes should be listed as
579      "false, true, true" and apply to function types.  But implementing this
580      would require all the places in the compiler that use TREE_THIS_VOLATILE
581      on a decl to identify non-returning functions to be located and fixed
582      to check the function type instead.  */
583   { "noreturn",               0, 0, true,  false, false,
584                               handle_noreturn_attribute },
585   { "volatile",               0, 0, true,  false, false,
586                               handle_noreturn_attribute },
587   { "noinline",               0, 0, true,  false, false,
588                               handle_noinline_attribute },
589   { "always_inline",          0, 0, true,  false, false,
590                               handle_always_inline_attribute },
591   { "used",                   0, 0, true,  false, false,
592                               handle_used_attribute },
593   { "unused",                 0, 0, false, false, false,
594                               handle_unused_attribute },
595   /* The same comments as for noreturn attributes apply to const ones.  */
596   { "const",                  0, 0, true,  false, false,
597                               handle_const_attribute },
598   { "transparent_union",      0, 0, false, false, false,
599                               handle_transparent_union_attribute },
600   { "constructor",            0, 0, true,  false, false,
601                               handle_constructor_attribute },
602   { "destructor",             0, 0, true,  false, false,
603                               handle_destructor_attribute },
604   { "mode",                   1, 1, false,  true, false,
605                               handle_mode_attribute },
606   { "section",                1, 1, true,  false, false,
607                               handle_section_attribute },
608   { "aligned",                0, 1, false, false, false,
609                               handle_aligned_attribute },
610   { "weak",                   0, 0, true,  false, false,
611                               handle_weak_attribute },
612   { "alias",                  1, 1, true,  false, false,
613                               handle_alias_attribute },
614   { "no_instrument_function", 0, 0, true,  false, false,
615                               handle_no_instrument_function_attribute },
616   { "malloc",                 0, 0, true,  false, false,
617                               handle_malloc_attribute },
618   { "no_stack_limit",         0, 0, true,  false, false,
619                               handle_no_limit_stack_attribute },
620   { "pure",                   0, 0, true,  false, false,
621                               handle_pure_attribute },
622   { "deprecated",             0, 0, false, false, false,
623                               handle_deprecated_attribute },
624   { "vector_size",            1, 1, false, true, false,
625                               handle_vector_size_attribute },
626   { "visibility",             1, 1, false, false, false,
627                               handle_visibility_attribute },
628   { "tls_model",              1, 1, true,  false, false,
629                               handle_tls_model_attribute },
630   { "nonnull",                0, -1, false, true, true,
631                               handle_nonnull_attribute },
632   { "nothrow",                0, 0, true,  false, false,
633                               handle_nothrow_attribute },
634   { "may_alias",              0, 0, false, true, false, NULL },
635   { "cleanup",                1, 1, true, false, false,
636                               handle_cleanup_attribute },
637   { "warn_unused_result",     0, 0, false, true, true,
638                               handle_warn_unused_result_attribute },
639   { "sentinel",               0, 1, false, true, true,
640                               handle_sentinel_attribute },
641   { NULL,                     0, 0, false, false, false, NULL }
642 };
643
644 /* Give the specifications for the format attributes, used by C and all
645    descendants.  */
646
647 const struct attribute_spec c_common_format_attribute_table[] =
648 {
649   /* { name, min_len, max_len, decl_req, type_req, fn_type_req, handler } */
650   { "format",                 3, 3, false, true,  true,
651                               handle_format_attribute },
652   { "format_arg",             1, 1, false, true,  true,
653                               handle_format_arg_attribute },
654   { NULL,                     0, 0, false, false, false, NULL }
655 };
656
657 /* Push current bindings for the function name VAR_DECLS.  */
658
659 void
660 start_fname_decls (void)
661 {
662   unsigned ix;
663   tree saved = NULL_TREE;
664
665   for (ix = 0; fname_vars[ix].decl; ix++)
666     {
667       tree decl = *fname_vars[ix].decl;
668
669       if (decl)
670         {
671           saved = tree_cons (decl, build_int_cst (NULL_TREE, ix), saved);
672           *fname_vars[ix].decl = NULL_TREE;
673         }
674     }
675   if (saved || saved_function_name_decls)
676     /* Normally they'll have been NULL, so only push if we've got a
677        stack, or they are non-NULL.  */
678     saved_function_name_decls = tree_cons (saved, NULL_TREE,
679                                            saved_function_name_decls);
680 }
681
682 /* Finish up the current bindings, adding them into the current function's
683    statement tree.  This must be done _before_ finish_stmt_tree is called.
684    If there is no current function, we must be at file scope and no statements
685    are involved. Pop the previous bindings.  */
686
687 void
688 finish_fname_decls (void)
689 {
690   unsigned ix;
691   tree stmts = NULL_TREE;
692   tree stack = saved_function_name_decls;
693
694   for (; stack && TREE_VALUE (stack); stack = TREE_CHAIN (stack))
695     append_to_statement_list (TREE_VALUE (stack), &stmts);
696
697   if (stmts)
698     {
699       tree *bodyp = &DECL_SAVED_TREE (current_function_decl);
700
701       if (TREE_CODE (*bodyp) == BIND_EXPR)
702         bodyp = &BIND_EXPR_BODY (*bodyp);
703
704       append_to_statement_list (*bodyp, &stmts);
705       *bodyp = stmts;
706     }
707
708   for (ix = 0; fname_vars[ix].decl; ix++)
709     *fname_vars[ix].decl = NULL_TREE;
710
711   if (stack)
712     {
713       /* We had saved values, restore them.  */
714       tree saved;
715
716       for (saved = TREE_PURPOSE (stack); saved; saved = TREE_CHAIN (saved))
717         {
718           tree decl = TREE_PURPOSE (saved);
719           unsigned ix = TREE_INT_CST_LOW (TREE_VALUE (saved));
720
721           *fname_vars[ix].decl = decl;
722         }
723       stack = TREE_CHAIN (stack);
724     }
725   saved_function_name_decls = stack;
726 }
727
728 /* Return the text name of the current function, suitably prettified
729    by PRETTY_P.  Return string must be freed by caller.  */
730
731 const char *
732 fname_as_string (int pretty_p)
733 {
734   const char *name = "top level";
735   char *namep;
736   int vrb = 2;
737
738   if (!pretty_p)
739     {
740       name = "";
741       vrb = 0;
742     }
743
744   if (current_function_decl)
745     name = lang_hooks.decl_printable_name (current_function_decl, vrb);
746
747   if (c_lex_string_translate)
748     {
749       int len = strlen (name) + 3; /* Two for '"'s.  One for NULL.  */
750       cpp_string cstr = { 0, 0 }, strname;
751
752       namep = XNEWVEC (char, len);
753       snprintf (namep, len, "\"%s\"", name);
754       strname.text = (unsigned char *) namep;
755       strname.len = len - 1;
756
757       if (cpp_interpret_string (parse_in, &strname, 1, &cstr, false))
758         {
759           XDELETEVEC (namep);
760           return (char *) cstr.text;
761         }
762     }
763   else
764     namep = xstrdup (name);
765
766   return namep;
767 }
768
769 /* Expand DECL if it declares an entity not handled by the
770    common code.  */
771
772 int
773 c_expand_decl (tree decl)
774 {
775   if (TREE_CODE (decl) == VAR_DECL && !TREE_STATIC (decl))
776     {
777       /* Let the back-end know about this variable.  */
778       if (!anon_aggr_type_p (TREE_TYPE (decl)))
779         emit_local_var (decl);
780       else
781         expand_anon_union_decl (decl, NULL_TREE,
782                                 DECL_ANON_UNION_ELEMS (decl));
783     }
784   else
785     return 0;
786
787   return 1;
788 }
789
790
791 /* Return the VAR_DECL for a const char array naming the current
792    function. If the VAR_DECL has not yet been created, create it
793    now. RID indicates how it should be formatted and IDENTIFIER_NODE
794    ID is its name (unfortunately C and C++ hold the RID values of
795    keywords in different places, so we can't derive RID from ID in
796    this language independent code.  */
797
798 tree
799 fname_decl (unsigned int rid, tree id)
800 {
801   unsigned ix;
802   tree decl = NULL_TREE;
803
804   for (ix = 0; fname_vars[ix].decl; ix++)
805     if (fname_vars[ix].rid == rid)
806       break;
807
808   decl = *fname_vars[ix].decl;
809   if (!decl)
810     {
811       /* If a tree is built here, it would normally have the lineno of
812          the current statement.  Later this tree will be moved to the
813          beginning of the function and this line number will be wrong.
814          To avoid this problem set the lineno to 0 here; that prevents
815          it from appearing in the RTL.  */
816       tree stmts;
817       location_t saved_location = input_location;
818 #ifdef USE_MAPPED_LOCATION
819       input_location = UNKNOWN_LOCATION;
820 #else
821       input_line = 0;
822 #endif
823
824       stmts = push_stmt_list ();
825       decl = (*make_fname_decl) (id, fname_vars[ix].pretty);
826       stmts = pop_stmt_list (stmts);
827       if (!IS_EMPTY_STMT (stmts))
828         saved_function_name_decls
829           = tree_cons (decl, stmts, saved_function_name_decls);
830       *fname_vars[ix].decl = decl;
831       input_location = saved_location;
832     }
833   if (!ix && !current_function_decl)
834     pedwarn ("%qD is not defined outside of function scope", decl);
835
836   return decl;
837 }
838
839 /* Given a STRING_CST, give it a suitable array-of-chars data type.  */
840
841 tree
842 fix_string_type (tree value)
843 {
844   const int wchar_bytes = TYPE_PRECISION (wchar_type_node) / BITS_PER_UNIT;
845   const int wide_flag = TREE_TYPE (value) == wchar_array_type_node;
846   const int nchars_max = flag_isoc99 ? 4095 : 509;
847   int length = TREE_STRING_LENGTH (value);
848   int nchars;
849   tree e_type, i_type, a_type;
850
851   /* Compute the number of elements, for the array type.  */
852   nchars = wide_flag ? length / wchar_bytes : length;
853
854   if (pedantic && nchars - 1 > nchars_max && !c_dialect_cxx ())
855     pedwarn ("string length %qd is greater than the length %qd ISO C%d compilers are required to support",
856              nchars - 1, nchars_max, flag_isoc99 ? 99 : 89);
857
858   e_type = wide_flag ? wchar_type_node : char_type_node;
859   /* Create the array type for the string constant.  flag_const_strings
860      says make the string constant an array of const char so that
861      copying it to a non-const pointer will get a warning.  For C++,
862      this is the standard behavior.
863
864      The C++ front end relies on TYPE_MAIN_VARIANT of a cv-qualified
865      array type being the unqualified version of that type.
866      Therefore, if we are constructing an array of const char, we must
867      construct the matching unqualified array type first.  The C front
868      end does not require this, but it does no harm, so we do it
869      unconditionally.  */
870   i_type = build_index_type (build_int_cst (NULL_TREE, nchars - 1));
871   a_type = build_array_type (e_type, i_type);
872   if (flag_const_strings)
873     {
874       /* bleah, c_build_qualified_type should set TYPE_MAIN_VARIANT.  */
875       tree qa_type = c_build_qualified_type (a_type, TYPE_QUAL_CONST);
876       TYPE_MAIN_VARIANT (qa_type) = a_type;
877       a_type = qa_type;
878     }
879
880   TREE_TYPE (value) = a_type;
881   TREE_CONSTANT (value) = 1;
882   TREE_INVARIANT (value) = 1;
883   TREE_READONLY (value) = 1;
884   TREE_STATIC (value) = 1;
885   return value;
886 }
887 \f
888 /* Print a warning if a constant expression had overflow in folding.
889    Invoke this function on every expression that the language
890    requires to be a constant expression.
891    Note the ANSI C standard says it is erroneous for a
892    constant expression to overflow.  */
893
894 void
895 constant_expression_warning (tree value)
896 {
897   if ((TREE_CODE (value) == INTEGER_CST || TREE_CODE (value) == REAL_CST
898        || TREE_CODE (value) == VECTOR_CST
899        || TREE_CODE (value) == COMPLEX_CST)
900       && TREE_CONSTANT_OVERFLOW (value) && pedantic)
901     pedwarn ("overflow in constant expression");
902 }
903
904 /* Print a warning if an expression had overflow in folding.
905    Invoke this function on every expression that
906    (1) appears in the source code, and
907    (2) might be a constant expression that overflowed, and
908    (3) is not already checked by convert_and_check;
909    however, do not invoke this function on operands of explicit casts.  */
910
911 void
912 overflow_warning (tree value)
913 {
914   if ((TREE_CODE (value) == INTEGER_CST
915        || (TREE_CODE (value) == COMPLEX_CST
916            && TREE_CODE (TREE_REALPART (value)) == INTEGER_CST))
917       && TREE_OVERFLOW (value))
918     {
919       TREE_OVERFLOW (value) = 0;
920       if (skip_evaluation == 0)
921         warning ("integer overflow in expression");
922     }
923   else if ((TREE_CODE (value) == REAL_CST
924             || (TREE_CODE (value) == COMPLEX_CST
925                 && TREE_CODE (TREE_REALPART (value)) == REAL_CST))
926            && TREE_OVERFLOW (value))
927     {
928       TREE_OVERFLOW (value) = 0;
929       if (skip_evaluation == 0)
930         warning ("floating point overflow in expression");
931     }
932   else if (TREE_CODE (value) == VECTOR_CST && TREE_OVERFLOW (value))
933     {
934       TREE_OVERFLOW (value) = 0;
935       if (skip_evaluation == 0)
936         warning ("vector overflow in expression");
937     }
938 }
939
940 /* Print a warning if a large constant is truncated to unsigned,
941    or if -Wconversion is used and a constant < 0 is converted to unsigned.
942    Invoke this function on every expression that might be implicitly
943    converted to an unsigned type.  */
944
945 void
946 unsigned_conversion_warning (tree result, tree operand)
947 {
948   tree type = TREE_TYPE (result);
949
950   if (TREE_CODE (operand) == INTEGER_CST
951       && TREE_CODE (type) == INTEGER_TYPE
952       && TYPE_UNSIGNED (type)
953       && skip_evaluation == 0
954       && !int_fits_type_p (operand, type))
955     {
956       if (!int_fits_type_p (operand, c_common_signed_type (type)))
957         /* This detects cases like converting -129 or 256 to unsigned char.  */
958         warning ("large integer implicitly truncated to unsigned type");
959       else if (warn_conversion)
960         warning ("negative integer implicitly converted to unsigned type");
961     }
962 }
963
964 /* Nonzero if constant C has a value that is permissible
965    for type TYPE (an INTEGER_TYPE).  */
966
967 static int
968 constant_fits_type_p (tree c, tree type)
969 {
970   if (TREE_CODE (c) == INTEGER_CST)
971     return int_fits_type_p (c, type);
972
973   c = convert (type, c);
974   return !TREE_OVERFLOW (c);
975 }
976
977 /* Nonzero if vector types T1 and T2 can be converted to each other
978    without an explicit cast.  */
979 int
980 vector_types_convertible_p (tree t1, tree t2)
981 {
982   return targetm.vector_opaque_p (t1)
983          || targetm.vector_opaque_p (t2)
984          || (tree_int_cst_equal (TYPE_SIZE (t1), TYPE_SIZE (t2))
985              && INTEGRAL_TYPE_P (TREE_TYPE (t1))
986                 == INTEGRAL_TYPE_P (TREE_TYPE (t2)));
987 }
988
989 /* Convert EXPR to TYPE, warning about conversion problems with constants.
990    Invoke this function on every expression that is converted implicitly,
991    i.e. because of language rules and not because of an explicit cast.  */
992
993 tree
994 convert_and_check (tree type, tree expr)
995 {
996   tree t = convert (type, expr);
997   if (TREE_CODE (t) == INTEGER_CST)
998     {
999       if (TREE_OVERFLOW (t))
1000         {
1001           TREE_OVERFLOW (t) = 0;
1002
1003           /* Do not diagnose overflow in a constant expression merely
1004              because a conversion overflowed.  */
1005           TREE_CONSTANT_OVERFLOW (t) = TREE_CONSTANT_OVERFLOW (expr);
1006
1007           /* No warning for converting 0x80000000 to int.  */
1008           if (!(TYPE_UNSIGNED (type) < TYPE_UNSIGNED (TREE_TYPE (expr))
1009                 && TREE_CODE (TREE_TYPE (expr)) == INTEGER_TYPE
1010                 && TYPE_PRECISION (type) == TYPE_PRECISION (TREE_TYPE (expr))))
1011             /* If EXPR fits in the unsigned version of TYPE,
1012                don't warn unless pedantic.  */
1013             if ((pedantic
1014                  || TYPE_UNSIGNED (type)
1015                  || !constant_fits_type_p (expr,
1016                                            c_common_unsigned_type (type)))
1017                 && skip_evaluation == 0)
1018               warning ("overflow in implicit constant conversion");
1019         }
1020       else
1021         unsigned_conversion_warning (t, expr);
1022     }
1023   return t;
1024 }
1025 \f
1026 /* A node in a list that describes references to variables (EXPR), which are
1027    either read accesses if WRITER is zero, or write accesses, in which case
1028    WRITER is the parent of EXPR.  */
1029 struct tlist
1030 {
1031   struct tlist *next;
1032   tree expr, writer;
1033 };
1034
1035 /* Used to implement a cache the results of a call to verify_tree.  We only
1036    use this for SAVE_EXPRs.  */
1037 struct tlist_cache
1038 {
1039   struct tlist_cache *next;
1040   struct tlist *cache_before_sp;
1041   struct tlist *cache_after_sp;
1042   tree expr;
1043 };
1044
1045 /* Obstack to use when allocating tlist structures, and corresponding
1046    firstobj.  */
1047 static struct obstack tlist_obstack;
1048 static char *tlist_firstobj = 0;
1049
1050 /* Keep track of the identifiers we've warned about, so we can avoid duplicate
1051    warnings.  */
1052 static struct tlist *warned_ids;
1053 /* SAVE_EXPRs need special treatment.  We process them only once and then
1054    cache the results.  */
1055 static struct tlist_cache *save_expr_cache;
1056
1057 static void add_tlist (struct tlist **, struct tlist *, tree, int);
1058 static void merge_tlist (struct tlist **, struct tlist *, int);
1059 static void verify_tree (tree, struct tlist **, struct tlist **, tree);
1060 static int warning_candidate_p (tree);
1061 static void warn_for_collisions (struct tlist *);
1062 static void warn_for_collisions_1 (tree, tree, struct tlist *, int);
1063 static struct tlist *new_tlist (struct tlist *, tree, tree);
1064
1065 /* Create a new struct tlist and fill in its fields.  */
1066 static struct tlist *
1067 new_tlist (struct tlist *next, tree t, tree writer)
1068 {
1069   struct tlist *l;
1070   l = XOBNEW (&tlist_obstack, struct tlist);
1071   l->next = next;
1072   l->expr = t;
1073   l->writer = writer;
1074   return l;
1075 }
1076
1077 /* Add duplicates of the nodes found in ADD to the list *TO.  If EXCLUDE_WRITER
1078    is nonnull, we ignore any node we find which has a writer equal to it.  */
1079
1080 static void
1081 add_tlist (struct tlist **to, struct tlist *add, tree exclude_writer, int copy)
1082 {
1083   while (add)
1084     {
1085       struct tlist *next = add->next;
1086       if (!copy)
1087         add->next = *to;
1088       if (!exclude_writer || add->writer != exclude_writer)
1089         *to = copy ? new_tlist (*to, add->expr, add->writer) : add;
1090       add = next;
1091     }
1092 }
1093
1094 /* Merge the nodes of ADD into TO.  This merging process is done so that for
1095    each variable that already exists in TO, no new node is added; however if
1096    there is a write access recorded in ADD, and an occurrence on TO is only
1097    a read access, then the occurrence in TO will be modified to record the
1098    write.  */
1099
1100 static void
1101 merge_tlist (struct tlist **to, struct tlist *add, int copy)
1102 {
1103   struct tlist **end = to;
1104
1105   while (*end)
1106     end = &(*end)->next;
1107
1108   while (add)
1109     {
1110       int found = 0;
1111       struct tlist *tmp2;
1112       struct tlist *next = add->next;
1113
1114       for (tmp2 = *to; tmp2; tmp2 = tmp2->next)
1115         if (tmp2->expr == add->expr)
1116           {
1117             found = 1;
1118             if (!tmp2->writer)
1119               tmp2->writer = add->writer;
1120           }
1121       if (!found)
1122         {
1123           *end = copy ? add : new_tlist (NULL, add->expr, add->writer);
1124           end = &(*end)->next;
1125           *end = 0;
1126         }
1127       add = next;
1128     }
1129 }
1130
1131 /* WRITTEN is a variable, WRITER is its parent.  Warn if any of the variable
1132    references in list LIST conflict with it, excluding reads if ONLY writers
1133    is nonzero.  */
1134
1135 static void
1136 warn_for_collisions_1 (tree written, tree writer, struct tlist *list,
1137                        int only_writes)
1138 {
1139   struct tlist *tmp;
1140
1141   /* Avoid duplicate warnings.  */
1142   for (tmp = warned_ids; tmp; tmp = tmp->next)
1143     if (tmp->expr == written)
1144       return;
1145
1146   while (list)
1147     {
1148       if (list->expr == written
1149           && list->writer != writer
1150           && (!only_writes || list->writer)
1151           && DECL_NAME (list->expr))
1152         {
1153           warned_ids = new_tlist (warned_ids, written, NULL_TREE);
1154           warning ("operation on %qs may be undefined",
1155                    IDENTIFIER_POINTER (DECL_NAME (list->expr)));
1156         }
1157       list = list->next;
1158     }
1159 }
1160
1161 /* Given a list LIST of references to variables, find whether any of these
1162    can cause conflicts due to missing sequence points.  */
1163
1164 static void
1165 warn_for_collisions (struct tlist *list)
1166 {
1167   struct tlist *tmp;
1168
1169   for (tmp = list; tmp; tmp = tmp->next)
1170     {
1171       if (tmp->writer)
1172         warn_for_collisions_1 (tmp->expr, tmp->writer, list, 0);
1173     }
1174 }
1175
1176 /* Return nonzero if X is a tree that can be verified by the sequence point
1177    warnings.  */
1178 static int
1179 warning_candidate_p (tree x)
1180 {
1181   return TREE_CODE (x) == VAR_DECL || TREE_CODE (x) == PARM_DECL;
1182 }
1183
1184 /* Walk the tree X, and record accesses to variables.  If X is written by the
1185    parent tree, WRITER is the parent.
1186    We store accesses in one of the two lists: PBEFORE_SP, and PNO_SP.  If this
1187    expression or its only operand forces a sequence point, then everything up
1188    to the sequence point is stored in PBEFORE_SP.  Everything else gets stored
1189    in PNO_SP.
1190    Once we return, we will have emitted warnings if any subexpression before
1191    such a sequence point could be undefined.  On a higher level, however, the
1192    sequence point may not be relevant, and we'll merge the two lists.
1193
1194    Example: (b++, a) + b;
1195    The call that processes the COMPOUND_EXPR will store the increment of B
1196    in PBEFORE_SP, and the use of A in PNO_SP.  The higher-level call that
1197    processes the PLUS_EXPR will need to merge the two lists so that
1198    eventually, all accesses end up on the same list (and we'll warn about the
1199    unordered subexpressions b++ and b.
1200
1201    A note on merging.  If we modify the former example so that our expression
1202    becomes
1203      (b++, b) + a
1204    care must be taken not simply to add all three expressions into the final
1205    PNO_SP list.  The function merge_tlist takes care of that by merging the
1206    before-SP list of the COMPOUND_EXPR into its after-SP list in a special
1207    way, so that no more than one access to B is recorded.  */
1208
1209 static void
1210 verify_tree (tree x, struct tlist **pbefore_sp, struct tlist **pno_sp,
1211              tree writer)
1212 {
1213   struct tlist *tmp_before, *tmp_nosp, *tmp_list2, *tmp_list3;
1214   enum tree_code code;
1215   enum tree_code_class cl;
1216
1217   /* X may be NULL if it is the operand of an empty statement expression
1218      ({ }).  */
1219   if (x == NULL)
1220     return;
1221
1222  restart:
1223   code = TREE_CODE (x);
1224   cl = TREE_CODE_CLASS (code);
1225
1226   if (warning_candidate_p (x))
1227     {
1228       *pno_sp = new_tlist (*pno_sp, x, writer);
1229       return;
1230     }
1231
1232   switch (code)
1233     {
1234     case CONSTRUCTOR:
1235       return;
1236
1237     case COMPOUND_EXPR:
1238     case TRUTH_ANDIF_EXPR:
1239     case TRUTH_ORIF_EXPR:
1240       tmp_before = tmp_nosp = tmp_list3 = 0;
1241       verify_tree (TREE_OPERAND (x, 0), &tmp_before, &tmp_nosp, NULL_TREE);
1242       warn_for_collisions (tmp_nosp);
1243       merge_tlist (pbefore_sp, tmp_before, 0);
1244       merge_tlist (pbefore_sp, tmp_nosp, 0);
1245       verify_tree (TREE_OPERAND (x, 1), &tmp_list3, pno_sp, NULL_TREE);
1246       merge_tlist (pbefore_sp, tmp_list3, 0);
1247       return;
1248
1249     case COND_EXPR:
1250       tmp_before = tmp_list2 = 0;
1251       verify_tree (TREE_OPERAND (x, 0), &tmp_before, &tmp_list2, NULL_TREE);
1252       warn_for_collisions (tmp_list2);
1253       merge_tlist (pbefore_sp, tmp_before, 0);
1254       merge_tlist (pbefore_sp, tmp_list2, 1);
1255
1256       tmp_list3 = tmp_nosp = 0;
1257       verify_tree (TREE_OPERAND (x, 1), &tmp_list3, &tmp_nosp, NULL_TREE);
1258       warn_for_collisions (tmp_nosp);
1259       merge_tlist (pbefore_sp, tmp_list3, 0);
1260
1261       tmp_list3 = tmp_list2 = 0;
1262       verify_tree (TREE_OPERAND (x, 2), &tmp_list3, &tmp_list2, NULL_TREE);
1263       warn_for_collisions (tmp_list2);
1264       merge_tlist (pbefore_sp, tmp_list3, 0);
1265       /* Rather than add both tmp_nosp and tmp_list2, we have to merge the
1266          two first, to avoid warning for (a ? b++ : b++).  */
1267       merge_tlist (&tmp_nosp, tmp_list2, 0);
1268       add_tlist (pno_sp, tmp_nosp, NULL_TREE, 0);
1269       return;
1270
1271     case PREDECREMENT_EXPR:
1272     case PREINCREMENT_EXPR:
1273     case POSTDECREMENT_EXPR:
1274     case POSTINCREMENT_EXPR:
1275       verify_tree (TREE_OPERAND (x, 0), pno_sp, pno_sp, x);
1276       return;
1277
1278     case MODIFY_EXPR:
1279       tmp_before = tmp_nosp = tmp_list3 = 0;
1280       verify_tree (TREE_OPERAND (x, 1), &tmp_before, &tmp_nosp, NULL_TREE);
1281       verify_tree (TREE_OPERAND (x, 0), &tmp_list3, &tmp_list3, x);
1282       /* Expressions inside the LHS are not ordered wrt. the sequence points
1283          in the RHS.  Example:
1284            *a = (a++, 2)
1285          Despite the fact that the modification of "a" is in the before_sp
1286          list (tmp_before), it conflicts with the use of "a" in the LHS.
1287          We can handle this by adding the contents of tmp_list3
1288          to those of tmp_before, and redoing the collision warnings for that
1289          list.  */
1290       add_tlist (&tmp_before, tmp_list3, x, 1);
1291       warn_for_collisions (tmp_before);
1292       /* Exclude the LHS itself here; we first have to merge it into the
1293          tmp_nosp list.  This is done to avoid warning for "a = a"; if we
1294          didn't exclude the LHS, we'd get it twice, once as a read and once
1295          as a write.  */
1296       add_tlist (pno_sp, tmp_list3, x, 0);
1297       warn_for_collisions_1 (TREE_OPERAND (x, 0), x, tmp_nosp, 1);
1298
1299       merge_tlist (pbefore_sp, tmp_before, 0);
1300       if (warning_candidate_p (TREE_OPERAND (x, 0)))
1301         merge_tlist (&tmp_nosp, new_tlist (NULL, TREE_OPERAND (x, 0), x), 0);
1302       add_tlist (pno_sp, tmp_nosp, NULL_TREE, 1);
1303       return;
1304
1305     case CALL_EXPR:
1306       /* We need to warn about conflicts among arguments and conflicts between
1307          args and the function address.  Side effects of the function address,
1308          however, are not ordered by the sequence point of the call.  */
1309       tmp_before = tmp_nosp = tmp_list2 = tmp_list3 = 0;
1310       verify_tree (TREE_OPERAND (x, 0), &tmp_before, &tmp_nosp, NULL_TREE);
1311       if (TREE_OPERAND (x, 1))
1312         verify_tree (TREE_OPERAND (x, 1), &tmp_list2, &tmp_list3, NULL_TREE);
1313       merge_tlist (&tmp_list3, tmp_list2, 0);
1314       add_tlist (&tmp_before, tmp_list3, NULL_TREE, 0);
1315       add_tlist (&tmp_before, tmp_nosp, NULL_TREE, 0);
1316       warn_for_collisions (tmp_before);
1317       add_tlist (pbefore_sp, tmp_before, NULL_TREE, 0);
1318       return;
1319
1320     case TREE_LIST:
1321       /* Scan all the list, e.g. indices of multi dimensional array.  */
1322       while (x)
1323         {
1324           tmp_before = tmp_nosp = 0;
1325           verify_tree (TREE_VALUE (x), &tmp_before, &tmp_nosp, NULL_TREE);
1326           merge_tlist (&tmp_nosp, tmp_before, 0);
1327           add_tlist (pno_sp, tmp_nosp, NULL_TREE, 0);
1328           x = TREE_CHAIN (x);
1329         }
1330       return;
1331
1332     case SAVE_EXPR:
1333       {
1334         struct tlist_cache *t;
1335         for (t = save_expr_cache; t; t = t->next)
1336           if (t->expr == x)
1337             break;
1338
1339         if (!t)
1340           {
1341             t = XOBNEW (&tlist_obstack, struct tlist_cache);
1342             t->next = save_expr_cache;
1343             t->expr = x;
1344             save_expr_cache = t;
1345
1346             tmp_before = tmp_nosp = 0;
1347             verify_tree (TREE_OPERAND (x, 0), &tmp_before, &tmp_nosp, NULL_TREE);
1348             warn_for_collisions (tmp_nosp);
1349
1350             tmp_list3 = 0;
1351             while (tmp_nosp)
1352               {
1353                 struct tlist *t = tmp_nosp;
1354                 tmp_nosp = t->next;
1355                 merge_tlist (&tmp_list3, t, 0);
1356               }
1357             t->cache_before_sp = tmp_before;
1358             t->cache_after_sp = tmp_list3;
1359           }
1360         merge_tlist (pbefore_sp, t->cache_before_sp, 1);
1361         add_tlist (pno_sp, t->cache_after_sp, NULL_TREE, 1);
1362         return;
1363       }
1364
1365     default:
1366       /* For other expressions, simply recurse on their operands.
1367          Manual tail recursion for unary expressions.
1368          Other non-expressions need not be processed.  */
1369       if (cl == tcc_unary)
1370         {
1371           x = TREE_OPERAND (x, 0);
1372           writer = 0;
1373           goto restart;
1374         }
1375       else if (IS_EXPR_CODE_CLASS (cl))
1376         {
1377           int lp;
1378           int max = TREE_CODE_LENGTH (TREE_CODE (x));
1379           for (lp = 0; lp < max; lp++)
1380             {
1381               tmp_before = tmp_nosp = 0;
1382               verify_tree (TREE_OPERAND (x, lp), &tmp_before, &tmp_nosp, 0);
1383               merge_tlist (&tmp_nosp, tmp_before, 0);
1384               add_tlist (pno_sp, tmp_nosp, NULL_TREE, 0);
1385             }
1386         }
1387       return;
1388     }
1389 }
1390
1391 /* Try to warn for undefined behavior in EXPR due to missing sequence
1392    points.  */
1393
1394 void
1395 verify_sequence_points (tree expr)
1396 {
1397   struct tlist *before_sp = 0, *after_sp = 0;
1398
1399   warned_ids = 0;
1400   save_expr_cache = 0;
1401   if (tlist_firstobj == 0)
1402     {
1403       gcc_obstack_init (&tlist_obstack);
1404       tlist_firstobj = (char *) obstack_alloc (&tlist_obstack, 0);
1405     }
1406
1407   verify_tree (expr, &before_sp, &after_sp, 0);
1408   warn_for_collisions (after_sp);
1409   obstack_free (&tlist_obstack, tlist_firstobj);
1410 }
1411 \f
1412 /* Validate the expression after `case' and apply default promotions.  */
1413
1414 static tree
1415 check_case_value (tree value)
1416 {
1417   if (value == NULL_TREE)
1418     return value;
1419
1420   /* Strip NON_LVALUE_EXPRs since we aren't using as an lvalue.  */
1421   STRIP_TYPE_NOPS (value);
1422   /* In C++, the following is allowed:
1423
1424        const int i = 3;
1425        switch (...) { case i: ... }
1426
1427      So, we try to reduce the VALUE to a constant that way.  */
1428   if (c_dialect_cxx ())
1429     {
1430       value = decl_constant_value (value);
1431       STRIP_TYPE_NOPS (value);
1432       value = fold (value);
1433     }
1434
1435   if (TREE_CODE (value) != INTEGER_CST
1436       && value != error_mark_node)
1437     {
1438       error ("case label does not reduce to an integer constant");
1439       value = error_mark_node;
1440     }
1441   else
1442     /* Promote char or short to int.  */
1443     value = default_conversion (value);
1444
1445   constant_expression_warning (value);
1446
1447   return value;
1448 }
1449 \f
1450 /* See if the case values LOW and HIGH are in the range of the original
1451    type (i.e. before the default conversion to int) of the switch testing
1452    expression.
1453    TYPE is the promoted type of the testing expression, and ORIG_TYPE is
1454    the type before promoting it.  CASE_LOW_P is a pointer to the lower
1455    bound of the case label, and CASE_HIGH_P is the upper bound or NULL
1456    if the case is not a case range.
1457    The caller has to make sure that we are not called with NULL for
1458    CASE_LOW_P (i.e. the default case).
1459    Returns true if the case label is in range of ORIG_TYPE (satured or
1460    untouched) or false if the label is out of range.  */
1461
1462 static bool
1463 check_case_bounds (tree type, tree orig_type,
1464                    tree *case_low_p, tree *case_high_p)
1465 {
1466   tree min_value, max_value;
1467   tree case_low = *case_low_p;
1468   tree case_high = case_high_p ? *case_high_p : case_low;
1469
1470   /* If there was a problem with the original type, do nothing.  */
1471   if (orig_type == error_mark_node)
1472     return true;
1473
1474   min_value = TYPE_MIN_VALUE (orig_type);
1475   max_value = TYPE_MAX_VALUE (orig_type);
1476
1477   /* Case label is less than minimum for type.  */
1478   if (tree_int_cst_compare (case_low, min_value) < 0
1479       && tree_int_cst_compare (case_high, min_value) < 0)
1480     {
1481       warning ("case label value is less than minimum value for type");
1482       return false;
1483     }
1484
1485   /* Case value is greater than maximum for type.  */
1486   if (tree_int_cst_compare (case_low, max_value) > 0
1487       && tree_int_cst_compare (case_high, max_value) > 0)
1488     {
1489       warning ("case label value exceeds maximum value for type");
1490       return false;
1491     }
1492
1493   /* Saturate lower case label value to minimum.  */
1494   if (tree_int_cst_compare (case_high, min_value) >= 0
1495       && tree_int_cst_compare (case_low, min_value) < 0)
1496     {
1497       warning ("lower value in case label range"
1498                " less than minimum value for type");
1499       case_low = min_value;
1500     }
1501
1502   /* Saturate upper case label value to maximum.  */
1503   if (tree_int_cst_compare (case_low, max_value) <= 0
1504       && tree_int_cst_compare (case_high, max_value) > 0)
1505     {
1506       warning ("upper value in case label range"
1507                " exceeds maximum value for type");
1508       case_high = max_value;
1509     }
1510
1511   if (*case_low_p != case_low)
1512     *case_low_p = convert (type, case_low);
1513   if (case_high_p && *case_high_p != case_high)
1514     *case_high_p = convert (type, case_high);
1515
1516   return true;
1517 }
1518 \f
1519 /* Return an integer type with BITS bits of precision,
1520    that is unsigned if UNSIGNEDP is nonzero, otherwise signed.  */
1521
1522 tree
1523 c_common_type_for_size (unsigned int bits, int unsignedp)
1524 {
1525   if (bits == TYPE_PRECISION (integer_type_node))
1526     return unsignedp ? unsigned_type_node : integer_type_node;
1527
1528   if (bits == TYPE_PRECISION (signed_char_type_node))
1529     return unsignedp ? unsigned_char_type_node : signed_char_type_node;
1530
1531   if (bits == TYPE_PRECISION (short_integer_type_node))
1532     return unsignedp ? short_unsigned_type_node : short_integer_type_node;
1533
1534   if (bits == TYPE_PRECISION (long_integer_type_node))
1535     return unsignedp ? long_unsigned_type_node : long_integer_type_node;
1536
1537   if (bits == TYPE_PRECISION (long_long_integer_type_node))
1538     return (unsignedp ? long_long_unsigned_type_node
1539             : long_long_integer_type_node);
1540
1541   if (bits == TYPE_PRECISION (widest_integer_literal_type_node))
1542     return (unsignedp ? widest_unsigned_literal_type_node
1543             : widest_integer_literal_type_node);
1544
1545   if (bits <= TYPE_PRECISION (intQI_type_node))
1546     return unsignedp ? unsigned_intQI_type_node : intQI_type_node;
1547
1548   if (bits <= TYPE_PRECISION (intHI_type_node))
1549     return unsignedp ? unsigned_intHI_type_node : intHI_type_node;
1550
1551   if (bits <= TYPE_PRECISION (intSI_type_node))
1552     return unsignedp ? unsigned_intSI_type_node : intSI_type_node;
1553
1554   if (bits <= TYPE_PRECISION (intDI_type_node))
1555     return unsignedp ? unsigned_intDI_type_node : intDI_type_node;
1556
1557   return 0;
1558 }
1559
1560 /* Used for communication between c_common_type_for_mode and
1561    c_register_builtin_type.  */
1562 static GTY(()) tree registered_builtin_types;
1563
1564 /* Return a data type that has machine mode MODE.
1565    If the mode is an integer,
1566    then UNSIGNEDP selects between signed and unsigned types.  */
1567
1568 tree
1569 c_common_type_for_mode (enum machine_mode mode, int unsignedp)
1570 {
1571   tree t;
1572
1573   if (mode == TYPE_MODE (integer_type_node))
1574     return unsignedp ? unsigned_type_node : integer_type_node;
1575
1576   if (mode == TYPE_MODE (signed_char_type_node))
1577     return unsignedp ? unsigned_char_type_node : signed_char_type_node;
1578
1579   if (mode == TYPE_MODE (short_integer_type_node))
1580     return unsignedp ? short_unsigned_type_node : short_integer_type_node;
1581
1582   if (mode == TYPE_MODE (long_integer_type_node))
1583     return unsignedp ? long_unsigned_type_node : long_integer_type_node;
1584
1585   if (mode == TYPE_MODE (long_long_integer_type_node))
1586     return unsignedp ? long_long_unsigned_type_node : long_long_integer_type_node;
1587
1588   if (mode == TYPE_MODE (widest_integer_literal_type_node))
1589     return unsignedp ? widest_unsigned_literal_type_node
1590                      : widest_integer_literal_type_node;
1591
1592   if (mode == QImode)
1593     return unsignedp ? unsigned_intQI_type_node : intQI_type_node;
1594
1595   if (mode == HImode)
1596     return unsignedp ? unsigned_intHI_type_node : intHI_type_node;
1597
1598   if (mode == SImode)
1599     return unsignedp ? unsigned_intSI_type_node : intSI_type_node;
1600
1601   if (mode == DImode)
1602     return unsignedp ? unsigned_intDI_type_node : intDI_type_node;
1603
1604 #if HOST_BITS_PER_WIDE_INT >= 64
1605   if (mode == TYPE_MODE (intTI_type_node))
1606     return unsignedp ? unsigned_intTI_type_node : intTI_type_node;
1607 #endif
1608
1609   if (mode == TYPE_MODE (float_type_node))
1610     return float_type_node;
1611
1612   if (mode == TYPE_MODE (double_type_node))
1613     return double_type_node;
1614
1615   if (mode == TYPE_MODE (long_double_type_node))
1616     return long_double_type_node;
1617
1618   if (mode == TYPE_MODE (void_type_node))
1619     return void_type_node;
1620
1621   if (mode == TYPE_MODE (build_pointer_type (char_type_node)))
1622     return unsignedp ? make_unsigned_type (mode) : make_signed_type (mode);
1623
1624   if (mode == TYPE_MODE (build_pointer_type (integer_type_node)))
1625     return unsignedp ? make_unsigned_type (mode) : make_signed_type (mode);
1626
1627   if (VECTOR_MODE_P (mode))
1628     {
1629       enum machine_mode inner_mode = GET_MODE_INNER (mode);
1630       tree inner_type = c_common_type_for_mode (inner_mode, unsignedp);
1631       if (inner_type != NULL_TREE)
1632         return build_vector_type_for_mode (inner_type, mode);
1633     }
1634
1635   for (t = registered_builtin_types; t; t = TREE_CHAIN (t))
1636     if (TYPE_MODE (TREE_VALUE (t)) == mode)
1637       return TREE_VALUE (t);
1638
1639   return 0;
1640 }
1641
1642 /* Return an unsigned type the same as TYPE in other respects.  */
1643 tree
1644 c_common_unsigned_type (tree type)
1645 {
1646   tree type1 = TYPE_MAIN_VARIANT (type);
1647   if (type1 == signed_char_type_node || type1 == char_type_node)
1648     return unsigned_char_type_node;
1649   if (type1 == integer_type_node)
1650     return unsigned_type_node;
1651   if (type1 == short_integer_type_node)
1652     return short_unsigned_type_node;
1653   if (type1 == long_integer_type_node)
1654     return long_unsigned_type_node;
1655   if (type1 == long_long_integer_type_node)
1656     return long_long_unsigned_type_node;
1657   if (type1 == widest_integer_literal_type_node)
1658     return widest_unsigned_literal_type_node;
1659 #if HOST_BITS_PER_WIDE_INT >= 64
1660   if (type1 == intTI_type_node)
1661     return unsigned_intTI_type_node;
1662 #endif
1663   if (type1 == intDI_type_node)
1664     return unsigned_intDI_type_node;
1665   if (type1 == intSI_type_node)
1666     return unsigned_intSI_type_node;
1667   if (type1 == intHI_type_node)
1668     return unsigned_intHI_type_node;
1669   if (type1 == intQI_type_node)
1670     return unsigned_intQI_type_node;
1671
1672   return c_common_signed_or_unsigned_type (1, type);
1673 }
1674
1675 /* Return a signed type the same as TYPE in other respects.  */
1676
1677 tree
1678 c_common_signed_type (tree type)
1679 {
1680   tree type1 = TYPE_MAIN_VARIANT (type);
1681   if (type1 == unsigned_char_type_node || type1 == char_type_node)
1682     return signed_char_type_node;
1683   if (type1 == unsigned_type_node)
1684     return integer_type_node;
1685   if (type1 == short_unsigned_type_node)
1686     return short_integer_type_node;
1687   if (type1 == long_unsigned_type_node)
1688     return long_integer_type_node;
1689   if (type1 == long_long_unsigned_type_node)
1690     return long_long_integer_type_node;
1691   if (type1 == widest_unsigned_literal_type_node)
1692     return widest_integer_literal_type_node;
1693 #if HOST_BITS_PER_WIDE_INT >= 64
1694   if (type1 == unsigned_intTI_type_node)
1695     return intTI_type_node;
1696 #endif
1697   if (type1 == unsigned_intDI_type_node)
1698     return intDI_type_node;
1699   if (type1 == unsigned_intSI_type_node)
1700     return intSI_type_node;
1701   if (type1 == unsigned_intHI_type_node)
1702     return intHI_type_node;
1703   if (type1 == unsigned_intQI_type_node)
1704     return intQI_type_node;
1705
1706   return c_common_signed_or_unsigned_type (0, type);
1707 }
1708
1709 /* Return a type the same as TYPE except unsigned or
1710    signed according to UNSIGNEDP.  */
1711
1712 tree
1713 c_common_signed_or_unsigned_type (int unsignedp, tree type)
1714 {
1715   if (!INTEGRAL_TYPE_P (type)
1716       || TYPE_UNSIGNED (type) == unsignedp)
1717     return type;
1718
1719   /* For ENUMERAL_TYPEs in C++, must check the mode of the types, not
1720      the precision; they have precision set to match their range, but
1721      may use a wider mode to match an ABI.  If we change modes, we may
1722      wind up with bad conversions.  For INTEGER_TYPEs in C, must check
1723      the precision as well, so as to yield correct results for
1724      bit-field types.  C++ does not have these separate bit-field
1725      types, and producing a signed or unsigned variant of an
1726      ENUMERAL_TYPE may cause other problems as well.  */
1727
1728 #define TYPE_OK(node)                                                       \
1729   (TYPE_MODE (type) == TYPE_MODE (node)                                     \
1730    && (c_dialect_cxx () || TYPE_PRECISION (type) == TYPE_PRECISION (node)))
1731   if (TYPE_OK (signed_char_type_node))
1732     return unsignedp ? unsigned_char_type_node : signed_char_type_node;
1733   if (TYPE_OK (integer_type_node))
1734     return unsignedp ? unsigned_type_node : integer_type_node;
1735   if (TYPE_OK (short_integer_type_node))
1736     return unsignedp ? short_unsigned_type_node : short_integer_type_node;
1737   if (TYPE_OK (long_integer_type_node))
1738     return unsignedp ? long_unsigned_type_node : long_integer_type_node;
1739   if (TYPE_OK (long_long_integer_type_node))
1740     return (unsignedp ? long_long_unsigned_type_node
1741             : long_long_integer_type_node);
1742   if (TYPE_OK (widest_integer_literal_type_node))
1743     return (unsignedp ? widest_unsigned_literal_type_node
1744             : widest_integer_literal_type_node);
1745
1746 #if HOST_BITS_PER_WIDE_INT >= 64
1747   if (TYPE_OK (intTI_type_node))
1748     return unsignedp ? unsigned_intTI_type_node : intTI_type_node;
1749 #endif
1750   if (TYPE_OK (intDI_type_node))
1751     return unsignedp ? unsigned_intDI_type_node : intDI_type_node;
1752   if (TYPE_OK (intSI_type_node))
1753     return unsignedp ? unsigned_intSI_type_node : intSI_type_node;
1754   if (TYPE_OK (intHI_type_node))
1755     return unsignedp ? unsigned_intHI_type_node : intHI_type_node;
1756   if (TYPE_OK (intQI_type_node))
1757     return unsignedp ? unsigned_intQI_type_node : intQI_type_node;
1758 #undef TYPE_OK
1759
1760   if (c_dialect_cxx ())
1761     return type;
1762   else
1763     return build_nonstandard_integer_type (TYPE_PRECISION (type), unsignedp);
1764 }
1765
1766 /* The C version of the register_builtin_type langhook.  */
1767
1768 void
1769 c_register_builtin_type (tree type, const char* name)
1770 {
1771   tree decl;
1772
1773   decl = build_decl (TYPE_DECL, get_identifier (name), type);
1774   DECL_ARTIFICIAL (decl) = 1;
1775   if (!TYPE_NAME (type))
1776     TYPE_NAME (type) = decl;
1777   pushdecl (decl);
1778
1779   registered_builtin_types = tree_cons (0, type, registered_builtin_types);
1780 }
1781
1782 \f
1783 /* Return the minimum number of bits needed to represent VALUE in a
1784    signed or unsigned type, UNSIGNEDP says which.  */
1785
1786 unsigned int
1787 min_precision (tree value, int unsignedp)
1788 {
1789   int log;
1790
1791   /* If the value is negative, compute its negative minus 1.  The latter
1792      adjustment is because the absolute value of the largest negative value
1793      is one larger than the largest positive value.  This is equivalent to
1794      a bit-wise negation, so use that operation instead.  */
1795
1796   if (tree_int_cst_sgn (value) < 0)
1797     value = fold (build1 (BIT_NOT_EXPR, TREE_TYPE (value), value));
1798
1799   /* Return the number of bits needed, taking into account the fact
1800      that we need one more bit for a signed than unsigned type.  */
1801
1802   if (integer_zerop (value))
1803     log = 0;
1804   else
1805     log = tree_floor_log2 (value);
1806
1807   return log + 1 + !unsignedp;
1808 }
1809 \f
1810 /* Print an error message for invalid operands to arith operation
1811    CODE.  NOP_EXPR is used as a special case (see
1812    c_common_truthvalue_conversion).  */
1813
1814 void
1815 binary_op_error (enum tree_code code)
1816 {
1817   const char *opname;
1818
1819   switch (code)
1820     {
1821     case NOP_EXPR:
1822       error ("invalid truth-value expression");
1823       return;
1824
1825     case PLUS_EXPR:
1826       opname = "+"; break;
1827     case MINUS_EXPR:
1828       opname = "-"; break;
1829     case MULT_EXPR:
1830       opname = "*"; break;
1831     case MAX_EXPR:
1832       opname = "max"; break;
1833     case MIN_EXPR:
1834       opname = "min"; break;
1835     case EQ_EXPR:
1836       opname = "=="; break;
1837     case NE_EXPR:
1838       opname = "!="; break;
1839     case LE_EXPR:
1840       opname = "<="; break;
1841     case GE_EXPR:
1842       opname = ">="; break;
1843     case LT_EXPR:
1844       opname = "<"; break;
1845     case GT_EXPR:
1846       opname = ">"; break;
1847     case LSHIFT_EXPR:
1848       opname = "<<"; break;
1849     case RSHIFT_EXPR:
1850       opname = ">>"; break;
1851     case TRUNC_MOD_EXPR:
1852     case FLOOR_MOD_EXPR:
1853       opname = "%"; break;
1854     case TRUNC_DIV_EXPR:
1855     case FLOOR_DIV_EXPR:
1856       opname = "/"; break;
1857     case BIT_AND_EXPR:
1858       opname = "&"; break;
1859     case BIT_IOR_EXPR:
1860       opname = "|"; break;
1861     case TRUTH_ANDIF_EXPR:
1862       opname = "&&"; break;
1863     case TRUTH_ORIF_EXPR:
1864       opname = "||"; break;
1865     case BIT_XOR_EXPR:
1866       opname = "^"; break;
1867     default:
1868       gcc_unreachable ();
1869     }
1870   error ("invalid operands to binary %s", opname);
1871 }
1872 \f
1873 /* Subroutine of build_binary_op, used for comparison operations.
1874    See if the operands have both been converted from subword integer types
1875    and, if so, perhaps change them both back to their original type.
1876    This function is also responsible for converting the two operands
1877    to the proper common type for comparison.
1878
1879    The arguments of this function are all pointers to local variables
1880    of build_binary_op: OP0_PTR is &OP0, OP1_PTR is &OP1,
1881    RESTYPE_PTR is &RESULT_TYPE and RESCODE_PTR is &RESULTCODE.
1882
1883    If this function returns nonzero, it means that the comparison has
1884    a constant value.  What this function returns is an expression for
1885    that value.  */
1886
1887 tree
1888 shorten_compare (tree *op0_ptr, tree *op1_ptr, tree *restype_ptr,
1889                  enum tree_code *rescode_ptr)
1890 {
1891   tree type;
1892   tree op0 = *op0_ptr;
1893   tree op1 = *op1_ptr;
1894   int unsignedp0, unsignedp1;
1895   int real1, real2;
1896   tree primop0, primop1;
1897   enum tree_code code = *rescode_ptr;
1898
1899   /* Throw away any conversions to wider types
1900      already present in the operands.  */
1901
1902   primop0 = get_narrower (op0, &unsignedp0);
1903   primop1 = get_narrower (op1, &unsignedp1);
1904
1905   /* Handle the case that OP0 does not *contain* a conversion
1906      but it *requires* conversion to FINAL_TYPE.  */
1907
1908   if (op0 == primop0 && TREE_TYPE (op0) != *restype_ptr)
1909     unsignedp0 = TYPE_UNSIGNED (TREE_TYPE (op0));
1910   if (op1 == primop1 && TREE_TYPE (op1) != *restype_ptr)
1911     unsignedp1 = TYPE_UNSIGNED (TREE_TYPE (op1));
1912
1913   /* If one of the operands must be floated, we cannot optimize.  */
1914   real1 = TREE_CODE (TREE_TYPE (primop0)) == REAL_TYPE;
1915   real2 = TREE_CODE (TREE_TYPE (primop1)) == REAL_TYPE;
1916
1917   /* If first arg is constant, swap the args (changing operation
1918      so value is preserved), for canonicalization.  Don't do this if
1919      the second arg is 0.  */
1920
1921   if (TREE_CONSTANT (primop0)
1922       && !integer_zerop (primop1) && !real_zerop (primop1))
1923     {
1924       tree tem = primop0;
1925       int temi = unsignedp0;
1926       primop0 = primop1;
1927       primop1 = tem;
1928       tem = op0;
1929       op0 = op1;
1930       op1 = tem;
1931       *op0_ptr = op0;
1932       *op1_ptr = op1;
1933       unsignedp0 = unsignedp1;
1934       unsignedp1 = temi;
1935       temi = real1;
1936       real1 = real2;
1937       real2 = temi;
1938
1939       switch (code)
1940         {
1941         case LT_EXPR:
1942           code = GT_EXPR;
1943           break;
1944         case GT_EXPR:
1945           code = LT_EXPR;
1946           break;
1947         case LE_EXPR:
1948           code = GE_EXPR;
1949           break;
1950         case GE_EXPR:
1951           code = LE_EXPR;
1952           break;
1953         default:
1954           break;
1955         }
1956       *rescode_ptr = code;
1957     }
1958
1959   /* If comparing an integer against a constant more bits wide,
1960      maybe we can deduce a value of 1 or 0 independent of the data.
1961      Or else truncate the constant now
1962      rather than extend the variable at run time.
1963
1964      This is only interesting if the constant is the wider arg.
1965      Also, it is not safe if the constant is unsigned and the
1966      variable arg is signed, since in this case the variable
1967      would be sign-extended and then regarded as unsigned.
1968      Our technique fails in this case because the lowest/highest
1969      possible unsigned results don't follow naturally from the
1970      lowest/highest possible values of the variable operand.
1971      For just EQ_EXPR and NE_EXPR there is another technique that
1972      could be used: see if the constant can be faithfully represented
1973      in the other operand's type, by truncating it and reextending it
1974      and see if that preserves the constant's value.  */
1975
1976   if (!real1 && !real2
1977       && TREE_CODE (primop1) == INTEGER_CST
1978       && TYPE_PRECISION (TREE_TYPE (primop0)) < TYPE_PRECISION (*restype_ptr))
1979     {
1980       int min_gt, max_gt, min_lt, max_lt;
1981       tree maxval, minval;
1982       /* 1 if comparison is nominally unsigned.  */
1983       int unsignedp = TYPE_UNSIGNED (*restype_ptr);
1984       tree val;
1985
1986       type = c_common_signed_or_unsigned_type (unsignedp0,
1987                                                TREE_TYPE (primop0));
1988
1989       maxval = TYPE_MAX_VALUE (type);
1990       minval = TYPE_MIN_VALUE (type);
1991
1992       if (unsignedp && !unsignedp0)
1993         *restype_ptr = c_common_signed_type (*restype_ptr);
1994
1995       if (TREE_TYPE (primop1) != *restype_ptr)
1996         {
1997           /* Convert primop1 to target type, but do not introduce
1998              additional overflow.  We know primop1 is an int_cst.  */
1999           tree tmp = build_int_cst_wide (*restype_ptr,
2000                                          TREE_INT_CST_LOW (primop1),
2001                                          TREE_INT_CST_HIGH (primop1));
2002
2003           primop1 = force_fit_type (tmp, 0, TREE_OVERFLOW (primop1),
2004                                     TREE_CONSTANT_OVERFLOW (primop1));
2005         }
2006       if (type != *restype_ptr)
2007         {
2008           minval = convert (*restype_ptr, minval);
2009           maxval = convert (*restype_ptr, maxval);
2010         }
2011
2012       if (unsignedp && unsignedp0)
2013         {
2014           min_gt = INT_CST_LT_UNSIGNED (primop1, minval);
2015           max_gt = INT_CST_LT_UNSIGNED (primop1, maxval);
2016           min_lt = INT_CST_LT_UNSIGNED (minval, primop1);
2017           max_lt = INT_CST_LT_UNSIGNED (maxval, primop1);
2018         }
2019       else
2020         {
2021           min_gt = INT_CST_LT (primop1, minval);
2022           max_gt = INT_CST_LT (primop1, maxval);
2023           min_lt = INT_CST_LT (minval, primop1);
2024           max_lt = INT_CST_LT (maxval, primop1);
2025         }
2026
2027       val = 0;
2028       /* This used to be a switch, but Genix compiler can't handle that.  */
2029       if (code == NE_EXPR)
2030         {
2031           if (max_lt || min_gt)
2032             val = truthvalue_true_node;
2033         }
2034       else if (code == EQ_EXPR)
2035         {
2036           if (max_lt || min_gt)
2037             val = truthvalue_false_node;
2038         }
2039       else if (code == LT_EXPR)
2040         {
2041           if (max_lt)
2042             val = truthvalue_true_node;
2043           if (!min_lt)
2044             val = truthvalue_false_node;
2045         }
2046       else if (code == GT_EXPR)
2047         {
2048           if (min_gt)
2049             val = truthvalue_true_node;
2050           if (!max_gt)
2051             val = truthvalue_false_node;
2052         }
2053       else if (code == LE_EXPR)
2054         {
2055           if (!max_gt)
2056             val = truthvalue_true_node;
2057           if (min_gt)
2058             val = truthvalue_false_node;
2059         }
2060       else if (code == GE_EXPR)
2061         {
2062           if (!min_lt)
2063             val = truthvalue_true_node;
2064           if (max_lt)
2065             val = truthvalue_false_node;
2066         }
2067
2068       /* If primop0 was sign-extended and unsigned comparison specd,
2069          we did a signed comparison above using the signed type bounds.
2070          But the comparison we output must be unsigned.
2071
2072          Also, for inequalities, VAL is no good; but if the signed
2073          comparison had *any* fixed result, it follows that the
2074          unsigned comparison just tests the sign in reverse
2075          (positive values are LE, negative ones GE).
2076          So we can generate an unsigned comparison
2077          against an extreme value of the signed type.  */
2078
2079       if (unsignedp && !unsignedp0)
2080         {
2081           if (val != 0)
2082             switch (code)
2083               {
2084               case LT_EXPR:
2085               case GE_EXPR:
2086                 primop1 = TYPE_MIN_VALUE (type);
2087                 val = 0;
2088                 break;
2089
2090               case LE_EXPR:
2091               case GT_EXPR:
2092                 primop1 = TYPE_MAX_VALUE (type);
2093                 val = 0;
2094                 break;
2095
2096               default:
2097                 break;
2098               }
2099           type = c_common_unsigned_type (type);
2100         }
2101
2102       if (TREE_CODE (primop0) != INTEGER_CST)
2103         {
2104           if (val == truthvalue_false_node)
2105             warning ("comparison is always false due to limited range of data type");
2106           if (val == truthvalue_true_node)
2107             warning ("comparison is always true due to limited range of data type");
2108         }
2109
2110       if (val != 0)
2111         {
2112           /* Don't forget to evaluate PRIMOP0 if it has side effects.  */
2113           if (TREE_SIDE_EFFECTS (primop0))
2114             return build2 (COMPOUND_EXPR, TREE_TYPE (val), primop0, val);
2115           return val;
2116         }
2117
2118       /* Value is not predetermined, but do the comparison
2119          in the type of the operand that is not constant.
2120          TYPE is already properly set.  */
2121     }
2122   else if (real1 && real2
2123            && (TYPE_PRECISION (TREE_TYPE (primop0))
2124                == TYPE_PRECISION (TREE_TYPE (primop1))))
2125     type = TREE_TYPE (primop0);
2126
2127   /* If args' natural types are both narrower than nominal type
2128      and both extend in the same manner, compare them
2129      in the type of the wider arg.
2130      Otherwise must actually extend both to the nominal
2131      common type lest different ways of extending
2132      alter the result.
2133      (eg, (short)-1 == (unsigned short)-1  should be 0.)  */
2134
2135   else if (unsignedp0 == unsignedp1 && real1 == real2
2136            && TYPE_PRECISION (TREE_TYPE (primop0)) < TYPE_PRECISION (*restype_ptr)
2137            && TYPE_PRECISION (TREE_TYPE (primop1)) < TYPE_PRECISION (*restype_ptr))
2138     {
2139       type = common_type (TREE_TYPE (primop0), TREE_TYPE (primop1));
2140       type = c_common_signed_or_unsigned_type (unsignedp0
2141                                                || TYPE_UNSIGNED (*restype_ptr),
2142                                                type);
2143       /* Make sure shorter operand is extended the right way
2144          to match the longer operand.  */
2145       primop0
2146         = convert (c_common_signed_or_unsigned_type (unsignedp0,
2147                                                      TREE_TYPE (primop0)),
2148                    primop0);
2149       primop1
2150         = convert (c_common_signed_or_unsigned_type (unsignedp1,
2151                                                      TREE_TYPE (primop1)),
2152                    primop1);
2153     }
2154   else
2155     {
2156       /* Here we must do the comparison on the nominal type
2157          using the args exactly as we received them.  */
2158       type = *restype_ptr;
2159       primop0 = op0;
2160       primop1 = op1;
2161
2162       if (!real1 && !real2 && integer_zerop (primop1)
2163           && TYPE_UNSIGNED (*restype_ptr))
2164         {
2165           tree value = 0;
2166           switch (code)
2167             {
2168             case GE_EXPR:
2169               /* All unsigned values are >= 0, so we warn if extra warnings
2170                  are requested.  However, if OP0 is a constant that is
2171                  >= 0, the signedness of the comparison isn't an issue,
2172                  so suppress the warning.  */
2173               if (extra_warnings && !in_system_header
2174                   && !(TREE_CODE (primop0) == INTEGER_CST
2175                        && !TREE_OVERFLOW (convert (c_common_signed_type (type),
2176                                                    primop0))))
2177                 warning ("comparison of unsigned expression >= 0 is always true");
2178               value = truthvalue_true_node;
2179               break;
2180
2181             case LT_EXPR:
2182               if (extra_warnings && !in_system_header
2183                   && !(TREE_CODE (primop0) == INTEGER_CST
2184                        && !TREE_OVERFLOW (convert (c_common_signed_type (type),
2185                                                    primop0))))
2186                 warning ("comparison of unsigned expression < 0 is always false");
2187               value = truthvalue_false_node;
2188               break;
2189
2190             default:
2191               break;
2192             }
2193
2194           if (value != 0)
2195             {
2196               /* Don't forget to evaluate PRIMOP0 if it has side effects.  */
2197               if (TREE_SIDE_EFFECTS (primop0))
2198                 return build2 (COMPOUND_EXPR, TREE_TYPE (value),
2199                                primop0, value);
2200               return value;
2201             }
2202         }
2203     }
2204
2205   *op0_ptr = convert (type, primop0);
2206   *op1_ptr = convert (type, primop1);
2207
2208   *restype_ptr = truthvalue_type_node;
2209
2210   return 0;
2211 }
2212 \f
2213 /* Return a tree for the sum or difference (RESULTCODE says which)
2214    of pointer PTROP and integer INTOP.  */
2215
2216 tree
2217 pointer_int_sum (enum tree_code resultcode, tree ptrop, tree intop)
2218 {
2219   tree size_exp;
2220
2221   /* The result is a pointer of the same type that is being added.  */
2222
2223   tree result_type = TREE_TYPE (ptrop);
2224
2225   if (TREE_CODE (TREE_TYPE (result_type)) == VOID_TYPE)
2226     {
2227       if (pedantic || warn_pointer_arith)
2228         pedwarn ("pointer of type %<void *%> used in arithmetic");
2229       size_exp = integer_one_node;
2230     }
2231   else if (TREE_CODE (TREE_TYPE (result_type)) == FUNCTION_TYPE)
2232     {
2233       if (pedantic || warn_pointer_arith)
2234         pedwarn ("pointer to a function used in arithmetic");
2235       size_exp = integer_one_node;
2236     }
2237   else if (TREE_CODE (TREE_TYPE (result_type)) == METHOD_TYPE)
2238     {
2239       if (pedantic || warn_pointer_arith)
2240         pedwarn ("pointer to member function used in arithmetic");
2241       size_exp = integer_one_node;
2242     }
2243   else
2244     size_exp = size_in_bytes (TREE_TYPE (result_type));
2245
2246   /* If what we are about to multiply by the size of the elements
2247      contains a constant term, apply distributive law
2248      and multiply that constant term separately.
2249      This helps produce common subexpressions.  */
2250
2251   if ((TREE_CODE (intop) == PLUS_EXPR || TREE_CODE (intop) == MINUS_EXPR)
2252       && !TREE_CONSTANT (intop)
2253       && TREE_CONSTANT (TREE_OPERAND (intop, 1))
2254       && TREE_CONSTANT (size_exp)
2255       /* If the constant comes from pointer subtraction,
2256          skip this optimization--it would cause an error.  */
2257       && TREE_CODE (TREE_TYPE (TREE_OPERAND (intop, 0))) == INTEGER_TYPE
2258       /* If the constant is unsigned, and smaller than the pointer size,
2259          then we must skip this optimization.  This is because it could cause
2260          an overflow error if the constant is negative but INTOP is not.  */
2261       && (!TYPE_UNSIGNED (TREE_TYPE (intop))
2262           || (TYPE_PRECISION (TREE_TYPE (intop))
2263               == TYPE_PRECISION (TREE_TYPE (ptrop)))))
2264     {
2265       enum tree_code subcode = resultcode;
2266       tree int_type = TREE_TYPE (intop);
2267       if (TREE_CODE (intop) == MINUS_EXPR)
2268         subcode = (subcode == PLUS_EXPR ? MINUS_EXPR : PLUS_EXPR);
2269       /* Convert both subexpression types to the type of intop,
2270          because weird cases involving pointer arithmetic
2271          can result in a sum or difference with different type args.  */
2272       ptrop = build_binary_op (subcode, ptrop,
2273                                convert (int_type, TREE_OPERAND (intop, 1)), 1);
2274       intop = convert (int_type, TREE_OPERAND (intop, 0));
2275     }
2276
2277   /* Convert the integer argument to a type the same size as sizetype
2278      so the multiply won't overflow spuriously.  */
2279
2280   if (TYPE_PRECISION (TREE_TYPE (intop)) != TYPE_PRECISION (sizetype)
2281       || TYPE_UNSIGNED (TREE_TYPE (intop)) != TYPE_UNSIGNED (sizetype))
2282     intop = convert (c_common_type_for_size (TYPE_PRECISION (sizetype),
2283                                              TYPE_UNSIGNED (sizetype)), intop);
2284
2285   /* Replace the integer argument with a suitable product by the object size.
2286      Do this multiplication as signed, then convert to the appropriate
2287      pointer type (actually unsigned integral).  */
2288
2289   intop = convert (result_type,
2290                    build_binary_op (MULT_EXPR, intop,
2291                                     convert (TREE_TYPE (intop), size_exp), 1));
2292
2293   /* Create the sum or difference.  */
2294   return fold (build2 (resultcode, result_type, ptrop, intop));
2295 }
2296 \f
2297 /* Prepare expr to be an argument of a TRUTH_NOT_EXPR,
2298    or validate its data type for an `if' or `while' statement or ?..: exp.
2299
2300    This preparation consists of taking the ordinary
2301    representation of an expression expr and producing a valid tree
2302    boolean expression describing whether expr is nonzero.  We could
2303    simply always do build_binary_op (NE_EXPR, expr, truthvalue_false_node, 1),
2304    but we optimize comparisons, &&, ||, and !.
2305
2306    The resulting type should always be `truthvalue_type_node'.  */
2307
2308 tree
2309 c_common_truthvalue_conversion (tree expr)
2310 {
2311   if (TREE_CODE (expr) == ERROR_MARK)
2312     return expr;
2313
2314   if (TREE_CODE (expr) == FUNCTION_DECL)
2315     expr = build_unary_op (ADDR_EXPR, expr, 0);
2316
2317   switch (TREE_CODE (expr))
2318     {
2319     case EQ_EXPR:   case NE_EXPR:   case UNEQ_EXPR: case LTGT_EXPR:
2320     case LE_EXPR:   case GE_EXPR:   case LT_EXPR:   case GT_EXPR:
2321     case UNLE_EXPR: case UNGE_EXPR: case UNLT_EXPR: case UNGT_EXPR:
2322     case ORDERED_EXPR: case UNORDERED_EXPR:
2323     case TRUTH_ANDIF_EXPR:
2324     case TRUTH_ORIF_EXPR:
2325     case TRUTH_AND_EXPR:
2326     case TRUTH_OR_EXPR:
2327     case TRUTH_XOR_EXPR:
2328     case TRUTH_NOT_EXPR:
2329       TREE_TYPE (expr) = truthvalue_type_node;
2330       return expr;
2331
2332     case ERROR_MARK:
2333       return expr;
2334
2335     case INTEGER_CST:
2336       return integer_zerop (expr) ? truthvalue_false_node : truthvalue_true_node;
2337
2338     case REAL_CST:
2339       return real_zerop (expr) ? truthvalue_false_node : truthvalue_true_node;
2340
2341     case ADDR_EXPR:
2342       {
2343         if (TREE_CODE (TREE_OPERAND (expr, 0)) == FUNCTION_DECL
2344             && !DECL_WEAK (TREE_OPERAND (expr, 0)))
2345           {
2346             /* Common Ada/Pascal programmer's mistake.  We always warn
2347                about this since it is so bad.  */
2348             warning ("the address of %qD, will always evaluate as %<true%>",
2349                      TREE_OPERAND (expr, 0));
2350             return truthvalue_true_node;
2351           }
2352
2353         /* If we are taking the address of an external decl, it might be
2354            zero if it is weak, so we cannot optimize.  */
2355         if (DECL_P (TREE_OPERAND (expr, 0))
2356             && DECL_EXTERNAL (TREE_OPERAND (expr, 0)))
2357           break;
2358
2359         if (TREE_SIDE_EFFECTS (TREE_OPERAND (expr, 0)))
2360           return build2 (COMPOUND_EXPR, truthvalue_type_node,
2361                          TREE_OPERAND (expr, 0), truthvalue_true_node);
2362         else
2363           return truthvalue_true_node;
2364       }
2365
2366     case COMPLEX_EXPR:
2367       return build_binary_op ((TREE_SIDE_EFFECTS (TREE_OPERAND (expr, 1))
2368                                ? TRUTH_OR_EXPR : TRUTH_ORIF_EXPR),
2369                 lang_hooks.truthvalue_conversion (TREE_OPERAND (expr, 0)),
2370                 lang_hooks.truthvalue_conversion (TREE_OPERAND (expr, 1)),
2371                               0);
2372
2373     case NEGATE_EXPR:
2374     case ABS_EXPR:
2375     case FLOAT_EXPR:
2376       /* These don't change whether an object is nonzero or zero.  */
2377       return lang_hooks.truthvalue_conversion (TREE_OPERAND (expr, 0));
2378
2379     case LROTATE_EXPR:
2380     case RROTATE_EXPR:
2381       /* These don't change whether an object is zero or nonzero, but
2382          we can't ignore them if their second arg has side-effects.  */
2383       if (TREE_SIDE_EFFECTS (TREE_OPERAND (expr, 1)))
2384         return build2 (COMPOUND_EXPR, truthvalue_type_node,
2385                        TREE_OPERAND (expr, 1),
2386                        lang_hooks.truthvalue_conversion (TREE_OPERAND (expr, 0)));
2387       else
2388         return lang_hooks.truthvalue_conversion (TREE_OPERAND (expr, 0));
2389
2390     case COND_EXPR:
2391       /* Distribute the conversion into the arms of a COND_EXPR.  */
2392       return fold (build3 (COND_EXPR, truthvalue_type_node,
2393                 TREE_OPERAND (expr, 0),
2394                 lang_hooks.truthvalue_conversion (TREE_OPERAND (expr, 1)),
2395                 lang_hooks.truthvalue_conversion (TREE_OPERAND (expr, 2))));
2396
2397     case CONVERT_EXPR:
2398       /* Don't cancel the effect of a CONVERT_EXPR from a REFERENCE_TYPE,
2399          since that affects how `default_conversion' will behave.  */
2400       if (TREE_CODE (TREE_TYPE (expr)) == REFERENCE_TYPE
2401           || TREE_CODE (TREE_TYPE (TREE_OPERAND (expr, 0))) == REFERENCE_TYPE)
2402         break;
2403       /* Fall through....  */
2404     case NOP_EXPR:
2405       /* If this is widening the argument, we can ignore it.  */
2406       if (TYPE_PRECISION (TREE_TYPE (expr))
2407           >= TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (expr, 0))))
2408         return lang_hooks.truthvalue_conversion (TREE_OPERAND (expr, 0));
2409       break;
2410
2411     case MINUS_EXPR:
2412       /* Perhaps reduce (x - y) != 0 to (x != y).  The expressions
2413          aren't guaranteed to the be same for modes that can represent
2414          infinity, since if x and y are both +infinity, or both
2415          -infinity, then x - y is not a number.
2416
2417          Note that this transformation is safe when x or y is NaN.
2418          (x - y) is then NaN, and both (x - y) != 0 and x != y will
2419          be false.  */
2420       if (HONOR_INFINITIES (TYPE_MODE (TREE_TYPE (TREE_OPERAND (expr, 0)))))
2421         break;
2422       /* Fall through....  */
2423     case BIT_XOR_EXPR:
2424       /* This and MINUS_EXPR can be changed into a comparison of the
2425          two objects.  */
2426       if (TREE_TYPE (TREE_OPERAND (expr, 0))
2427           == TREE_TYPE (TREE_OPERAND (expr, 1)))
2428         return build_binary_op (NE_EXPR, TREE_OPERAND (expr, 0),
2429                                 TREE_OPERAND (expr, 1), 1);
2430       return build_binary_op (NE_EXPR, TREE_OPERAND (expr, 0),
2431                               fold (build1 (NOP_EXPR,
2432                                             TREE_TYPE (TREE_OPERAND (expr, 0)),
2433                                             TREE_OPERAND (expr, 1))), 1);
2434
2435     case BIT_AND_EXPR:
2436       if (integer_onep (TREE_OPERAND (expr, 1))
2437           && TREE_TYPE (expr) != truthvalue_type_node)
2438         /* Using convert here would cause infinite recursion.  */
2439         return build1 (NOP_EXPR, truthvalue_type_node, expr);
2440       break;
2441
2442     case MODIFY_EXPR:
2443       if (warn_parentheses && !TREE_NO_WARNING (expr))
2444         warning ("suggest parentheses around assignment used as truth value");
2445       break;
2446
2447     default:
2448       break;
2449     }
2450
2451   if (TREE_CODE (TREE_TYPE (expr)) == COMPLEX_TYPE)
2452     {
2453       tree t = save_expr (expr);
2454       return (build_binary_op
2455               ((TREE_SIDE_EFFECTS (expr)
2456                 ? TRUTH_OR_EXPR : TRUTH_ORIF_EXPR),
2457         lang_hooks.truthvalue_conversion (build_unary_op (REALPART_EXPR, t, 0)),
2458         lang_hooks.truthvalue_conversion (build_unary_op (IMAGPART_EXPR, t, 0)),
2459                0));
2460     }
2461
2462   return build_binary_op (NE_EXPR, expr, integer_zero_node, 1);
2463 }
2464 \f
2465 static tree builtin_function_2 (const char *builtin_name, const char *name,
2466                                 tree builtin_type, tree type,
2467                                 enum built_in_function function_code,
2468                                 enum built_in_class cl, int library_name_p,
2469                                 bool nonansi_p,
2470                                 tree attrs);
2471
2472 /* Make a variant type in the proper way for C/C++, propagating qualifiers
2473    down to the element type of an array.  */
2474
2475 tree
2476 c_build_qualified_type (tree type, int type_quals)
2477 {
2478   if (type == error_mark_node)
2479     return type;
2480
2481   if (TREE_CODE (type) == ARRAY_TYPE)
2482     return build_array_type (c_build_qualified_type (TREE_TYPE (type),
2483                                                      type_quals),
2484                              TYPE_DOMAIN (type));
2485
2486   /* A restrict-qualified pointer type must be a pointer to object or
2487      incomplete type.  Note that the use of POINTER_TYPE_P also allows
2488      REFERENCE_TYPEs, which is appropriate for C++.  */
2489   if ((type_quals & TYPE_QUAL_RESTRICT)
2490       && (!POINTER_TYPE_P (type)
2491           || !C_TYPE_OBJECT_OR_INCOMPLETE_P (TREE_TYPE (type))))
2492     {
2493       error ("invalid use of %<restrict%>");
2494       type_quals &= ~TYPE_QUAL_RESTRICT;
2495     }
2496
2497   return build_qualified_type (type, type_quals);
2498 }
2499
2500 /* Apply the TYPE_QUALS to the new DECL.  */
2501
2502 void
2503 c_apply_type_quals_to_decl (int type_quals, tree decl)
2504 {
2505   tree type = TREE_TYPE (decl);
2506
2507   if (type == error_mark_node)
2508     return;
2509
2510   if (((type_quals & TYPE_QUAL_CONST)
2511        || (type && TREE_CODE (type) == REFERENCE_TYPE))
2512       /* An object declared 'const' is only readonly after it is
2513          initialized.  We don't have any way of expressing this currently,
2514          so we need to be conservative and unset TREE_READONLY for types
2515          with constructors.  Otherwise aliasing code will ignore stores in
2516          an inline constructor.  */
2517       && !(type && TYPE_NEEDS_CONSTRUCTING (type)))
2518     TREE_READONLY (decl) = 1;
2519   if (type_quals & TYPE_QUAL_VOLATILE)
2520     {
2521       TREE_SIDE_EFFECTS (decl) = 1;
2522       TREE_THIS_VOLATILE (decl) = 1;
2523     }
2524   if (type_quals & TYPE_QUAL_RESTRICT)
2525     {
2526       while (type && TREE_CODE (type) == ARRAY_TYPE)
2527         /* Allow 'restrict' on arrays of pointers.
2528            FIXME currently we just ignore it.  */
2529         type = TREE_TYPE (type);
2530       if (!type
2531           || !POINTER_TYPE_P (type)
2532           || !C_TYPE_OBJECT_OR_INCOMPLETE_P (TREE_TYPE (type)))
2533         error ("invalid use of %<restrict%>");
2534       else if (flag_strict_aliasing && type == TREE_TYPE (decl))
2535         /* Indicate we need to make a unique alias set for this pointer.
2536            We can't do it here because it might be pointing to an
2537            incomplete type.  */
2538         DECL_POINTER_ALIAS_SET (decl) = -2;
2539     }
2540 }
2541
2542 /* Hash function for the problem of multiple type definitions in
2543    different files.  This must hash all types that will compare
2544    equal via comptypes to the same value.  In practice it hashes
2545    on some of the simple stuff and leaves the details to comptypes.  */
2546
2547 static hashval_t
2548 c_type_hash (const void *p)
2549 {
2550   int i = 0;
2551   int shift, size;
2552   tree t = (tree) p;
2553   tree t2;
2554   switch (TREE_CODE (t))
2555     {
2556     /* For pointers, hash on pointee type plus some swizzling.  */
2557     case POINTER_TYPE:
2558       return c_type_hash (TREE_TYPE (t)) ^ 0x3003003;
2559     /* Hash on number of elements and total size.  */
2560     case ENUMERAL_TYPE:
2561       shift = 3;
2562       t2 = TYPE_VALUES (t);
2563       break;
2564     case RECORD_TYPE:
2565       shift = 0;
2566       t2 = TYPE_FIELDS (t);
2567       break;
2568     case QUAL_UNION_TYPE:
2569       shift = 1;
2570       t2 = TYPE_FIELDS (t);
2571       break;
2572     case UNION_TYPE:
2573       shift = 2;
2574       t2 = TYPE_FIELDS (t);
2575       break;
2576     default:
2577       gcc_unreachable ();
2578     }
2579   for (; t2; t2 = TREE_CHAIN (t2))
2580     i++;
2581   size = TREE_INT_CST_LOW (TYPE_SIZE (t));
2582   return ((size << 24) | (i << shift));
2583 }
2584
2585 static GTY((param_is (union tree_node))) htab_t type_hash_table;
2586
2587 /* Return the typed-based alias set for T, which may be an expression
2588    or a type.  Return -1 if we don't do anything special.  */
2589
2590 HOST_WIDE_INT
2591 c_common_get_alias_set (tree t)
2592 {
2593   tree u;
2594   PTR *slot;
2595
2596   /* Permit type-punning when accessing a union, provided the access
2597      is directly through the union.  For example, this code does not
2598      permit taking the address of a union member and then storing
2599      through it.  Even the type-punning allowed here is a GCC
2600      extension, albeit a common and useful one; the C standard says
2601      that such accesses have implementation-defined behavior.  */
2602   for (u = t;
2603        TREE_CODE (u) == COMPONENT_REF || TREE_CODE (u) == ARRAY_REF;
2604        u = TREE_OPERAND (u, 0))
2605     if (TREE_CODE (u) == COMPONENT_REF
2606         && TREE_CODE (TREE_TYPE (TREE_OPERAND (u, 0))) == UNION_TYPE)
2607       return 0;
2608
2609   /* That's all the expressions we handle specially.  */
2610   if (!TYPE_P (t))
2611     return -1;
2612
2613   /* The C standard guarantees that any object may be accessed via an
2614      lvalue that has character type.  */
2615   if (t == char_type_node
2616       || t == signed_char_type_node
2617       || t == unsigned_char_type_node)
2618     return 0;
2619
2620   /* If it has the may_alias attribute, it can alias anything.  */
2621   if (lookup_attribute ("may_alias", TYPE_ATTRIBUTES (t)))
2622     return 0;
2623
2624   /* The C standard specifically allows aliasing between signed and
2625      unsigned variants of the same type.  We treat the signed
2626      variant as canonical.  */
2627   if (TREE_CODE (t) == INTEGER_TYPE && TYPE_UNSIGNED (t))
2628     {
2629       tree t1 = c_common_signed_type (t);
2630
2631       /* t1 == t can happen for boolean nodes which are always unsigned.  */
2632       if (t1 != t)
2633         return get_alias_set (t1);
2634     }
2635   else if (POINTER_TYPE_P (t))
2636     {
2637       tree t1;
2638
2639       /* Unfortunately, there is no canonical form of a pointer type.
2640          In particular, if we have `typedef int I', then `int *', and
2641          `I *' are different types.  So, we have to pick a canonical
2642          representative.  We do this below.
2643
2644          Technically, this approach is actually more conservative that
2645          it needs to be.  In particular, `const int *' and `int *'
2646          should be in different alias sets, according to the C and C++
2647          standard, since their types are not the same, and so,
2648          technically, an `int **' and `const int **' cannot point at
2649          the same thing.
2650
2651          But, the standard is wrong.  In particular, this code is
2652          legal C++:
2653
2654             int *ip;
2655             int **ipp = &ip;
2656             const int* const* cipp = ipp;
2657
2658          And, it doesn't make sense for that to be legal unless you
2659          can dereference IPP and CIPP.  So, we ignore cv-qualifiers on
2660          the pointed-to types.  This issue has been reported to the
2661          C++ committee.  */
2662       t1 = build_type_no_quals (t);
2663       if (t1 != t)
2664         return get_alias_set (t1);
2665     }
2666
2667   /* Handle the case of multiple type nodes referring to "the same" type,
2668      which occurs with IMA.  These share an alias set.  FIXME:  Currently only
2669      C90 is handled.  (In C99 type compatibility is not transitive, which
2670      complicates things mightily. The alias set splay trees can theoretically
2671      represent this, but insertion is tricky when you consider all the
2672      different orders things might arrive in.) */
2673
2674   if (c_language != clk_c || flag_isoc99)
2675     return -1;
2676
2677   /* Save time if there's only one input file.  */
2678   if (num_in_fnames == 1)
2679     return -1;
2680
2681   /* Pointers need special handling if they point to any type that
2682      needs special handling (below).  */
2683   if (TREE_CODE (t) == POINTER_TYPE)
2684     {
2685       tree t2;
2686       /* Find bottom type under any nested POINTERs.  */
2687       for (t2 = TREE_TYPE (t);
2688      TREE_CODE (t2) == POINTER_TYPE;
2689      t2 = TREE_TYPE (t2))
2690   ;
2691       if (TREE_CODE (t2) != RECORD_TYPE
2692     && TREE_CODE (t2) != ENUMERAL_TYPE
2693     && TREE_CODE (t2) != QUAL_UNION_TYPE
2694     && TREE_CODE (t2) != UNION_TYPE)
2695   return -1;
2696       if (TYPE_SIZE (t2) == 0)
2697   return -1;
2698     }
2699   /* These are the only cases that need special handling.  */
2700   if (TREE_CODE (t) != RECORD_TYPE
2701       && TREE_CODE (t) != ENUMERAL_TYPE
2702       && TREE_CODE (t) != QUAL_UNION_TYPE
2703       && TREE_CODE (t) != UNION_TYPE
2704       && TREE_CODE (t) != POINTER_TYPE)
2705     return -1;
2706   /* Undefined? */
2707   if (TYPE_SIZE (t) == 0)
2708     return -1;
2709
2710   /* Look up t in hash table.  Only one of the compatible types within each
2711      alias set is recorded in the table.  */
2712   if (!type_hash_table)
2713     type_hash_table = htab_create_ggc (1021, c_type_hash,
2714             (htab_eq) lang_hooks.types_compatible_p,
2715             NULL);
2716   slot = htab_find_slot (type_hash_table, t, INSERT);
2717   if (*slot != NULL)
2718     {
2719       TYPE_ALIAS_SET (t) = TYPE_ALIAS_SET ((tree)*slot);
2720       return TYPE_ALIAS_SET ((tree)*slot);
2721     }
2722   else
2723     /* Our caller will assign and record (in t) a new alias set; all we need
2724        to do is remember t in the hash table.  */
2725     *slot = t;
2726
2727   return -1;
2728 }
2729 \f
2730 /* Compute the value of 'sizeof (TYPE)' or '__alignof__ (TYPE)', where the
2731    second parameter indicates which OPERATOR is being applied.  The COMPLAIN
2732    flag controls whether we should diagnose possibly ill-formed
2733    constructs or not.  */
2734 tree
2735 c_sizeof_or_alignof_type (tree type, enum tree_code op, int complain)
2736 {
2737   const char *op_name;
2738   tree value = NULL;
2739   enum tree_code type_code = TREE_CODE (type);
2740
2741   gcc_assert (op == SIZEOF_EXPR || op == ALIGNOF_EXPR);
2742   op_name = op == SIZEOF_EXPR ? "sizeof" : "__alignof__";
2743
2744   if (type_code == FUNCTION_TYPE)
2745     {
2746       if (op == SIZEOF_EXPR)
2747         {
2748           if (complain && (pedantic || warn_pointer_arith))
2749             pedwarn ("invalid application of %<sizeof%> to a function type");
2750           value = size_one_node;
2751         }
2752       else
2753         value = size_int (FUNCTION_BOUNDARY / BITS_PER_UNIT);
2754     }
2755   else if (type_code == VOID_TYPE || type_code == ERROR_MARK)
2756     {
2757       if (type_code == VOID_TYPE
2758           && complain && (pedantic || warn_pointer_arith))
2759         pedwarn ("invalid application of %qs to a void type", op_name);
2760       value = size_one_node;
2761     }
2762   else if (!COMPLETE_TYPE_P (type))
2763     {
2764       if (complain)
2765         error ("invalid application of %qs to incomplete type %qT ",
2766                op_name, type);
2767       value = size_zero_node;
2768     }
2769   else
2770     {
2771       if (op == (enum tree_code) SIZEOF_EXPR)
2772         /* Convert in case a char is more than one unit.  */
2773         value = size_binop (CEIL_DIV_EXPR, TYPE_SIZE_UNIT (type),
2774                             size_int (TYPE_PRECISION (char_type_node)
2775                                       / BITS_PER_UNIT));
2776       else
2777         value = size_int (TYPE_ALIGN_UNIT (type));
2778     }
2779
2780   /* VALUE will have an integer type with TYPE_IS_SIZETYPE set.
2781      TYPE_IS_SIZETYPE means that certain things (like overflow) will
2782      never happen.  However, this node should really have type
2783      `size_t', which is just a typedef for an ordinary integer type.  */
2784   value = fold (build1 (NOP_EXPR, size_type_node, value));
2785   gcc_assert (!TYPE_IS_SIZETYPE (TREE_TYPE (value)));
2786
2787   return value;
2788 }
2789
2790 /* Implement the __alignof keyword: Return the minimum required
2791    alignment of EXPR, measured in bytes.  For VAR_DECL's and
2792    FIELD_DECL's return DECL_ALIGN (which can be set from an
2793    "aligned" __attribute__ specification).  */
2794
2795 tree
2796 c_alignof_expr (tree expr)
2797 {
2798   tree t;
2799
2800   if (TREE_CODE (expr) == VAR_DECL)
2801     t = size_int (DECL_ALIGN_UNIT (expr));
2802
2803   else if (TREE_CODE (expr) == COMPONENT_REF
2804            && DECL_C_BIT_FIELD (TREE_OPERAND (expr, 1)))
2805     {
2806       error ("%<__alignof%> applied to a bit-field");
2807       t = size_one_node;
2808     }
2809   else if (TREE_CODE (expr) == COMPONENT_REF
2810            && TREE_CODE (TREE_OPERAND (expr, 1)) == FIELD_DECL)
2811     t = size_int (DECL_ALIGN_UNIT (TREE_OPERAND (expr, 1)));
2812
2813   else if (TREE_CODE (expr) == INDIRECT_REF)
2814     {
2815       tree t = TREE_OPERAND (expr, 0);
2816       tree best = t;
2817       int bestalign = TYPE_ALIGN (TREE_TYPE (TREE_TYPE (t)));
2818
2819       while (TREE_CODE (t) == NOP_EXPR
2820              && TREE_CODE (TREE_TYPE (TREE_OPERAND (t, 0))) == POINTER_TYPE)
2821         {
2822           int thisalign;
2823
2824           t = TREE_OPERAND (t, 0);
2825           thisalign = TYPE_ALIGN (TREE_TYPE (TREE_TYPE (t)));
2826           if (thisalign > bestalign)
2827             best = t, bestalign = thisalign;
2828         }
2829       return c_alignof (TREE_TYPE (TREE_TYPE (best)));
2830     }
2831   else
2832     return c_alignof (TREE_TYPE (expr));
2833
2834   return fold (build1 (NOP_EXPR, size_type_node, t));
2835 }
2836 \f
2837 /* Handle C and C++ default attributes.  */
2838
2839 enum built_in_attribute
2840 {
2841 #define DEF_ATTR_NULL_TREE(ENUM) ENUM,
2842 #define DEF_ATTR_INT(ENUM, VALUE) ENUM,
2843 #define DEF_ATTR_IDENT(ENUM, STRING) ENUM,
2844 #define DEF_ATTR_TREE_LIST(ENUM, PURPOSE, VALUE, CHAIN) ENUM,
2845 #include "builtin-attrs.def"
2846 #undef DEF_ATTR_NULL_TREE
2847 #undef DEF_ATTR_INT
2848 #undef DEF_ATTR_IDENT
2849 #undef DEF_ATTR_TREE_LIST
2850   ATTR_LAST
2851 };
2852
2853 static GTY(()) tree built_in_attributes[(int) ATTR_LAST];
2854
2855 static void c_init_attributes (void);
2856
2857 /* Build tree nodes and builtin functions common to both C and C++ language
2858    frontends.  */
2859
2860 void
2861 c_common_nodes_and_builtins (void)
2862 {
2863   enum builtin_type
2864   {
2865 #define DEF_PRIMITIVE_TYPE(NAME, VALUE) NAME,
2866 #define DEF_FUNCTION_TYPE_0(NAME, RETURN) NAME,
2867 #define DEF_FUNCTION_TYPE_1(NAME, RETURN, ARG1) NAME,
2868 #define DEF_FUNCTION_TYPE_2(NAME, RETURN, ARG1, ARG2) NAME,
2869 #define DEF_FUNCTION_TYPE_3(NAME, RETURN, ARG1, ARG2, ARG3) NAME,
2870 #define DEF_FUNCTION_TYPE_4(NAME, RETURN, ARG1, ARG2, ARG3, ARG4) NAME,
2871 #define DEF_FUNCTION_TYPE_VAR_0(NAME, RETURN) NAME,
2872 #define DEF_FUNCTION_TYPE_VAR_1(NAME, RETURN, ARG1) NAME,
2873 #define DEF_FUNCTION_TYPE_VAR_2(NAME, RETURN, ARG1, ARG2) NAME,
2874 #define DEF_FUNCTION_TYPE_VAR_3(NAME, RETURN, ARG1, ARG2, ARG3) NAME,
2875 #define DEF_POINTER_TYPE(NAME, TYPE) NAME,
2876 #include "builtin-types.def"
2877 #undef DEF_PRIMITIVE_TYPE
2878 #undef DEF_FUNCTION_TYPE_0
2879 #undef DEF_FUNCTION_TYPE_1
2880 #undef DEF_FUNCTION_TYPE_2
2881 #undef DEF_FUNCTION_TYPE_3
2882 #undef DEF_FUNCTION_TYPE_4
2883 #undef DEF_FUNCTION_TYPE_VAR_0
2884 #undef DEF_FUNCTION_TYPE_VAR_1
2885 #undef DEF_FUNCTION_TYPE_VAR_2
2886 #undef DEF_FUNCTION_TYPE_VAR_3
2887 #undef DEF_POINTER_TYPE
2888     BT_LAST
2889   };
2890
2891   typedef enum builtin_type builtin_type;
2892
2893   tree builtin_types[(int) BT_LAST];
2894   int wchar_type_size;
2895   tree array_domain_type;
2896   tree va_list_ref_type_node;
2897   tree va_list_arg_type_node;
2898
2899   /* Define `int' and `char' first so that dbx will output them first.  */
2900   record_builtin_type (RID_INT, NULL, integer_type_node);
2901   record_builtin_type (RID_CHAR, "char", char_type_node);
2902
2903   /* `signed' is the same as `int'.  FIXME: the declarations of "signed",
2904      "unsigned long", "long long unsigned" and "unsigned short" were in C++
2905      but not C.  Are the conditionals here needed?  */
2906   if (c_dialect_cxx ())
2907     record_builtin_type (RID_SIGNED, NULL, integer_type_node);
2908   record_builtin_type (RID_LONG, "long int", long_integer_type_node);
2909   record_builtin_type (RID_UNSIGNED, "unsigned int", unsigned_type_node);
2910   record_builtin_type (RID_MAX, "long unsigned int",
2911                        long_unsigned_type_node);
2912   if (c_dialect_cxx ())
2913     record_builtin_type (RID_MAX, "unsigned long", long_unsigned_type_node);
2914   record_builtin_type (RID_MAX, "long long int",
2915                        long_long_integer_type_node);
2916   record_builtin_type (RID_MAX, "long long unsigned int",
2917                        long_long_unsigned_type_node);
2918   if (c_dialect_cxx ())
2919     record_builtin_type (RID_MAX, "long long unsigned",
2920                          long_long_unsigned_type_node);
2921   record_builtin_type (RID_SHORT, "short int", short_integer_type_node);
2922   record_builtin_type (RID_MAX, "short unsigned int",
2923                        short_unsigned_type_node);
2924   if (c_dialect_cxx ())
2925     record_builtin_type (RID_MAX, "unsigned short",
2926                          short_unsigned_type_node);
2927
2928   /* Define both `signed char' and `unsigned char'.  */
2929   record_builtin_type (RID_MAX, "signed char", signed_char_type_node);
2930   record_builtin_type (RID_MAX, "unsigned char", unsigned_char_type_node);
2931
2932   /* These are types that c_common_type_for_size and
2933      c_common_type_for_mode use.  */
2934   lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
2935                                          intQI_type_node));
2936   lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
2937                                          intHI_type_node));
2938   lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
2939                                          intSI_type_node));
2940   lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
2941                                          intDI_type_node));
2942 #if HOST_BITS_PER_WIDE_INT >= 64
2943   if (targetm.scalar_mode_supported_p (TImode))
2944     lang_hooks.decls.pushdecl (build_decl (TYPE_DECL,
2945                                            get_identifier ("__int128_t"),
2946                                            intTI_type_node));
2947 #endif
2948   lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
2949                                          unsigned_intQI_type_node));
2950   lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
2951                                          unsigned_intHI_type_node));
2952   lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
2953                                          unsigned_intSI_type_node));
2954   lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
2955                                          unsigned_intDI_type_node));
2956 #if HOST_BITS_PER_WIDE_INT >= 64
2957   if (targetm.scalar_mode_supported_p (TImode))
2958     lang_hooks.decls.pushdecl (build_decl (TYPE_DECL,
2959                                            get_identifier ("__uint128_t"),
2960                                            unsigned_intTI_type_node));
2961 #endif
2962
2963   /* Create the widest literal types.  */
2964   widest_integer_literal_type_node
2965     = make_signed_type (HOST_BITS_PER_WIDE_INT * 2);
2966   lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
2967                                          widest_integer_literal_type_node));
2968
2969   widest_unsigned_literal_type_node
2970     = make_unsigned_type (HOST_BITS_PER_WIDE_INT * 2);
2971   lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
2972                                          widest_unsigned_literal_type_node));
2973
2974   /* `unsigned long' is the standard type for sizeof.
2975      Note that stddef.h uses `unsigned long',
2976      and this must agree, even if long and int are the same size.  */
2977   size_type_node =
2978     TREE_TYPE (identifier_global_value (get_identifier (SIZE_TYPE)));
2979   signed_size_type_node = c_common_signed_type (size_type_node);
2980   set_sizetype (size_type_node);
2981
2982   pid_type_node =
2983     TREE_TYPE (identifier_global_value (get_identifier (PID_TYPE)));
2984
2985   build_common_tree_nodes_2 (flag_short_double);
2986
2987   record_builtin_type (RID_FLOAT, NULL, float_type_node);
2988   record_builtin_type (RID_DOUBLE, NULL, double_type_node);
2989   record_builtin_type (RID_MAX, "long double", long_double_type_node);
2990
2991   lang_hooks.decls.pushdecl (build_decl (TYPE_DECL,
2992                                          get_identifier ("complex int"),
2993                                          complex_integer_type_node));
2994   lang_hooks.decls.pushdecl (build_decl (TYPE_DECL,
2995                                          get_identifier ("complex float"),
2996                                          complex_float_type_node));
2997   lang_hooks.decls.pushdecl (build_decl (TYPE_DECL,
2998                                          get_identifier ("complex double"),
2999                                          complex_double_type_node));
3000   lang_hooks.decls.pushdecl
3001     (build_decl (TYPE_DECL, get_identifier ("complex long double"),
3002                  complex_long_double_type_node));
3003
3004   if (c_dialect_cxx ())
3005     /* For C++, make fileptr_type_node a distinct void * type until
3006        FILE type is defined.  */
3007     fileptr_type_node = build_variant_type_copy (ptr_type_node);
3008
3009   record_builtin_type (RID_VOID, NULL, void_type_node);
3010
3011   /* This node must not be shared.  */
3012   void_zero_node = make_node (INTEGER_CST);
3013   TREE_TYPE (void_zero_node) = void_type_node;
3014
3015   void_list_node = build_void_list_node ();
3016
3017   /* Make a type to be the domain of a few array types
3018      whose domains don't really matter.
3019      200 is small enough that it always fits in size_t
3020      and large enough that it can hold most function names for the
3021      initializations of __FUNCTION__ and __PRETTY_FUNCTION__.  */
3022   array_domain_type = build_index_type (size_int (200));
3023
3024   /* Make a type for arrays of characters.
3025      With luck nothing will ever really depend on the length of this
3026      array type.  */
3027   char_array_type_node
3028     = build_array_type (char_type_node, array_domain_type);
3029
3030   /* Likewise for arrays of ints.  */
3031   int_array_type_node
3032     = build_array_type (integer_type_node, array_domain_type);
3033
3034   string_type_node = build_pointer_type (char_type_node);
3035   const_string_type_node
3036     = build_pointer_type (build_qualified_type
3037                           (char_type_node, TYPE_QUAL_CONST));
3038
3039   /* This is special for C++ so functions can be overloaded.  */
3040   wchar_type_node = get_identifier (MODIFIED_WCHAR_TYPE);
3041   wchar_type_node = TREE_TYPE (identifier_global_value (wchar_type_node));
3042   wchar_type_size = TYPE_PRECISION (wchar_type_node);
3043   if (c_dialect_cxx ())
3044     {
3045       if (TYPE_UNSIGNED (wchar_type_node))
3046         wchar_type_node = make_unsigned_type (wchar_type_size);
3047       else
3048         wchar_type_node = make_signed_type (wchar_type_size);
3049       record_builtin_type (RID_WCHAR, "wchar_t", wchar_type_node);
3050     }
3051   else
3052     {
3053       signed_wchar_type_node = c_common_signed_type (wchar_type_node);
3054       unsigned_wchar_type_node = c_common_unsigned_type (wchar_type_node);
3055     }
3056
3057   /* This is for wide string constants.  */
3058   wchar_array_type_node
3059     = build_array_type (wchar_type_node, array_domain_type);
3060
3061   wint_type_node =
3062     TREE_TYPE (identifier_global_value (get_identifier (WINT_TYPE)));
3063
3064   intmax_type_node =
3065     TREE_TYPE (identifier_global_value (get_identifier (INTMAX_TYPE)));
3066   uintmax_type_node =
3067     TREE_TYPE (identifier_global_value (get_identifier (UINTMAX_TYPE)));
3068
3069   default_function_type = build_function_type (integer_type_node, NULL_TREE);
3070   ptrdiff_type_node
3071     = TREE_TYPE (identifier_global_value (get_identifier (PTRDIFF_TYPE)));
3072   unsigned_ptrdiff_type_node = c_common_unsigned_type (ptrdiff_type_node);
3073
3074   lang_hooks.decls.pushdecl
3075     (build_decl (TYPE_DECL, get_identifier ("__builtin_va_list"),
3076                  va_list_type_node));
3077
3078   if (TREE_CODE (va_list_type_node) == ARRAY_TYPE)
3079     {
3080       va_list_arg_type_node = va_list_ref_type_node =
3081         build_pointer_type (TREE_TYPE (va_list_type_node));
3082     }
3083   else
3084     {
3085       va_list_arg_type_node = va_list_type_node;
3086       va_list_ref_type_node = build_reference_type (va_list_type_node);
3087     }
3088
3089 #define DEF_PRIMITIVE_TYPE(ENUM, VALUE) \
3090   builtin_types[(int) ENUM] = VALUE;
3091 #define DEF_FUNCTION_TYPE_0(ENUM, RETURN)               \
3092   builtin_types[(int) ENUM]                             \
3093     = build_function_type (builtin_types[(int) RETURN], \
3094                            void_list_node);
3095 #define DEF_FUNCTION_TYPE_1(ENUM, RETURN, ARG1)                         \
3096   builtin_types[(int) ENUM]                                             \
3097     = build_function_type (builtin_types[(int) RETURN],                 \
3098                            tree_cons (NULL_TREE,                        \
3099                                       builtin_types[(int) ARG1],        \
3100                                       void_list_node));
3101 #define DEF_FUNCTION_TYPE_2(ENUM, RETURN, ARG1, ARG2)   \
3102   builtin_types[(int) ENUM]                             \
3103     = build_function_type                               \
3104       (builtin_types[(int) RETURN],                     \
3105        tree_cons (NULL_TREE,                            \
3106                   builtin_types[(int) ARG1],            \
3107                   tree_cons (NULL_TREE,                 \
3108                              builtin_types[(int) ARG2], \
3109                              void_list_node)));
3110 #define DEF_FUNCTION_TYPE_3(ENUM, RETURN, ARG1, ARG2, ARG3)              \
3111   builtin_types[(int) ENUM]                                              \
3112     = build_function_type                                                \
3113       (builtin_types[(int) RETURN],                                      \
3114        tree_cons (NULL_TREE,                                             \
3115                   builtin_types[(int) ARG1],                             \
3116                   tree_cons (NULL_TREE,                                  \
3117                              builtin_types[(int) ARG2],                  \
3118                              tree_cons (NULL_TREE,                       \
3119                                         builtin_types[(int) ARG3],       \
3120                                         void_list_node))));
3121 #define DEF_FUNCTION_TYPE_4(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4)       \
3122   builtin_types[(int) ENUM]                                             \
3123     = build_function_type                                               \
3124       (builtin_types[(int) RETURN],                                     \
3125        tree_cons (NULL_TREE,                                            \
3126                   builtin_types[(int) ARG1],                            \
3127                   tree_cons (NULL_TREE,                                 \
3128                              builtin_types[(int) ARG2],                 \
3129                              tree_cons                                  \
3130                              (NULL_TREE,                                \
3131                               builtin_types[(int) ARG3],                \
3132                               tree_cons (NULL_TREE,                     \
3133                                          builtin_types[(int) ARG4],     \
3134                                          void_list_node)))));
3135 #define DEF_FUNCTION_TYPE_VAR_0(ENUM, RETURN)                           \
3136   builtin_types[(int) ENUM]                                             \
3137     = build_function_type (builtin_types[(int) RETURN], NULL_TREE);
3138 #define DEF_FUNCTION_TYPE_VAR_1(ENUM, RETURN, ARG1)                      \
3139    builtin_types[(int) ENUM]                                             \
3140     = build_function_type (builtin_types[(int) RETURN],          \
3141                            tree_cons (NULL_TREE,                         \
3142                                       builtin_types[(int) ARG1],         \
3143                                       NULL_TREE));
3144
3145 #define DEF_FUNCTION_TYPE_VAR_2(ENUM, RETURN, ARG1, ARG2)       \
3146    builtin_types[(int) ENUM]                                    \
3147     = build_function_type                                       \
3148       (builtin_types[(int) RETURN],                             \
3149        tree_cons (NULL_TREE,                                    \
3150                   builtin_types[(int) ARG1],                    \
3151                   tree_cons (NULL_TREE,                         \
3152                              builtin_types[(int) ARG2],         \
3153                              NULL_TREE)));
3154
3155 #define DEF_FUNCTION_TYPE_VAR_3(ENUM, RETURN, ARG1, ARG2, ARG3)         \
3156    builtin_types[(int) ENUM]                                            \
3157     = build_function_type                                               \
3158       (builtin_types[(int) RETURN],                                     \
3159        tree_cons (NULL_TREE,                                            \
3160                   builtin_types[(int) ARG1],                            \
3161                   tree_cons (NULL_TREE,                                 \
3162                              builtin_types[(int) ARG2],                 \
3163                              tree_cons (NULL_TREE,                      \
3164                                         builtin_types[(int) ARG3],      \
3165                                         NULL_TREE))));
3166
3167 #define DEF_POINTER_TYPE(ENUM, TYPE)                    \
3168   builtin_types[(int) ENUM]                             \
3169     = build_pointer_type (builtin_types[(int) TYPE]);
3170 #include "builtin-types.def"
3171 #undef DEF_PRIMITIVE_TYPE
3172 #undef DEF_FUNCTION_TYPE_1
3173 #undef DEF_FUNCTION_TYPE_2
3174 #undef DEF_FUNCTION_TYPE_3
3175 #undef DEF_FUNCTION_TYPE_4
3176 #undef DEF_FUNCTION_TYPE_VAR_0
3177 #undef DEF_FUNCTION_TYPE_VAR_1
3178 #undef DEF_FUNCTION_TYPE_VAR_2
3179 #undef DEF_FUNCTION_TYPE_VAR_3
3180 #undef DEF_POINTER_TYPE
3181
3182   c_init_attributes ();
3183
3184 #define DEF_BUILTIN(ENUM, NAME, CLASS, TYPE, LIBTYPE,                   \
3185                     BOTH_P, FALLBACK_P, NONANSI_P, ATTRS, IMPLICIT)     \
3186   if (NAME)                                                             \
3187     {                                                                   \
3188       tree decl;                                                        \
3189                                                                         \
3190       gcc_assert (!strncmp (NAME, "__builtin_",                         \
3191                             strlen ("__builtin_")));                    \
3192                                                                         \
3193       if (!BOTH_P)                                                      \
3194         decl = lang_hooks.builtin_function (NAME, builtin_types[TYPE],  \
3195                                  ENUM,                                  \
3196                                  CLASS,                                 \
3197                                  (FALLBACK_P                            \
3198                                   ? (NAME + strlen ("__builtin_"))      \
3199                                   : NULL),                              \
3200                                  built_in_attributes[(int) ATTRS]);     \
3201       else                                                              \
3202         decl = builtin_function_2 (NAME,                                \
3203                                    NAME + strlen ("__builtin_"),        \
3204                                    builtin_types[TYPE],                 \
3205                                    builtin_types[LIBTYPE],              \
3206                                    ENUM,                                \
3207                                    CLASS,                               \
3208                                    FALLBACK_P,                          \
3209                                    NONANSI_P,                           \
3210                                    built_in_attributes[(int) ATTRS]);   \
3211                                                                         \
3212       built_in_decls[(int) ENUM] = decl;                                \
3213       if (IMPLICIT)                                                     \
3214         implicit_built_in_decls[(int) ENUM] = decl;                     \
3215     }
3216 #include "builtins.def"
3217 #undef DEF_BUILTIN
3218
3219   targetm.init_builtins ();
3220   if (flag_mudflap)
3221     mudflap_init ();
3222
3223   main_identifier_node = get_identifier ("main");
3224 }
3225
3226 tree
3227 build_va_arg (tree expr, tree type)
3228 {
3229   return build1 (VA_ARG_EXPR, type, expr);
3230 }
3231
3232
3233 /* Linked list of disabled built-in functions.  */
3234
3235 typedef struct disabled_builtin
3236 {
3237   const char *name;
3238   struct disabled_builtin *next;
3239 } disabled_builtin;
3240 static disabled_builtin *disabled_builtins = NULL;
3241
3242 static bool builtin_function_disabled_p (const char *);
3243
3244 /* Disable a built-in function specified by -fno-builtin-NAME.  If NAME
3245    begins with "__builtin_", give an error.  */
3246
3247 void
3248 disable_builtin_function (const char *name)
3249 {
3250   if (strncmp (name, "__builtin_", strlen ("__builtin_")) == 0)
3251     error ("cannot disable built-in function %qs", name);
3252   else
3253     {
3254       disabled_builtin *new_disabled_builtin = XNEW (disabled_builtin);
3255       new_disabled_builtin->name = name;
3256       new_disabled_builtin->next = disabled_builtins;
3257       disabled_builtins = new_disabled_builtin;
3258     }
3259 }
3260
3261
3262 /* Return true if the built-in function NAME has been disabled, false
3263    otherwise.  */
3264
3265 static bool
3266 builtin_function_disabled_p (const char *name)
3267 {
3268   disabled_builtin *p;
3269   for (p = disabled_builtins; p != NULL; p = p->next)
3270     {
3271       if (strcmp (name, p->name) == 0)
3272         return true;
3273     }
3274   return false;
3275 }
3276
3277
3278 /* Possibly define a builtin function with one or two names.  BUILTIN_NAME
3279    is an __builtin_-prefixed name; NAME is the ordinary name; one or both
3280    of these may be NULL (though both being NULL is useless).
3281    BUILTIN_TYPE is the type of the __builtin_-prefixed function;
3282    TYPE is the type of the function with the ordinary name.  These
3283    may differ if the ordinary name is declared with a looser type to avoid
3284    conflicts with headers.  FUNCTION_CODE and CL are as for
3285    builtin_function.  If LIBRARY_NAME_P is nonzero, NAME is passed as
3286    the LIBRARY_NAME parameter to builtin_function when declaring BUILTIN_NAME.
3287    If NONANSI_P is true, the name NAME is treated as a non-ANSI name;
3288    ATTRS is the tree list representing the builtin's function attributes.
3289    Returns the declaration of BUILTIN_NAME, if any, otherwise
3290    the declaration of NAME.  Does not declare NAME if flag_no_builtin,
3291    or if NONANSI_P and flag_no_nonansi_builtin.  */
3292
3293 static tree
3294 builtin_function_2 (const char *builtin_name, const char *name,
3295                     tree builtin_type, tree type,
3296                     enum built_in_function function_code,
3297                     enum built_in_class cl, int library_name_p,
3298                     bool nonansi_p, tree attrs)
3299 {
3300   tree bdecl = NULL_TREE;
3301   tree decl = NULL_TREE;
3302
3303   if (builtin_name != 0)
3304     bdecl = lang_hooks.builtin_function (builtin_name, builtin_type,
3305                                          function_code, cl,
3306                                          library_name_p ? name : NULL, attrs);
3307
3308   if (name != 0 && !flag_no_builtin && !builtin_function_disabled_p (name)
3309       && !(nonansi_p && flag_no_nonansi_builtin))
3310     decl = lang_hooks.builtin_function (name, type, function_code, cl,
3311                                         NULL, attrs);
3312
3313   return (bdecl != 0 ? bdecl : decl);
3314 }
3315 \f
3316 /* Nonzero if the type T promotes to int.  This is (nearly) the
3317    integral promotions defined in ISO C99 6.3.1.1/2.  */
3318
3319 bool
3320 c_promoting_integer_type_p (tree t)
3321 {
3322   switch (TREE_CODE (t))
3323     {
3324     case INTEGER_TYPE:
3325       return (TYPE_MAIN_VARIANT (t) == char_type_node
3326               || TYPE_MAIN_VARIANT (t) == signed_char_type_node
3327               || TYPE_MAIN_VARIANT (t) == unsigned_char_type_node
3328               || TYPE_MAIN_VARIANT (t) == short_integer_type_node
3329               || TYPE_MAIN_VARIANT (t) == short_unsigned_type_node
3330               || TYPE_PRECISION (t) < TYPE_PRECISION (integer_type_node));
3331
3332     case ENUMERAL_TYPE:
3333       /* ??? Technically all enumerations not larger than an int
3334          promote to an int.  But this is used along code paths
3335          that only want to notice a size change.  */
3336       return TYPE_PRECISION (t) < TYPE_PRECISION (integer_type_node);
3337
3338     case BOOLEAN_TYPE:
3339       return 1;
3340
3341     default:
3342       return 0;
3343     }
3344 }
3345
3346 /* Return 1 if PARMS specifies a fixed number of parameters
3347    and none of their types is affected by default promotions.  */
3348
3349 int
3350 self_promoting_args_p (tree parms)
3351 {
3352   tree t;
3353   for (t = parms; t; t = TREE_CHAIN (t))
3354     {
3355       tree type = TREE_VALUE (t);
3356
3357       if (TREE_CHAIN (t) == 0 && type != void_type_node)
3358         return 0;
3359
3360       if (type == 0)
3361         return 0;
3362
3363       if (TYPE_MAIN_VARIANT (type) == float_type_node)
3364         return 0;
3365
3366       if (c_promoting_integer_type_p (type))
3367         return 0;
3368     }
3369   return 1;
3370 }
3371
3372 /* Recursively examines the array elements of TYPE, until a non-array
3373    element type is found.  */
3374
3375 tree
3376 strip_array_types (tree type)
3377 {
3378   while (TREE_CODE (type) == ARRAY_TYPE)
3379     type = TREE_TYPE (type);
3380
3381   return type;
3382 }
3383
3384 /* Recursively remove any '*' or '&' operator from TYPE.  */
3385 tree
3386 strip_pointer_operator (tree t)
3387 {
3388   while (POINTER_TYPE_P (t))
3389     t = TREE_TYPE (t);
3390   return t;
3391 }
3392
3393 /* Used to compare case labels.  K1 and K2 are actually tree nodes
3394    representing case labels, or NULL_TREE for a `default' label.
3395    Returns -1 if K1 is ordered before K2, -1 if K1 is ordered after
3396    K2, and 0 if K1 and K2 are equal.  */
3397
3398 int
3399 case_compare (splay_tree_key k1, splay_tree_key k2)
3400 {
3401   /* Consider a NULL key (such as arises with a `default' label) to be
3402      smaller than anything else.  */
3403   if (!k1)
3404     return k2 ? -1 : 0;
3405   else if (!k2)
3406     return k1 ? 1 : 0;
3407
3408   return tree_int_cst_compare ((tree) k1, (tree) k2);
3409 }
3410
3411 /* Process a case label for the range LOW_VALUE ... HIGH_VALUE.  If
3412    LOW_VALUE and HIGH_VALUE are both NULL_TREE then this case label is
3413    actually a `default' label.  If only HIGH_VALUE is NULL_TREE, then
3414    case label was declared using the usual C/C++ syntax, rather than
3415    the GNU case range extension.  CASES is a tree containing all the
3416    case ranges processed so far; COND is the condition for the
3417    switch-statement itself.  Returns the CASE_LABEL_EXPR created, or
3418    ERROR_MARK_NODE if no CASE_LABEL_EXPR is created.  */
3419
3420 tree
3421 c_add_case_label (splay_tree cases, tree cond, tree orig_type,
3422                   tree low_value, tree high_value)
3423 {
3424   tree type;
3425   tree label;
3426   tree case_label;
3427   splay_tree_node node;
3428
3429   /* Create the LABEL_DECL itself.  */
3430   label = create_artificial_label ();
3431
3432   /* If there was an error processing the switch condition, bail now
3433      before we get more confused.  */
3434   if (!cond || cond == error_mark_node)
3435     goto error_out;
3436
3437   if ((low_value && TREE_TYPE (low_value)
3438        && POINTER_TYPE_P (TREE_TYPE (low_value)))
3439       || (high_value && TREE_TYPE (high_value)
3440           && POINTER_TYPE_P (TREE_TYPE (high_value))))
3441     error ("pointers are not permitted as case values");
3442
3443   /* Case ranges are a GNU extension.  */
3444   if (high_value && pedantic)
3445     pedwarn ("range expressions in switch statements are non-standard");
3446
3447   type = TREE_TYPE (cond);
3448   if (low_value)
3449     {
3450       low_value = check_case_value (low_value);
3451       low_value = convert_and_check (type, low_value);
3452     }
3453   if (high_value)
3454     {
3455       high_value = check_case_value (high_value);
3456       high_value = convert_and_check (type, high_value);
3457     }
3458
3459   /* If an error has occurred, bail out now.  */
3460   if (low_value == error_mark_node || high_value == error_mark_node)
3461     goto error_out;
3462
3463   /* If the LOW_VALUE and HIGH_VALUE are the same, then this isn't
3464      really a case range, even though it was written that way.  Remove
3465      the HIGH_VALUE to simplify later processing.  */
3466   if (tree_int_cst_equal (low_value, high_value))
3467     high_value = NULL_TREE;
3468   if (low_value && high_value
3469       && !tree_int_cst_lt (low_value, high_value))
3470     warning ("empty range specified");
3471
3472   /* See if the case is in range of the type of the original testing
3473      expression.  If both low_value and high_value are out of range,
3474      don't insert the case label and return NULL_TREE.  */
3475   if (low_value
3476       && !check_case_bounds (type, orig_type,
3477                              &low_value, high_value ? &high_value : NULL))
3478     return NULL_TREE;
3479
3480   /* Look up the LOW_VALUE in the table of case labels we already
3481      have.  */
3482   node = splay_tree_lookup (cases, (splay_tree_key) low_value);
3483   /* If there was not an exact match, check for overlapping ranges.
3484      There's no need to do this if there's no LOW_VALUE or HIGH_VALUE;
3485      that's a `default' label and the only overlap is an exact match.  */
3486   if (!node && (low_value || high_value))
3487     {
3488       splay_tree_node low_bound;
3489       splay_tree_node high_bound;
3490
3491       /* Even though there wasn't an exact match, there might be an
3492          overlap between this case range and another case range.
3493          Since we've (inductively) not allowed any overlapping case
3494          ranges, we simply need to find the greatest low case label
3495          that is smaller that LOW_VALUE, and the smallest low case
3496          label that is greater than LOW_VALUE.  If there is an overlap
3497          it will occur in one of these two ranges.  */
3498       low_bound = splay_tree_predecessor (cases,
3499                                           (splay_tree_key) low_value);
3500       high_bound = splay_tree_successor (cases,
3501                                          (splay_tree_key) low_value);
3502
3503       /* Check to see if the LOW_BOUND overlaps.  It is smaller than
3504          the LOW_VALUE, so there is no need to check unless the
3505          LOW_BOUND is in fact itself a case range.  */
3506       if (low_bound
3507           && CASE_HIGH ((tree) low_bound->value)
3508           && tree_int_cst_compare (CASE_HIGH ((tree) low_bound->value),
3509                                     low_value) >= 0)
3510         node = low_bound;
3511       /* Check to see if the HIGH_BOUND overlaps.  The low end of that
3512          range is bigger than the low end of the current range, so we
3513          are only interested if the current range is a real range, and
3514          not an ordinary case label.  */
3515       else if (high_bound
3516                && high_value
3517                && (tree_int_cst_compare ((tree) high_bound->key,
3518                                          high_value)
3519                    <= 0))
3520         node = high_bound;
3521     }
3522   /* If there was an overlap, issue an error.  */
3523   if (node)
3524     {
3525       tree duplicate = CASE_LABEL ((tree) node->value);
3526
3527       if (high_value)
3528         {
3529           error ("duplicate (or overlapping) case value");
3530           error ("%Jthis is the first entry overlapping that value", duplicate);
3531         }
3532       else if (low_value)
3533         {
3534           error ("duplicate case value") ;
3535           error ("%Jpreviously used here", duplicate);
3536         }
3537       else
3538         {
3539           error ("multiple default labels in one switch");
3540           error ("%Jthis is the first default label", duplicate);
3541         }
3542       goto error_out;
3543     }
3544
3545   /* Add a CASE_LABEL to the statement-tree.  */
3546   case_label = add_stmt (build_case_label (low_value, high_value, label));
3547   /* Register this case label in the splay tree.  */
3548   splay_tree_insert (cases,
3549                      (splay_tree_key) low_value,
3550                      (splay_tree_value) case_label);
3551
3552   return case_label;
3553
3554  error_out:
3555   /* Add a label so that the back-end doesn't think that the beginning of
3556      the switch is unreachable.  Note that we do not add a case label, as
3557      that just leads to duplicates and thence to aborts later on.  */
3558   if (!cases->root)
3559     {
3560       tree t = create_artificial_label ();
3561       add_stmt (build_stmt (LABEL_EXPR, t));
3562     }
3563   return error_mark_node;
3564 }
3565
3566 /* Subroutines of c_do_switch_warnings, called via splay_tree_foreach.
3567    Used to verify that case values match up with enumerator values.  */
3568
3569 static void
3570 match_case_to_enum_1 (tree key, tree type, tree label)
3571 {
3572   char buf[2 + 2*HOST_BITS_PER_WIDE_INT/4 + 1];
3573
3574   /* ??? Not working too hard to print the double-word value.
3575      Should perhaps be done with %lwd in the diagnostic routines?  */
3576   if (TREE_INT_CST_HIGH (key) == 0)
3577     snprintf (buf, sizeof (buf), HOST_WIDE_INT_PRINT_UNSIGNED,
3578               TREE_INT_CST_LOW (key));
3579   else if (!TYPE_UNSIGNED (type)
3580            && TREE_INT_CST_HIGH (key) == -1
3581            && TREE_INT_CST_LOW (key) != 0)
3582     snprintf (buf, sizeof (buf), "-" HOST_WIDE_INT_PRINT_UNSIGNED,
3583               -TREE_INT_CST_LOW (key));
3584   else
3585     snprintf (buf, sizeof (buf), HOST_WIDE_INT_PRINT_DOUBLE_HEX,
3586               TREE_INT_CST_HIGH (key), TREE_INT_CST_LOW (key));
3587
3588   if (TYPE_NAME (type) == 0)
3589     warning ("%Jcase value %qs not in enumerated type",
3590              CASE_LABEL (label), buf);
3591   else
3592     warning ("%Jcase value %qs not in enumerated type %qT",
3593              CASE_LABEL (label), buf, type);
3594 }
3595
3596 static int
3597 match_case_to_enum (splay_tree_node node, void *data)
3598 {
3599   tree label = (tree) node->value;
3600   tree type = (tree) data;
3601
3602   /* Skip default case.  */
3603   if (!CASE_LOW (label))
3604     return 0;
3605
3606   /* If TREE_ADDRESSABLE is not set, that means CASE_LOW did not appear
3607      when we did our enum->case scan.  Reset our scratch bit after.  */
3608   if (!TREE_ADDRESSABLE (label))
3609     match_case_to_enum_1 (CASE_LOW (label), type, label);
3610   else
3611     TREE_ADDRESSABLE (label) = 0;
3612
3613   /* If CASE_HIGH is non-null, we have a range.  Here we must search.
3614      Note that the old code in stmt.c did not check for the values in
3615      the range either, just the endpoints.  */
3616   if (CASE_HIGH (label))
3617     {
3618       tree chain, key = CASE_HIGH (label);
3619
3620       for (chain = TYPE_VALUES (type);
3621            chain && !tree_int_cst_equal (key, TREE_VALUE (chain));
3622            chain = TREE_CHAIN (chain))
3623         continue;
3624       if (!chain)
3625         match_case_to_enum_1 (key, type, label);
3626     }
3627
3628   return 0;
3629 }
3630
3631 /* Handle -Wswitch*.  Called from the front end after parsing the switch
3632    construct.  */
3633 /* ??? Should probably be somewhere generic, since other languages besides
3634    C and C++ would want this.  We'd want to agree on the datastructure,
3635    however, which is a problem.  Alternately, we operate on gimplified
3636    switch_exprs, which I don't especially like.  At the moment, however,
3637    C/C++ are the only tree-ssa languages that support enumerations at all,
3638    so the point is moot.  */
3639
3640 void
3641 c_do_switch_warnings (splay_tree cases, tree switch_stmt)
3642 {
3643   splay_tree_node default_node;
3644   location_t switch_location;
3645   tree type;
3646
3647   if (!warn_switch && !warn_switch_enum && !warn_switch_default)
3648     return;
3649
3650   if (EXPR_HAS_LOCATION (switch_stmt))
3651     switch_location = EXPR_LOCATION (switch_stmt);
3652   else
3653     switch_location = input_location;
3654
3655   type = SWITCH_TYPE (switch_stmt);
3656
3657   default_node = splay_tree_lookup (cases, (splay_tree_key) NULL);
3658   if (warn_switch_default && !default_node)
3659     warning ("%Hswitch missing default case", &switch_location);
3660
3661   /* If the switch expression was an enumerated type, check that
3662      exactly all enumeration literals are covered by the cases.
3663      The check is made when -Wswitch was specified and there is no
3664      default case, or when -Wswitch-enum was specified.  */
3665   if (((warn_switch && !default_node) || warn_switch_enum)
3666       && type && TREE_CODE (type) == ENUMERAL_TYPE
3667       && TREE_CODE (SWITCH_COND (switch_stmt)) != INTEGER_CST)
3668     {
3669       tree chain;
3670
3671       /* The time complexity here is O(N*lg(N)) worst case, but for the
3672          common case of monotonically increasing enumerators, it is
3673          O(N), since the nature of the splay tree will keep the next
3674          element adjacent to the root at all times.  */
3675
3676       for (chain = TYPE_VALUES (type); chain; chain = TREE_CHAIN (chain))
3677         {
3678           splay_tree_node node
3679             = splay_tree_lookup (cases, (splay_tree_key) TREE_VALUE (chain));
3680
3681           if (node)
3682             {
3683               /* Mark the CASE_LOW part of the case entry as seen, so
3684                  that we save time later.  Choose TREE_ADDRESSABLE
3685                  randomly as a bit that won't have been set to-date.  */
3686               tree label = (tree) node->value;
3687               TREE_ADDRESSABLE (label) = 1;
3688             }
3689           else
3690             {
3691               /* Warn if there are enumerators that don't correspond to
3692                  case expressions.  */
3693               warning ("%Henumeration value %qE not handled in switch",
3694                        &switch_location, TREE_PURPOSE (chain));
3695             }
3696         }
3697
3698       /* Warn if there are case expressions that don't correspond to
3699          enumerators.  This can occur since C and C++ don't enforce
3700          type-checking of assignments to enumeration variables.
3701
3702          The time complexity here is O(N**2) worst case, since we've
3703          not sorted the enumeration values.  However, in the absence
3704          of case ranges this is O(N), since all single cases that
3705          corresponded to enumerations have been marked above.  */
3706
3707       splay_tree_foreach (cases, match_case_to_enum, type);
3708     }
3709 }
3710
3711 /* Finish an expression taking the address of LABEL (an
3712    IDENTIFIER_NODE).  Returns an expression for the address.  */
3713
3714 tree
3715 finish_label_address_expr (tree label)
3716 {
3717   tree result;
3718
3719   if (pedantic)
3720     pedwarn ("taking the address of a label is non-standard");
3721
3722   if (label == error_mark_node)
3723     return error_mark_node;
3724
3725   label = lookup_label (label);
3726   if (label == NULL_TREE)
3727     result = null_pointer_node;
3728   else
3729     {
3730       TREE_USED (label) = 1;
3731       result = build1 (ADDR_EXPR, ptr_type_node, label);
3732       /* The current function in not necessarily uninlinable.
3733          Computed gotos are incompatible with inlining, but the value
3734          here could be used only in a diagnostic, for example.  */
3735     }
3736
3737   return result;
3738 }
3739
3740 /* Hook used by expand_expr to expand language-specific tree codes.  */
3741 /* The only things that should go here are bits needed to expand
3742    constant initializers.  Everything else should be handled by the
3743    gimplification routines.  */
3744
3745 rtx
3746 c_expand_expr (tree exp, rtx target, enum machine_mode tmode,
3747                int modifier /* Actually enum_modifier.  */,
3748                rtx *alt_rtl)
3749 {
3750   switch (TREE_CODE (exp))
3751     {
3752     case COMPOUND_LITERAL_EXPR:
3753       {
3754         /* Initialize the anonymous variable declared in the compound
3755            literal, then return the variable.  */
3756         tree decl = COMPOUND_LITERAL_EXPR_DECL (exp);
3757         emit_local_var (decl);
3758         return expand_expr_real (decl, target, tmode, modifier, alt_rtl);
3759       }
3760
3761     default:
3762       gcc_unreachable ();
3763     }
3764 }
3765
3766 /* Hook used by staticp to handle language-specific tree codes.  */
3767
3768 tree
3769 c_staticp (tree exp)
3770 {
3771   return (TREE_CODE (exp) == COMPOUND_LITERAL_EXPR
3772           && TREE_STATIC (COMPOUND_LITERAL_EXPR_DECL (exp))
3773           ? exp : NULL);
3774 }
3775 \f
3776
3777 /* Given a boolean expression ARG, return a tree representing an increment
3778    or decrement (as indicated by CODE) of ARG.  The front end must check for
3779    invalid cases (e.g., decrement in C++).  */
3780 tree
3781 boolean_increment (enum tree_code code, tree arg)
3782 {
3783   tree val;
3784   tree true_res = boolean_true_node;
3785
3786   arg = stabilize_reference (arg);
3787   switch (code)
3788     {
3789     case PREINCREMENT_EXPR:
3790       val = build2 (MODIFY_EXPR, TREE_TYPE (arg), arg, true_res);
3791       break;
3792     case POSTINCREMENT_EXPR:
3793       val = build2 (MODIFY_EXPR, TREE_TYPE (arg), arg, true_res);
3794       arg = save_expr (arg);
3795       val = build2 (COMPOUND_EXPR, TREE_TYPE (arg), val, arg);
3796       val = build2 (COMPOUND_EXPR, TREE_TYPE (arg), arg, val);
3797       break;
3798     case PREDECREMENT_EXPR:
3799       val = build2 (MODIFY_EXPR, TREE_TYPE (arg), arg,
3800                     invert_truthvalue (arg));
3801       break;
3802     case POSTDECREMENT_EXPR:
3803       val = build2 (MODIFY_EXPR, TREE_TYPE (arg), arg,
3804                     invert_truthvalue (arg));
3805       arg = save_expr (arg);
3806       val = build2 (COMPOUND_EXPR, TREE_TYPE (arg), val, arg);
3807       val = build2 (COMPOUND_EXPR, TREE_TYPE (arg), arg, val);
3808       break;
3809     default:
3810       gcc_unreachable ();
3811     }
3812   TREE_SIDE_EFFECTS (val) = 1;
3813   return val;
3814 }
3815 \f
3816 /* Built-in macros for stddef.h, that require macros defined in this
3817    file.  */
3818 void
3819 c_stddef_cpp_builtins(void)
3820 {
3821   builtin_define_with_value ("__SIZE_TYPE__", SIZE_TYPE, 0);
3822   builtin_define_with_value ("__PTRDIFF_TYPE__", PTRDIFF_TYPE, 0);
3823   builtin_define_with_value ("__WCHAR_TYPE__", MODIFIED_WCHAR_TYPE, 0);
3824   builtin_define_with_value ("__WINT_TYPE__", WINT_TYPE, 0);
3825   builtin_define_with_value ("__INTMAX_TYPE__", INTMAX_TYPE, 0);
3826   builtin_define_with_value ("__UINTMAX_TYPE__", UINTMAX_TYPE, 0);
3827 }
3828
3829 static void
3830 c_init_attributes (void)
3831 {
3832   /* Fill in the built_in_attributes array.  */
3833 #define DEF_ATTR_NULL_TREE(ENUM)                                \
3834   built_in_attributes[(int) ENUM] = NULL_TREE;
3835 #define DEF_ATTR_INT(ENUM, VALUE)                               \
3836   built_in_attributes[(int) ENUM] = build_int_cst (NULL_TREE, VALUE);
3837 #define DEF_ATTR_IDENT(ENUM, STRING)                            \
3838   built_in_attributes[(int) ENUM] = get_identifier (STRING);
3839 #define DEF_ATTR_TREE_LIST(ENUM, PURPOSE, VALUE, CHAIN) \
3840   built_in_attributes[(int) ENUM]                       \
3841     = tree_cons (built_in_attributes[(int) PURPOSE],    \
3842                  built_in_attributes[(int) VALUE],      \
3843                  built_in_attributes[(int) CHAIN]);
3844 #include "builtin-attrs.def"
3845 #undef DEF_ATTR_NULL_TREE
3846 #undef DEF_ATTR_INT
3847 #undef DEF_ATTR_IDENT
3848 #undef DEF_ATTR_TREE_LIST
3849 }
3850
3851 /* Attribute handlers common to C front ends.  */
3852
3853 /* Handle a "packed" attribute; arguments as in
3854    struct attribute_spec.handler.  */
3855
3856 static tree
3857 handle_packed_attribute (tree *node, tree name, tree ARG_UNUSED (args),
3858                          int flags, bool *no_add_attrs)
3859 {
3860   if (TYPE_P (*node))
3861     {
3862       if (!(flags & (int) ATTR_FLAG_TYPE_IN_PLACE))
3863         *node = build_variant_type_copy (*node);
3864       TYPE_PACKED (*node) = 1;
3865       if (TYPE_MAIN_VARIANT (*node) == *node)
3866         {
3867           /* If it is the main variant, then pack the other variants
3868              too. This happens in,
3869
3870              struct Foo {
3871                struct Foo const *ptr; // creates a variant w/o packed flag
3872                } __ attribute__((packed)); // packs it now.
3873           */
3874           tree probe;
3875
3876           for (probe = *node; probe; probe = TYPE_NEXT_VARIANT (probe))
3877             TYPE_PACKED (probe) = 1;
3878         }
3879
3880     }
3881   else if (TREE_CODE (*node) == FIELD_DECL)
3882     DECL_PACKED (*node) = 1;
3883   /* We can't set DECL_PACKED for a VAR_DECL, because the bit is
3884      used for DECL_REGISTER.  It wouldn't mean anything anyway.
3885      We can't set DECL_PACKED on the type of a TYPE_DECL, because
3886      that changes what the typedef is typing.  */
3887   else
3888     {
3889       warning ("%qs attribute ignored", IDENTIFIER_POINTER (name));
3890       *no_add_attrs = true;
3891     }
3892
3893   return NULL_TREE;
3894 }
3895
3896 /* Handle a "nocommon" attribute; arguments as in
3897    struct attribute_spec.handler.  */
3898
3899 static tree
3900 handle_nocommon_attribute (tree *node, tree name,
3901                            tree ARG_UNUSED (args),
3902                            int ARG_UNUSED (flags), bool *no_add_attrs)
3903 {
3904   if (TREE_CODE (*node) == VAR_DECL)
3905     DECL_COMMON (*node) = 0;
3906   else
3907     {
3908       warning ("%qs attribute ignored", IDENTIFIER_POINTER (name));
3909       *no_add_attrs = true;
3910     }
3911
3912   return NULL_TREE;
3913 }
3914
3915 /* Handle a "common" attribute; arguments as in
3916    struct attribute_spec.handler.  */
3917
3918 static tree
3919 handle_common_attribute (tree *node, tree name, tree ARG_UNUSED (args),
3920                          int ARG_UNUSED (flags), bool *no_add_attrs)
3921 {
3922   if (TREE_CODE (*node) == VAR_DECL)
3923     DECL_COMMON (*node) = 1;
3924   else
3925     {
3926       warning ("%qs attribute ignored", IDENTIFIER_POINTER (name));
3927       *no_add_attrs = true;
3928     }
3929
3930   return NULL_TREE;
3931 }
3932
3933 /* Handle a "noreturn" attribute; arguments as in
3934    struct attribute_spec.handler.  */
3935
3936 static tree
3937 handle_noreturn_attribute (tree *node, tree name, tree ARG_UNUSED (args),
3938                            int ARG_UNUSED (flags), bool *no_add_attrs)
3939 {
3940   tree type = TREE_TYPE (*node);
3941
3942   /* See FIXME comment in c_common_attribute_table.  */
3943   if (TREE_CODE (*node) == FUNCTION_DECL)
3944     TREE_THIS_VOLATILE (*node) = 1;
3945   else if (TREE_CODE (type) == POINTER_TYPE
3946            && TREE_CODE (TREE_TYPE (type)) == FUNCTION_TYPE)
3947     TREE_TYPE (*node)
3948       = build_pointer_type
3949         (build_type_variant (TREE_TYPE (type),
3950                              TYPE_READONLY (TREE_TYPE (type)), 1));
3951   else
3952     {
3953       warning ("%qs attribute ignored", IDENTIFIER_POINTER (name));
3954       *no_add_attrs = true;
3955     }
3956
3957   return NULL_TREE;
3958 }
3959
3960 /* Handle a "noinline" attribute; arguments as in
3961    struct attribute_spec.handler.  */
3962
3963 static tree
3964 handle_noinline_attribute (tree *node, tree name,
3965                            tree ARG_UNUSED (args),
3966                            int ARG_UNUSED (flags), bool *no_add_attrs)
3967 {
3968   if (TREE_CODE (*node) == FUNCTION_DECL)
3969     DECL_UNINLINABLE (*node) = 1;
3970   else
3971     {
3972       warning ("%qs attribute ignored", IDENTIFIER_POINTER (name));
3973       *no_add_attrs = true;
3974     }
3975
3976   return NULL_TREE;
3977 }
3978
3979 /* Handle a "always_inline" attribute; arguments as in
3980    struct attribute_spec.handler.  */
3981
3982 static tree
3983 handle_always_inline_attribute (tree *node, tree name,
3984                                 tree ARG_UNUSED (args),
3985                                 int ARG_UNUSED (flags),
3986                                 bool *no_add_attrs)
3987 {
3988   if (TREE_CODE (*node) == FUNCTION_DECL)
3989     {
3990       /* Do nothing else, just set the attribute.  We'll get at
3991          it later with lookup_attribute.  */
3992     }
3993   else
3994     {
3995       warning ("%qs attribute ignored", IDENTIFIER_POINTER (name));
3996       *no_add_attrs = true;
3997     }
3998
3999   return NULL_TREE;
4000 }
4001
4002 /* Handle a "used" attribute; arguments as in
4003    struct attribute_spec.handler.  */
4004
4005 static tree
4006 handle_used_attribute (tree *pnode, tree name, tree ARG_UNUSED (args),
4007                        int ARG_UNUSED (flags), bool *no_add_attrs)
4008 {
4009   tree node = *pnode;
4010
4011   if (TREE_CODE (node) == FUNCTION_DECL
4012       || (TREE_CODE (node) == VAR_DECL && TREE_STATIC (node)))
4013     {
4014       TREE_USED (node) = 1;
4015       DECL_PRESERVE_P (node) = 1;
4016     }
4017   else
4018     {
4019       warning ("%qs attribute ignored", IDENTIFIER_POINTER (name));
4020       *no_add_attrs = true;
4021     }
4022
4023   return NULL_TREE;
4024 }
4025
4026 /* Handle a "unused" attribute; arguments as in
4027    struct attribute_spec.handler.  */
4028
4029 static tree
4030 handle_unused_attribute (tree *node, tree name, tree ARG_UNUSED (args),
4031                          int flags, bool *no_add_attrs)
4032 {
4033   if (DECL_P (*node))
4034     {
4035       tree decl = *node;
4036
4037       if (TREE_CODE (decl) == PARM_DECL
4038           || TREE_CODE (decl) == VAR_DECL
4039           || TREE_CODE (decl) == FUNCTION_DECL
4040           || TREE_CODE (decl) == LABEL_DECL
4041           || TREE_CODE (decl) == TYPE_DECL)
4042         TREE_USED (decl) = 1;
4043       else
4044         {
4045           warning ("%qs attribute ignored", IDENTIFIER_POINTER (name));
4046           *no_add_attrs = true;
4047         }
4048     }
4049   else
4050     {
4051       if (!(flags & (int) ATTR_FLAG_TYPE_IN_PLACE))
4052         *node = build_variant_type_copy (*node);
4053       TREE_USED (*node) = 1;
4054     }
4055
4056   return NULL_TREE;
4057 }
4058
4059 /* Handle a "const" attribute; arguments as in
4060    struct attribute_spec.handler.  */
4061
4062 static tree
4063 handle_const_attribute (tree *node, tree name, tree ARG_UNUSED (args),
4064                         int ARG_UNUSED (flags), bool *no_add_attrs)
4065 {
4066   tree type = TREE_TYPE (*node);
4067
4068   /* See FIXME comment on noreturn in c_common_attribute_table.  */
4069   if (TREE_CODE (*node) == FUNCTION_DECL)
4070     TREE_READONLY (*node) = 1;
4071   else if (TREE_CODE (type) == POINTER_TYPE
4072            && TREE_CODE (TREE_TYPE (type)) == FUNCTION_TYPE)
4073     TREE_TYPE (*node)
4074       = build_pointer_type
4075         (build_type_variant (TREE_TYPE (type), 1,
4076                              TREE_THIS_VOLATILE (TREE_TYPE (type))));
4077   else
4078     {
4079       warning ("%qs attribute ignored", IDENTIFIER_POINTER (name));
4080       *no_add_attrs = true;
4081     }
4082
4083   return NULL_TREE;
4084 }
4085
4086 /* Handle a "transparent_union" attribute; arguments as in
4087    struct attribute_spec.handler.  */
4088
4089 static tree
4090 handle_transparent_union_attribute (tree *node, tree name,
4091                                     tree ARG_UNUSED (args), int flags,
4092                                     bool *no_add_attrs)
4093 {
4094   tree decl = NULL_TREE;
4095   tree *type = NULL;
4096   int is_type = 0;
4097
4098   if (DECL_P (*node))
4099     {
4100       decl = *node;
4101       type = &TREE_TYPE (decl);
4102       is_type = TREE_CODE (*node) == TYPE_DECL;
4103     }
4104   else if (TYPE_P (*node))
4105     type = node, is_type = 1;
4106
4107   if (is_type
4108       && TREE_CODE (*type) == UNION_TYPE
4109       && (decl == 0
4110           || (TYPE_FIELDS (*type) != 0
4111               && TYPE_MODE (*type) == DECL_MODE (TYPE_FIELDS (*type)))))
4112     {
4113       if (!(flags & (int) ATTR_FLAG_TYPE_IN_PLACE))
4114         *type = build_variant_type_copy (*type);
4115       TYPE_TRANSPARENT_UNION (*type) = 1;
4116     }
4117   else if (decl != 0 && TREE_CODE (decl) == PARM_DECL
4118            && TREE_CODE (*type) == UNION_TYPE
4119            && TYPE_MODE (*type) == DECL_MODE (TYPE_FIELDS (*type)))
4120     DECL_TRANSPARENT_UNION (decl) = 1;
4121   else
4122     {
4123       warning ("%qs attribute ignored", IDENTIFIER_POINTER (name));
4124       *no_add_attrs = true;
4125     }
4126
4127   return NULL_TREE;
4128 }
4129
4130 /* Handle a "constructor" attribute; arguments as in
4131    struct attribute_spec.handler.  */
4132
4133 static tree
4134 handle_constructor_attribute (tree *node, tree name,
4135                               tree ARG_UNUSED (args),
4136                               int ARG_UNUSED (flags),
4137                               bool *no_add_attrs)
4138 {
4139   tree decl = *node;
4140   tree type = TREE_TYPE (decl);
4141
4142   if (TREE_CODE (decl) == FUNCTION_DECL
4143       && TREE_CODE (type) == FUNCTION_TYPE
4144       && decl_function_context (decl) == 0)
4145     {
4146       DECL_STATIC_CONSTRUCTOR (decl) = 1;
4147       TREE_USED (decl) = 1;
4148     }
4149   else
4150     {
4151       warning ("%qs attribute ignored", IDENTIFIER_POINTER (name));
4152       *no_add_attrs = true;
4153     }
4154
4155   return NULL_TREE;
4156 }
4157
4158 /* Handle a "destructor" attribute; arguments as in
4159    struct attribute_spec.handler.  */
4160
4161 static tree
4162 handle_destructor_attribute (tree *node, tree name,
4163                              tree ARG_UNUSED (args),
4164                              int ARG_UNUSED (flags),
4165                              bool *no_add_attrs)
4166 {
4167   tree decl = *node;
4168   tree type = TREE_TYPE (decl);
4169
4170   if (TREE_CODE (decl) == FUNCTION_DECL
4171       && TREE_CODE (type) == FUNCTION_TYPE
4172       && decl_function_context (decl) == 0)
4173     {
4174       DECL_STATIC_DESTRUCTOR (decl) = 1;
4175       TREE_USED (decl) = 1;
4176     }
4177   else
4178     {
4179       warning ("%qs attribute ignored", IDENTIFIER_POINTER (name));
4180       *no_add_attrs = true;
4181     }
4182
4183   return NULL_TREE;
4184 }
4185
4186 /* Handle a "mode" attribute; arguments as in
4187    struct attribute_spec.handler.  */
4188
4189 static tree
4190 handle_mode_attribute (tree *node, tree name, tree args,
4191                        int ARG_UNUSED (flags), bool *no_add_attrs)
4192 {
4193   tree type = *node;
4194
4195   *no_add_attrs = true;
4196
4197   if (TREE_CODE (TREE_VALUE (args)) != IDENTIFIER_NODE)
4198     warning ("%qs attribute ignored", IDENTIFIER_POINTER (name));
4199   else
4200     {
4201       int j;
4202       const char *p = IDENTIFIER_POINTER (TREE_VALUE (args));
4203       int len = strlen (p);
4204       enum machine_mode mode = VOIDmode;
4205       tree typefm;
4206       bool valid_mode;
4207
4208       if (len > 4 && p[0] == '_' && p[1] == '_'
4209           && p[len - 1] == '_' && p[len - 2] == '_')
4210         {
4211           char *newp = (char *) alloca (len - 1);
4212
4213           strcpy (newp, &p[2]);
4214           newp[len - 4] = '\0';
4215           p = newp;
4216         }
4217
4218       /* Change this type to have a type with the specified mode.
4219          First check for the special modes.  */
4220       if (!strcmp (p, "byte"))
4221         mode = byte_mode;
4222       else if (!strcmp (p, "word"))
4223         mode = word_mode;
4224       else if (!strcmp (p, "pointer"))
4225         mode = ptr_mode;
4226       else
4227         for (j = 0; j < NUM_MACHINE_MODES; j++)
4228           if (!strcmp (p, GET_MODE_NAME (j)))
4229             {
4230               mode = (enum machine_mode) j;
4231               break;
4232             }
4233
4234       if (mode == VOIDmode)
4235         {
4236           error ("unknown machine mode %qs", p);
4237           return NULL_TREE;
4238         }
4239
4240       valid_mode = false;
4241       switch (GET_MODE_CLASS (mode))
4242         {
4243         case MODE_INT:
4244         case MODE_PARTIAL_INT:
4245         case MODE_FLOAT:
4246           valid_mode = targetm.scalar_mode_supported_p (mode);
4247           break;
4248
4249         case MODE_COMPLEX_INT:
4250         case MODE_COMPLEX_FLOAT:
4251           valid_mode = targetm.scalar_mode_supported_p (GET_MODE_INNER (mode));
4252           break;
4253
4254         case MODE_VECTOR_INT:
4255         case MODE_VECTOR_FLOAT:
4256           warning ("specifying vector types with __attribute__ ((mode)) "
4257                    "is deprecated");
4258           warning ("use __attribute__ ((vector_size)) instead");
4259           valid_mode = vector_mode_valid_p (mode);
4260           break;
4261
4262         default:
4263           break;
4264         }
4265       if (!valid_mode)
4266         {
4267           error ("unable to emulate %qs", p);
4268           return NULL_TREE;
4269         }
4270
4271       if (POINTER_TYPE_P (type))
4272         {
4273           tree (*fn)(tree, enum machine_mode, bool);
4274
4275           if (!targetm.valid_pointer_mode (mode))
4276             {
4277               error ("invalid pointer mode %qs", p);
4278               return NULL_TREE;
4279             }
4280
4281           if (TREE_CODE (type) == POINTER_TYPE)
4282             fn = build_pointer_type_for_mode;
4283           else
4284             fn = build_reference_type_for_mode;
4285           typefm = fn (TREE_TYPE (type), mode, false);
4286         }
4287       else
4288         typefm = lang_hooks.types.type_for_mode (mode, TYPE_UNSIGNED (type));
4289
4290       if (typefm == NULL_TREE)
4291         {
4292           error ("no data type for mode %qs", p);
4293           return NULL_TREE;
4294         }
4295       else if (TREE_CODE (type) == ENUMERAL_TYPE)
4296         {
4297           /* For enumeral types, copy the precision from the integer
4298              type returned above.  If not an INTEGER_TYPE, we can't use
4299              this mode for this type.  */
4300           if (TREE_CODE (typefm) != INTEGER_TYPE)
4301             {
4302               error ("cannot use mode %qs for enumeral types", p);
4303               return NULL_TREE;
4304             }
4305
4306           if (!(flags & (int) ATTR_FLAG_TYPE_IN_PLACE))
4307             type = build_variant_type_copy (type);
4308
4309           /* We cannot use layout_type here, because that will attempt
4310              to re-layout all variants, corrupting our original.  */
4311           TYPE_PRECISION (type) = TYPE_PRECISION (typefm);
4312           TYPE_MIN_VALUE (type) = TYPE_MIN_VALUE (typefm);
4313           TYPE_MAX_VALUE (type) = TYPE_MAX_VALUE (typefm);
4314           TYPE_SIZE (type) = TYPE_SIZE (typefm);
4315           TYPE_SIZE_UNIT (type) = TYPE_SIZE_UNIT (typefm);
4316           if (!TYPE_USER_ALIGN (type))
4317             TYPE_ALIGN (type) = TYPE_ALIGN (typefm);
4318
4319           typefm = type;
4320         }
4321       else if (VECTOR_MODE_P (mode)
4322                ? TREE_CODE (type) != TREE_CODE (TREE_TYPE (typefm))
4323                : TREE_CODE (type) != TREE_CODE (typefm))
4324         {
4325           error ("mode %qs applied to inappropriate type", p);
4326           return NULL_TREE;
4327         }
4328
4329       *node = typefm;
4330     }
4331
4332   return NULL_TREE;
4333 }
4334
4335 /* Handle a "section" attribute; arguments as in
4336    struct attribute_spec.handler.  */
4337
4338 static tree
4339 handle_section_attribute (tree *node, tree ARG_UNUSED (name), tree args,
4340                           int ARG_UNUSED (flags), bool *no_add_attrs)
4341 {
4342   tree decl = *node;
4343
4344   if (targetm.have_named_sections)
4345     {
4346       user_defined_section_attribute = true;
4347
4348       if ((TREE_CODE (decl) == FUNCTION_DECL
4349            || TREE_CODE (decl) == VAR_DECL)
4350           && TREE_CODE (TREE_VALUE (args)) == STRING_CST)
4351         {
4352           if (TREE_CODE (decl) == VAR_DECL
4353               && current_function_decl != NULL_TREE
4354               && !TREE_STATIC (decl))
4355             {
4356               error ("%Jsection attribute cannot be specified for "
4357                      "local variables", decl);
4358               *no_add_attrs = true;
4359             }
4360
4361           /* The decl may have already been given a section attribute
4362              from a previous declaration.  Ensure they match.  */
4363           else if (DECL_SECTION_NAME (decl) != NULL_TREE
4364                    && strcmp (TREE_STRING_POINTER (DECL_SECTION_NAME (decl)),
4365                               TREE_STRING_POINTER (TREE_VALUE (args))) != 0)
4366             {
4367               error ("%Jsection of %qD conflicts with previous declaration",
4368                      *node, *node);
4369               *no_add_attrs = true;
4370             }
4371           else
4372             DECL_SECTION_NAME (decl) = TREE_VALUE (args);
4373         }
4374       else
4375         {
4376           error ("%Jsection attribute not allowed for %qD", *node, *node);
4377           *no_add_attrs = true;
4378         }
4379     }
4380   else
4381     {
4382       error ("%Jsection attributes are not supported for this target", *node);
4383       *no_add_attrs = true;
4384     }
4385
4386   return NULL_TREE;
4387 }
4388
4389 /* Handle a "aligned" attribute; arguments as in
4390    struct attribute_spec.handler.  */
4391
4392 static tree
4393 handle_aligned_attribute (tree *node, tree ARG_UNUSED (name), tree args,
4394                           int flags, bool *no_add_attrs)
4395 {
4396   tree decl = NULL_TREE;
4397   tree *type = NULL;
4398   int is_type = 0;
4399   tree align_expr = (args ? TREE_VALUE (args)
4400                      : size_int (BIGGEST_ALIGNMENT / BITS_PER_UNIT));
4401   int i;
4402
4403   if (DECL_P (*node))
4404     {
4405       decl = *node;
4406       type = &TREE_TYPE (decl);
4407       is_type = TREE_CODE (*node) == TYPE_DECL;
4408     }
4409   else if (TYPE_P (*node))
4410     type = node, is_type = 1;
4411
4412   /* Strip any NOPs of any kind.  */
4413   while (TREE_CODE (align_expr) == NOP_EXPR
4414          || TREE_CODE (align_expr) == CONVERT_EXPR
4415          || TREE_CODE (align_expr) == NON_LVALUE_EXPR)
4416     align_expr = TREE_OPERAND (align_expr, 0);
4417
4418   if (TREE_CODE (align_expr) != INTEGER_CST)
4419     {
4420       error ("requested alignment is not a constant");
4421       *no_add_attrs = true;
4422     }
4423   else if ((i = tree_log2 (align_expr)) == -1)
4424     {
4425       error ("requested alignment is not a power of 2");
4426       *no_add_attrs = true;
4427     }
4428   else if (i > HOST_BITS_PER_INT - 2)
4429     {
4430       error ("requested alignment is too large");
4431       *no_add_attrs = true;
4432     }
4433   else if (is_type)
4434     {
4435       /* If we have a TYPE_DECL, then copy the type, so that we
4436          don't accidentally modify a builtin type.  See pushdecl.  */
4437       if (decl && TREE_TYPE (decl) != error_mark_node
4438           && DECL_ORIGINAL_TYPE (decl) == NULL_TREE)
4439         {
4440           tree tt = TREE_TYPE (decl);
4441           *type = build_variant_type_copy (*type);
4442           DECL_ORIGINAL_TYPE (decl) = tt;
4443           TYPE_NAME (*type) = decl;
4444           TREE_USED (*type) = TREE_USED (decl);
4445           TREE_TYPE (decl) = *type;
4446         }
4447       else if (!(flags & (int) ATTR_FLAG_TYPE_IN_PLACE))
4448         *type = build_variant_type_copy (*type);
4449
4450       TYPE_ALIGN (*type) = (1 << i) * BITS_PER_UNIT;
4451       TYPE_USER_ALIGN (*type) = 1;
4452     }
4453   else if (TREE_CODE (decl) != VAR_DECL
4454            && TREE_CODE (decl) != FIELD_DECL)
4455     {
4456       error ("%Jalignment may not be specified for %qD", decl, decl);
4457       *no_add_attrs = true;
4458     }
4459   else
4460     {
4461       DECL_ALIGN (decl) = (1 << i) * BITS_PER_UNIT;
4462       DECL_USER_ALIGN (decl) = 1;
4463     }
4464
4465   return NULL_TREE;
4466 }
4467
4468 /* Handle a "weak" attribute; arguments as in
4469    struct attribute_spec.handler.  */
4470
4471 static tree
4472 handle_weak_attribute (tree *node, tree ARG_UNUSED (name),
4473                        tree ARG_UNUSED (args),
4474                        int ARG_UNUSED (flags),
4475                        bool * ARG_UNUSED (no_add_attrs))
4476 {
4477   declare_weak (*node);
4478
4479   return NULL_TREE;
4480 }
4481
4482 /* Handle an "alias" attribute; arguments as in
4483    struct attribute_spec.handler.  */
4484
4485 static tree
4486 handle_alias_attribute (tree *node, tree name, tree args,
4487                         int ARG_UNUSED (flags), bool *no_add_attrs)
4488 {
4489   tree decl = *node;
4490
4491   if ((TREE_CODE (decl) == FUNCTION_DECL && DECL_INITIAL (decl))
4492       || (TREE_CODE (decl) != FUNCTION_DECL && !DECL_EXTERNAL (decl)))
4493     {
4494       error ("%J%qD defined both normally and as an alias", decl, decl);
4495       *no_add_attrs = true;
4496     }
4497
4498   /* Note that the very first time we process a nested declaration,
4499      decl_function_context will not be set.  Indeed, *would* never
4500      be set except for the DECL_INITIAL/DECL_EXTERNAL frobbery that
4501      we do below.  After such frobbery, pushdecl would set the context.
4502      In any case, this is never what we want.  */
4503   else if (decl_function_context (decl) == 0 && current_function_decl == NULL)
4504     {
4505       tree id;
4506
4507       id = TREE_VALUE (args);
4508       if (TREE_CODE (id) != STRING_CST)
4509         {
4510           error ("alias argument not a string");
4511           *no_add_attrs = true;
4512           return NULL_TREE;
4513         }
4514       id = get_identifier (TREE_STRING_POINTER (id));
4515       /* This counts as a use of the object pointed to.  */
4516       TREE_USED (id) = 1;
4517
4518       if (TREE_CODE (decl) == FUNCTION_DECL)
4519         DECL_INITIAL (decl) = error_mark_node;
4520       else
4521         {
4522           DECL_EXTERNAL (decl) = 0;
4523           TREE_STATIC (decl) = 1;
4524         }
4525     }
4526   else
4527     {
4528       warning ("%qs attribute ignored", IDENTIFIER_POINTER (name));
4529       *no_add_attrs = true;
4530     }
4531
4532   return NULL_TREE;
4533 }
4534
4535 /* Handle an "visibility" attribute; arguments as in
4536    struct attribute_spec.handler.  */
4537
4538 static tree
4539 handle_visibility_attribute (tree *node, tree name, tree args,
4540                              int ARG_UNUSED (flags),
4541                              bool *no_add_attrs)
4542 {
4543   tree decl = *node;
4544   tree id = TREE_VALUE (args);
4545
4546   *no_add_attrs = true;
4547
4548   if (TYPE_P (*node))
4549     {
4550       if (TREE_CODE (*node) != RECORD_TYPE && TREE_CODE (*node) != UNION_TYPE)
4551        {
4552          warning ("%qs attribute ignored on non-class types",
4553                   IDENTIFIER_POINTER (name));
4554          return NULL_TREE;
4555        }
4556     }
4557   else if (decl_function_context (decl) != 0 || !TREE_PUBLIC (decl))
4558     {
4559       warning ("%qs attribute ignored", IDENTIFIER_POINTER (name));
4560       return NULL_TREE;
4561     }
4562
4563   if (TREE_CODE (id) != STRING_CST)
4564     {
4565       error ("visibility argument not a string");
4566       return NULL_TREE;
4567     }
4568
4569   /*  If this is a type, set the visibility on the type decl.  */
4570   if (TYPE_P (decl))
4571     {
4572       decl = TYPE_NAME (decl);
4573       if (!decl)
4574         return NULL_TREE;
4575       if (TREE_CODE (decl) == IDENTIFIER_NODE)
4576         {
4577            warning ("%qE attribute ignored on types",
4578                     name);
4579            return NULL_TREE;
4580         }
4581     }
4582
4583   if (strcmp (TREE_STRING_POINTER (id), "default") == 0)
4584     DECL_VISIBILITY (decl) = VISIBILITY_DEFAULT;
4585   else if (strcmp (TREE_STRING_POINTER (id), "internal") == 0)
4586     DECL_VISIBILITY (decl) = VISIBILITY_INTERNAL;
4587   else if (strcmp (TREE_STRING_POINTER (id), "hidden") == 0)
4588     DECL_VISIBILITY (decl) = VISIBILITY_HIDDEN;
4589   else if (strcmp (TREE_STRING_POINTER (id), "protected") == 0)
4590     DECL_VISIBILITY (decl) = VISIBILITY_PROTECTED;
4591   else
4592     error ("visibility argument must be one of \"default\", \"hidden\", \"protected\" or \"internal\"");
4593   DECL_VISIBILITY_SPECIFIED (decl) = 1;
4594
4595   /* For decls only, go ahead and attach the attribute to the node as well.
4596      This is needed so we can determine whether we have VISIBILITY_DEFAULT
4597      because the visibility was not specified, or because it was explicitly
4598      overridden from the class visibility.  */
4599   if (DECL_P (*node))
4600     *no_add_attrs = false;
4601
4602   return NULL_TREE;
4603 }
4604
4605 /* Determine the ELF symbol visibility for DECL, which is either a
4606    variable or a function.  It is an error to use this function if a
4607    definition of DECL is not available in this translation unit.
4608    Returns true if the final visibility has been determined by this
4609    function; false if the caller is free to make additional
4610    modifications.  */
4611
4612 bool
4613 c_determine_visibility (tree decl)
4614 {
4615   gcc_assert (TREE_CODE (decl) == VAR_DECL
4616               || TREE_CODE (decl) == FUNCTION_DECL);
4617
4618   /* If the user explicitly specified the visibility with an
4619      attribute, honor that.  DECL_VISIBILITY will have been set during
4620      the processing of the attribute.  We check for an explicit
4621      attribute, rather than just checking DECL_VISIBILITY_SPECIFIED,
4622      to distinguish the use of an attribute from the use of a "#pragma
4623      GCC visibility push(...)"; in the latter case we still want other
4624      considerations to be able to overrule the #pragma.  */
4625   if (lookup_attribute ("visibility", DECL_ATTRIBUTES (decl)))
4626     return true;
4627
4628   /* Anything that is exported must have default visibility.  */
4629   if (TARGET_DLLIMPORT_DECL_ATTRIBUTES
4630       && lookup_attribute ("dllexport", DECL_ATTRIBUTES (decl)))
4631     {
4632       DECL_VISIBILITY (decl) = VISIBILITY_DEFAULT;
4633       DECL_VISIBILITY_SPECIFIED (decl) = 1;
4634       return true;
4635     }
4636
4637   return false;
4638 }
4639
4640 /* Handle an "tls_model" attribute; arguments as in
4641    struct attribute_spec.handler.  */
4642
4643 static tree
4644 handle_tls_model_attribute (tree *node, tree name, tree args,
4645                             int ARG_UNUSED (flags), bool *no_add_attrs)
4646 {
4647   tree decl = *node;
4648
4649   if (!DECL_THREAD_LOCAL (decl))
4650     {
4651       warning ("%qs attribute ignored", IDENTIFIER_POINTER (name));
4652       *no_add_attrs = true;
4653     }
4654   else
4655     {
4656       tree id;
4657
4658       id = TREE_VALUE (args);
4659       if (TREE_CODE (id) != STRING_CST)
4660         {
4661           error ("tls_model argument not a string");
4662           *no_add_attrs = true;
4663           return NULL_TREE;
4664         }
4665       if (strcmp (TREE_STRING_POINTER (id), "local-exec")
4666           && strcmp (TREE_STRING_POINTER (id), "initial-exec")
4667           && strcmp (TREE_STRING_POINTER (id), "local-dynamic")
4668           && strcmp (TREE_STRING_POINTER (id), "global-dynamic"))
4669         {
4670           error ("tls_model argument must be one of \"local-exec\", \"initial-exec\", \"local-dynamic\" or \"global-dynamic\"");
4671           *no_add_attrs = true;
4672           return NULL_TREE;
4673         }
4674     }
4675
4676   return NULL_TREE;
4677 }
4678
4679 /* Handle a "no_instrument_function" attribute; arguments as in
4680    struct attribute_spec.handler.  */
4681
4682 static tree
4683 handle_no_instrument_function_attribute (tree *node, tree name,
4684                                          tree ARG_UNUSED (args),
4685                                          int ARG_UNUSED (flags),
4686                                          bool *no_add_attrs)
4687 {
4688   tree decl = *node;
4689
4690   if (TREE_CODE (decl) != FUNCTION_DECL)
4691     {
4692       error ("%J%qE attribute applies only to functions", decl, name);
4693       *no_add_attrs = true;
4694     }
4695   else if (DECL_INITIAL (decl))
4696     {
4697       error ("%Jcan%'t set %qE attribute after definition", decl, name);
4698       *no_add_attrs = true;
4699     }
4700   else
4701     DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (decl) = 1;
4702
4703   return NULL_TREE;
4704 }
4705
4706 /* Handle a "malloc" attribute; arguments as in
4707    struct attribute_spec.handler.  */
4708
4709 static tree
4710 handle_malloc_attribute (tree *node, tree name, tree ARG_UNUSED (args),
4711                          int ARG_UNUSED (flags), bool *no_add_attrs)
4712 {
4713   if (TREE_CODE (*node) == FUNCTION_DECL)
4714     DECL_IS_MALLOC (*node) = 1;
4715   /* ??? TODO: Support types.  */
4716   else
4717     {
4718       warning ("%qs attribute ignored", IDENTIFIER_POINTER (name));
4719       *no_add_attrs = true;
4720     }
4721
4722   return NULL_TREE;
4723 }
4724
4725 /* Handle a "no_limit_stack" attribute; arguments as in
4726    struct attribute_spec.handler.  */
4727
4728 static tree
4729 handle_no_limit_stack_attribute (tree *node, tree name,
4730                                  tree ARG_UNUSED (args),
4731                                  int ARG_UNUSED (flags),
4732                                  bool *no_add_attrs)
4733 {
4734   tree decl = *node;
4735
4736   if (TREE_CODE (decl) != FUNCTION_DECL)
4737     {
4738       error ("%J%qE attribute applies only to functions", decl, name);
4739       *no_add_attrs = true;
4740     }
4741   else if (DECL_INITIAL (decl))
4742     {
4743       error ("%Jcan%'t set %qE attribute after definition", decl, name);
4744       *no_add_attrs = true;
4745     }
4746   else
4747     DECL_NO_LIMIT_STACK (decl) = 1;
4748
4749   return NULL_TREE;
4750 }
4751
4752 /* Handle a "pure" attribute; arguments as in
4753    struct attribute_spec.handler.  */
4754
4755 static tree
4756 handle_pure_attribute (tree *node, tree name, tree ARG_UNUSED (args),
4757                        int ARG_UNUSED (flags), bool *no_add_attrs)
4758 {
4759   if (TREE_CODE (*node) == FUNCTION_DECL)
4760     DECL_IS_PURE (*node) = 1;
4761   /* ??? TODO: Support types.  */
4762   else
4763     {
4764       warning ("%qs attribute ignored", IDENTIFIER_POINTER (name));
4765       *no_add_attrs = true;
4766     }
4767
4768   return NULL_TREE;
4769 }
4770
4771 /* Handle a "deprecated" attribute; arguments as in
4772    struct attribute_spec.handler.  */
4773
4774 static tree
4775 handle_deprecated_attribute (tree *node, tree name,
4776                              tree ARG_UNUSED (args), int flags,
4777                              bool *no_add_attrs)
4778 {
4779   tree type = NULL_TREE;
4780   int warn = 0;
4781   const char *what = NULL;
4782
4783   if (DECL_P (*node))
4784     {
4785       tree decl = *node;
4786       type = TREE_TYPE (decl);
4787
4788       if (TREE_CODE (decl) == TYPE_DECL
4789           || TREE_CODE (decl) == PARM_DECL
4790           || TREE_CODE (decl) == VAR_DECL
4791           || TREE_CODE (decl) == FUNCTION_DECL
4792           || TREE_CODE (decl) == FIELD_DECL)
4793         TREE_DEPRECATED (decl) = 1;
4794       else
4795         warn = 1;
4796     }
4797   else if (TYPE_P (*node))
4798     {
4799       if (!(flags & (int) ATTR_FLAG_TYPE_IN_PLACE))
4800         *node = build_variant_type_copy (*node);
4801       TREE_DEPRECATED (*node) = 1;
4802       type = *node;
4803     }
4804   else
4805     warn = 1;
4806
4807   if (warn)
4808     {
4809       *no_add_attrs = true;
4810       if (type && TYPE_NAME (type))
4811         {
4812           if (TREE_CODE (TYPE_NAME (type)) == IDENTIFIER_NODE)
4813             what = IDENTIFIER_POINTER (TYPE_NAME (*node));
4814           else if (TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
4815                    && DECL_NAME (TYPE_NAME (type)))
4816             what = IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (type)));
4817         }
4818       if (what)
4819         warning ("%qs attribute ignored for %qs",
4820                   IDENTIFIER_POINTER (name), what);
4821       else
4822         warning ("%qs attribute ignored",
4823                       IDENTIFIER_POINTER (name));
4824     }
4825
4826   return NULL_TREE;
4827 }
4828
4829 /* Handle a "vector_size" attribute; arguments as in
4830    struct attribute_spec.handler.  */
4831
4832 static tree
4833 handle_vector_size_attribute (tree *node, tree name, tree args,
4834                               int ARG_UNUSED (flags),
4835                               bool *no_add_attrs)
4836 {
4837   unsigned HOST_WIDE_INT vecsize, nunits;
4838   enum machine_mode orig_mode;
4839   tree type = *node, new_type, size;
4840
4841   *no_add_attrs = true;
4842
4843   /* Stripping NON_LVALUE_EXPR allows declarations such as
4844      typedef short v4si __attribute__((vector_size (4 * sizeof(short)))).  */
4845   size = TREE_VALUE (args);
4846   if (TREE_CODE (size) == NON_LVALUE_EXPR)
4847     size = TREE_OPERAND (size, 0);
4848
4849   if (!host_integerp (size, 1))
4850     {
4851       warning ("%qs attribute ignored", IDENTIFIER_POINTER (name));
4852       return NULL_TREE;
4853     }
4854
4855   /* Get the vector size (in bytes).  */
4856   vecsize = tree_low_cst (size, 1);
4857
4858   /* We need to provide for vector pointers, vector arrays, and
4859      functions returning vectors.  For example:
4860
4861        __attribute__((vector_size(16))) short *foo;
4862
4863      In this case, the mode is SI, but the type being modified is
4864      HI, so we need to look further.  */
4865
4866   while (POINTER_TYPE_P (type)
4867          || TREE_CODE (type) == FUNCTION_TYPE
4868          || TREE_CODE (type) == METHOD_TYPE
4869          || TREE_CODE (type) == ARRAY_TYPE)
4870     type = TREE_TYPE (type);
4871
4872   /* Get the mode of the type being modified.  */
4873   orig_mode = TYPE_MODE (type);
4874
4875   if (TREE_CODE (type) == RECORD_TYPE
4876       || (GET_MODE_CLASS (orig_mode) != MODE_FLOAT
4877           && GET_MODE_CLASS (orig_mode) != MODE_INT)
4878       || !host_integerp (TYPE_SIZE_UNIT (type), 1))
4879     {
4880       error ("invalid vector type for attribute %qs",
4881              IDENTIFIER_POINTER (name));
4882       return NULL_TREE;
4883     }
4884
4885   /* Calculate how many units fit in the vector.  */
4886   nunits = vecsize / tree_low_cst (TYPE_SIZE_UNIT (type), 1);
4887   if (nunits & (nunits - 1))
4888     {
4889       error ("number of components of the vector not a power of two");
4890       return NULL_TREE;
4891     }
4892
4893   new_type = build_vector_type (type, nunits);
4894
4895   /* Build back pointers if needed.  */
4896   *node = reconstruct_complex_type (*node, new_type);
4897
4898   return NULL_TREE;
4899 }
4900
4901 /* Handle the "nonnull" attribute.  */
4902 static tree
4903 handle_nonnull_attribute (tree *node, tree ARG_UNUSED (name),
4904                           tree args, int ARG_UNUSED (flags),
4905                           bool *no_add_attrs)
4906 {
4907   tree type = *node;
4908   unsigned HOST_WIDE_INT attr_arg_num;
4909
4910   /* If no arguments are specified, all pointer arguments should be
4911      non-null.  Verify a full prototype is given so that the arguments
4912      will have the correct types when we actually check them later.  */
4913   if (!args)
4914     {
4915       if (!TYPE_ARG_TYPES (type))
4916         {
4917           error ("nonnull attribute without arguments on a non-prototype");
4918           *no_add_attrs = true;
4919         }
4920       return NULL_TREE;
4921     }
4922
4923   /* Argument list specified.  Verify that each argument number references
4924      a pointer argument.  */
4925   for (attr_arg_num = 1; args; args = TREE_CHAIN (args))
4926     {
4927       tree argument;
4928       unsigned HOST_WIDE_INT arg_num = 0, ck_num;
4929
4930       if (!get_nonnull_operand (TREE_VALUE (args), &arg_num))
4931         {
4932           error ("nonnull argument has invalid operand number (argument %lu)",
4933                  (unsigned long) attr_arg_num);
4934           *no_add_attrs = true;
4935           return NULL_TREE;
4936         }
4937
4938       argument = TYPE_ARG_TYPES (type);
4939       if (argument)
4940         {
4941           for (ck_num = 1; ; ck_num++)
4942             {
4943               if (!argument || ck_num == arg_num)
4944                 break;
4945               argument = TREE_CHAIN (argument);
4946             }
4947
4948           if (!argument
4949               || TREE_CODE (TREE_VALUE (argument)) == VOID_TYPE)
4950             {
4951               error ("nonnull argument with out-of-range operand number (argument %lu, operand %lu)",
4952                      (unsigned long) attr_arg_num, (unsigned long) arg_num);
4953               *no_add_attrs = true;
4954               return NULL_TREE;
4955             }
4956
4957           if (TREE_CODE (TREE_VALUE (argument)) != POINTER_TYPE)
4958             {
4959               error ("nonnull argument references non-pointer operand (argument %lu, operand %lu)",
4960                    (unsigned long) attr_arg_num, (unsigned long) arg_num);
4961               *no_add_attrs = true;
4962               return NULL_TREE;
4963             }
4964         }
4965     }
4966
4967   return NULL_TREE;
4968 }
4969
4970 /* Check the argument list of a function call for null in argument slots
4971    that are marked as requiring a non-null pointer argument.  */
4972
4973 static void
4974 check_function_nonnull (tree attrs, tree params)
4975 {
4976   tree a, args, param;
4977   int param_num;
4978
4979   for (a = attrs; a; a = TREE_CHAIN (a))
4980     {
4981       if (is_attribute_p ("nonnull", TREE_PURPOSE (a)))
4982         {
4983           args = TREE_VALUE (a);
4984
4985           /* Walk the argument list.  If we encounter an argument number we
4986              should check for non-null, do it.  If the attribute has no args,
4987              then every pointer argument is checked (in which case the check
4988              for pointer type is done in check_nonnull_arg).  */
4989           for (param = params, param_num = 1; ;
4990                param_num++, param = TREE_CHAIN (param))
4991             {
4992               if (!param)
4993         break;
4994               if (!args || nonnull_check_p (args, param_num))
4995         check_function_arguments_recurse (check_nonnull_arg, NULL,
4996                                           TREE_VALUE (param),
4997                                           param_num);
4998             }
4999         }
5000     }
5001 }
5002
5003 /* Check that the Nth argument of a function call (counting backwards
5004    from the end) is a (pointer)0.  */
5005
5006 static void
5007 check_function_sentinel (tree attrs, tree params)
5008 {
5009   tree attr = lookup_attribute ("sentinel", attrs);
5010
5011   if (attr)
5012     {
5013       if (!params)
5014         warning ("missing sentinel in function call");
5015       else
5016         {
5017           tree sentinel, end;
5018           unsigned pos = 0;
5019           
5020           if (TREE_VALUE (attr))
5021             {
5022               tree p = TREE_VALUE (TREE_VALUE (attr));
5023               STRIP_NOPS (p);
5024               pos = TREE_INT_CST_LOW (p);
5025             }
5026
5027           sentinel = end = params;
5028
5029           /* Advance `end' ahead of `sentinel' by `pos' positions.  */
5030           while (pos > 0 && TREE_CHAIN (end))
5031             {
5032               pos--;
5033               end = TREE_CHAIN (end);
5034             }
5035           if (pos > 0)
5036             {
5037               warning ("not enough arguments to fit a sentinel");
5038               return;
5039             }
5040
5041           /* Now advance both until we find the last parameter.  */
5042           while (TREE_CHAIN (end))
5043             {
5044               end = TREE_CHAIN (end);
5045               sentinel = TREE_CHAIN (sentinel);
5046             }
5047
5048           /* Validate the sentinel.  */
5049           if (!POINTER_TYPE_P (TREE_TYPE (TREE_VALUE (sentinel)))
5050               || !integer_zerop (TREE_VALUE (sentinel)))
5051             warning ("missing sentinel in function call");
5052         }
5053     }
5054 }
5055
5056 /* Helper for check_function_nonnull; given a list of operands which
5057    must be non-null in ARGS, determine if operand PARAM_NUM should be
5058    checked.  */
5059
5060 static bool
5061 nonnull_check_p (tree args, unsigned HOST_WIDE_INT param_num)
5062 {
5063   unsigned HOST_WIDE_INT arg_num = 0;
5064
5065   for (; args; args = TREE_CHAIN (args))
5066     {
5067       bool found = get_nonnull_operand (TREE_VALUE (args), &arg_num);
5068
5069       gcc_assert (found);
5070
5071       if (arg_num == param_num)
5072         return true;
5073     }
5074   return false;
5075 }
5076
5077 /* Check that the function argument PARAM (which is operand number
5078    PARAM_NUM) is non-null.  This is called by check_function_nonnull
5079    via check_function_arguments_recurse.  */
5080
5081 static void
5082 check_nonnull_arg (void * ARG_UNUSED (ctx), tree param,
5083                    unsigned HOST_WIDE_INT param_num)
5084 {
5085   /* Just skip checking the argument if it's not a pointer.  This can
5086      happen if the "nonnull" attribute was given without an operand
5087      list (which means to check every pointer argument).  */
5088
5089   if (TREE_CODE (TREE_TYPE (param)) != POINTER_TYPE)
5090     return;
5091
5092   if (integer_zerop (param))
5093     warning ("null argument where non-null required (argument %lu)",
5094              (unsigned long) param_num);
5095 }
5096
5097 /* Helper for nonnull attribute handling; fetch the operand number
5098    from the attribute argument list.  */
5099
5100 static bool
5101 get_nonnull_operand (tree arg_num_expr, unsigned HOST_WIDE_INT *valp)
5102 {
5103   /* Strip any conversions from the arg number and verify they
5104      are constants.  */
5105   while (TREE_CODE (arg_num_expr) == NOP_EXPR
5106          || TREE_CODE (arg_num_expr) == CONVERT_EXPR
5107          || TREE_CODE (arg_num_expr) == NON_LVALUE_EXPR)
5108     arg_num_expr = TREE_OPERAND (arg_num_expr, 0);
5109
5110   if (TREE_CODE (arg_num_expr) != INTEGER_CST
5111       || TREE_INT_CST_HIGH (arg_num_expr) != 0)
5112     return false;
5113
5114   *valp = TREE_INT_CST_LOW (arg_num_expr);
5115   return true;
5116 }
5117
5118 /* Handle a "nothrow" attribute; arguments as in
5119    struct attribute_spec.handler.  */
5120
5121 static tree
5122 handle_nothrow_attribute (tree *node, tree name, tree ARG_UNUSED (args),
5123                           int ARG_UNUSED (flags), bool *no_add_attrs)
5124 {
5125   if (TREE_CODE (*node) == FUNCTION_DECL)
5126     TREE_NOTHROW (*node) = 1;
5127   /* ??? TODO: Support types.  */
5128   else
5129     {
5130       warning ("%qs attribute ignored", IDENTIFIER_POINTER (name));
5131       *no_add_attrs = true;
5132     }
5133
5134   return NULL_TREE;
5135 }
5136
5137 /* Handle a "cleanup" attribute; arguments as in
5138    struct attribute_spec.handler.  */
5139
5140 static tree
5141 handle_cleanup_attribute (tree *node, tree name, tree args,
5142                           int ARG_UNUSED (flags), bool *no_add_attrs)
5143 {
5144   tree decl = *node;
5145   tree cleanup_id, cleanup_decl;
5146
5147   /* ??? Could perhaps support cleanups on TREE_STATIC, much like we do
5148      for global destructors in C++.  This requires infrastructure that
5149      we don't have generically at the moment.  It's also not a feature
5150      we'd be missing too much, since we do have attribute constructor.  */
5151   if (TREE_CODE (decl) != VAR_DECL || TREE_STATIC (decl))
5152     {
5153       warning ("%qs attribute ignored", IDENTIFIER_POINTER (name));
5154       *no_add_attrs = true;
5155       return NULL_TREE;
5156     }
5157
5158   /* Verify that the argument is a function in scope.  */
5159   /* ??? We could support pointers to functions here as well, if
5160      that was considered desirable.  */
5161   cleanup_id = TREE_VALUE (args);
5162   if (TREE_CODE (cleanup_id) != IDENTIFIER_NODE)
5163     {
5164       error ("cleanup argument not an identifier");
5165       *no_add_attrs = true;
5166       return NULL_TREE;
5167     }
5168   cleanup_decl = lookup_name (cleanup_id);
5169   if (!cleanup_decl || TREE_CODE (cleanup_decl) != FUNCTION_DECL)
5170     {
5171       error ("cleanup argument not a function");
5172       *no_add_attrs = true;
5173       return NULL_TREE;
5174     }
5175
5176   /* That the function has proper type is checked with the
5177      eventual call to build_function_call.  */
5178
5179   return NULL_TREE;
5180 }
5181
5182 /* Handle a "warn_unused_result" attribute.  No special handling.  */
5183
5184 static tree
5185 handle_warn_unused_result_attribute (tree *node, tree name,
5186                                tree ARG_UNUSED (args),
5187                                int ARG_UNUSED (flags), bool *no_add_attrs)
5188 {
5189   /* Ignore the attribute for functions not returning any value.  */
5190   if (VOID_TYPE_P (TREE_TYPE (*node)))
5191     {
5192       warning ("%qs attribute ignored", IDENTIFIER_POINTER (name));
5193       *no_add_attrs = true;
5194     }
5195
5196   return NULL_TREE;
5197 }
5198
5199 /* Handle a "sentinel" attribute.  */
5200
5201 static tree
5202 handle_sentinel_attribute (tree *node, tree name, tree args,
5203                            int ARG_UNUSED (flags), bool *no_add_attrs)
5204 {
5205   tree params = TYPE_ARG_TYPES (*node);
5206
5207   if (!params)
5208     {
5209       warning ("%qs attribute requires prototypes with named arguments",
5210                IDENTIFIER_POINTER (name));
5211       *no_add_attrs = true;
5212     }
5213   else
5214     {
5215       while (TREE_CHAIN (params))
5216         params = TREE_CHAIN (params);
5217
5218       if (VOID_TYPE_P (TREE_VALUE (params)))
5219         {
5220           warning ("%qs attribute only applies to variadic functions",
5221                    IDENTIFIER_POINTER (name));
5222           *no_add_attrs = true;
5223         }
5224     }
5225   
5226   if (args)
5227     {
5228       tree position = TREE_VALUE (args);
5229
5230       STRIP_NOPS (position);
5231       if (TREE_CODE (position) != INTEGER_CST)
5232         {
5233           warning ("requested position is not an integer constant");
5234           *no_add_attrs = true;
5235         }
5236       else
5237         {
5238           if (tree_int_cst_lt (position, integer_zero_node))
5239             {
5240               warning ("requested position is less than zero");
5241               *no_add_attrs = true;
5242             }
5243         }
5244     }
5245   
5246   return NULL_TREE;
5247 }
5248 \f
5249 /* Check for valid arguments being passed to a function.  */
5250 void
5251 check_function_arguments (tree attrs, tree params)
5252 {
5253   /* Check for null being passed in a pointer argument that must be
5254      non-null.  We also need to do this if format checking is enabled.  */
5255
5256   if (warn_nonnull)
5257     check_function_nonnull (attrs, params);
5258
5259   /* Check for errors in format strings.  */
5260
5261   if (warn_format)
5262     {
5263       check_function_format (attrs, params);
5264       check_function_sentinel (attrs, params);
5265     }
5266 }
5267
5268 /* Generic argument checking recursion routine.  PARAM is the argument to
5269    be checked.  PARAM_NUM is the number of the argument.  CALLBACK is invoked
5270    once the argument is resolved.  CTX is context for the callback.  */
5271 void
5272 check_function_arguments_recurse (void (*callback)
5273                                   (void *, tree, unsigned HOST_WIDE_INT),
5274                                   void *ctx, tree param,
5275                                   unsigned HOST_WIDE_INT param_num)
5276 {
5277   if (TREE_CODE (param) == NOP_EXPR)
5278     {
5279       /* Strip coercion.  */
5280       check_function_arguments_recurse (callback, ctx,
5281                                         TREE_OPERAND (param, 0), param_num);
5282       return;
5283     }
5284
5285   if (TREE_CODE (param) == CALL_EXPR)
5286     {
5287       tree type = TREE_TYPE (TREE_TYPE (TREE_OPERAND (param, 0)));
5288       tree attrs;
5289       bool found_format_arg = false;
5290
5291       /* See if this is a call to a known internationalization function
5292          that modifies a format arg.  Such a function may have multiple
5293          format_arg attributes (for example, ngettext).  */
5294
5295       for (attrs = TYPE_ATTRIBUTES (type);
5296            attrs;
5297            attrs = TREE_CHAIN (attrs))
5298         if (is_attribute_p ("format_arg", TREE_PURPOSE (attrs)))
5299           {
5300             tree inner_args;
5301             tree format_num_expr;
5302             int format_num;
5303             int i;
5304
5305             /* Extract the argument number, which was previously checked
5306                to be valid.  */
5307             format_num_expr = TREE_VALUE (TREE_VALUE (attrs));
5308             while (TREE_CODE (format_num_expr) == NOP_EXPR
5309                    || TREE_CODE (format_num_expr) == CONVERT_EXPR
5310                    || TREE_CODE (format_num_expr) == NON_LVALUE_EXPR)
5311               format_num_expr = TREE_OPERAND (format_num_expr, 0);
5312
5313             gcc_assert (TREE_CODE (format_num_expr) == INTEGER_CST
5314                         && !TREE_INT_CST_HIGH (format_num_expr));
5315
5316             format_num = TREE_INT_CST_LOW (format_num_expr);
5317
5318             for (inner_args = TREE_OPERAND (param, 1), i = 1;
5319                  inner_args != 0;
5320                  inner_args = TREE_CHAIN (inner_args), i++)
5321               if (i == format_num)
5322                 {
5323                   check_function_arguments_recurse (callback, ctx,
5324                                                     TREE_VALUE (inner_args),
5325                                                     param_num);
5326                   found_format_arg = true;
5327                   break;
5328                 }
5329           }
5330
5331       /* If we found a format_arg attribute and did a recursive check,
5332          we are done with checking this argument.  Otherwise, we continue
5333          and this will be considered a non-literal.  */
5334       if (found_format_arg)
5335         return;
5336     }
5337
5338   if (TREE_CODE (param) == COND_EXPR)
5339     {
5340       /* Check both halves of the conditional expression.  */
5341       check_function_arguments_recurse (callback, ctx,
5342                                         TREE_OPERAND (param, 1), param_num);
5343       check_function_arguments_recurse (callback, ctx,
5344                                         TREE_OPERAND (param, 2), param_num);
5345       return;
5346     }
5347
5348   (*callback) (ctx, param, param_num);
5349 }
5350
5351 /* Function to help qsort sort FIELD_DECLs by name order.  */
5352
5353 int
5354 field_decl_cmp (const void *x_p, const void *y_p)
5355 {
5356   const tree *const x = (const tree *const) x_p;
5357   const tree *const y = (const tree *const) y_p;
5358
5359   if (DECL_NAME (*x) == DECL_NAME (*y))
5360     /* A nontype is "greater" than a type.  */
5361     return (TREE_CODE (*y) == TYPE_DECL) - (TREE_CODE (*x) == TYPE_DECL);
5362   if (DECL_NAME (*x) == NULL_TREE)
5363     return -1;
5364   if (DECL_NAME (*y) == NULL_TREE)
5365     return 1;
5366   if (DECL_NAME (*x) < DECL_NAME (*y))
5367     return -1;
5368   return 1;
5369 }
5370
5371 static struct {
5372   gt_pointer_operator new_value;
5373   void *cookie;
5374 } resort_data;
5375
5376 /* This routine compares two fields like field_decl_cmp but using the
5377 pointer operator in resort_data.  */
5378
5379 static int
5380 resort_field_decl_cmp (const void *x_p, const void *y_p)
5381 {
5382   const tree *const x = (const tree *const) x_p;
5383   const tree *const y = (const tree *const) y_p;
5384
5385   if (DECL_NAME (*x) == DECL_NAME (*y))
5386     /* A nontype is "greater" than a type.  */
5387     return (TREE_CODE (*y) == TYPE_DECL) - (TREE_CODE (*x) == TYPE_DECL);
5388   if (DECL_NAME (*x) == NULL_TREE)
5389     return -1;
5390   if (DECL_NAME (*y) == NULL_TREE)
5391     return 1;
5392   {
5393     tree d1 = DECL_NAME (*x);
5394     tree d2 = DECL_NAME (*y);
5395     resort_data.new_value (&d1, resort_data.cookie);
5396     resort_data.new_value (&d2, resort_data.cookie);
5397     if (d1 < d2)
5398       return -1;
5399   }
5400   return 1;
5401 }
5402
5403 /* Resort DECL_SORTED_FIELDS because pointers have been reordered.  */
5404
5405 void
5406 resort_sorted_fields (void *obj,
5407                       void * ARG_UNUSED (orig_obj),
5408                       gt_pointer_operator new_value,
5409                       void *cookie)
5410 {
5411   struct sorted_fields_type *sf = (struct sorted_fields_type *) obj;
5412   resort_data.new_value = new_value;
5413   resort_data.cookie = cookie;
5414   qsort (&sf->elts[0], sf->len, sizeof (tree),
5415          resort_field_decl_cmp);
5416 }
5417
5418 /* Subroutine of c_parse_error.
5419    Return the result of concatenating LHS and RHS. RHS is really
5420    a string literal, its first character is indicated by RHS_START and
5421    RHS_SIZE is its length (including the terminating NUL character).
5422
5423    The caller is responsible for deleting the returned pointer.  */
5424
5425 static char *
5426 catenate_strings (const char *lhs, const char *rhs_start, int rhs_size)
5427 {
5428   const int lhs_size = strlen (lhs);
5429   char *result = XNEWVEC (char, lhs_size + rhs_size);
5430   strncpy (result, lhs, lhs_size);
5431   strncpy (result + lhs_size, rhs_start, rhs_size);
5432   return result;
5433 }
5434
5435 /* Issue the error given by MSGID, indicating that it occurred before
5436    TOKEN, which had the associated VALUE.  */
5437
5438 void
5439 c_parse_error (const char *msgid, enum cpp_ttype token, tree value)
5440 {
5441 #define catenate_messages(M1, M2) catenate_strings ((M1), (M2), sizeof (M2))
5442
5443   char *message = NULL;
5444
5445   if (token == CPP_EOF)
5446     message = catenate_messages (msgid, " at end of input");
5447   else if (token == CPP_CHAR || token == CPP_WCHAR)
5448     {
5449       unsigned int val = TREE_INT_CST_LOW (value);
5450       const char *const ell = (token == CPP_CHAR) ? "" : "L";
5451       if (val <= UCHAR_MAX && ISGRAPH (val))
5452         message = catenate_messages (msgid, " before %s'%c'");
5453       else
5454         message = catenate_messages (msgid, " before %s'\\x%x'");
5455
5456       error (message, ell, val);
5457       free (message);
5458       message = NULL;
5459     }
5460   else if (token == CPP_STRING || token == CPP_WSTRING)
5461     message = catenate_messages (msgid, " before string constant");
5462   else if (token == CPP_NUMBER)
5463     message = catenate_messages (msgid, " before numeric constant");
5464   else if (token == CPP_NAME)
5465     {
5466       message = catenate_messages (msgid, " before %qs");
5467       error (message, IDENTIFIER_POINTER (value));
5468       free (message);
5469       message = NULL;
5470     }
5471   else if (token < N_TTYPES)
5472     {
5473       message = catenate_messages (msgid, " before %qs token");
5474       error (message, cpp_type2name (token));
5475       free (message);
5476       message = NULL;
5477     }
5478   else
5479     error (msgid);
5480
5481   if (message)
5482     {
5483       error (message);
5484       free (message);
5485     }
5486 #undef catenate_messages  
5487 }
5488
5489 /* Walk a gimplified function and warn for functions whose return value is
5490    ignored and attribute((warn_unused_result)) is set.  This is done before
5491    inlining, so we don't have to worry about that.  */
5492
5493 void
5494 c_warn_unused_result (tree *top_p)
5495 {
5496   tree t = *top_p;
5497   tree_stmt_iterator i;
5498   tree fdecl, ftype;
5499
5500   switch (TREE_CODE (t))
5501     {
5502     case STATEMENT_LIST:
5503       for (i = tsi_start (*top_p); !tsi_end_p (i); tsi_next (&i))
5504         c_warn_unused_result (tsi_stmt_ptr (i));
5505       break;
5506
5507     case COND_EXPR:
5508       c_warn_unused_result (&COND_EXPR_THEN (t));
5509       c_warn_unused_result (&COND_EXPR_ELSE (t));
5510       break;
5511     case BIND_EXPR:
5512       c_warn_unused_result (&BIND_EXPR_BODY (t));
5513       break;
5514     case TRY_FINALLY_EXPR:
5515     case TRY_CATCH_EXPR:
5516       c_warn_unused_result (&TREE_OPERAND (t, 0));
5517       c_warn_unused_result (&TREE_OPERAND (t, 1));
5518       break;
5519     case CATCH_EXPR:
5520       c_warn_unused_result (&CATCH_BODY (t));
5521       break;
5522     case EH_FILTER_EXPR:
5523       c_warn_unused_result (&EH_FILTER_FAILURE (t));
5524       break;
5525
5526     case CALL_EXPR:
5527       if (TREE_USED (t))
5528         break;
5529
5530       /* This is a naked call, as opposed to a CALL_EXPR nested inside
5531          a MODIFY_EXPR.  All calls whose value is ignored should be
5532          represented like this.  Look for the attribute.  */
5533       fdecl = get_callee_fndecl (t);
5534       if (fdecl)
5535         ftype = TREE_TYPE (fdecl);
5536       else
5537         {
5538           ftype = TREE_TYPE (TREE_OPERAND (t, 0));
5539           /* Look past pointer-to-function to the function type itself.  */
5540           ftype = TREE_TYPE (ftype);
5541         }
5542
5543       if (lookup_attribute ("warn_unused_result", TYPE_ATTRIBUTES (ftype)))
5544         {
5545           if (fdecl)
5546             warning ("%Hignoring return value of %qD, "
5547                      "declared with attribute warn_unused_result",
5548                      EXPR_LOCUS (t), fdecl);
5549           else
5550             warning ("%Hignoring return value of function "
5551                      "declared with attribute warn_unused_result",
5552                      EXPR_LOCUS (t));
5553         }
5554       break;
5555
5556     default:
5557       /* Not a container, not a call, or a call whose value is used.  */
5558       break;
5559     }
5560 }
5561
5562 /* Build the result of __builtin_offsetof.  EXPR is a nested sequence of
5563    component references, with an INDIRECT_REF at the bottom; much like
5564    the traditional rendering of offsetof as a macro.  Returns the folded
5565    and properly cast result.  */
5566
5567 static tree
5568 fold_offsetof_1 (tree expr)
5569 {
5570   enum tree_code code = PLUS_EXPR;
5571   tree base, off, t;
5572
5573   switch (TREE_CODE (expr))
5574     {
5575     case ERROR_MARK:
5576       return expr;
5577
5578     case INDIRECT_REF:
5579       return size_zero_node;
5580
5581     case COMPONENT_REF:
5582       base = fold_offsetof_1 (TREE_OPERAND (expr, 0));
5583       if (base == error_mark_node)
5584         return base;
5585
5586       t = TREE_OPERAND (expr, 1);
5587       if (DECL_C_BIT_FIELD (t))
5588         {
5589           error ("attempt to take address of bit-field structure "
5590                  "member %qs", IDENTIFIER_POINTER (DECL_NAME (t)));
5591           return error_mark_node;
5592         }
5593       off = size_binop (PLUS_EXPR, DECL_FIELD_OFFSET (t),
5594                         size_int (tree_low_cst (DECL_FIELD_BIT_OFFSET (t), 1)
5595                                   / BITS_PER_UNIT));
5596       break;
5597
5598     case ARRAY_REF:
5599       base = fold_offsetof_1 (TREE_OPERAND (expr, 0));
5600       if (base == error_mark_node)
5601         return base;
5602
5603       t = TREE_OPERAND (expr, 1);
5604       if (TREE_CODE (t) == INTEGER_CST && tree_int_cst_sgn (t) < 0)
5605         {
5606           code = MINUS_EXPR;
5607           t = fold (build1 (NEGATE_EXPR, TREE_TYPE (t), t));
5608         }
5609       t = convert (sizetype, t);
5610       off = size_binop (MULT_EXPR, TYPE_SIZE_UNIT (TREE_TYPE (expr)), t);
5611       break;
5612
5613     default:
5614       gcc_unreachable ();
5615     }
5616
5617   return size_binop (code, base, off);
5618 }
5619
5620 tree
5621 fold_offsetof (tree expr)
5622 {
5623   /* Convert back from the internal sizetype to size_t.  */
5624   return convert (size_type_node, fold_offsetof_1 (expr));
5625 }
5626
5627 /* Return nonzero if REF is an lvalue valid for this language;
5628    otherwise, print an error message and return zero.  USE says
5629    how the lvalue is being used and so selects the error message.  */
5630
5631 int
5632 lvalue_or_else (tree ref, enum lvalue_use use)
5633 {
5634   int win = lvalue_p (ref);
5635
5636   if (!win)
5637     {
5638       switch (use)
5639         {
5640         case lv_assign:
5641           error ("invalid lvalue in assignment");
5642           break;
5643         case lv_increment:
5644           error ("invalid lvalue in increment");
5645           break;
5646         case lv_decrement:
5647           error ("invalid lvalue in decrement");
5648           break;
5649         case lv_addressof:
5650           error ("invalid lvalue in unary %<&%>");
5651           break;
5652         case lv_asm:
5653           error ("invalid lvalue in asm statement");
5654           break;
5655         default:
5656           gcc_unreachable ();
5657         }
5658     }
5659
5660   return win;
5661 }
5662
5663 #include "gt-c-common.h"