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