2005-05-13 Josh Conner <jconner@apple.com>
[official-gcc.git] / gcc / c-common.c
blobb2ba01e7e9181d63b754301bad77be4acfd7f9b2
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.
5 This file is part of GCC.
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.
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.
17 You should have received a copy of the GNU General Public License
18 along with GCC; see the file COPYING. If not, write to the Free
19 Software Foundation, 59 Temple Place - Suite 330, Boston, MA
20 02111-1307, USA. */
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"
51 cpp_reader *parse_in; /* Declared in c-pragma.h. */
53 /* We let tm.h override the types used here, to handle trivial differences
54 such as the choice of unsigned int or long unsigned int for size_t.
55 When machines start needing nontrivial differences in the size type,
56 it would be best to do something here to figure out automatically
57 from other information what type to use. */
59 #ifndef SIZE_TYPE
60 #define SIZE_TYPE "long unsigned int"
61 #endif
63 #ifndef PID_TYPE
64 #define PID_TYPE "int"
65 #endif
67 #ifndef WCHAR_TYPE
68 #define WCHAR_TYPE "int"
69 #endif
71 /* WCHAR_TYPE gets overridden by -fshort-wchar. */
72 #define MODIFIED_WCHAR_TYPE \
73 (flag_short_wchar ? "short unsigned int" : WCHAR_TYPE)
75 #ifndef PTRDIFF_TYPE
76 #define PTRDIFF_TYPE "long int"
77 #endif
79 #ifndef WINT_TYPE
80 #define WINT_TYPE "unsigned int"
81 #endif
83 #ifndef INTMAX_TYPE
84 #define INTMAX_TYPE ((INT_TYPE_SIZE == LONG_LONG_TYPE_SIZE) \
85 ? "int" \
86 : ((LONG_TYPE_SIZE == LONG_LONG_TYPE_SIZE) \
87 ? "long int" \
88 : "long long int"))
89 #endif
91 #ifndef UINTMAX_TYPE
92 #define UINTMAX_TYPE ((INT_TYPE_SIZE == LONG_LONG_TYPE_SIZE) \
93 ? "unsigned int" \
94 : ((LONG_TYPE_SIZE == LONG_LONG_TYPE_SIZE) \
95 ? "long unsigned int" \
96 : "long long unsigned int"))
97 #endif
99 /* The following symbols are subsumed in the c_global_trees array, and
100 listed here individually for documentation purposes.
102 INTEGER_TYPE and REAL_TYPE nodes for the standard data types.
104 tree short_integer_type_node;
105 tree long_integer_type_node;
106 tree long_long_integer_type_node;
108 tree short_unsigned_type_node;
109 tree long_unsigned_type_node;
110 tree long_long_unsigned_type_node;
112 tree truthvalue_type_node;
113 tree truthvalue_false_node;
114 tree truthvalue_true_node;
116 tree ptrdiff_type_node;
118 tree unsigned_char_type_node;
119 tree signed_char_type_node;
120 tree wchar_type_node;
121 tree signed_wchar_type_node;
122 tree unsigned_wchar_type_node;
124 tree float_type_node;
125 tree double_type_node;
126 tree long_double_type_node;
128 tree complex_integer_type_node;
129 tree complex_float_type_node;
130 tree complex_double_type_node;
131 tree complex_long_double_type_node;
133 tree intQI_type_node;
134 tree intHI_type_node;
135 tree intSI_type_node;
136 tree intDI_type_node;
137 tree intTI_type_node;
139 tree unsigned_intQI_type_node;
140 tree unsigned_intHI_type_node;
141 tree unsigned_intSI_type_node;
142 tree unsigned_intDI_type_node;
143 tree unsigned_intTI_type_node;
145 tree widest_integer_literal_type_node;
146 tree widest_unsigned_literal_type_node;
148 Nodes for types `void *' and `const void *'.
150 tree ptr_type_node, const_ptr_type_node;
152 Nodes for types `char *' and `const char *'.
154 tree string_type_node, const_string_type_node;
156 Type `char[SOMENUMBER]'.
157 Used when an array of char is needed and the size is irrelevant.
159 tree char_array_type_node;
161 Type `int[SOMENUMBER]' or something like it.
162 Used when an array of int needed and the size is irrelevant.
164 tree int_array_type_node;
166 Type `wchar_t[SOMENUMBER]' or something like it.
167 Used when a wide string literal is created.
169 tree wchar_array_type_node;
171 Type `int ()' -- used for implicit declaration of functions.
173 tree default_function_type;
175 A VOID_TYPE node, packaged in a TREE_LIST.
177 tree void_list_node;
179 The lazily created VAR_DECLs for __FUNCTION__, __PRETTY_FUNCTION__,
180 and __func__. (C doesn't generate __FUNCTION__ and__PRETTY_FUNCTION__
181 VAR_DECLS, but C++ does.)
183 tree function_name_decl_node;
184 tree pretty_function_name_decl_node;
185 tree c99_function_name_decl_node;
187 Stack of nested function name VAR_DECLs.
189 tree saved_function_name_decls;
193 tree c_global_trees[CTI_MAX];
195 /* Switches common to the C front ends. */
197 /* Nonzero if prepreprocessing only. */
199 int flag_preprocess_only;
201 /* Nonzero means don't output line number information. */
203 char flag_no_line_commands;
205 /* Nonzero causes -E output not to be done, but directives such as
206 #define that have side effects are still obeyed. */
208 char flag_no_output;
210 /* Nonzero means dump macros in some fashion. */
212 char flag_dump_macros;
214 /* Nonzero means pass #include lines through to the output. */
216 char flag_dump_includes;
218 /* Nonzero means process PCH files while preprocessing. */
220 bool flag_pch_preprocess;
222 /* The file name to which we should write a precompiled header, or
223 NULL if no header will be written in this compile. */
225 const char *pch_file;
227 /* Nonzero if an ISO standard was selected. It rejects macros in the
228 user's namespace. */
229 int flag_iso;
231 /* Nonzero if -undef was given. It suppresses target built-in macros
232 and assertions. */
233 int flag_undef;
235 /* Nonzero means don't recognize the non-ANSI builtin functions. */
237 int flag_no_builtin;
239 /* Nonzero means don't recognize the non-ANSI builtin functions.
240 -ansi sets this. */
242 int flag_no_nonansi_builtin;
244 /* Nonzero means give `double' the same size as `float'. */
246 int flag_short_double;
248 /* Nonzero means give `wchar_t' the same size as `short'. */
250 int flag_short_wchar;
252 /* Nonzero means allow Microsoft extensions without warnings or errors. */
253 int flag_ms_extensions;
255 /* Nonzero means don't recognize the keyword `asm'. */
257 int flag_no_asm;
259 /* Nonzero means give string constants the type `const char *', as mandated
260 by the standard. */
262 int flag_const_strings;
264 /* Nonzero means to treat bitfields as signed unless they say `unsigned'. */
266 int flag_signed_bitfields = 1;
268 /* Nonzero means warn about deprecated conversion from string constant to
269 `char *'. */
271 int warn_write_strings;
273 /* Warn about #pragma directives that are not recognized. */
275 int warn_unknown_pragmas; /* Tri state variable. */
277 /* Warn about format/argument anomalies in calls to formatted I/O functions
278 (*printf, *scanf, strftime, strfmon, etc.). */
280 int warn_format;
282 /* Warn about using __null (as NULL in C++) as sentinel. For code compiled
283 with GCC this doesn't matter as __null is guaranteed to have the right
284 size. */
286 int warn_strict_null_sentinel;
288 /* Zero means that faster, ...NonNil variants of objc_msgSend...
289 calls will be used in ObjC; passing nil receivers to such calls
290 will most likely result in crashes. */
291 int flag_nil_receivers = 1;
293 /* Nonzero means that we will allow new ObjC exception syntax (@throw,
294 @try, etc.) in source code. */
295 int flag_objc_exceptions = 0;
297 /* Nonzero means that we generate NeXT setjmp based exceptions. */
298 int flag_objc_sjlj_exceptions = -1;
300 /* Nonzero means that code generation will be altered to support
301 "zero-link" execution. This currently affects ObjC only, but may
302 affect other languages in the future. */
303 int flag_zero_link = 0;
305 /* Nonzero means emit an '__OBJC, __image_info' for the current translation
306 unit. It will inform the ObjC runtime that class definition(s) herein
307 contained are to replace one(s) previously loaded. */
308 int flag_replace_objc_classes = 0;
310 /* C/ObjC language option variables. */
313 /* Nonzero means allow type mismatches in conditional expressions;
314 just make their values `void'. */
316 int flag_cond_mismatch;
318 /* Nonzero means enable C89 Amendment 1 features. */
320 int flag_isoc94;
322 /* Nonzero means use the ISO C99 dialect of C. */
324 int flag_isoc99;
326 /* Nonzero means that we have builtin functions, and main is an int. */
328 int flag_hosted = 1;
330 /* Warn if main is suspicious. */
332 int warn_main;
335 /* ObjC language option variables. */
338 /* Open and close the file for outputting class declarations, if
339 requested (ObjC). */
341 int flag_gen_declaration;
343 /* Generate code for GNU or NeXT runtime environment. */
345 #ifdef NEXT_OBJC_RUNTIME
346 int flag_next_runtime = 1;
347 #else
348 int flag_next_runtime = 0;
349 #endif
351 /* Tells the compiler that this is a special run. Do not perform any
352 compiling, instead we are to test some platform dependent features
353 and output a C header file with appropriate definitions. */
355 int print_struct_values;
357 /* ???. Undocumented. */
359 const char *constant_string_class_name;
362 /* C++ language option variables. */
365 /* Nonzero means don't recognize any extension keywords. */
367 int flag_no_gnu_keywords;
369 /* Nonzero means do emit exported implementations of functions even if
370 they can be inlined. */
372 int flag_implement_inlines = 1;
374 /* Nonzero means that implicit instantiations will be emitted if needed. */
376 int flag_implicit_templates = 1;
378 /* Nonzero means that implicit instantiations of inline templates will be
379 emitted if needed, even if instantiations of non-inline templates
380 aren't. */
382 int flag_implicit_inline_templates = 1;
384 /* Nonzero means generate separate instantiation control files and
385 juggle them at link time. */
387 int flag_use_repository;
389 /* Nonzero if we want to issue diagnostics that the standard says are not
390 required. */
392 int flag_optional_diags = 1;
394 /* Nonzero means we should attempt to elide constructors when possible. */
396 int flag_elide_constructors = 1;
398 /* Nonzero means that member functions defined in class scope are
399 inline by default. */
401 int flag_default_inline = 1;
403 /* Controls whether compiler generates 'type descriptor' that give
404 run-time type information. */
406 int flag_rtti = 1;
408 /* Nonzero if we want to conserve space in the .o files. We do this
409 by putting uninitialized data and runtime initialized data into
410 .common instead of .data at the expense of not flagging multiple
411 definitions. */
413 int flag_conserve_space;
415 /* Nonzero if we want to obey access control semantics. */
417 int flag_access_control = 1;
419 /* Nonzero if we want to check the return value of new and avoid calling
420 constructors if it is a null pointer. */
422 int flag_check_new;
424 /* Nonzero if we want the new ISO rules for pushing a new scope for `for'
425 initialization variables.
426 0: Old rules, set by -fno-for-scope.
427 2: New ISO rules, set by -ffor-scope.
428 1: Try to implement new ISO rules, but with backup compatibility
429 (and warnings). This is the default, for now. */
431 int flag_new_for_scope = 1;
433 /* Nonzero if we want to emit defined symbols with common-like linkage as
434 weak symbols where possible, in order to conform to C++ semantics.
435 Otherwise, emit them as local symbols. */
437 int flag_weak = 1;
439 /* 0 means we want the preprocessor to not emit line directives for
440 the current working directory. 1 means we want it to do it. -1
441 means we should decide depending on whether debugging information
442 is being emitted or not. */
444 int flag_working_directory = -1;
446 /* Nonzero to use __cxa_atexit, rather than atexit, to register
447 destructors for local statics and global objects. */
449 int flag_use_cxa_atexit = DEFAULT_USE_CXA_ATEXIT;
451 /* Nonzero means make the default pedwarns warnings instead of errors.
452 The value of this flag is ignored if -pedantic is specified. */
454 int flag_permissive;
456 /* Nonzero means to implement standard semantics for exception
457 specifications, calling unexpected if an exception is thrown that
458 doesn't match the specification. Zero means to treat them as
459 assertions and optimize accordingly, but not check them. */
461 int flag_enforce_eh_specs = 1;
463 /* Nonzero means to generate thread-safe code for initializing local
464 statics. */
466 int flag_threadsafe_statics = 1;
468 /* Nonzero means warn about implicit declarations. */
470 int warn_implicit = 1;
472 /* Maximum template instantiation depth. This limit is rather
473 arbitrary, but it exists to limit the time it takes to notice
474 infinite template instantiations. */
476 int max_tinst_depth = 500;
480 /* The elements of `ridpointers' are identifier nodes for the reserved
481 type names and storage classes. It is indexed by a RID_... value. */
482 tree *ridpointers;
484 tree (*make_fname_decl) (tree, int);
486 /* Nonzero means the expression being parsed will never be evaluated.
487 This is a count, since unevaluated expressions can nest. */
488 int skip_evaluation;
490 /* Information about how a function name is generated. */
491 struct fname_var_t
493 tree *const decl; /* pointer to the VAR_DECL. */
494 const unsigned rid; /* RID number for the identifier. */
495 const int pretty; /* How pretty is it? */
498 /* The three ways of getting then name of the current function. */
500 const struct fname_var_t fname_vars[] =
502 /* C99 compliant __func__, must be first. */
503 {&c99_function_name_decl_node, RID_C99_FUNCTION_NAME, 0},
504 /* GCC __FUNCTION__ compliant. */
505 {&function_name_decl_node, RID_FUNCTION_NAME, 0},
506 /* GCC __PRETTY_FUNCTION__ compliant. */
507 {&pretty_function_name_decl_node, RID_PRETTY_FUNCTION_NAME, 1},
508 {NULL, 0, 0},
511 static int constant_fits_type_p (tree, tree);
512 static tree check_case_value (tree);
513 static bool check_case_bounds (tree, tree, tree *, tree *);
515 static tree handle_packed_attribute (tree *, tree, tree, int, bool *);
516 static tree handle_nocommon_attribute (tree *, tree, tree, int, bool *);
517 static tree handle_common_attribute (tree *, tree, tree, int, bool *);
518 static tree handle_noreturn_attribute (tree *, tree, tree, int, bool *);
519 static tree handle_noinline_attribute (tree *, tree, tree, int, bool *);
520 static tree handle_always_inline_attribute (tree *, tree, tree, int,
521 bool *);
522 static tree handle_used_attribute (tree *, tree, tree, int, bool *);
523 static tree handle_unused_attribute (tree *, tree, tree, int, bool *);
524 static tree handle_const_attribute (tree *, tree, tree, int, bool *);
525 static tree handle_transparent_union_attribute (tree *, tree, tree,
526 int, bool *);
527 static tree handle_constructor_attribute (tree *, tree, tree, int, bool *);
528 static tree handle_destructor_attribute (tree *, tree, tree, int, bool *);
529 static tree handle_mode_attribute (tree *, tree, tree, int, bool *);
530 static tree handle_section_attribute (tree *, tree, tree, int, bool *);
531 static tree handle_aligned_attribute (tree *, tree, tree, int, bool *);
532 static tree handle_weak_attribute (tree *, tree, tree, int, bool *) ;
533 static tree handle_alias_attribute (tree *, tree, tree, int, bool *);
534 static tree handle_visibility_attribute (tree *, tree, tree, int,
535 bool *);
536 static tree handle_tls_model_attribute (tree *, tree, tree, int,
537 bool *);
538 static tree handle_no_instrument_function_attribute (tree *, tree,
539 tree, int, bool *);
540 static tree handle_malloc_attribute (tree *, tree, tree, int, bool *);
541 static tree handle_returns_twice_attribute (tree *, tree, tree, int, bool *);
542 static tree handle_no_limit_stack_attribute (tree *, tree, tree, int,
543 bool *);
544 static tree handle_pure_attribute (tree *, tree, tree, int, bool *);
545 static tree handle_novops_attribute (tree *, tree, tree, int, bool *);
546 static tree handle_deprecated_attribute (tree *, tree, tree, int,
547 bool *);
548 static tree handle_vector_size_attribute (tree *, tree, tree, int,
549 bool *);
550 static tree handle_nonnull_attribute (tree *, tree, tree, int, bool *);
551 static tree handle_nothrow_attribute (tree *, tree, tree, int, bool *);
552 static tree handle_cleanup_attribute (tree *, tree, tree, int, bool *);
553 static tree handle_warn_unused_result_attribute (tree *, tree, tree, int,
554 bool *);
555 static tree handle_sentinel_attribute (tree *, tree, tree, int, bool *);
557 static void check_function_nonnull (tree, tree);
558 static void check_nonnull_arg (void *, tree, unsigned HOST_WIDE_INT);
559 static bool nonnull_check_p (tree, unsigned HOST_WIDE_INT);
560 static bool get_nonnull_operand (tree, unsigned HOST_WIDE_INT *);
561 static int resort_field_decl_cmp (const void *, const void *);
563 /* Table of machine-independent attributes common to all C-like languages. */
564 const struct attribute_spec c_common_attribute_table[] =
566 /* { name, min_len, max_len, decl_req, type_req, fn_type_req, handler } */
567 { "packed", 0, 0, false, false, false,
568 handle_packed_attribute },
569 { "nocommon", 0, 0, true, false, false,
570 handle_nocommon_attribute },
571 { "common", 0, 0, true, false, false,
572 handle_common_attribute },
573 /* FIXME: logically, noreturn attributes should be listed as
574 "false, true, true" and apply to function types. But implementing this
575 would require all the places in the compiler that use TREE_THIS_VOLATILE
576 on a decl to identify non-returning functions to be located and fixed
577 to check the function type instead. */
578 { "noreturn", 0, 0, true, false, false,
579 handle_noreturn_attribute },
580 { "volatile", 0, 0, true, false, false,
581 handle_noreturn_attribute },
582 { "noinline", 0, 0, true, false, false,
583 handle_noinline_attribute },
584 { "always_inline", 0, 0, true, false, false,
585 handle_always_inline_attribute },
586 { "used", 0, 0, true, false, false,
587 handle_used_attribute },
588 { "unused", 0, 0, false, false, false,
589 handle_unused_attribute },
590 /* The same comments as for noreturn attributes apply to const ones. */
591 { "const", 0, 0, true, false, false,
592 handle_const_attribute },
593 { "transparent_union", 0, 0, false, false, false,
594 handle_transparent_union_attribute },
595 { "constructor", 0, 0, true, false, false,
596 handle_constructor_attribute },
597 { "destructor", 0, 0, true, false, false,
598 handle_destructor_attribute },
599 { "mode", 1, 1, false, true, false,
600 handle_mode_attribute },
601 { "section", 1, 1, true, false, false,
602 handle_section_attribute },
603 { "aligned", 0, 1, false, false, false,
604 handle_aligned_attribute },
605 { "weak", 0, 0, true, false, false,
606 handle_weak_attribute },
607 { "alias", 1, 1, true, false, false,
608 handle_alias_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 { "visibility", 1, 1, false, false, false,
628 handle_visibility_attribute },
629 { "tls_model", 1, 1, true, false, false,
630 handle_tls_model_attribute },
631 { "nonnull", 0, -1, false, true, true,
632 handle_nonnull_attribute },
633 { "nothrow", 0, 0, true, false, false,
634 handle_nothrow_attribute },
635 { "may_alias", 0, 0, false, true, false, NULL },
636 { "cleanup", 1, 1, true, false, false,
637 handle_cleanup_attribute },
638 { "warn_unused_result", 0, 0, false, true, true,
639 handle_warn_unused_result_attribute },
640 { "sentinel", 0, 1, false, true, true,
641 handle_sentinel_attribute },
642 { NULL, 0, 0, false, false, false, NULL }
645 /* Give the specifications for the format attributes, used by C and all
646 descendants. */
648 const struct attribute_spec c_common_format_attribute_table[] =
650 /* { name, min_len, max_len, decl_req, type_req, fn_type_req, handler } */
651 { "format", 3, 3, false, true, true,
652 handle_format_attribute },
653 { "format_arg", 1, 1, false, true, true,
654 handle_format_arg_attribute },
655 { NULL, 0, 0, false, false, false, NULL }
658 /* Push current bindings for the function name VAR_DECLS. */
660 void
661 start_fname_decls (void)
663 unsigned ix;
664 tree saved = NULL_TREE;
666 for (ix = 0; fname_vars[ix].decl; ix++)
668 tree decl = *fname_vars[ix].decl;
670 if (decl)
672 saved = tree_cons (decl, build_int_cst (NULL_TREE, ix), saved);
673 *fname_vars[ix].decl = NULL_TREE;
676 if (saved || saved_function_name_decls)
677 /* Normally they'll have been NULL, so only push if we've got a
678 stack, or they are non-NULL. */
679 saved_function_name_decls = tree_cons (saved, NULL_TREE,
680 saved_function_name_decls);
683 /* Finish up the current bindings, adding them into the current function's
684 statement tree. This must be done _before_ finish_stmt_tree is called.
685 If there is no current function, we must be at file scope and no statements
686 are involved. Pop the previous bindings. */
688 void
689 finish_fname_decls (void)
691 unsigned ix;
692 tree stmts = NULL_TREE;
693 tree stack = saved_function_name_decls;
695 for (; stack && TREE_VALUE (stack); stack = TREE_CHAIN (stack))
696 append_to_statement_list (TREE_VALUE (stack), &stmts);
698 if (stmts)
700 tree *bodyp = &DECL_SAVED_TREE (current_function_decl);
702 if (TREE_CODE (*bodyp) == BIND_EXPR)
703 bodyp = &BIND_EXPR_BODY (*bodyp);
705 append_to_statement_list (*bodyp, &stmts);
706 *bodyp = stmts;
709 for (ix = 0; fname_vars[ix].decl; ix++)
710 *fname_vars[ix].decl = NULL_TREE;
712 if (stack)
714 /* We had saved values, restore them. */
715 tree saved;
717 for (saved = TREE_PURPOSE (stack); saved; saved = TREE_CHAIN (saved))
719 tree decl = TREE_PURPOSE (saved);
720 unsigned ix = TREE_INT_CST_LOW (TREE_VALUE (saved));
722 *fname_vars[ix].decl = decl;
724 stack = TREE_CHAIN (stack);
726 saved_function_name_decls = stack;
729 /* Return the text name of the current function, suitably prettified
730 by PRETTY_P. Return string must be freed by caller. */
732 const char *
733 fname_as_string (int pretty_p)
735 const char *name = "top level";
736 char *namep;
737 int vrb = 2;
739 if (!pretty_p)
741 name = "";
742 vrb = 0;
745 if (current_function_decl)
746 name = lang_hooks.decl_printable_name (current_function_decl, vrb);
748 if (c_lex_string_translate)
750 int len = strlen (name) + 3; /* Two for '"'s. One for NULL. */
751 cpp_string cstr = { 0, 0 }, strname;
753 namep = XNEWVEC (char, len);
754 snprintf (namep, len, "\"%s\"", name);
755 strname.text = (unsigned char *) namep;
756 strname.len = len - 1;
758 if (cpp_interpret_string (parse_in, &strname, 1, &cstr, false))
760 XDELETEVEC (namep);
761 return (char *) cstr.text;
764 else
765 namep = xstrdup (name);
767 return namep;
770 /* Expand DECL if it declares an entity not handled by the
771 common code. */
774 c_expand_decl (tree decl)
776 if (TREE_CODE (decl) == VAR_DECL && !TREE_STATIC (decl))
778 /* Let the back-end know about this variable. */
779 if (!anon_aggr_type_p (TREE_TYPE (decl)))
780 emit_local_var (decl);
781 else
782 expand_anon_union_decl (decl, NULL_TREE,
783 DECL_ANON_UNION_ELEMS (decl));
785 else
786 return 0;
788 return 1;
792 /* Return the VAR_DECL for a const char array naming the current
793 function. If the VAR_DECL has not yet been created, create it
794 now. RID indicates how it should be formatted and IDENTIFIER_NODE
795 ID is its name (unfortunately C and C++ hold the RID values of
796 keywords in different places, so we can't derive RID from ID in
797 this language independent code. */
799 tree
800 fname_decl (unsigned int rid, tree id)
802 unsigned ix;
803 tree decl = NULL_TREE;
805 for (ix = 0; fname_vars[ix].decl; ix++)
806 if (fname_vars[ix].rid == rid)
807 break;
809 decl = *fname_vars[ix].decl;
810 if (!decl)
812 /* If a tree is built here, it would normally have the lineno of
813 the current statement. Later this tree will be moved to the
814 beginning of the function and this line number will be wrong.
815 To avoid this problem set the lineno to 0 here; that prevents
816 it from appearing in the RTL. */
817 tree stmts;
818 location_t saved_location = input_location;
819 #ifdef USE_MAPPED_LOCATION
820 input_location = UNKNOWN_LOCATION;
821 #else
822 input_line = 0;
823 #endif
825 stmts = push_stmt_list ();
826 decl = (*make_fname_decl) (id, fname_vars[ix].pretty);
827 stmts = pop_stmt_list (stmts);
828 if (!IS_EMPTY_STMT (stmts))
829 saved_function_name_decls
830 = tree_cons (decl, stmts, saved_function_name_decls);
831 *fname_vars[ix].decl = decl;
832 input_location = saved_location;
834 if (!ix && !current_function_decl)
835 pedwarn ("%qD is not defined outside of function scope", decl);
837 return decl;
840 /* Given a STRING_CST, give it a suitable array-of-chars data type. */
842 tree
843 fix_string_type (tree value)
845 const int wchar_bytes = TYPE_PRECISION (wchar_type_node) / BITS_PER_UNIT;
846 const int wide_flag = TREE_TYPE (value) == wchar_array_type_node;
847 const int nchars_max = flag_isoc99 ? 4095 : 509;
848 int length = TREE_STRING_LENGTH (value);
849 int nchars;
850 tree e_type, i_type, a_type;
852 /* Compute the number of elements, for the array type. */
853 nchars = wide_flag ? length / wchar_bytes : length;
855 if (pedantic && nchars - 1 > nchars_max && !c_dialect_cxx ())
856 pedwarn ("string length %qd is greater than the length %qd ISO C%d compilers are required to support",
857 nchars - 1, nchars_max, flag_isoc99 ? 99 : 89);
859 e_type = wide_flag ? wchar_type_node : char_type_node;
860 /* Create the array type for the string constant. flag_const_strings
861 says make the string constant an array of const char so that
862 copying it to a non-const pointer will get a warning. For C++,
863 this is the standard behavior.
865 The C++ front end relies on TYPE_MAIN_VARIANT of a cv-qualified
866 array type being the unqualified version of that type.
867 Therefore, if we are constructing an array of const char, we must
868 construct the matching unqualified array type first. The C front
869 end does not require this, but it does no harm, so we do it
870 unconditionally. */
871 i_type = build_index_type (build_int_cst (NULL_TREE, nchars - 1));
872 a_type = build_array_type (e_type, i_type);
873 if (flag_const_strings)
874 a_type = c_build_qualified_type (a_type, TYPE_QUAL_CONST);
876 TREE_TYPE (value) = a_type;
877 TREE_CONSTANT (value) = 1;
878 TREE_INVARIANT (value) = 1;
879 TREE_READONLY (value) = 1;
880 TREE_STATIC (value) = 1;
881 return value;
884 /* Print a warning if a constant expression had overflow in folding.
885 Invoke this function on every expression that the language
886 requires to be a constant expression.
887 Note the ANSI C standard says it is erroneous for a
888 constant expression to overflow. */
890 void
891 constant_expression_warning (tree value)
893 if ((TREE_CODE (value) == INTEGER_CST || TREE_CODE (value) == REAL_CST
894 || TREE_CODE (value) == VECTOR_CST
895 || TREE_CODE (value) == COMPLEX_CST)
896 && TREE_CONSTANT_OVERFLOW (value) && pedantic)
897 pedwarn ("overflow in constant expression");
900 /* Print a warning if an expression had overflow in folding.
901 Invoke this function on every expression that
902 (1) appears in the source code, and
903 (2) might be a constant expression that overflowed, and
904 (3) is not already checked by convert_and_check;
905 however, do not invoke this function on operands of explicit casts. */
907 void
908 overflow_warning (tree value)
910 if ((TREE_CODE (value) == INTEGER_CST
911 || (TREE_CODE (value) == COMPLEX_CST
912 && TREE_CODE (TREE_REALPART (value)) == INTEGER_CST))
913 && TREE_OVERFLOW (value))
915 TREE_OVERFLOW (value) = 0;
916 if (skip_evaluation == 0)
917 warning (0, "integer overflow in expression");
919 else if ((TREE_CODE (value) == REAL_CST
920 || (TREE_CODE (value) == COMPLEX_CST
921 && TREE_CODE (TREE_REALPART (value)) == REAL_CST))
922 && TREE_OVERFLOW (value))
924 TREE_OVERFLOW (value) = 0;
925 if (skip_evaluation == 0)
926 warning (0, "floating point overflow in expression");
928 else if (TREE_CODE (value) == VECTOR_CST && TREE_OVERFLOW (value))
930 TREE_OVERFLOW (value) = 0;
931 if (skip_evaluation == 0)
932 warning (0, "vector overflow in expression");
936 /* Print a warning if a large constant is truncated to unsigned,
937 or if -Wconversion is used and a constant < 0 is converted to unsigned.
938 Invoke this function on every expression that might be implicitly
939 converted to an unsigned type. */
941 void
942 unsigned_conversion_warning (tree result, tree operand)
944 tree type = TREE_TYPE (result);
946 if (TREE_CODE (operand) == INTEGER_CST
947 && TREE_CODE (type) == INTEGER_TYPE
948 && TYPE_UNSIGNED (type)
949 && skip_evaluation == 0
950 && !int_fits_type_p (operand, type))
952 if (!int_fits_type_p (operand, c_common_signed_type (type)))
953 /* This detects cases like converting -129 or 256 to unsigned char. */
954 warning (0, "large integer implicitly truncated to unsigned type");
955 else if (warn_conversion)
956 warning (0, "negative integer implicitly converted to unsigned type");
960 /* Nonzero if constant C has a value that is permissible
961 for type TYPE (an INTEGER_TYPE). */
963 static int
964 constant_fits_type_p (tree c, tree type)
966 if (TREE_CODE (c) == INTEGER_CST)
967 return int_fits_type_p (c, type);
969 c = convert (type, c);
970 return !TREE_OVERFLOW (c);
973 /* Nonzero if vector types T1 and T2 can be converted to each other
974 without an explicit cast. */
976 vector_types_convertible_p (tree t1, tree t2)
978 return targetm.vector_opaque_p (t1)
979 || targetm.vector_opaque_p (t2)
980 || (tree_int_cst_equal (TYPE_SIZE (t1), TYPE_SIZE (t2))
981 && INTEGRAL_TYPE_P (TREE_TYPE (t1))
982 == INTEGRAL_TYPE_P (TREE_TYPE (t2)));
985 /* Convert EXPR to TYPE, warning about conversion problems with constants.
986 Invoke this function on every expression that is converted implicitly,
987 i.e. because of language rules and not because of an explicit cast. */
989 tree
990 convert_and_check (tree type, tree expr)
992 tree t = convert (type, expr);
993 if (TREE_CODE (t) == INTEGER_CST)
995 if (TREE_OVERFLOW (t))
997 TREE_OVERFLOW (t) = 0;
999 /* Do not diagnose overflow in a constant expression merely
1000 because a conversion overflowed. */
1001 TREE_CONSTANT_OVERFLOW (t) = TREE_CONSTANT_OVERFLOW (expr);
1003 /* No warning for converting 0x80000000 to int. */
1004 if (!(TYPE_UNSIGNED (type) < TYPE_UNSIGNED (TREE_TYPE (expr))
1005 && TREE_CODE (TREE_TYPE (expr)) == INTEGER_TYPE
1006 && TYPE_PRECISION (type) == TYPE_PRECISION (TREE_TYPE (expr))))
1007 /* If EXPR fits in the unsigned version of TYPE,
1008 don't warn unless pedantic. */
1009 if ((pedantic
1010 || TYPE_UNSIGNED (type)
1011 || !constant_fits_type_p (expr,
1012 c_common_unsigned_type (type)))
1013 && skip_evaluation == 0)
1014 warning (0, "overflow in implicit constant conversion");
1016 else
1017 unsigned_conversion_warning (t, expr);
1019 return t;
1022 /* A node in a list that describes references to variables (EXPR), which are
1023 either read accesses if WRITER is zero, or write accesses, in which case
1024 WRITER is the parent of EXPR. */
1025 struct tlist
1027 struct tlist *next;
1028 tree expr, writer;
1031 /* Used to implement a cache the results of a call to verify_tree. We only
1032 use this for SAVE_EXPRs. */
1033 struct tlist_cache
1035 struct tlist_cache *next;
1036 struct tlist *cache_before_sp;
1037 struct tlist *cache_after_sp;
1038 tree expr;
1041 /* Obstack to use when allocating tlist structures, and corresponding
1042 firstobj. */
1043 static struct obstack tlist_obstack;
1044 static char *tlist_firstobj = 0;
1046 /* Keep track of the identifiers we've warned about, so we can avoid duplicate
1047 warnings. */
1048 static struct tlist *warned_ids;
1049 /* SAVE_EXPRs need special treatment. We process them only once and then
1050 cache the results. */
1051 static struct tlist_cache *save_expr_cache;
1053 static void add_tlist (struct tlist **, struct tlist *, tree, int);
1054 static void merge_tlist (struct tlist **, struct tlist *, int);
1055 static void verify_tree (tree, struct tlist **, struct tlist **, tree);
1056 static int warning_candidate_p (tree);
1057 static void warn_for_collisions (struct tlist *);
1058 static void warn_for_collisions_1 (tree, tree, struct tlist *, int);
1059 static struct tlist *new_tlist (struct tlist *, tree, tree);
1061 /* Create a new struct tlist and fill in its fields. */
1062 static struct tlist *
1063 new_tlist (struct tlist *next, tree t, tree writer)
1065 struct tlist *l;
1066 l = XOBNEW (&tlist_obstack, struct tlist);
1067 l->next = next;
1068 l->expr = t;
1069 l->writer = writer;
1070 return l;
1073 /* Add duplicates of the nodes found in ADD to the list *TO. If EXCLUDE_WRITER
1074 is nonnull, we ignore any node we find which has a writer equal to it. */
1076 static void
1077 add_tlist (struct tlist **to, struct tlist *add, tree exclude_writer, int copy)
1079 while (add)
1081 struct tlist *next = add->next;
1082 if (!copy)
1083 add->next = *to;
1084 if (!exclude_writer || add->writer != exclude_writer)
1085 *to = copy ? new_tlist (*to, add->expr, add->writer) : add;
1086 add = next;
1090 /* Merge the nodes of ADD into TO. This merging process is done so that for
1091 each variable that already exists in TO, no new node is added; however if
1092 there is a write access recorded in ADD, and an occurrence on TO is only
1093 a read access, then the occurrence in TO will be modified to record the
1094 write. */
1096 static void
1097 merge_tlist (struct tlist **to, struct tlist *add, int copy)
1099 struct tlist **end = to;
1101 while (*end)
1102 end = &(*end)->next;
1104 while (add)
1106 int found = 0;
1107 struct tlist *tmp2;
1108 struct tlist *next = add->next;
1110 for (tmp2 = *to; tmp2; tmp2 = tmp2->next)
1111 if (tmp2->expr == add->expr)
1113 found = 1;
1114 if (!tmp2->writer)
1115 tmp2->writer = add->writer;
1117 if (!found)
1119 *end = copy ? add : new_tlist (NULL, add->expr, add->writer);
1120 end = &(*end)->next;
1121 *end = 0;
1123 add = next;
1127 /* WRITTEN is a variable, WRITER is its parent. Warn if any of the variable
1128 references in list LIST conflict with it, excluding reads if ONLY writers
1129 is nonzero. */
1131 static void
1132 warn_for_collisions_1 (tree written, tree writer, struct tlist *list,
1133 int only_writes)
1135 struct tlist *tmp;
1137 /* Avoid duplicate warnings. */
1138 for (tmp = warned_ids; tmp; tmp = tmp->next)
1139 if (tmp->expr == written)
1140 return;
1142 while (list)
1144 if (list->expr == written
1145 && list->writer != writer
1146 && (!only_writes || list->writer)
1147 && DECL_NAME (list->expr))
1149 warned_ids = new_tlist (warned_ids, written, NULL_TREE);
1150 warning (0, "operation on %qE may be undefined", list->expr);
1152 list = list->next;
1156 /* Given a list LIST of references to variables, find whether any of these
1157 can cause conflicts due to missing sequence points. */
1159 static void
1160 warn_for_collisions (struct tlist *list)
1162 struct tlist *tmp;
1164 for (tmp = list; tmp; tmp = tmp->next)
1166 if (tmp->writer)
1167 warn_for_collisions_1 (tmp->expr, tmp->writer, list, 0);
1171 /* Return nonzero if X is a tree that can be verified by the sequence point
1172 warnings. */
1173 static int
1174 warning_candidate_p (tree x)
1176 return TREE_CODE (x) == VAR_DECL || TREE_CODE (x) == PARM_DECL;
1179 /* Walk the tree X, and record accesses to variables. If X is written by the
1180 parent tree, WRITER is the parent.
1181 We store accesses in one of the two lists: PBEFORE_SP, and PNO_SP. If this
1182 expression or its only operand forces a sequence point, then everything up
1183 to the sequence point is stored in PBEFORE_SP. Everything else gets stored
1184 in PNO_SP.
1185 Once we return, we will have emitted warnings if any subexpression before
1186 such a sequence point could be undefined. On a higher level, however, the
1187 sequence point may not be relevant, and we'll merge the two lists.
1189 Example: (b++, a) + b;
1190 The call that processes the COMPOUND_EXPR will store the increment of B
1191 in PBEFORE_SP, and the use of A in PNO_SP. The higher-level call that
1192 processes the PLUS_EXPR will need to merge the two lists so that
1193 eventually, all accesses end up on the same list (and we'll warn about the
1194 unordered subexpressions b++ and b.
1196 A note on merging. If we modify the former example so that our expression
1197 becomes
1198 (b++, b) + a
1199 care must be taken not simply to add all three expressions into the final
1200 PNO_SP list. The function merge_tlist takes care of that by merging the
1201 before-SP list of the COMPOUND_EXPR into its after-SP list in a special
1202 way, so that no more than one access to B is recorded. */
1204 static void
1205 verify_tree (tree x, struct tlist **pbefore_sp, struct tlist **pno_sp,
1206 tree writer)
1208 struct tlist *tmp_before, *tmp_nosp, *tmp_list2, *tmp_list3;
1209 enum tree_code code;
1210 enum tree_code_class cl;
1212 /* X may be NULL if it is the operand of an empty statement expression
1213 ({ }). */
1214 if (x == NULL)
1215 return;
1217 restart:
1218 code = TREE_CODE (x);
1219 cl = TREE_CODE_CLASS (code);
1221 if (warning_candidate_p (x))
1223 *pno_sp = new_tlist (*pno_sp, x, writer);
1224 return;
1227 switch (code)
1229 case CONSTRUCTOR:
1230 return;
1232 case COMPOUND_EXPR:
1233 case TRUTH_ANDIF_EXPR:
1234 case TRUTH_ORIF_EXPR:
1235 tmp_before = tmp_nosp = tmp_list3 = 0;
1236 verify_tree (TREE_OPERAND (x, 0), &tmp_before, &tmp_nosp, NULL_TREE);
1237 warn_for_collisions (tmp_nosp);
1238 merge_tlist (pbefore_sp, tmp_before, 0);
1239 merge_tlist (pbefore_sp, tmp_nosp, 0);
1240 verify_tree (TREE_OPERAND (x, 1), &tmp_list3, pno_sp, NULL_TREE);
1241 merge_tlist (pbefore_sp, tmp_list3, 0);
1242 return;
1244 case COND_EXPR:
1245 tmp_before = tmp_list2 = 0;
1246 verify_tree (TREE_OPERAND (x, 0), &tmp_before, &tmp_list2, NULL_TREE);
1247 warn_for_collisions (tmp_list2);
1248 merge_tlist (pbefore_sp, tmp_before, 0);
1249 merge_tlist (pbefore_sp, tmp_list2, 1);
1251 tmp_list3 = tmp_nosp = 0;
1252 verify_tree (TREE_OPERAND (x, 1), &tmp_list3, &tmp_nosp, NULL_TREE);
1253 warn_for_collisions (tmp_nosp);
1254 merge_tlist (pbefore_sp, tmp_list3, 0);
1256 tmp_list3 = tmp_list2 = 0;
1257 verify_tree (TREE_OPERAND (x, 2), &tmp_list3, &tmp_list2, NULL_TREE);
1258 warn_for_collisions (tmp_list2);
1259 merge_tlist (pbefore_sp, tmp_list3, 0);
1260 /* Rather than add both tmp_nosp and tmp_list2, we have to merge the
1261 two first, to avoid warning for (a ? b++ : b++). */
1262 merge_tlist (&tmp_nosp, tmp_list2, 0);
1263 add_tlist (pno_sp, tmp_nosp, NULL_TREE, 0);
1264 return;
1266 case PREDECREMENT_EXPR:
1267 case PREINCREMENT_EXPR:
1268 case POSTDECREMENT_EXPR:
1269 case POSTINCREMENT_EXPR:
1270 verify_tree (TREE_OPERAND (x, 0), pno_sp, pno_sp, x);
1271 return;
1273 case MODIFY_EXPR:
1274 tmp_before = tmp_nosp = tmp_list3 = 0;
1275 verify_tree (TREE_OPERAND (x, 1), &tmp_before, &tmp_nosp, NULL_TREE);
1276 verify_tree (TREE_OPERAND (x, 0), &tmp_list3, &tmp_list3, x);
1277 /* Expressions inside the LHS are not ordered wrt. the sequence points
1278 in the RHS. Example:
1279 *a = (a++, 2)
1280 Despite the fact that the modification of "a" is in the before_sp
1281 list (tmp_before), it conflicts with the use of "a" in the LHS.
1282 We can handle this by adding the contents of tmp_list3
1283 to those of tmp_before, and redoing the collision warnings for that
1284 list. */
1285 add_tlist (&tmp_before, tmp_list3, x, 1);
1286 warn_for_collisions (tmp_before);
1287 /* Exclude the LHS itself here; we first have to merge it into the
1288 tmp_nosp list. This is done to avoid warning for "a = a"; if we
1289 didn't exclude the LHS, we'd get it twice, once as a read and once
1290 as a write. */
1291 add_tlist (pno_sp, tmp_list3, x, 0);
1292 warn_for_collisions_1 (TREE_OPERAND (x, 0), x, tmp_nosp, 1);
1294 merge_tlist (pbefore_sp, tmp_before, 0);
1295 if (warning_candidate_p (TREE_OPERAND (x, 0)))
1296 merge_tlist (&tmp_nosp, new_tlist (NULL, TREE_OPERAND (x, 0), x), 0);
1297 add_tlist (pno_sp, tmp_nosp, NULL_TREE, 1);
1298 return;
1300 case CALL_EXPR:
1301 /* We need to warn about conflicts among arguments and conflicts between
1302 args and the function address. Side effects of the function address,
1303 however, are not ordered by the sequence point of the call. */
1304 tmp_before = tmp_nosp = tmp_list2 = tmp_list3 = 0;
1305 verify_tree (TREE_OPERAND (x, 0), &tmp_before, &tmp_nosp, NULL_TREE);
1306 if (TREE_OPERAND (x, 1))
1307 verify_tree (TREE_OPERAND (x, 1), &tmp_list2, &tmp_list3, NULL_TREE);
1308 merge_tlist (&tmp_list3, tmp_list2, 0);
1309 add_tlist (&tmp_before, tmp_list3, NULL_TREE, 0);
1310 add_tlist (&tmp_before, tmp_nosp, NULL_TREE, 0);
1311 warn_for_collisions (tmp_before);
1312 add_tlist (pbefore_sp, tmp_before, NULL_TREE, 0);
1313 return;
1315 case TREE_LIST:
1316 /* Scan all the list, e.g. indices of multi dimensional array. */
1317 while (x)
1319 tmp_before = tmp_nosp = 0;
1320 verify_tree (TREE_VALUE (x), &tmp_before, &tmp_nosp, NULL_TREE);
1321 merge_tlist (&tmp_nosp, tmp_before, 0);
1322 add_tlist (pno_sp, tmp_nosp, NULL_TREE, 0);
1323 x = TREE_CHAIN (x);
1325 return;
1327 case SAVE_EXPR:
1329 struct tlist_cache *t;
1330 for (t = save_expr_cache; t; t = t->next)
1331 if (t->expr == x)
1332 break;
1334 if (!t)
1336 t = XOBNEW (&tlist_obstack, struct tlist_cache);
1337 t->next = save_expr_cache;
1338 t->expr = x;
1339 save_expr_cache = t;
1341 tmp_before = tmp_nosp = 0;
1342 verify_tree (TREE_OPERAND (x, 0), &tmp_before, &tmp_nosp, NULL_TREE);
1343 warn_for_collisions (tmp_nosp);
1345 tmp_list3 = 0;
1346 while (tmp_nosp)
1348 struct tlist *t = tmp_nosp;
1349 tmp_nosp = t->next;
1350 merge_tlist (&tmp_list3, t, 0);
1352 t->cache_before_sp = tmp_before;
1353 t->cache_after_sp = tmp_list3;
1355 merge_tlist (pbefore_sp, t->cache_before_sp, 1);
1356 add_tlist (pno_sp, t->cache_after_sp, NULL_TREE, 1);
1357 return;
1360 default:
1361 /* For other expressions, simply recurse on their operands.
1362 Manual tail recursion for unary expressions.
1363 Other non-expressions need not be processed. */
1364 if (cl == tcc_unary)
1366 x = TREE_OPERAND (x, 0);
1367 writer = 0;
1368 goto restart;
1370 else if (IS_EXPR_CODE_CLASS (cl))
1372 int lp;
1373 int max = TREE_CODE_LENGTH (TREE_CODE (x));
1374 for (lp = 0; lp < max; lp++)
1376 tmp_before = tmp_nosp = 0;
1377 verify_tree (TREE_OPERAND (x, lp), &tmp_before, &tmp_nosp, 0);
1378 merge_tlist (&tmp_nosp, tmp_before, 0);
1379 add_tlist (pno_sp, tmp_nosp, NULL_TREE, 0);
1382 return;
1386 /* Try to warn for undefined behavior in EXPR due to missing sequence
1387 points. */
1389 void
1390 verify_sequence_points (tree expr)
1392 struct tlist *before_sp = 0, *after_sp = 0;
1394 warned_ids = 0;
1395 save_expr_cache = 0;
1396 if (tlist_firstobj == 0)
1398 gcc_obstack_init (&tlist_obstack);
1399 tlist_firstobj = (char *) obstack_alloc (&tlist_obstack, 0);
1402 verify_tree (expr, &before_sp, &after_sp, 0);
1403 warn_for_collisions (after_sp);
1404 obstack_free (&tlist_obstack, tlist_firstobj);
1407 /* Validate the expression after `case' and apply default promotions. */
1409 static tree
1410 check_case_value (tree value)
1412 if (value == NULL_TREE)
1413 return value;
1415 /* ??? Can we ever get nops here for a valid case value? We
1416 shouldn't for C. */
1417 STRIP_TYPE_NOPS (value);
1418 /* In C++, the following is allowed:
1420 const int i = 3;
1421 switch (...) { case i: ... }
1423 So, we try to reduce the VALUE to a constant that way. */
1424 if (c_dialect_cxx ())
1426 value = decl_constant_value (value);
1427 STRIP_TYPE_NOPS (value);
1428 value = fold (value);
1431 if (TREE_CODE (value) == INTEGER_CST)
1432 /* Promote char or short to int. */
1433 value = perform_integral_promotions (value);
1434 else if (value != error_mark_node)
1436 error ("case label does not reduce to an integer constant");
1437 value = error_mark_node;
1440 constant_expression_warning (value);
1442 return value;
1445 /* See if the case values LOW and HIGH are in the range of the original
1446 type (i.e. before the default conversion to int) of the switch testing
1447 expression.
1448 TYPE is the promoted type of the testing expression, and ORIG_TYPE is
1449 the type before promoting it. CASE_LOW_P is a pointer to the lower
1450 bound of the case label, and CASE_HIGH_P is the upper bound or NULL
1451 if the case is not a case range.
1452 The caller has to make sure that we are not called with NULL for
1453 CASE_LOW_P (i.e. the default case).
1454 Returns true if the case label is in range of ORIG_TYPE (satured or
1455 untouched) or false if the label is out of range. */
1457 static bool
1458 check_case_bounds (tree type, tree orig_type,
1459 tree *case_low_p, tree *case_high_p)
1461 tree min_value, max_value;
1462 tree case_low = *case_low_p;
1463 tree case_high = case_high_p ? *case_high_p : case_low;
1465 /* If there was a problem with the original type, do nothing. */
1466 if (orig_type == error_mark_node)
1467 return true;
1469 min_value = TYPE_MIN_VALUE (orig_type);
1470 max_value = TYPE_MAX_VALUE (orig_type);
1472 /* Case label is less than minimum for type. */
1473 if (tree_int_cst_compare (case_low, min_value) < 0
1474 && tree_int_cst_compare (case_high, min_value) < 0)
1476 warning (0, "case label value is less than minimum value for type");
1477 return false;
1480 /* Case value is greater than maximum for type. */
1481 if (tree_int_cst_compare (case_low, max_value) > 0
1482 && tree_int_cst_compare (case_high, max_value) > 0)
1484 warning (0, "case label value exceeds maximum value for type");
1485 return false;
1488 /* Saturate lower case label value to minimum. */
1489 if (tree_int_cst_compare (case_high, min_value) >= 0
1490 && tree_int_cst_compare (case_low, min_value) < 0)
1492 warning (0, "lower value in case label range"
1493 " less than minimum value for type");
1494 case_low = min_value;
1497 /* Saturate upper case label value to maximum. */
1498 if (tree_int_cst_compare (case_low, max_value) <= 0
1499 && tree_int_cst_compare (case_high, max_value) > 0)
1501 warning (0, "upper value in case label range"
1502 " exceeds maximum value for type");
1503 case_high = max_value;
1506 if (*case_low_p != case_low)
1507 *case_low_p = convert (type, case_low);
1508 if (case_high_p && *case_high_p != case_high)
1509 *case_high_p = convert (type, case_high);
1511 return true;
1514 /* Return an integer type with BITS bits of precision,
1515 that is unsigned if UNSIGNEDP is nonzero, otherwise signed. */
1517 tree
1518 c_common_type_for_size (unsigned int bits, int unsignedp)
1520 if (bits == TYPE_PRECISION (integer_type_node))
1521 return unsignedp ? unsigned_type_node : integer_type_node;
1523 if (bits == TYPE_PRECISION (signed_char_type_node))
1524 return unsignedp ? unsigned_char_type_node : signed_char_type_node;
1526 if (bits == TYPE_PRECISION (short_integer_type_node))
1527 return unsignedp ? short_unsigned_type_node : short_integer_type_node;
1529 if (bits == TYPE_PRECISION (long_integer_type_node))
1530 return unsignedp ? long_unsigned_type_node : long_integer_type_node;
1532 if (bits == TYPE_PRECISION (long_long_integer_type_node))
1533 return (unsignedp ? long_long_unsigned_type_node
1534 : long_long_integer_type_node);
1536 if (bits == TYPE_PRECISION (widest_integer_literal_type_node))
1537 return (unsignedp ? widest_unsigned_literal_type_node
1538 : widest_integer_literal_type_node);
1540 if (bits <= TYPE_PRECISION (intQI_type_node))
1541 return unsignedp ? unsigned_intQI_type_node : intQI_type_node;
1543 if (bits <= TYPE_PRECISION (intHI_type_node))
1544 return unsignedp ? unsigned_intHI_type_node : intHI_type_node;
1546 if (bits <= TYPE_PRECISION (intSI_type_node))
1547 return unsignedp ? unsigned_intSI_type_node : intSI_type_node;
1549 if (bits <= TYPE_PRECISION (intDI_type_node))
1550 return unsignedp ? unsigned_intDI_type_node : intDI_type_node;
1552 return 0;
1555 /* Used for communication between c_common_type_for_mode and
1556 c_register_builtin_type. */
1557 static GTY(()) tree registered_builtin_types;
1559 /* Return a data type that has machine mode MODE.
1560 If the mode is an integer,
1561 then UNSIGNEDP selects between signed and unsigned types. */
1563 tree
1564 c_common_type_for_mode (enum machine_mode mode, int unsignedp)
1566 tree t;
1568 if (mode == TYPE_MODE (integer_type_node))
1569 return unsignedp ? unsigned_type_node : integer_type_node;
1571 if (mode == TYPE_MODE (signed_char_type_node))
1572 return unsignedp ? unsigned_char_type_node : signed_char_type_node;
1574 if (mode == TYPE_MODE (short_integer_type_node))
1575 return unsignedp ? short_unsigned_type_node : short_integer_type_node;
1577 if (mode == TYPE_MODE (long_integer_type_node))
1578 return unsignedp ? long_unsigned_type_node : long_integer_type_node;
1580 if (mode == TYPE_MODE (long_long_integer_type_node))
1581 return unsignedp ? long_long_unsigned_type_node : long_long_integer_type_node;
1583 if (mode == TYPE_MODE (widest_integer_literal_type_node))
1584 return unsignedp ? widest_unsigned_literal_type_node
1585 : widest_integer_literal_type_node;
1587 if (mode == QImode)
1588 return unsignedp ? unsigned_intQI_type_node : intQI_type_node;
1590 if (mode == HImode)
1591 return unsignedp ? unsigned_intHI_type_node : intHI_type_node;
1593 if (mode == SImode)
1594 return unsignedp ? unsigned_intSI_type_node : intSI_type_node;
1596 if (mode == DImode)
1597 return unsignedp ? unsigned_intDI_type_node : intDI_type_node;
1599 #if HOST_BITS_PER_WIDE_INT >= 64
1600 if (mode == TYPE_MODE (intTI_type_node))
1601 return unsignedp ? unsigned_intTI_type_node : intTI_type_node;
1602 #endif
1604 if (mode == TYPE_MODE (float_type_node))
1605 return float_type_node;
1607 if (mode == TYPE_MODE (double_type_node))
1608 return double_type_node;
1610 if (mode == TYPE_MODE (long_double_type_node))
1611 return long_double_type_node;
1613 if (mode == TYPE_MODE (void_type_node))
1614 return void_type_node;
1616 if (mode == TYPE_MODE (build_pointer_type (char_type_node)))
1617 return (unsignedp
1618 ? make_unsigned_type (GET_MODE_PRECISION (mode))
1619 : make_signed_type (GET_MODE_PRECISION (mode)));
1621 if (mode == TYPE_MODE (build_pointer_type (integer_type_node)))
1622 return (unsignedp
1623 ? make_unsigned_type (GET_MODE_PRECISION (mode))
1624 : make_signed_type (GET_MODE_PRECISION (mode)));
1626 if (COMPLEX_MODE_P (mode))
1628 enum machine_mode inner_mode;
1629 tree inner_type;
1631 if (mode == TYPE_MODE (complex_float_type_node))
1632 return complex_float_type_node;
1633 if (mode == TYPE_MODE (complex_double_type_node))
1634 return complex_double_type_node;
1635 if (mode == TYPE_MODE (complex_long_double_type_node))
1636 return complex_long_double_type_node;
1638 if (mode == TYPE_MODE (complex_integer_type_node) && !unsignedp)
1639 return complex_integer_type_node;
1641 inner_mode = GET_MODE_INNER (mode);
1642 inner_type = c_common_type_for_mode (inner_mode, unsignedp);
1643 if (inner_type != NULL_TREE)
1644 return build_complex_type (inner_type);
1646 else if (VECTOR_MODE_P (mode))
1648 enum machine_mode inner_mode = GET_MODE_INNER (mode);
1649 tree inner_type = c_common_type_for_mode (inner_mode, unsignedp);
1650 if (inner_type != NULL_TREE)
1651 return build_vector_type_for_mode (inner_type, mode);
1654 for (t = registered_builtin_types; t; t = TREE_CHAIN (t))
1655 if (TYPE_MODE (TREE_VALUE (t)) == mode)
1656 return TREE_VALUE (t);
1658 return 0;
1661 /* Return an unsigned type the same as TYPE in other respects. */
1662 tree
1663 c_common_unsigned_type (tree type)
1665 tree type1 = TYPE_MAIN_VARIANT (type);
1666 if (type1 == signed_char_type_node || type1 == char_type_node)
1667 return unsigned_char_type_node;
1668 if (type1 == integer_type_node)
1669 return unsigned_type_node;
1670 if (type1 == short_integer_type_node)
1671 return short_unsigned_type_node;
1672 if (type1 == long_integer_type_node)
1673 return long_unsigned_type_node;
1674 if (type1 == long_long_integer_type_node)
1675 return long_long_unsigned_type_node;
1676 if (type1 == widest_integer_literal_type_node)
1677 return widest_unsigned_literal_type_node;
1678 #if HOST_BITS_PER_WIDE_INT >= 64
1679 if (type1 == intTI_type_node)
1680 return unsigned_intTI_type_node;
1681 #endif
1682 if (type1 == intDI_type_node)
1683 return unsigned_intDI_type_node;
1684 if (type1 == intSI_type_node)
1685 return unsigned_intSI_type_node;
1686 if (type1 == intHI_type_node)
1687 return unsigned_intHI_type_node;
1688 if (type1 == intQI_type_node)
1689 return unsigned_intQI_type_node;
1691 return c_common_signed_or_unsigned_type (1, type);
1694 /* Return a signed type the same as TYPE in other respects. */
1696 tree
1697 c_common_signed_type (tree type)
1699 tree type1 = TYPE_MAIN_VARIANT (type);
1700 if (type1 == unsigned_char_type_node || type1 == char_type_node)
1701 return signed_char_type_node;
1702 if (type1 == unsigned_type_node)
1703 return integer_type_node;
1704 if (type1 == short_unsigned_type_node)
1705 return short_integer_type_node;
1706 if (type1 == long_unsigned_type_node)
1707 return long_integer_type_node;
1708 if (type1 == long_long_unsigned_type_node)
1709 return long_long_integer_type_node;
1710 if (type1 == widest_unsigned_literal_type_node)
1711 return widest_integer_literal_type_node;
1712 #if HOST_BITS_PER_WIDE_INT >= 64
1713 if (type1 == unsigned_intTI_type_node)
1714 return intTI_type_node;
1715 #endif
1716 if (type1 == unsigned_intDI_type_node)
1717 return intDI_type_node;
1718 if (type1 == unsigned_intSI_type_node)
1719 return intSI_type_node;
1720 if (type1 == unsigned_intHI_type_node)
1721 return intHI_type_node;
1722 if (type1 == unsigned_intQI_type_node)
1723 return intQI_type_node;
1725 return c_common_signed_or_unsigned_type (0, type);
1728 /* Return a type the same as TYPE except unsigned or
1729 signed according to UNSIGNEDP. */
1731 tree
1732 c_common_signed_or_unsigned_type (int unsignedp, tree type)
1734 if (!INTEGRAL_TYPE_P (type)
1735 || TYPE_UNSIGNED (type) == unsignedp)
1736 return type;
1738 /* For ENUMERAL_TYPEs in C++, must check the mode of the types, not
1739 the precision; they have precision set to match their range, but
1740 may use a wider mode to match an ABI. If we change modes, we may
1741 wind up with bad conversions. For INTEGER_TYPEs in C, must check
1742 the precision as well, so as to yield correct results for
1743 bit-field types. C++ does not have these separate bit-field
1744 types, and producing a signed or unsigned variant of an
1745 ENUMERAL_TYPE may cause other problems as well. */
1747 #define TYPE_OK(node) \
1748 (TYPE_MODE (type) == TYPE_MODE (node) \
1749 && (c_dialect_cxx () || TYPE_PRECISION (type) == TYPE_PRECISION (node)))
1750 if (TYPE_OK (signed_char_type_node))
1751 return unsignedp ? unsigned_char_type_node : signed_char_type_node;
1752 if (TYPE_OK (integer_type_node))
1753 return unsignedp ? unsigned_type_node : integer_type_node;
1754 if (TYPE_OK (short_integer_type_node))
1755 return unsignedp ? short_unsigned_type_node : short_integer_type_node;
1756 if (TYPE_OK (long_integer_type_node))
1757 return unsignedp ? long_unsigned_type_node : long_integer_type_node;
1758 if (TYPE_OK (long_long_integer_type_node))
1759 return (unsignedp ? long_long_unsigned_type_node
1760 : long_long_integer_type_node);
1761 if (TYPE_OK (widest_integer_literal_type_node))
1762 return (unsignedp ? widest_unsigned_literal_type_node
1763 : widest_integer_literal_type_node);
1765 #if HOST_BITS_PER_WIDE_INT >= 64
1766 if (TYPE_OK (intTI_type_node))
1767 return unsignedp ? unsigned_intTI_type_node : intTI_type_node;
1768 #endif
1769 if (TYPE_OK (intDI_type_node))
1770 return unsignedp ? unsigned_intDI_type_node : intDI_type_node;
1771 if (TYPE_OK (intSI_type_node))
1772 return unsignedp ? unsigned_intSI_type_node : intSI_type_node;
1773 if (TYPE_OK (intHI_type_node))
1774 return unsignedp ? unsigned_intHI_type_node : intHI_type_node;
1775 if (TYPE_OK (intQI_type_node))
1776 return unsignedp ? unsigned_intQI_type_node : intQI_type_node;
1777 #undef TYPE_OK
1779 if (c_dialect_cxx ())
1780 return type;
1781 else
1782 return build_nonstandard_integer_type (TYPE_PRECISION (type), unsignedp);
1785 /* The C version of the register_builtin_type langhook. */
1787 void
1788 c_register_builtin_type (tree type, const char* name)
1790 tree decl;
1792 decl = build_decl (TYPE_DECL, get_identifier (name), type);
1793 DECL_ARTIFICIAL (decl) = 1;
1794 if (!TYPE_NAME (type))
1795 TYPE_NAME (type) = decl;
1796 pushdecl (decl);
1798 registered_builtin_types = tree_cons (0, type, registered_builtin_types);
1802 /* Return the minimum number of bits needed to represent VALUE in a
1803 signed or unsigned type, UNSIGNEDP says which. */
1805 unsigned int
1806 min_precision (tree value, int unsignedp)
1808 int log;
1810 /* If the value is negative, compute its negative minus 1. The latter
1811 adjustment is because the absolute value of the largest negative value
1812 is one larger than the largest positive value. This is equivalent to
1813 a bit-wise negation, so use that operation instead. */
1815 if (tree_int_cst_sgn (value) < 0)
1816 value = fold (build1 (BIT_NOT_EXPR, TREE_TYPE (value), value));
1818 /* Return the number of bits needed, taking into account the fact
1819 that we need one more bit for a signed than unsigned type. */
1821 if (integer_zerop (value))
1822 log = 0;
1823 else
1824 log = tree_floor_log2 (value);
1826 return log + 1 + !unsignedp;
1829 /* Print an error message for invalid operands to arith operation
1830 CODE. NOP_EXPR is used as a special case (see
1831 c_common_truthvalue_conversion). */
1833 void
1834 binary_op_error (enum tree_code code)
1836 const char *opname;
1838 switch (code)
1840 case NOP_EXPR:
1841 error ("invalid truth-value expression");
1842 return;
1844 case PLUS_EXPR:
1845 opname = "+"; break;
1846 case MINUS_EXPR:
1847 opname = "-"; break;
1848 case MULT_EXPR:
1849 opname = "*"; break;
1850 case MAX_EXPR:
1851 opname = "max"; break;
1852 case MIN_EXPR:
1853 opname = "min"; break;
1854 case EQ_EXPR:
1855 opname = "=="; break;
1856 case NE_EXPR:
1857 opname = "!="; break;
1858 case LE_EXPR:
1859 opname = "<="; break;
1860 case GE_EXPR:
1861 opname = ">="; break;
1862 case LT_EXPR:
1863 opname = "<"; break;
1864 case GT_EXPR:
1865 opname = ">"; break;
1866 case LSHIFT_EXPR:
1867 opname = "<<"; break;
1868 case RSHIFT_EXPR:
1869 opname = ">>"; break;
1870 case TRUNC_MOD_EXPR:
1871 case FLOOR_MOD_EXPR:
1872 opname = "%"; break;
1873 case TRUNC_DIV_EXPR:
1874 case FLOOR_DIV_EXPR:
1875 opname = "/"; break;
1876 case BIT_AND_EXPR:
1877 opname = "&"; break;
1878 case BIT_IOR_EXPR:
1879 opname = "|"; break;
1880 case TRUTH_ANDIF_EXPR:
1881 opname = "&&"; break;
1882 case TRUTH_ORIF_EXPR:
1883 opname = "||"; break;
1884 case BIT_XOR_EXPR:
1885 opname = "^"; break;
1886 default:
1887 gcc_unreachable ();
1889 error ("invalid operands to binary %s", opname);
1892 /* Subroutine of build_binary_op, used for comparison operations.
1893 See if the operands have both been converted from subword integer types
1894 and, if so, perhaps change them both back to their original type.
1895 This function is also responsible for converting the two operands
1896 to the proper common type for comparison.
1898 The arguments of this function are all pointers to local variables
1899 of build_binary_op: OP0_PTR is &OP0, OP1_PTR is &OP1,
1900 RESTYPE_PTR is &RESULT_TYPE and RESCODE_PTR is &RESULTCODE.
1902 If this function returns nonzero, it means that the comparison has
1903 a constant value. What this function returns is an expression for
1904 that value. */
1906 tree
1907 shorten_compare (tree *op0_ptr, tree *op1_ptr, tree *restype_ptr,
1908 enum tree_code *rescode_ptr)
1910 tree type;
1911 tree op0 = *op0_ptr;
1912 tree op1 = *op1_ptr;
1913 int unsignedp0, unsignedp1;
1914 int real1, real2;
1915 tree primop0, primop1;
1916 enum tree_code code = *rescode_ptr;
1918 /* Throw away any conversions to wider types
1919 already present in the operands. */
1921 primop0 = get_narrower (op0, &unsignedp0);
1922 primop1 = get_narrower (op1, &unsignedp1);
1924 /* Handle the case that OP0 does not *contain* a conversion
1925 but it *requires* conversion to FINAL_TYPE. */
1927 if (op0 == primop0 && TREE_TYPE (op0) != *restype_ptr)
1928 unsignedp0 = TYPE_UNSIGNED (TREE_TYPE (op0));
1929 if (op1 == primop1 && TREE_TYPE (op1) != *restype_ptr)
1930 unsignedp1 = TYPE_UNSIGNED (TREE_TYPE (op1));
1932 /* If one of the operands must be floated, we cannot optimize. */
1933 real1 = TREE_CODE (TREE_TYPE (primop0)) == REAL_TYPE;
1934 real2 = TREE_CODE (TREE_TYPE (primop1)) == REAL_TYPE;
1936 /* If first arg is constant, swap the args (changing operation
1937 so value is preserved), for canonicalization. Don't do this if
1938 the second arg is 0. */
1940 if (TREE_CONSTANT (primop0)
1941 && !integer_zerop (primop1) && !real_zerop (primop1))
1943 tree tem = primop0;
1944 int temi = unsignedp0;
1945 primop0 = primop1;
1946 primop1 = tem;
1947 tem = op0;
1948 op0 = op1;
1949 op1 = tem;
1950 *op0_ptr = op0;
1951 *op1_ptr = op1;
1952 unsignedp0 = unsignedp1;
1953 unsignedp1 = temi;
1954 temi = real1;
1955 real1 = real2;
1956 real2 = temi;
1958 switch (code)
1960 case LT_EXPR:
1961 code = GT_EXPR;
1962 break;
1963 case GT_EXPR:
1964 code = LT_EXPR;
1965 break;
1966 case LE_EXPR:
1967 code = GE_EXPR;
1968 break;
1969 case GE_EXPR:
1970 code = LE_EXPR;
1971 break;
1972 default:
1973 break;
1975 *rescode_ptr = code;
1978 /* If comparing an integer against a constant more bits wide,
1979 maybe we can deduce a value of 1 or 0 independent of the data.
1980 Or else truncate the constant now
1981 rather than extend the variable at run time.
1983 This is only interesting if the constant is the wider arg.
1984 Also, it is not safe if the constant is unsigned and the
1985 variable arg is signed, since in this case the variable
1986 would be sign-extended and then regarded as unsigned.
1987 Our technique fails in this case because the lowest/highest
1988 possible unsigned results don't follow naturally from the
1989 lowest/highest possible values of the variable operand.
1990 For just EQ_EXPR and NE_EXPR there is another technique that
1991 could be used: see if the constant can be faithfully represented
1992 in the other operand's type, by truncating it and reextending it
1993 and see if that preserves the constant's value. */
1995 if (!real1 && !real2
1996 && TREE_CODE (primop1) == INTEGER_CST
1997 && TYPE_PRECISION (TREE_TYPE (primop0)) < TYPE_PRECISION (*restype_ptr))
1999 int min_gt, max_gt, min_lt, max_lt;
2000 tree maxval, minval;
2001 /* 1 if comparison is nominally unsigned. */
2002 int unsignedp = TYPE_UNSIGNED (*restype_ptr);
2003 tree val;
2005 type = c_common_signed_or_unsigned_type (unsignedp0,
2006 TREE_TYPE (primop0));
2008 maxval = TYPE_MAX_VALUE (type);
2009 minval = TYPE_MIN_VALUE (type);
2011 if (unsignedp && !unsignedp0)
2012 *restype_ptr = c_common_signed_type (*restype_ptr);
2014 if (TREE_TYPE (primop1) != *restype_ptr)
2016 /* Convert primop1 to target type, but do not introduce
2017 additional overflow. We know primop1 is an int_cst. */
2018 tree tmp = build_int_cst_wide (*restype_ptr,
2019 TREE_INT_CST_LOW (primop1),
2020 TREE_INT_CST_HIGH (primop1));
2022 primop1 = force_fit_type (tmp, 0, TREE_OVERFLOW (primop1),
2023 TREE_CONSTANT_OVERFLOW (primop1));
2025 if (type != *restype_ptr)
2027 minval = convert (*restype_ptr, minval);
2028 maxval = convert (*restype_ptr, maxval);
2031 if (unsignedp && unsignedp0)
2033 min_gt = INT_CST_LT_UNSIGNED (primop1, minval);
2034 max_gt = INT_CST_LT_UNSIGNED (primop1, maxval);
2035 min_lt = INT_CST_LT_UNSIGNED (minval, primop1);
2036 max_lt = INT_CST_LT_UNSIGNED (maxval, primop1);
2038 else
2040 min_gt = INT_CST_LT (primop1, minval);
2041 max_gt = INT_CST_LT (primop1, maxval);
2042 min_lt = INT_CST_LT (minval, primop1);
2043 max_lt = INT_CST_LT (maxval, primop1);
2046 val = 0;
2047 /* This used to be a switch, but Genix compiler can't handle that. */
2048 if (code == NE_EXPR)
2050 if (max_lt || min_gt)
2051 val = truthvalue_true_node;
2053 else if (code == EQ_EXPR)
2055 if (max_lt || min_gt)
2056 val = truthvalue_false_node;
2058 else if (code == LT_EXPR)
2060 if (max_lt)
2061 val = truthvalue_true_node;
2062 if (!min_lt)
2063 val = truthvalue_false_node;
2065 else if (code == GT_EXPR)
2067 if (min_gt)
2068 val = truthvalue_true_node;
2069 if (!max_gt)
2070 val = truthvalue_false_node;
2072 else if (code == LE_EXPR)
2074 if (!max_gt)
2075 val = truthvalue_true_node;
2076 if (min_gt)
2077 val = truthvalue_false_node;
2079 else if (code == GE_EXPR)
2081 if (!min_lt)
2082 val = truthvalue_true_node;
2083 if (max_lt)
2084 val = truthvalue_false_node;
2087 /* If primop0 was sign-extended and unsigned comparison specd,
2088 we did a signed comparison above using the signed type bounds.
2089 But the comparison we output must be unsigned.
2091 Also, for inequalities, VAL is no good; but if the signed
2092 comparison had *any* fixed result, it follows that the
2093 unsigned comparison just tests the sign in reverse
2094 (positive values are LE, negative ones GE).
2095 So we can generate an unsigned comparison
2096 against an extreme value of the signed type. */
2098 if (unsignedp && !unsignedp0)
2100 if (val != 0)
2101 switch (code)
2103 case LT_EXPR:
2104 case GE_EXPR:
2105 primop1 = TYPE_MIN_VALUE (type);
2106 val = 0;
2107 break;
2109 case LE_EXPR:
2110 case GT_EXPR:
2111 primop1 = TYPE_MAX_VALUE (type);
2112 val = 0;
2113 break;
2115 default:
2116 break;
2118 type = c_common_unsigned_type (type);
2121 if (TREE_CODE (primop0) != INTEGER_CST)
2123 if (val == truthvalue_false_node)
2124 warning (0, "comparison is always false due to limited range of data type");
2125 if (val == truthvalue_true_node)
2126 warning (0, "comparison is always true due to limited range of data type");
2129 if (val != 0)
2131 /* Don't forget to evaluate PRIMOP0 if it has side effects. */
2132 if (TREE_SIDE_EFFECTS (primop0))
2133 return build2 (COMPOUND_EXPR, TREE_TYPE (val), primop0, val);
2134 return val;
2137 /* Value is not predetermined, but do the comparison
2138 in the type of the operand that is not constant.
2139 TYPE is already properly set. */
2141 else if (real1 && real2
2142 && (TYPE_PRECISION (TREE_TYPE (primop0))
2143 == TYPE_PRECISION (TREE_TYPE (primop1))))
2144 type = TREE_TYPE (primop0);
2146 /* If args' natural types are both narrower than nominal type
2147 and both extend in the same manner, compare them
2148 in the type of the wider arg.
2149 Otherwise must actually extend both to the nominal
2150 common type lest different ways of extending
2151 alter the result.
2152 (eg, (short)-1 == (unsigned short)-1 should be 0.) */
2154 else if (unsignedp0 == unsignedp1 && real1 == real2
2155 && TYPE_PRECISION (TREE_TYPE (primop0)) < TYPE_PRECISION (*restype_ptr)
2156 && TYPE_PRECISION (TREE_TYPE (primop1)) < TYPE_PRECISION (*restype_ptr))
2158 type = common_type (TREE_TYPE (primop0), TREE_TYPE (primop1));
2159 type = c_common_signed_or_unsigned_type (unsignedp0
2160 || TYPE_UNSIGNED (*restype_ptr),
2161 type);
2162 /* Make sure shorter operand is extended the right way
2163 to match the longer operand. */
2164 primop0
2165 = convert (c_common_signed_or_unsigned_type (unsignedp0,
2166 TREE_TYPE (primop0)),
2167 primop0);
2168 primop1
2169 = convert (c_common_signed_or_unsigned_type (unsignedp1,
2170 TREE_TYPE (primop1)),
2171 primop1);
2173 else
2175 /* Here we must do the comparison on the nominal type
2176 using the args exactly as we received them. */
2177 type = *restype_ptr;
2178 primop0 = op0;
2179 primop1 = op1;
2181 if (!real1 && !real2 && integer_zerop (primop1)
2182 && TYPE_UNSIGNED (*restype_ptr))
2184 tree value = 0;
2185 switch (code)
2187 case GE_EXPR:
2188 /* All unsigned values are >= 0, so we warn if extra warnings
2189 are requested. However, if OP0 is a constant that is
2190 >= 0, the signedness of the comparison isn't an issue,
2191 so suppress the warning. */
2192 if (extra_warnings && !in_system_header
2193 && !(TREE_CODE (primop0) == INTEGER_CST
2194 && !TREE_OVERFLOW (convert (c_common_signed_type (type),
2195 primop0))))
2196 warning (0, "comparison of unsigned expression >= 0 is always true");
2197 value = truthvalue_true_node;
2198 break;
2200 case LT_EXPR:
2201 if (extra_warnings && !in_system_header
2202 && !(TREE_CODE (primop0) == INTEGER_CST
2203 && !TREE_OVERFLOW (convert (c_common_signed_type (type),
2204 primop0))))
2205 warning (0, "comparison of unsigned expression < 0 is always false");
2206 value = truthvalue_false_node;
2207 break;
2209 default:
2210 break;
2213 if (value != 0)
2215 /* Don't forget to evaluate PRIMOP0 if it has side effects. */
2216 if (TREE_SIDE_EFFECTS (primop0))
2217 return build2 (COMPOUND_EXPR, TREE_TYPE (value),
2218 primop0, value);
2219 return value;
2224 *op0_ptr = convert (type, primop0);
2225 *op1_ptr = convert (type, primop1);
2227 *restype_ptr = truthvalue_type_node;
2229 return 0;
2232 /* Return a tree for the sum or difference (RESULTCODE says which)
2233 of pointer PTROP and integer INTOP. */
2235 tree
2236 pointer_int_sum (enum tree_code resultcode, tree ptrop, tree intop)
2238 tree size_exp;
2240 /* The result is a pointer of the same type that is being added. */
2242 tree result_type = TREE_TYPE (ptrop);
2244 if (TREE_CODE (TREE_TYPE (result_type)) == VOID_TYPE)
2246 if (pedantic || warn_pointer_arith)
2247 pedwarn ("pointer of type %<void *%> used in arithmetic");
2248 size_exp = integer_one_node;
2250 else if (TREE_CODE (TREE_TYPE (result_type)) == FUNCTION_TYPE)
2252 if (pedantic || warn_pointer_arith)
2253 pedwarn ("pointer to a function used in arithmetic");
2254 size_exp = integer_one_node;
2256 else if (TREE_CODE (TREE_TYPE (result_type)) == METHOD_TYPE)
2258 if (pedantic || warn_pointer_arith)
2259 pedwarn ("pointer to member function used in arithmetic");
2260 size_exp = integer_one_node;
2262 else
2263 size_exp = size_in_bytes (TREE_TYPE (result_type));
2265 /* If what we are about to multiply by the size of the elements
2266 contains a constant term, apply distributive law
2267 and multiply that constant term separately.
2268 This helps produce common subexpressions. */
2270 if ((TREE_CODE (intop) == PLUS_EXPR || TREE_CODE (intop) == MINUS_EXPR)
2271 && !TREE_CONSTANT (intop)
2272 && TREE_CONSTANT (TREE_OPERAND (intop, 1))
2273 && TREE_CONSTANT (size_exp)
2274 /* If the constant comes from pointer subtraction,
2275 skip this optimization--it would cause an error. */
2276 && TREE_CODE (TREE_TYPE (TREE_OPERAND (intop, 0))) == INTEGER_TYPE
2277 /* If the constant is unsigned, and smaller than the pointer size,
2278 then we must skip this optimization. This is because it could cause
2279 an overflow error if the constant is negative but INTOP is not. */
2280 && (!TYPE_UNSIGNED (TREE_TYPE (intop))
2281 || (TYPE_PRECISION (TREE_TYPE (intop))
2282 == TYPE_PRECISION (TREE_TYPE (ptrop)))))
2284 enum tree_code subcode = resultcode;
2285 tree int_type = TREE_TYPE (intop);
2286 if (TREE_CODE (intop) == MINUS_EXPR)
2287 subcode = (subcode == PLUS_EXPR ? MINUS_EXPR : PLUS_EXPR);
2288 /* Convert both subexpression types to the type of intop,
2289 because weird cases involving pointer arithmetic
2290 can result in a sum or difference with different type args. */
2291 ptrop = build_binary_op (subcode, ptrop,
2292 convert (int_type, TREE_OPERAND (intop, 1)), 1);
2293 intop = convert (int_type, TREE_OPERAND (intop, 0));
2296 /* Convert the integer argument to a type the same size as sizetype
2297 so the multiply won't overflow spuriously. */
2299 if (TYPE_PRECISION (TREE_TYPE (intop)) != TYPE_PRECISION (sizetype)
2300 || TYPE_UNSIGNED (TREE_TYPE (intop)) != TYPE_UNSIGNED (sizetype))
2301 intop = convert (c_common_type_for_size (TYPE_PRECISION (sizetype),
2302 TYPE_UNSIGNED (sizetype)), intop);
2304 /* Replace the integer argument with a suitable product by the object size.
2305 Do this multiplication as signed, then convert to the appropriate
2306 pointer type (actually unsigned integral). */
2308 intop = convert (result_type,
2309 build_binary_op (MULT_EXPR, intop,
2310 convert (TREE_TYPE (intop), size_exp), 1));
2312 /* Create the sum or difference. */
2313 return fold (build2 (resultcode, result_type, ptrop, intop));
2316 /* Prepare expr to be an argument of a TRUTH_NOT_EXPR,
2317 or for an `if' or `while' statement or ?..: exp. It should already
2318 have been validated to be of suitable type; otherwise, a bad
2319 diagnostic may result.
2321 This preparation consists of taking the ordinary
2322 representation of an expression expr and producing a valid tree
2323 boolean expression describing whether expr is nonzero. We could
2324 simply always do build_binary_op (NE_EXPR, expr, truthvalue_false_node, 1),
2325 but we optimize comparisons, &&, ||, and !.
2327 The resulting type should always be `truthvalue_type_node'. */
2329 tree
2330 c_common_truthvalue_conversion (tree expr)
2332 switch (TREE_CODE (expr))
2334 case EQ_EXPR: case NE_EXPR: case UNEQ_EXPR: case LTGT_EXPR:
2335 case LE_EXPR: case GE_EXPR: case LT_EXPR: case GT_EXPR:
2336 case UNLE_EXPR: case UNGE_EXPR: case UNLT_EXPR: case UNGT_EXPR:
2337 case ORDERED_EXPR: case UNORDERED_EXPR:
2338 if (TREE_TYPE (expr) == truthvalue_type_node)
2339 return expr;
2340 return build2 (TREE_CODE (expr), truthvalue_type_node,
2341 TREE_OPERAND (expr, 0), TREE_OPERAND (expr, 1));
2343 case TRUTH_ANDIF_EXPR:
2344 case TRUTH_ORIF_EXPR:
2345 case TRUTH_AND_EXPR:
2346 case TRUTH_OR_EXPR:
2347 case TRUTH_XOR_EXPR:
2348 if (TREE_TYPE (expr) == truthvalue_type_node)
2349 return expr;
2350 return build2 (TREE_CODE (expr), truthvalue_type_node,
2351 c_common_truthvalue_conversion (TREE_OPERAND (expr, 0)),
2352 c_common_truthvalue_conversion (TREE_OPERAND (expr, 1)));
2354 case TRUTH_NOT_EXPR:
2355 if (TREE_TYPE (expr) == truthvalue_type_node)
2356 return expr;
2357 return build1 (TREE_CODE (expr), truthvalue_type_node,
2358 c_common_truthvalue_conversion (TREE_OPERAND (expr, 0)));
2360 case ERROR_MARK:
2361 return expr;
2363 case INTEGER_CST:
2364 /* Avoid integer_zerop to ignore TREE_CONSTANT_OVERFLOW. */
2365 return (TREE_INT_CST_LOW (expr) != 0 || TREE_INT_CST_HIGH (expr) != 0)
2366 ? truthvalue_true_node
2367 : truthvalue_false_node;
2369 case REAL_CST:
2370 return real_compare (NE_EXPR, &TREE_REAL_CST (expr), &dconst0)
2371 ? truthvalue_true_node
2372 : truthvalue_false_node;
2374 case FUNCTION_DECL:
2375 expr = build_unary_op (ADDR_EXPR, expr, 0);
2376 /* Fall through. */
2378 case ADDR_EXPR:
2380 if (TREE_CODE (TREE_OPERAND (expr, 0)) == FUNCTION_DECL
2381 && !DECL_WEAK (TREE_OPERAND (expr, 0)))
2383 /* Common Ada/Pascal programmer's mistake. We always warn
2384 about this since it is so bad. */
2385 warning (0, "the address of %qD, will always evaluate as %<true%>",
2386 TREE_OPERAND (expr, 0));
2387 return truthvalue_true_node;
2390 /* If we are taking the address of an external decl, it might be
2391 zero if it is weak, so we cannot optimize. */
2392 if (DECL_P (TREE_OPERAND (expr, 0))
2393 && DECL_EXTERNAL (TREE_OPERAND (expr, 0)))
2394 break;
2396 if (TREE_SIDE_EFFECTS (TREE_OPERAND (expr, 0)))
2397 return build2 (COMPOUND_EXPR, truthvalue_type_node,
2398 TREE_OPERAND (expr, 0), truthvalue_true_node);
2399 else
2400 return truthvalue_true_node;
2403 case COMPLEX_EXPR:
2404 return build_binary_op ((TREE_SIDE_EFFECTS (TREE_OPERAND (expr, 1))
2405 ? TRUTH_OR_EXPR : TRUTH_ORIF_EXPR),
2406 c_common_truthvalue_conversion (TREE_OPERAND (expr, 0)),
2407 c_common_truthvalue_conversion (TREE_OPERAND (expr, 1)),
2410 case NEGATE_EXPR:
2411 case ABS_EXPR:
2412 case FLOAT_EXPR:
2413 /* These don't change whether an object is nonzero or zero. */
2414 return c_common_truthvalue_conversion (TREE_OPERAND (expr, 0));
2416 case LROTATE_EXPR:
2417 case RROTATE_EXPR:
2418 /* These don't change whether an object is zero or nonzero, but
2419 we can't ignore them if their second arg has side-effects. */
2420 if (TREE_SIDE_EFFECTS (TREE_OPERAND (expr, 1)))
2421 return build2 (COMPOUND_EXPR, truthvalue_type_node,
2422 TREE_OPERAND (expr, 1),
2423 c_common_truthvalue_conversion (TREE_OPERAND (expr, 0)));
2424 else
2425 return c_common_truthvalue_conversion (TREE_OPERAND (expr, 0));
2427 case COND_EXPR:
2428 /* Distribute the conversion into the arms of a COND_EXPR. */
2429 return fold (build3 (COND_EXPR, truthvalue_type_node,
2430 TREE_OPERAND (expr, 0),
2431 c_common_truthvalue_conversion (TREE_OPERAND (expr, 1)),
2432 c_common_truthvalue_conversion (TREE_OPERAND (expr, 2))));
2434 case CONVERT_EXPR:
2435 /* Don't cancel the effect of a CONVERT_EXPR from a REFERENCE_TYPE,
2436 since that affects how `default_conversion' will behave. */
2437 if (TREE_CODE (TREE_TYPE (expr)) == REFERENCE_TYPE
2438 || TREE_CODE (TREE_TYPE (TREE_OPERAND (expr, 0))) == REFERENCE_TYPE)
2439 break;
2440 /* Fall through.... */
2441 case NOP_EXPR:
2442 /* If this is widening the argument, we can ignore it. */
2443 if (TYPE_PRECISION (TREE_TYPE (expr))
2444 >= TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (expr, 0))))
2445 return c_common_truthvalue_conversion (TREE_OPERAND (expr, 0));
2446 break;
2448 case MINUS_EXPR:
2449 /* Perhaps reduce (x - y) != 0 to (x != y). The expressions
2450 aren't guaranteed to the be same for modes that can represent
2451 infinity, since if x and y are both +infinity, or both
2452 -infinity, then x - y is not a number.
2454 Note that this transformation is safe when x or y is NaN.
2455 (x - y) is then NaN, and both (x - y) != 0 and x != y will
2456 be false. */
2457 if (HONOR_INFINITIES (TYPE_MODE (TREE_TYPE (TREE_OPERAND (expr, 0)))))
2458 break;
2459 /* Fall through.... */
2460 case BIT_XOR_EXPR:
2461 /* This and MINUS_EXPR can be changed into a comparison of the
2462 two objects. */
2463 if (TREE_TYPE (TREE_OPERAND (expr, 0))
2464 == TREE_TYPE (TREE_OPERAND (expr, 1)))
2465 return build_binary_op (NE_EXPR, TREE_OPERAND (expr, 0),
2466 TREE_OPERAND (expr, 1), 1);
2467 return build_binary_op (NE_EXPR, TREE_OPERAND (expr, 0),
2468 fold (build1 (NOP_EXPR,
2469 TREE_TYPE (TREE_OPERAND (expr, 0)),
2470 TREE_OPERAND (expr, 1))), 1);
2472 case BIT_AND_EXPR:
2473 if (integer_onep (TREE_OPERAND (expr, 1))
2474 && TREE_TYPE (expr) != truthvalue_type_node)
2475 /* Using convert here would cause infinite recursion. */
2476 return build1 (NOP_EXPR, truthvalue_type_node, expr);
2477 break;
2479 case MODIFY_EXPR:
2480 if (warn_parentheses && !TREE_NO_WARNING (expr))
2481 warning (0, "suggest parentheses around assignment used as truth value");
2482 break;
2484 default:
2485 break;
2488 if (TREE_CODE (TREE_TYPE (expr)) == COMPLEX_TYPE)
2490 tree t = save_expr (expr);
2491 return (build_binary_op
2492 ((TREE_SIDE_EFFECTS (expr)
2493 ? TRUTH_OR_EXPR : TRUTH_ORIF_EXPR),
2494 c_common_truthvalue_conversion (build_unary_op (REALPART_EXPR, t, 0)),
2495 c_common_truthvalue_conversion (build_unary_op (IMAGPART_EXPR, t, 0)),
2496 0));
2499 return build_binary_op (NE_EXPR, expr, integer_zero_node, 1);
2502 static tree builtin_function_2 (const char *builtin_name, const char *name,
2503 tree builtin_type, tree type,
2504 enum built_in_function function_code,
2505 enum built_in_class cl, int library_name_p,
2506 bool nonansi_p,
2507 tree attrs);
2509 /* Make a variant type in the proper way for C/C++, propagating qualifiers
2510 down to the element type of an array. */
2512 tree
2513 c_build_qualified_type (tree type, int type_quals)
2515 if (type == error_mark_node)
2516 return type;
2518 if (TREE_CODE (type) == ARRAY_TYPE)
2520 tree t;
2521 tree element_type = c_build_qualified_type (TREE_TYPE (type),
2522 type_quals);
2524 /* See if we already have an identically qualified type. */
2525 for (t = TYPE_MAIN_VARIANT (type); t; t = TYPE_NEXT_VARIANT (t))
2527 if (TYPE_QUALS (strip_array_types (t)) == type_quals
2528 && TYPE_NAME (t) == TYPE_NAME (type)
2529 && TYPE_CONTEXT (t) == TYPE_CONTEXT (type)
2530 && attribute_list_equal (TYPE_ATTRIBUTES (t),
2531 TYPE_ATTRIBUTES (type)))
2532 break;
2534 if (!t)
2536 t = build_variant_type_copy (type);
2537 TREE_TYPE (t) = element_type;
2539 return t;
2542 /* A restrict-qualified pointer type must be a pointer to object or
2543 incomplete type. Note that the use of POINTER_TYPE_P also allows
2544 REFERENCE_TYPEs, which is appropriate for C++. */
2545 if ((type_quals & TYPE_QUAL_RESTRICT)
2546 && (!POINTER_TYPE_P (type)
2547 || !C_TYPE_OBJECT_OR_INCOMPLETE_P (TREE_TYPE (type))))
2549 error ("invalid use of %<restrict%>");
2550 type_quals &= ~TYPE_QUAL_RESTRICT;
2553 return build_qualified_type (type, type_quals);
2556 /* Apply the TYPE_QUALS to the new DECL. */
2558 void
2559 c_apply_type_quals_to_decl (int type_quals, tree decl)
2561 tree type = TREE_TYPE (decl);
2563 if (type == error_mark_node)
2564 return;
2566 if (((type_quals & TYPE_QUAL_CONST)
2567 || (type && TREE_CODE (type) == REFERENCE_TYPE))
2568 /* An object declared 'const' is only readonly after it is
2569 initialized. We don't have any way of expressing this currently,
2570 so we need to be conservative and unset TREE_READONLY for types
2571 with constructors. Otherwise aliasing code will ignore stores in
2572 an inline constructor. */
2573 && !(type && TYPE_NEEDS_CONSTRUCTING (type)))
2574 TREE_READONLY (decl) = 1;
2575 if (type_quals & TYPE_QUAL_VOLATILE)
2577 TREE_SIDE_EFFECTS (decl) = 1;
2578 TREE_THIS_VOLATILE (decl) = 1;
2580 if (type_quals & TYPE_QUAL_RESTRICT)
2582 while (type && TREE_CODE (type) == ARRAY_TYPE)
2583 /* Allow 'restrict' on arrays of pointers.
2584 FIXME currently we just ignore it. */
2585 type = TREE_TYPE (type);
2586 if (!type
2587 || !POINTER_TYPE_P (type)
2588 || !C_TYPE_OBJECT_OR_INCOMPLETE_P (TREE_TYPE (type)))
2589 error ("invalid use of %<restrict%>");
2590 else if (flag_strict_aliasing && type == TREE_TYPE (decl))
2591 /* Indicate we need to make a unique alias set for this pointer.
2592 We can't do it here because it might be pointing to an
2593 incomplete type. */
2594 DECL_POINTER_ALIAS_SET (decl) = -2;
2598 /* Hash function for the problem of multiple type definitions in
2599 different files. This must hash all types that will compare
2600 equal via comptypes to the same value. In practice it hashes
2601 on some of the simple stuff and leaves the details to comptypes. */
2603 static hashval_t
2604 c_type_hash (const void *p)
2606 int i = 0;
2607 int shift, size;
2608 tree t = (tree) p;
2609 tree t2;
2610 switch (TREE_CODE (t))
2612 /* For pointers, hash on pointee type plus some swizzling. */
2613 case POINTER_TYPE:
2614 return c_type_hash (TREE_TYPE (t)) ^ 0x3003003;
2615 /* Hash on number of elements and total size. */
2616 case ENUMERAL_TYPE:
2617 shift = 3;
2618 t2 = TYPE_VALUES (t);
2619 break;
2620 case RECORD_TYPE:
2621 shift = 0;
2622 t2 = TYPE_FIELDS (t);
2623 break;
2624 case QUAL_UNION_TYPE:
2625 shift = 1;
2626 t2 = TYPE_FIELDS (t);
2627 break;
2628 case UNION_TYPE:
2629 shift = 2;
2630 t2 = TYPE_FIELDS (t);
2631 break;
2632 default:
2633 gcc_unreachable ();
2635 for (; t2; t2 = TREE_CHAIN (t2))
2636 i++;
2637 size = TREE_INT_CST_LOW (TYPE_SIZE (t));
2638 return ((size << 24) | (i << shift));
2641 static GTY((param_is (union tree_node))) htab_t type_hash_table;
2643 /* Return the typed-based alias set for T, which may be an expression
2644 or a type. Return -1 if we don't do anything special. */
2646 HOST_WIDE_INT
2647 c_common_get_alias_set (tree t)
2649 tree u;
2650 PTR *slot;
2652 /* Permit type-punning when accessing a union, provided the access
2653 is directly through the union. For example, this code does not
2654 permit taking the address of a union member and then storing
2655 through it. Even the type-punning allowed here is a GCC
2656 extension, albeit a common and useful one; the C standard says
2657 that such accesses have implementation-defined behavior. */
2658 for (u = t;
2659 TREE_CODE (u) == COMPONENT_REF || TREE_CODE (u) == ARRAY_REF;
2660 u = TREE_OPERAND (u, 0))
2661 if (TREE_CODE (u) == COMPONENT_REF
2662 && TREE_CODE (TREE_TYPE (TREE_OPERAND (u, 0))) == UNION_TYPE)
2663 return 0;
2665 /* That's all the expressions we handle specially. */
2666 if (!TYPE_P (t))
2667 return -1;
2669 /* The C standard guarantees that any object may be accessed via an
2670 lvalue that has character type. */
2671 if (t == char_type_node
2672 || t == signed_char_type_node
2673 || t == unsigned_char_type_node)
2674 return 0;
2676 /* If it has the may_alias attribute, it can alias anything. */
2677 if (lookup_attribute ("may_alias", TYPE_ATTRIBUTES (t)))
2678 return 0;
2680 /* The C standard specifically allows aliasing between signed and
2681 unsigned variants of the same type. We treat the signed
2682 variant as canonical. */
2683 if (TREE_CODE (t) == INTEGER_TYPE && TYPE_UNSIGNED (t))
2685 tree t1 = c_common_signed_type (t);
2687 /* t1 == t can happen for boolean nodes which are always unsigned. */
2688 if (t1 != t)
2689 return get_alias_set (t1);
2691 else if (POINTER_TYPE_P (t))
2693 tree t1;
2695 /* Unfortunately, there is no canonical form of a pointer type.
2696 In particular, if we have `typedef int I', then `int *', and
2697 `I *' are different types. So, we have to pick a canonical
2698 representative. We do this below.
2700 Technically, this approach is actually more conservative that
2701 it needs to be. In particular, `const int *' and `int *'
2702 should be in different alias sets, according to the C and C++
2703 standard, since their types are not the same, and so,
2704 technically, an `int **' and `const int **' cannot point at
2705 the same thing.
2707 But, the standard is wrong. In particular, this code is
2708 legal C++:
2710 int *ip;
2711 int **ipp = &ip;
2712 const int* const* cipp = ipp;
2714 And, it doesn't make sense for that to be legal unless you
2715 can dereference IPP and CIPP. So, we ignore cv-qualifiers on
2716 the pointed-to types. This issue has been reported to the
2717 C++ committee. */
2718 t1 = build_type_no_quals (t);
2719 if (t1 != t)
2720 return get_alias_set (t1);
2723 /* Handle the case of multiple type nodes referring to "the same" type,
2724 which occurs with IMA. These share an alias set. FIXME: Currently only
2725 C90 is handled. (In C99 type compatibility is not transitive, which
2726 complicates things mightily. The alias set splay trees can theoretically
2727 represent this, but insertion is tricky when you consider all the
2728 different orders things might arrive in.) */
2730 if (c_language != clk_c || flag_isoc99)
2731 return -1;
2733 /* Save time if there's only one input file. */
2734 if (num_in_fnames == 1)
2735 return -1;
2737 /* Pointers need special handling if they point to any type that
2738 needs special handling (below). */
2739 if (TREE_CODE (t) == POINTER_TYPE)
2741 tree t2;
2742 /* Find bottom type under any nested POINTERs. */
2743 for (t2 = TREE_TYPE (t);
2744 TREE_CODE (t2) == POINTER_TYPE;
2745 t2 = TREE_TYPE (t2))
2747 if (TREE_CODE (t2) != RECORD_TYPE
2748 && TREE_CODE (t2) != ENUMERAL_TYPE
2749 && TREE_CODE (t2) != QUAL_UNION_TYPE
2750 && TREE_CODE (t2) != UNION_TYPE)
2751 return -1;
2752 if (TYPE_SIZE (t2) == 0)
2753 return -1;
2755 /* These are the only cases that need special handling. */
2756 if (TREE_CODE (t) != RECORD_TYPE
2757 && TREE_CODE (t) != ENUMERAL_TYPE
2758 && TREE_CODE (t) != QUAL_UNION_TYPE
2759 && TREE_CODE (t) != UNION_TYPE
2760 && TREE_CODE (t) != POINTER_TYPE)
2761 return -1;
2762 /* Undefined? */
2763 if (TYPE_SIZE (t) == 0)
2764 return -1;
2766 /* Look up t in hash table. Only one of the compatible types within each
2767 alias set is recorded in the table. */
2768 if (!type_hash_table)
2769 type_hash_table = htab_create_ggc (1021, c_type_hash,
2770 (htab_eq) lang_hooks.types_compatible_p,
2771 NULL);
2772 slot = htab_find_slot (type_hash_table, t, INSERT);
2773 if (*slot != NULL)
2775 TYPE_ALIAS_SET (t) = TYPE_ALIAS_SET ((tree)*slot);
2776 return TYPE_ALIAS_SET ((tree)*slot);
2778 else
2779 /* Our caller will assign and record (in t) a new alias set; all we need
2780 to do is remember t in the hash table. */
2781 *slot = t;
2783 return -1;
2786 /* Compute the value of 'sizeof (TYPE)' or '__alignof__ (TYPE)', where the
2787 second parameter indicates which OPERATOR is being applied. The COMPLAIN
2788 flag controls whether we should diagnose possibly ill-formed
2789 constructs or not. */
2791 tree
2792 c_sizeof_or_alignof_type (tree type, bool is_sizeof, int complain)
2794 const char *op_name;
2795 tree value = NULL;
2796 enum tree_code type_code = TREE_CODE (type);
2798 op_name = is_sizeof ? "sizeof" : "__alignof__";
2800 if (type_code == FUNCTION_TYPE)
2802 if (is_sizeof)
2804 if (complain && (pedantic || warn_pointer_arith))
2805 pedwarn ("invalid application of %<sizeof%> to a function type");
2806 value = size_one_node;
2808 else
2809 value = size_int (FUNCTION_BOUNDARY / BITS_PER_UNIT);
2811 else if (type_code == VOID_TYPE || type_code == ERROR_MARK)
2813 if (type_code == VOID_TYPE
2814 && complain && (pedantic || warn_pointer_arith))
2815 pedwarn ("invalid application of %qs to a void type", op_name);
2816 value = size_one_node;
2818 else if (!COMPLETE_TYPE_P (type))
2820 if (complain)
2821 error ("invalid application of %qs to incomplete type %qT ",
2822 op_name, type);
2823 value = size_zero_node;
2825 else
2827 if (is_sizeof)
2828 /* Convert in case a char is more than one unit. */
2829 value = size_binop (CEIL_DIV_EXPR, TYPE_SIZE_UNIT (type),
2830 size_int (TYPE_PRECISION (char_type_node)
2831 / BITS_PER_UNIT));
2832 else
2833 value = size_int (TYPE_ALIGN_UNIT (type));
2836 /* VALUE will have an integer type with TYPE_IS_SIZETYPE set.
2837 TYPE_IS_SIZETYPE means that certain things (like overflow) will
2838 never happen. However, this node should really have type
2839 `size_t', which is just a typedef for an ordinary integer type. */
2840 value = fold (build1 (NOP_EXPR, size_type_node, value));
2841 gcc_assert (!TYPE_IS_SIZETYPE (TREE_TYPE (value)));
2843 return value;
2846 /* Implement the __alignof keyword: Return the minimum required
2847 alignment of EXPR, measured in bytes. For VAR_DECL's and
2848 FIELD_DECL's return DECL_ALIGN (which can be set from an
2849 "aligned" __attribute__ specification). */
2851 tree
2852 c_alignof_expr (tree expr)
2854 tree t;
2856 if (TREE_CODE (expr) == VAR_DECL)
2857 t = size_int (DECL_ALIGN_UNIT (expr));
2859 else if (TREE_CODE (expr) == COMPONENT_REF
2860 && DECL_C_BIT_FIELD (TREE_OPERAND (expr, 1)))
2862 error ("%<__alignof%> applied to a bit-field");
2863 t = size_one_node;
2865 else if (TREE_CODE (expr) == COMPONENT_REF
2866 && TREE_CODE (TREE_OPERAND (expr, 1)) == FIELD_DECL)
2867 t = size_int (DECL_ALIGN_UNIT (TREE_OPERAND (expr, 1)));
2869 else if (TREE_CODE (expr) == INDIRECT_REF)
2871 tree t = TREE_OPERAND (expr, 0);
2872 tree best = t;
2873 int bestalign = TYPE_ALIGN (TREE_TYPE (TREE_TYPE (t)));
2875 while (TREE_CODE (t) == NOP_EXPR
2876 && TREE_CODE (TREE_TYPE (TREE_OPERAND (t, 0))) == POINTER_TYPE)
2878 int thisalign;
2880 t = TREE_OPERAND (t, 0);
2881 thisalign = TYPE_ALIGN (TREE_TYPE (TREE_TYPE (t)));
2882 if (thisalign > bestalign)
2883 best = t, bestalign = thisalign;
2885 return c_alignof (TREE_TYPE (TREE_TYPE (best)));
2887 else
2888 return c_alignof (TREE_TYPE (expr));
2890 return fold (build1 (NOP_EXPR, size_type_node, t));
2893 /* Handle C and C++ default attributes. */
2895 enum built_in_attribute
2897 #define DEF_ATTR_NULL_TREE(ENUM) ENUM,
2898 #define DEF_ATTR_INT(ENUM, VALUE) ENUM,
2899 #define DEF_ATTR_IDENT(ENUM, STRING) ENUM,
2900 #define DEF_ATTR_TREE_LIST(ENUM, PURPOSE, VALUE, CHAIN) ENUM,
2901 #include "builtin-attrs.def"
2902 #undef DEF_ATTR_NULL_TREE
2903 #undef DEF_ATTR_INT
2904 #undef DEF_ATTR_IDENT
2905 #undef DEF_ATTR_TREE_LIST
2906 ATTR_LAST
2909 static GTY(()) tree built_in_attributes[(int) ATTR_LAST];
2911 static void c_init_attributes (void);
2913 /* Build tree nodes and builtin functions common to both C and C++ language
2914 frontends. */
2916 void
2917 c_common_nodes_and_builtins (void)
2919 enum builtin_type
2921 #define DEF_PRIMITIVE_TYPE(NAME, VALUE) NAME,
2922 #define DEF_FUNCTION_TYPE_0(NAME, RETURN) NAME,
2923 #define DEF_FUNCTION_TYPE_1(NAME, RETURN, ARG1) NAME,
2924 #define DEF_FUNCTION_TYPE_2(NAME, RETURN, ARG1, ARG2) NAME,
2925 #define DEF_FUNCTION_TYPE_3(NAME, RETURN, ARG1, ARG2, ARG3) NAME,
2926 #define DEF_FUNCTION_TYPE_4(NAME, RETURN, ARG1, ARG2, ARG3, ARG4) NAME,
2927 #define DEF_FUNCTION_TYPE_VAR_0(NAME, RETURN) NAME,
2928 #define DEF_FUNCTION_TYPE_VAR_1(NAME, RETURN, ARG1) NAME,
2929 #define DEF_FUNCTION_TYPE_VAR_2(NAME, RETURN, ARG1, ARG2) NAME,
2930 #define DEF_FUNCTION_TYPE_VAR_3(NAME, RETURN, ARG1, ARG2, ARG3) NAME,
2931 #define DEF_POINTER_TYPE(NAME, TYPE) NAME,
2932 #include "builtin-types.def"
2933 #undef DEF_PRIMITIVE_TYPE
2934 #undef DEF_FUNCTION_TYPE_0
2935 #undef DEF_FUNCTION_TYPE_1
2936 #undef DEF_FUNCTION_TYPE_2
2937 #undef DEF_FUNCTION_TYPE_3
2938 #undef DEF_FUNCTION_TYPE_4
2939 #undef DEF_FUNCTION_TYPE_VAR_0
2940 #undef DEF_FUNCTION_TYPE_VAR_1
2941 #undef DEF_FUNCTION_TYPE_VAR_2
2942 #undef DEF_FUNCTION_TYPE_VAR_3
2943 #undef DEF_POINTER_TYPE
2944 BT_LAST
2947 typedef enum builtin_type builtin_type;
2949 tree builtin_types[(int) BT_LAST];
2950 int wchar_type_size;
2951 tree array_domain_type;
2952 tree va_list_ref_type_node;
2953 tree va_list_arg_type_node;
2955 /* Define `int' and `char' first so that dbx will output them first. */
2956 record_builtin_type (RID_INT, NULL, integer_type_node);
2957 record_builtin_type (RID_CHAR, "char", char_type_node);
2959 /* `signed' is the same as `int'. FIXME: the declarations of "signed",
2960 "unsigned long", "long long unsigned" and "unsigned short" were in C++
2961 but not C. Are the conditionals here needed? */
2962 if (c_dialect_cxx ())
2963 record_builtin_type (RID_SIGNED, NULL, integer_type_node);
2964 record_builtin_type (RID_LONG, "long int", long_integer_type_node);
2965 record_builtin_type (RID_UNSIGNED, "unsigned int", unsigned_type_node);
2966 record_builtin_type (RID_MAX, "long unsigned int",
2967 long_unsigned_type_node);
2968 if (c_dialect_cxx ())
2969 record_builtin_type (RID_MAX, "unsigned long", long_unsigned_type_node);
2970 record_builtin_type (RID_MAX, "long long int",
2971 long_long_integer_type_node);
2972 record_builtin_type (RID_MAX, "long long unsigned int",
2973 long_long_unsigned_type_node);
2974 if (c_dialect_cxx ())
2975 record_builtin_type (RID_MAX, "long long unsigned",
2976 long_long_unsigned_type_node);
2977 record_builtin_type (RID_SHORT, "short int", short_integer_type_node);
2978 record_builtin_type (RID_MAX, "short unsigned int",
2979 short_unsigned_type_node);
2980 if (c_dialect_cxx ())
2981 record_builtin_type (RID_MAX, "unsigned short",
2982 short_unsigned_type_node);
2984 /* Define both `signed char' and `unsigned char'. */
2985 record_builtin_type (RID_MAX, "signed char", signed_char_type_node);
2986 record_builtin_type (RID_MAX, "unsigned char", unsigned_char_type_node);
2988 /* These are types that c_common_type_for_size and
2989 c_common_type_for_mode use. */
2990 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
2991 intQI_type_node));
2992 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
2993 intHI_type_node));
2994 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
2995 intSI_type_node));
2996 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
2997 intDI_type_node));
2998 #if HOST_BITS_PER_WIDE_INT >= 64
2999 if (targetm.scalar_mode_supported_p (TImode))
3000 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL,
3001 get_identifier ("__int128_t"),
3002 intTI_type_node));
3003 #endif
3004 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
3005 unsigned_intQI_type_node));
3006 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
3007 unsigned_intHI_type_node));
3008 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
3009 unsigned_intSI_type_node));
3010 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
3011 unsigned_intDI_type_node));
3012 #if HOST_BITS_PER_WIDE_INT >= 64
3013 if (targetm.scalar_mode_supported_p (TImode))
3014 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL,
3015 get_identifier ("__uint128_t"),
3016 unsigned_intTI_type_node));
3017 #endif
3019 /* Create the widest literal types. */
3020 widest_integer_literal_type_node
3021 = make_signed_type (HOST_BITS_PER_WIDE_INT * 2);
3022 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
3023 widest_integer_literal_type_node));
3025 widest_unsigned_literal_type_node
3026 = make_unsigned_type (HOST_BITS_PER_WIDE_INT * 2);
3027 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
3028 widest_unsigned_literal_type_node));
3030 /* `unsigned long' is the standard type for sizeof.
3031 Note that stddef.h uses `unsigned long',
3032 and this must agree, even if long and int are the same size. */
3033 size_type_node =
3034 TREE_TYPE (identifier_global_value (get_identifier (SIZE_TYPE)));
3035 signed_size_type_node = c_common_signed_type (size_type_node);
3036 set_sizetype (size_type_node);
3038 pid_type_node =
3039 TREE_TYPE (identifier_global_value (get_identifier (PID_TYPE)));
3041 build_common_tree_nodes_2 (flag_short_double);
3043 record_builtin_type (RID_FLOAT, NULL, float_type_node);
3044 record_builtin_type (RID_DOUBLE, NULL, double_type_node);
3045 record_builtin_type (RID_MAX, "long double", long_double_type_node);
3047 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL,
3048 get_identifier ("complex int"),
3049 complex_integer_type_node));
3050 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL,
3051 get_identifier ("complex float"),
3052 complex_float_type_node));
3053 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL,
3054 get_identifier ("complex double"),
3055 complex_double_type_node));
3056 lang_hooks.decls.pushdecl
3057 (build_decl (TYPE_DECL, get_identifier ("complex long double"),
3058 complex_long_double_type_node));
3060 if (c_dialect_cxx ())
3061 /* For C++, make fileptr_type_node a distinct void * type until
3062 FILE type is defined. */
3063 fileptr_type_node = build_variant_type_copy (ptr_type_node);
3065 record_builtin_type (RID_VOID, NULL, void_type_node);
3067 /* This node must not be shared. */
3068 void_zero_node = make_node (INTEGER_CST);
3069 TREE_TYPE (void_zero_node) = void_type_node;
3071 void_list_node = build_void_list_node ();
3073 /* Make a type to be the domain of a few array types
3074 whose domains don't really matter.
3075 200 is small enough that it always fits in size_t
3076 and large enough that it can hold most function names for the
3077 initializations of __FUNCTION__ and __PRETTY_FUNCTION__. */
3078 array_domain_type = build_index_type (size_int (200));
3080 /* Make a type for arrays of characters.
3081 With luck nothing will ever really depend on the length of this
3082 array type. */
3083 char_array_type_node
3084 = build_array_type (char_type_node, array_domain_type);
3086 /* Likewise for arrays of ints. */
3087 int_array_type_node
3088 = build_array_type (integer_type_node, array_domain_type);
3090 string_type_node = build_pointer_type (char_type_node);
3091 const_string_type_node
3092 = build_pointer_type (build_qualified_type
3093 (char_type_node, TYPE_QUAL_CONST));
3095 /* This is special for C++ so functions can be overloaded. */
3096 wchar_type_node = get_identifier (MODIFIED_WCHAR_TYPE);
3097 wchar_type_node = TREE_TYPE (identifier_global_value (wchar_type_node));
3098 wchar_type_size = TYPE_PRECISION (wchar_type_node);
3099 if (c_dialect_cxx ())
3101 if (TYPE_UNSIGNED (wchar_type_node))
3102 wchar_type_node = make_unsigned_type (wchar_type_size);
3103 else
3104 wchar_type_node = make_signed_type (wchar_type_size);
3105 record_builtin_type (RID_WCHAR, "wchar_t", wchar_type_node);
3107 else
3109 signed_wchar_type_node = c_common_signed_type (wchar_type_node);
3110 unsigned_wchar_type_node = c_common_unsigned_type (wchar_type_node);
3113 /* This is for wide string constants. */
3114 wchar_array_type_node
3115 = build_array_type (wchar_type_node, array_domain_type);
3117 wint_type_node =
3118 TREE_TYPE (identifier_global_value (get_identifier (WINT_TYPE)));
3120 intmax_type_node =
3121 TREE_TYPE (identifier_global_value (get_identifier (INTMAX_TYPE)));
3122 uintmax_type_node =
3123 TREE_TYPE (identifier_global_value (get_identifier (UINTMAX_TYPE)));
3125 default_function_type = build_function_type (integer_type_node, NULL_TREE);
3126 ptrdiff_type_node
3127 = TREE_TYPE (identifier_global_value (get_identifier (PTRDIFF_TYPE)));
3128 unsigned_ptrdiff_type_node = c_common_unsigned_type (ptrdiff_type_node);
3130 lang_hooks.decls.pushdecl
3131 (build_decl (TYPE_DECL, get_identifier ("__builtin_va_list"),
3132 va_list_type_node));
3134 if (TREE_CODE (va_list_type_node) == ARRAY_TYPE)
3136 va_list_arg_type_node = va_list_ref_type_node =
3137 build_pointer_type (TREE_TYPE (va_list_type_node));
3139 else
3141 va_list_arg_type_node = va_list_type_node;
3142 va_list_ref_type_node = build_reference_type (va_list_type_node);
3145 #define DEF_PRIMITIVE_TYPE(ENUM, VALUE) \
3146 builtin_types[(int) ENUM] = VALUE;
3147 #define DEF_FUNCTION_TYPE_0(ENUM, RETURN) \
3148 builtin_types[(int) ENUM] \
3149 = build_function_type (builtin_types[(int) RETURN], \
3150 void_list_node);
3151 #define DEF_FUNCTION_TYPE_1(ENUM, RETURN, ARG1) \
3152 builtin_types[(int) ENUM] \
3153 = build_function_type (builtin_types[(int) RETURN], \
3154 tree_cons (NULL_TREE, \
3155 builtin_types[(int) ARG1], \
3156 void_list_node));
3157 #define DEF_FUNCTION_TYPE_2(ENUM, RETURN, ARG1, ARG2) \
3158 builtin_types[(int) ENUM] \
3159 = build_function_type \
3160 (builtin_types[(int) RETURN], \
3161 tree_cons (NULL_TREE, \
3162 builtin_types[(int) ARG1], \
3163 tree_cons (NULL_TREE, \
3164 builtin_types[(int) ARG2], \
3165 void_list_node)));
3166 #define DEF_FUNCTION_TYPE_3(ENUM, RETURN, ARG1, ARG2, ARG3) \
3167 builtin_types[(int) ENUM] \
3168 = build_function_type \
3169 (builtin_types[(int) RETURN], \
3170 tree_cons (NULL_TREE, \
3171 builtin_types[(int) ARG1], \
3172 tree_cons (NULL_TREE, \
3173 builtin_types[(int) ARG2], \
3174 tree_cons (NULL_TREE, \
3175 builtin_types[(int) ARG3], \
3176 void_list_node))));
3177 #define DEF_FUNCTION_TYPE_4(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4) \
3178 builtin_types[(int) ENUM] \
3179 = build_function_type \
3180 (builtin_types[(int) RETURN], \
3181 tree_cons (NULL_TREE, \
3182 builtin_types[(int) ARG1], \
3183 tree_cons (NULL_TREE, \
3184 builtin_types[(int) ARG2], \
3185 tree_cons \
3186 (NULL_TREE, \
3187 builtin_types[(int) ARG3], \
3188 tree_cons (NULL_TREE, \
3189 builtin_types[(int) ARG4], \
3190 void_list_node)))));
3191 #define DEF_FUNCTION_TYPE_VAR_0(ENUM, RETURN) \
3192 builtin_types[(int) ENUM] \
3193 = build_function_type (builtin_types[(int) RETURN], NULL_TREE);
3194 #define DEF_FUNCTION_TYPE_VAR_1(ENUM, RETURN, ARG1) \
3195 builtin_types[(int) ENUM] \
3196 = build_function_type (builtin_types[(int) RETURN], \
3197 tree_cons (NULL_TREE, \
3198 builtin_types[(int) ARG1], \
3199 NULL_TREE));
3201 #define DEF_FUNCTION_TYPE_VAR_2(ENUM, RETURN, ARG1, ARG2) \
3202 builtin_types[(int) ENUM] \
3203 = build_function_type \
3204 (builtin_types[(int) RETURN], \
3205 tree_cons (NULL_TREE, \
3206 builtin_types[(int) ARG1], \
3207 tree_cons (NULL_TREE, \
3208 builtin_types[(int) ARG2], \
3209 NULL_TREE)));
3211 #define DEF_FUNCTION_TYPE_VAR_3(ENUM, RETURN, ARG1, ARG2, ARG3) \
3212 builtin_types[(int) ENUM] \
3213 = build_function_type \
3214 (builtin_types[(int) RETURN], \
3215 tree_cons (NULL_TREE, \
3216 builtin_types[(int) ARG1], \
3217 tree_cons (NULL_TREE, \
3218 builtin_types[(int) ARG2], \
3219 tree_cons (NULL_TREE, \
3220 builtin_types[(int) ARG3], \
3221 NULL_TREE))));
3223 #define DEF_POINTER_TYPE(ENUM, TYPE) \
3224 builtin_types[(int) ENUM] \
3225 = build_pointer_type (builtin_types[(int) TYPE]);
3226 #include "builtin-types.def"
3227 #undef DEF_PRIMITIVE_TYPE
3228 #undef DEF_FUNCTION_TYPE_1
3229 #undef DEF_FUNCTION_TYPE_2
3230 #undef DEF_FUNCTION_TYPE_3
3231 #undef DEF_FUNCTION_TYPE_4
3232 #undef DEF_FUNCTION_TYPE_VAR_0
3233 #undef DEF_FUNCTION_TYPE_VAR_1
3234 #undef DEF_FUNCTION_TYPE_VAR_2
3235 #undef DEF_FUNCTION_TYPE_VAR_3
3236 #undef DEF_POINTER_TYPE
3238 c_init_attributes ();
3240 #define DEF_BUILTIN(ENUM, NAME, CLASS, TYPE, LIBTYPE, BOTH_P, FALLBACK_P, \
3241 NONANSI_P, ATTRS, IMPLICIT, COND) \
3242 if (NAME && COND) \
3244 tree decl; \
3246 gcc_assert ((!BOTH_P && !FALLBACK_P) \
3247 || !strncmp (NAME, "__builtin_", \
3248 strlen ("__builtin_"))); \
3250 if (!BOTH_P) \
3251 decl = lang_hooks.builtin_function (NAME, builtin_types[TYPE], \
3252 ENUM, \
3253 CLASS, \
3254 (FALLBACK_P \
3255 ? (NAME + strlen ("__builtin_")) \
3256 : NULL), \
3257 built_in_attributes[(int) ATTRS]); \
3258 else \
3259 decl = builtin_function_2 (NAME, \
3260 NAME + strlen ("__builtin_"), \
3261 builtin_types[TYPE], \
3262 builtin_types[LIBTYPE], \
3263 ENUM, \
3264 CLASS, \
3265 FALLBACK_P, \
3266 NONANSI_P, \
3267 built_in_attributes[(int) ATTRS]); \
3269 built_in_decls[(int) ENUM] = decl; \
3270 if (IMPLICIT) \
3271 implicit_built_in_decls[(int) ENUM] = decl; \
3273 #include "builtins.def"
3274 #undef DEF_BUILTIN
3276 build_common_builtin_nodes ();
3278 targetm.init_builtins ();
3279 if (flag_mudflap)
3280 mudflap_init ();
3282 main_identifier_node = get_identifier ("main");
3284 /* Create the built-in __null node. It is important that this is
3285 not shared. */
3286 null_node = make_node (INTEGER_CST);
3287 TREE_TYPE (null_node) = c_common_type_for_size (POINTER_SIZE, 0);
3290 /* Look up the function in built_in_decls that corresponds to DECL
3291 and set ASMSPEC as its user assembler name. DECL must be a
3292 function decl that declares a builtin. */
3294 void
3295 set_builtin_user_assembler_name (tree decl, const char *asmspec)
3297 tree builtin;
3298 gcc_assert (TREE_CODE (decl) == FUNCTION_DECL
3299 && DECL_BUILT_IN_CLASS (decl) == BUILT_IN_NORMAL
3300 && asmspec != 0);
3302 builtin = built_in_decls [DECL_FUNCTION_CODE (decl)];
3303 set_user_assembler_name (builtin, asmspec);
3304 if (DECL_FUNCTION_CODE (decl) == BUILT_IN_MEMCPY)
3305 init_block_move_fn (asmspec);
3306 else if (DECL_FUNCTION_CODE (decl) == BUILT_IN_MEMSET)
3307 init_block_clear_fn (asmspec);
3310 tree
3311 build_va_arg (tree expr, tree type)
3313 return build1 (VA_ARG_EXPR, type, expr);
3317 /* Linked list of disabled built-in functions. */
3319 typedef struct disabled_builtin
3321 const char *name;
3322 struct disabled_builtin *next;
3323 } disabled_builtin;
3324 static disabled_builtin *disabled_builtins = NULL;
3326 static bool builtin_function_disabled_p (const char *);
3328 /* Disable a built-in function specified by -fno-builtin-NAME. If NAME
3329 begins with "__builtin_", give an error. */
3331 void
3332 disable_builtin_function (const char *name)
3334 if (strncmp (name, "__builtin_", strlen ("__builtin_")) == 0)
3335 error ("cannot disable built-in function %qs", name);
3336 else
3338 disabled_builtin *new_disabled_builtin = XNEW (disabled_builtin);
3339 new_disabled_builtin->name = name;
3340 new_disabled_builtin->next = disabled_builtins;
3341 disabled_builtins = new_disabled_builtin;
3346 /* Return true if the built-in function NAME has been disabled, false
3347 otherwise. */
3349 static bool
3350 builtin_function_disabled_p (const char *name)
3352 disabled_builtin *p;
3353 for (p = disabled_builtins; p != NULL; p = p->next)
3355 if (strcmp (name, p->name) == 0)
3356 return true;
3358 return false;
3362 /* Possibly define a builtin function with one or two names. BUILTIN_NAME
3363 is an __builtin_-prefixed name; NAME is the ordinary name; one or both
3364 of these may be NULL (though both being NULL is useless).
3365 BUILTIN_TYPE is the type of the __builtin_-prefixed function;
3366 TYPE is the type of the function with the ordinary name. These
3367 may differ if the ordinary name is declared with a looser type to avoid
3368 conflicts with headers. FUNCTION_CODE and CL are as for
3369 builtin_function. If LIBRARY_NAME_P is nonzero, NAME is passed as
3370 the LIBRARY_NAME parameter to builtin_function when declaring BUILTIN_NAME.
3371 If NONANSI_P is true, the name NAME is treated as a non-ANSI name;
3372 ATTRS is the tree list representing the builtin's function attributes.
3373 Returns the declaration of BUILTIN_NAME, if any, otherwise
3374 the declaration of NAME. Does not declare NAME if flag_no_builtin,
3375 or if NONANSI_P and flag_no_nonansi_builtin. */
3377 static tree
3378 builtin_function_2 (const char *builtin_name, const char *name,
3379 tree builtin_type, tree type,
3380 enum built_in_function function_code,
3381 enum built_in_class cl, int library_name_p,
3382 bool nonansi_p, tree attrs)
3384 tree bdecl = NULL_TREE;
3385 tree decl = NULL_TREE;
3387 if (builtin_name != 0)
3388 bdecl = lang_hooks.builtin_function (builtin_name, builtin_type,
3389 function_code, cl,
3390 library_name_p ? name : NULL, attrs);
3392 if (name != 0 && !flag_no_builtin && !builtin_function_disabled_p (name)
3393 && !(nonansi_p && flag_no_nonansi_builtin))
3394 decl = lang_hooks.builtin_function (name, type, function_code, cl,
3395 NULL, attrs);
3397 return (bdecl != 0 ? bdecl : decl);
3400 /* Nonzero if the type T promotes to int. This is (nearly) the
3401 integral promotions defined in ISO C99 6.3.1.1/2. */
3403 bool
3404 c_promoting_integer_type_p (tree t)
3406 switch (TREE_CODE (t))
3408 case INTEGER_TYPE:
3409 return (TYPE_MAIN_VARIANT (t) == char_type_node
3410 || TYPE_MAIN_VARIANT (t) == signed_char_type_node
3411 || TYPE_MAIN_VARIANT (t) == unsigned_char_type_node
3412 || TYPE_MAIN_VARIANT (t) == short_integer_type_node
3413 || TYPE_MAIN_VARIANT (t) == short_unsigned_type_node
3414 || TYPE_PRECISION (t) < TYPE_PRECISION (integer_type_node));
3416 case ENUMERAL_TYPE:
3417 /* ??? Technically all enumerations not larger than an int
3418 promote to an int. But this is used along code paths
3419 that only want to notice a size change. */
3420 return TYPE_PRECISION (t) < TYPE_PRECISION (integer_type_node);
3422 case BOOLEAN_TYPE:
3423 return 1;
3425 default:
3426 return 0;
3430 /* Return 1 if PARMS specifies a fixed number of parameters
3431 and none of their types is affected by default promotions. */
3434 self_promoting_args_p (tree parms)
3436 tree t;
3437 for (t = parms; t; t = TREE_CHAIN (t))
3439 tree type = TREE_VALUE (t);
3441 if (TREE_CHAIN (t) == 0 && type != void_type_node)
3442 return 0;
3444 if (type == 0)
3445 return 0;
3447 if (TYPE_MAIN_VARIANT (type) == float_type_node)
3448 return 0;
3450 if (c_promoting_integer_type_p (type))
3451 return 0;
3453 return 1;
3456 /* Recursively examines the array elements of TYPE, until a non-array
3457 element type is found. */
3459 tree
3460 strip_array_types (tree type)
3462 while (TREE_CODE (type) == ARRAY_TYPE)
3463 type = TREE_TYPE (type);
3465 return type;
3468 /* Recursively remove any '*' or '&' operator from TYPE. */
3469 tree
3470 strip_pointer_operator (tree t)
3472 while (POINTER_TYPE_P (t))
3473 t = TREE_TYPE (t);
3474 return t;
3477 /* Used to compare case labels. K1 and K2 are actually tree nodes
3478 representing case labels, or NULL_TREE for a `default' label.
3479 Returns -1 if K1 is ordered before K2, -1 if K1 is ordered after
3480 K2, and 0 if K1 and K2 are equal. */
3483 case_compare (splay_tree_key k1, splay_tree_key k2)
3485 /* Consider a NULL key (such as arises with a `default' label) to be
3486 smaller than anything else. */
3487 if (!k1)
3488 return k2 ? -1 : 0;
3489 else if (!k2)
3490 return k1 ? 1 : 0;
3492 return tree_int_cst_compare ((tree) k1, (tree) k2);
3495 /* Process a case label for the range LOW_VALUE ... HIGH_VALUE. If
3496 LOW_VALUE and HIGH_VALUE are both NULL_TREE then this case label is
3497 actually a `default' label. If only HIGH_VALUE is NULL_TREE, then
3498 case label was declared using the usual C/C++ syntax, rather than
3499 the GNU case range extension. CASES is a tree containing all the
3500 case ranges processed so far; COND is the condition for the
3501 switch-statement itself. Returns the CASE_LABEL_EXPR created, or
3502 ERROR_MARK_NODE if no CASE_LABEL_EXPR is created. */
3504 tree
3505 c_add_case_label (splay_tree cases, tree cond, tree orig_type,
3506 tree low_value, tree high_value)
3508 tree type;
3509 tree label;
3510 tree case_label;
3511 splay_tree_node node;
3513 /* Create the LABEL_DECL itself. */
3514 label = create_artificial_label ();
3516 /* If there was an error processing the switch condition, bail now
3517 before we get more confused. */
3518 if (!cond || cond == error_mark_node)
3519 goto error_out;
3521 if ((low_value && TREE_TYPE (low_value)
3522 && POINTER_TYPE_P (TREE_TYPE (low_value)))
3523 || (high_value && TREE_TYPE (high_value)
3524 && POINTER_TYPE_P (TREE_TYPE (high_value))))
3526 error ("pointers are not permitted as case values");
3527 goto error_out;
3530 /* Case ranges are a GNU extension. */
3531 if (high_value && pedantic)
3532 pedwarn ("range expressions in switch statements are non-standard");
3534 type = TREE_TYPE (cond);
3535 if (low_value)
3537 low_value = check_case_value (low_value);
3538 low_value = convert_and_check (type, low_value);
3540 if (high_value)
3542 high_value = check_case_value (high_value);
3543 high_value = convert_and_check (type, high_value);
3546 /* If an error has occurred, bail out now. */
3547 if (low_value == error_mark_node || high_value == error_mark_node)
3548 goto error_out;
3550 /* If the LOW_VALUE and HIGH_VALUE are the same, then this isn't
3551 really a case range, even though it was written that way. Remove
3552 the HIGH_VALUE to simplify later processing. */
3553 if (tree_int_cst_equal (low_value, high_value))
3554 high_value = NULL_TREE;
3555 if (low_value && high_value
3556 && !tree_int_cst_lt (low_value, high_value))
3557 warning (0, "empty range specified");
3559 /* See if the case is in range of the type of the original testing
3560 expression. If both low_value and high_value are out of range,
3561 don't insert the case label and return NULL_TREE. */
3562 if (low_value
3563 && !check_case_bounds (type, orig_type,
3564 &low_value, high_value ? &high_value : NULL))
3565 return NULL_TREE;
3567 /* Look up the LOW_VALUE in the table of case labels we already
3568 have. */
3569 node = splay_tree_lookup (cases, (splay_tree_key) low_value);
3570 /* If there was not an exact match, check for overlapping ranges.
3571 There's no need to do this if there's no LOW_VALUE or HIGH_VALUE;
3572 that's a `default' label and the only overlap is an exact match. */
3573 if (!node && (low_value || high_value))
3575 splay_tree_node low_bound;
3576 splay_tree_node high_bound;
3578 /* Even though there wasn't an exact match, there might be an
3579 overlap between this case range and another case range.
3580 Since we've (inductively) not allowed any overlapping case
3581 ranges, we simply need to find the greatest low case label
3582 that is smaller that LOW_VALUE, and the smallest low case
3583 label that is greater than LOW_VALUE. If there is an overlap
3584 it will occur in one of these two ranges. */
3585 low_bound = splay_tree_predecessor (cases,
3586 (splay_tree_key) low_value);
3587 high_bound = splay_tree_successor (cases,
3588 (splay_tree_key) low_value);
3590 /* Check to see if the LOW_BOUND overlaps. It is smaller than
3591 the LOW_VALUE, so there is no need to check unless the
3592 LOW_BOUND is in fact itself a case range. */
3593 if (low_bound
3594 && CASE_HIGH ((tree) low_bound->value)
3595 && tree_int_cst_compare (CASE_HIGH ((tree) low_bound->value),
3596 low_value) >= 0)
3597 node = low_bound;
3598 /* Check to see if the HIGH_BOUND overlaps. The low end of that
3599 range is bigger than the low end of the current range, so we
3600 are only interested if the current range is a real range, and
3601 not an ordinary case label. */
3602 else if (high_bound
3603 && high_value
3604 && (tree_int_cst_compare ((tree) high_bound->key,
3605 high_value)
3606 <= 0))
3607 node = high_bound;
3609 /* If there was an overlap, issue an error. */
3610 if (node)
3612 tree duplicate = CASE_LABEL ((tree) node->value);
3614 if (high_value)
3616 error ("duplicate (or overlapping) case value");
3617 error ("%Jthis is the first entry overlapping that value", duplicate);
3619 else if (low_value)
3621 error ("duplicate case value") ;
3622 error ("%Jpreviously used here", duplicate);
3624 else
3626 error ("multiple default labels in one switch");
3627 error ("%Jthis is the first default label", duplicate);
3629 goto error_out;
3632 /* Add a CASE_LABEL to the statement-tree. */
3633 case_label = add_stmt (build_case_label (low_value, high_value, label));
3634 /* Register this case label in the splay tree. */
3635 splay_tree_insert (cases,
3636 (splay_tree_key) low_value,
3637 (splay_tree_value) case_label);
3639 return case_label;
3641 error_out:
3642 /* Add a label so that the back-end doesn't think that the beginning of
3643 the switch is unreachable. Note that we do not add a case label, as
3644 that just leads to duplicates and thence to failure later on. */
3645 if (!cases->root)
3647 tree t = create_artificial_label ();
3648 add_stmt (build_stmt (LABEL_EXPR, t));
3650 return error_mark_node;
3653 /* Subroutines of c_do_switch_warnings, called via splay_tree_foreach.
3654 Used to verify that case values match up with enumerator values. */
3656 static void
3657 match_case_to_enum_1 (tree key, tree type, tree label)
3659 char buf[2 + 2*HOST_BITS_PER_WIDE_INT/4 + 1];
3661 /* ??? Not working too hard to print the double-word value.
3662 Should perhaps be done with %lwd in the diagnostic routines? */
3663 if (TREE_INT_CST_HIGH (key) == 0)
3664 snprintf (buf, sizeof (buf), HOST_WIDE_INT_PRINT_UNSIGNED,
3665 TREE_INT_CST_LOW (key));
3666 else if (!TYPE_UNSIGNED (type)
3667 && TREE_INT_CST_HIGH (key) == -1
3668 && TREE_INT_CST_LOW (key) != 0)
3669 snprintf (buf, sizeof (buf), "-" HOST_WIDE_INT_PRINT_UNSIGNED,
3670 -TREE_INT_CST_LOW (key));
3671 else
3672 snprintf (buf, sizeof (buf), HOST_WIDE_INT_PRINT_DOUBLE_HEX,
3673 TREE_INT_CST_HIGH (key), TREE_INT_CST_LOW (key));
3675 if (TYPE_NAME (type) == 0)
3676 warning (0, "%Jcase value %qs not in enumerated type",
3677 CASE_LABEL (label), buf);
3678 else
3679 warning (0, "%Jcase value %qs not in enumerated type %qT",
3680 CASE_LABEL (label), buf, type);
3683 static int
3684 match_case_to_enum (splay_tree_node node, void *data)
3686 tree label = (tree) node->value;
3687 tree type = (tree) data;
3689 /* Skip default case. */
3690 if (!CASE_LOW (label))
3691 return 0;
3693 /* If TREE_ADDRESSABLE is not set, that means CASE_LOW did not appear
3694 when we did our enum->case scan. Reset our scratch bit after. */
3695 if (!TREE_ADDRESSABLE (label))
3696 match_case_to_enum_1 (CASE_LOW (label), type, label);
3697 else
3698 TREE_ADDRESSABLE (label) = 0;
3700 /* If CASE_HIGH is non-null, we have a range. Here we must search.
3701 Note that the old code in stmt.c did not check for the values in
3702 the range either, just the endpoints. */
3703 if (CASE_HIGH (label))
3705 tree chain, key = CASE_HIGH (label);
3707 for (chain = TYPE_VALUES (type);
3708 chain && !tree_int_cst_equal (key, TREE_VALUE (chain));
3709 chain = TREE_CHAIN (chain))
3710 continue;
3711 if (!chain)
3712 match_case_to_enum_1 (key, type, label);
3715 return 0;
3718 /* Handle -Wswitch*. Called from the front end after parsing the
3719 switch construct. */
3720 /* ??? Should probably be somewhere generic, since other languages
3721 besides C and C++ would want this. At the moment, however, C/C++
3722 are the only tree-ssa languages that support enumerations at all,
3723 so the point is moot. */
3725 void
3726 c_do_switch_warnings (splay_tree cases, location_t switch_location,
3727 tree type, tree cond)
3729 splay_tree_node default_node;
3731 if (!warn_switch && !warn_switch_enum && !warn_switch_default)
3732 return;
3734 default_node = splay_tree_lookup (cases, (splay_tree_key) NULL);
3735 if (warn_switch_default && !default_node)
3736 warning (0, "%Hswitch missing default case", &switch_location);
3738 /* If the switch expression was an enumerated type, check that
3739 exactly all enumeration literals are covered by the cases.
3740 The check is made when -Wswitch was specified and there is no
3741 default case, or when -Wswitch-enum was specified. */
3742 if (((warn_switch && !default_node) || warn_switch_enum)
3743 && type && TREE_CODE (type) == ENUMERAL_TYPE
3744 && TREE_CODE (cond) != INTEGER_CST)
3746 tree chain;
3748 /* The time complexity here is O(N*lg(N)) worst case, but for the
3749 common case of monotonically increasing enumerators, it is
3750 O(N), since the nature of the splay tree will keep the next
3751 element adjacent to the root at all times. */
3753 for (chain = TYPE_VALUES (type); chain; chain = TREE_CHAIN (chain))
3755 splay_tree_node node
3756 = splay_tree_lookup (cases, (splay_tree_key) TREE_VALUE (chain));
3758 if (node)
3760 /* Mark the CASE_LOW part of the case entry as seen, so
3761 that we save time later. Choose TREE_ADDRESSABLE
3762 randomly as a bit that won't have been set to-date. */
3763 tree label = (tree) node->value;
3764 TREE_ADDRESSABLE (label) = 1;
3766 else
3768 /* Warn if there are enumerators that don't correspond to
3769 case expressions. */
3770 warning (0, "%Henumeration value %qE not handled in switch",
3771 &switch_location, TREE_PURPOSE (chain));
3775 /* Warn if there are case expressions that don't correspond to
3776 enumerators. This can occur since C and C++ don't enforce
3777 type-checking of assignments to enumeration variables.
3779 The time complexity here is O(N**2) worst case, since we've
3780 not sorted the enumeration values. However, in the absence
3781 of case ranges this is O(N), since all single cases that
3782 corresponded to enumerations have been marked above. */
3784 splay_tree_foreach (cases, match_case_to_enum, type);
3788 /* Finish an expression taking the address of LABEL (an
3789 IDENTIFIER_NODE). Returns an expression for the address. */
3791 tree
3792 finish_label_address_expr (tree label)
3794 tree result;
3796 if (pedantic)
3797 pedwarn ("taking the address of a label is non-standard");
3799 if (label == error_mark_node)
3800 return error_mark_node;
3802 label = lookup_label (label);
3803 if (label == NULL_TREE)
3804 result = null_pointer_node;
3805 else
3807 TREE_USED (label) = 1;
3808 result = build1 (ADDR_EXPR, ptr_type_node, label);
3809 /* The current function in not necessarily uninlinable.
3810 Computed gotos are incompatible with inlining, but the value
3811 here could be used only in a diagnostic, for example. */
3814 return result;
3817 /* Hook used by expand_expr to expand language-specific tree codes. */
3818 /* The only things that should go here are bits needed to expand
3819 constant initializers. Everything else should be handled by the
3820 gimplification routines. */
3823 c_expand_expr (tree exp, rtx target, enum machine_mode tmode,
3824 int modifier /* Actually enum_modifier. */,
3825 rtx *alt_rtl)
3827 switch (TREE_CODE (exp))
3829 case COMPOUND_LITERAL_EXPR:
3831 /* Initialize the anonymous variable declared in the compound
3832 literal, then return the variable. */
3833 tree decl = COMPOUND_LITERAL_EXPR_DECL (exp);
3834 emit_local_var (decl);
3835 return expand_expr_real (decl, target, tmode, modifier, alt_rtl);
3838 default:
3839 gcc_unreachable ();
3843 /* Hook used by staticp to handle language-specific tree codes. */
3845 tree
3846 c_staticp (tree exp)
3848 return (TREE_CODE (exp) == COMPOUND_LITERAL_EXPR
3849 && TREE_STATIC (COMPOUND_LITERAL_EXPR_DECL (exp))
3850 ? exp : NULL);
3854 /* Given a boolean expression ARG, return a tree representing an increment
3855 or decrement (as indicated by CODE) of ARG. The front end must check for
3856 invalid cases (e.g., decrement in C++). */
3857 tree
3858 boolean_increment (enum tree_code code, tree arg)
3860 tree val;
3861 tree true_res = boolean_true_node;
3863 arg = stabilize_reference (arg);
3864 switch (code)
3866 case PREINCREMENT_EXPR:
3867 val = build2 (MODIFY_EXPR, TREE_TYPE (arg), arg, true_res);
3868 break;
3869 case POSTINCREMENT_EXPR:
3870 val = build2 (MODIFY_EXPR, TREE_TYPE (arg), arg, true_res);
3871 arg = save_expr (arg);
3872 val = build2 (COMPOUND_EXPR, TREE_TYPE (arg), val, arg);
3873 val = build2 (COMPOUND_EXPR, TREE_TYPE (arg), arg, val);
3874 break;
3875 case PREDECREMENT_EXPR:
3876 val = build2 (MODIFY_EXPR, TREE_TYPE (arg), arg,
3877 invert_truthvalue (arg));
3878 break;
3879 case POSTDECREMENT_EXPR:
3880 val = build2 (MODIFY_EXPR, TREE_TYPE (arg), arg,
3881 invert_truthvalue (arg));
3882 arg = save_expr (arg);
3883 val = build2 (COMPOUND_EXPR, TREE_TYPE (arg), val, arg);
3884 val = build2 (COMPOUND_EXPR, TREE_TYPE (arg), arg, val);
3885 break;
3886 default:
3887 gcc_unreachable ();
3889 TREE_SIDE_EFFECTS (val) = 1;
3890 return val;
3893 /* Built-in macros for stddef.h, that require macros defined in this
3894 file. */
3895 void
3896 c_stddef_cpp_builtins(void)
3898 builtin_define_with_value ("__SIZE_TYPE__", SIZE_TYPE, 0);
3899 builtin_define_with_value ("__PTRDIFF_TYPE__", PTRDIFF_TYPE, 0);
3900 builtin_define_with_value ("__WCHAR_TYPE__", MODIFIED_WCHAR_TYPE, 0);
3901 builtin_define_with_value ("__WINT_TYPE__", WINT_TYPE, 0);
3902 builtin_define_with_value ("__INTMAX_TYPE__", INTMAX_TYPE, 0);
3903 builtin_define_with_value ("__UINTMAX_TYPE__", UINTMAX_TYPE, 0);
3906 static void
3907 c_init_attributes (void)
3909 /* Fill in the built_in_attributes array. */
3910 #define DEF_ATTR_NULL_TREE(ENUM) \
3911 built_in_attributes[(int) ENUM] = NULL_TREE;
3912 #define DEF_ATTR_INT(ENUM, VALUE) \
3913 built_in_attributes[(int) ENUM] = build_int_cst (NULL_TREE, VALUE);
3914 #define DEF_ATTR_IDENT(ENUM, STRING) \
3915 built_in_attributes[(int) ENUM] = get_identifier (STRING);
3916 #define DEF_ATTR_TREE_LIST(ENUM, PURPOSE, VALUE, CHAIN) \
3917 built_in_attributes[(int) ENUM] \
3918 = tree_cons (built_in_attributes[(int) PURPOSE], \
3919 built_in_attributes[(int) VALUE], \
3920 built_in_attributes[(int) CHAIN]);
3921 #include "builtin-attrs.def"
3922 #undef DEF_ATTR_NULL_TREE
3923 #undef DEF_ATTR_INT
3924 #undef DEF_ATTR_IDENT
3925 #undef DEF_ATTR_TREE_LIST
3928 /* Attribute handlers common to C front ends. */
3930 /* Handle a "packed" attribute; arguments as in
3931 struct attribute_spec.handler. */
3933 static tree
3934 handle_packed_attribute (tree *node, tree name, tree ARG_UNUSED (args),
3935 int flags, bool *no_add_attrs)
3937 if (TYPE_P (*node))
3939 if (!(flags & (int) ATTR_FLAG_TYPE_IN_PLACE))
3940 *node = build_variant_type_copy (*node);
3941 TYPE_PACKED (*node) = 1;
3942 if (TYPE_MAIN_VARIANT (*node) == *node)
3944 /* If it is the main variant, then pack the other variants
3945 too. This happens in,
3947 struct Foo {
3948 struct Foo const *ptr; // creates a variant w/o packed flag
3949 } __ attribute__((packed)); // packs it now.
3951 tree probe;
3953 for (probe = *node; probe; probe = TYPE_NEXT_VARIANT (probe))
3954 TYPE_PACKED (probe) = 1;
3958 else if (TREE_CODE (*node) == FIELD_DECL)
3959 DECL_PACKED (*node) = 1;
3960 /* We can't set DECL_PACKED for a VAR_DECL, because the bit is
3961 used for DECL_REGISTER. It wouldn't mean anything anyway.
3962 We can't set DECL_PACKED on the type of a TYPE_DECL, because
3963 that changes what the typedef is typing. */
3964 else
3966 warning (0, "%qE attribute ignored", name);
3967 *no_add_attrs = true;
3970 return NULL_TREE;
3973 /* Handle a "nocommon" attribute; arguments as in
3974 struct attribute_spec.handler. */
3976 static tree
3977 handle_nocommon_attribute (tree *node, tree name,
3978 tree ARG_UNUSED (args),
3979 int ARG_UNUSED (flags), bool *no_add_attrs)
3981 if (TREE_CODE (*node) == VAR_DECL)
3982 DECL_COMMON (*node) = 0;
3983 else
3985 warning (0, "%qE attribute ignored", name);
3986 *no_add_attrs = true;
3989 return NULL_TREE;
3992 /* Handle a "common" attribute; arguments as in
3993 struct attribute_spec.handler. */
3995 static tree
3996 handle_common_attribute (tree *node, tree name, tree ARG_UNUSED (args),
3997 int ARG_UNUSED (flags), bool *no_add_attrs)
3999 if (TREE_CODE (*node) == VAR_DECL)
4000 DECL_COMMON (*node) = 1;
4001 else
4003 warning (0, "%qE attribute ignored", name);
4004 *no_add_attrs = true;
4007 return NULL_TREE;
4010 /* Handle a "noreturn" attribute; arguments as in
4011 struct attribute_spec.handler. */
4013 static tree
4014 handle_noreturn_attribute (tree *node, tree name, tree ARG_UNUSED (args),
4015 int ARG_UNUSED (flags), bool *no_add_attrs)
4017 tree type = TREE_TYPE (*node);
4019 /* See FIXME comment in c_common_attribute_table. */
4020 if (TREE_CODE (*node) == FUNCTION_DECL)
4021 TREE_THIS_VOLATILE (*node) = 1;
4022 else if (TREE_CODE (type) == POINTER_TYPE
4023 && TREE_CODE (TREE_TYPE (type)) == FUNCTION_TYPE)
4024 TREE_TYPE (*node)
4025 = build_pointer_type
4026 (build_type_variant (TREE_TYPE (type),
4027 TYPE_READONLY (TREE_TYPE (type)), 1));
4028 else
4030 warning (0, "%qE attribute ignored", name);
4031 *no_add_attrs = true;
4034 return NULL_TREE;
4037 /* Handle a "noinline" attribute; arguments as in
4038 struct attribute_spec.handler. */
4040 static tree
4041 handle_noinline_attribute (tree *node, tree name,
4042 tree ARG_UNUSED (args),
4043 int ARG_UNUSED (flags), bool *no_add_attrs)
4045 if (TREE_CODE (*node) == FUNCTION_DECL)
4046 DECL_UNINLINABLE (*node) = 1;
4047 else
4049 warning (0, "%qE attribute ignored", name);
4050 *no_add_attrs = true;
4053 return NULL_TREE;
4056 /* Handle a "always_inline" attribute; arguments as in
4057 struct attribute_spec.handler. */
4059 static tree
4060 handle_always_inline_attribute (tree *node, tree name,
4061 tree ARG_UNUSED (args),
4062 int ARG_UNUSED (flags),
4063 bool *no_add_attrs)
4065 if (TREE_CODE (*node) == FUNCTION_DECL)
4067 /* Do nothing else, just set the attribute. We'll get at
4068 it later with lookup_attribute. */
4070 else
4072 warning (0, "%qE attribute ignored", name);
4073 *no_add_attrs = true;
4076 return NULL_TREE;
4079 /* Handle a "used" attribute; arguments as in
4080 struct attribute_spec.handler. */
4082 static tree
4083 handle_used_attribute (tree *pnode, tree name, tree ARG_UNUSED (args),
4084 int ARG_UNUSED (flags), bool *no_add_attrs)
4086 tree node = *pnode;
4088 if (TREE_CODE (node) == FUNCTION_DECL
4089 || (TREE_CODE (node) == VAR_DECL && TREE_STATIC (node)))
4091 TREE_USED (node) = 1;
4092 DECL_PRESERVE_P (node) = 1;
4094 else
4096 warning (0, "%qE attribute ignored", name);
4097 *no_add_attrs = true;
4100 return NULL_TREE;
4103 /* Handle a "unused" attribute; arguments as in
4104 struct attribute_spec.handler. */
4106 static tree
4107 handle_unused_attribute (tree *node, tree name, tree ARG_UNUSED (args),
4108 int flags, bool *no_add_attrs)
4110 if (DECL_P (*node))
4112 tree decl = *node;
4114 if (TREE_CODE (decl) == PARM_DECL
4115 || TREE_CODE (decl) == VAR_DECL
4116 || TREE_CODE (decl) == FUNCTION_DECL
4117 || TREE_CODE (decl) == LABEL_DECL
4118 || TREE_CODE (decl) == TYPE_DECL)
4119 TREE_USED (decl) = 1;
4120 else
4122 warning (0, "%qE attribute ignored", name);
4123 *no_add_attrs = true;
4126 else
4128 if (!(flags & (int) ATTR_FLAG_TYPE_IN_PLACE))
4129 *node = build_variant_type_copy (*node);
4130 TREE_USED (*node) = 1;
4133 return NULL_TREE;
4136 /* Handle a "const" attribute; arguments as in
4137 struct attribute_spec.handler. */
4139 static tree
4140 handle_const_attribute (tree *node, tree name, tree ARG_UNUSED (args),
4141 int ARG_UNUSED (flags), bool *no_add_attrs)
4143 tree type = TREE_TYPE (*node);
4145 /* See FIXME comment on noreturn in c_common_attribute_table. */
4146 if (TREE_CODE (*node) == FUNCTION_DECL)
4147 TREE_READONLY (*node) = 1;
4148 else if (TREE_CODE (type) == POINTER_TYPE
4149 && TREE_CODE (TREE_TYPE (type)) == FUNCTION_TYPE)
4150 TREE_TYPE (*node)
4151 = build_pointer_type
4152 (build_type_variant (TREE_TYPE (type), 1,
4153 TREE_THIS_VOLATILE (TREE_TYPE (type))));
4154 else
4156 warning (0, "%qE attribute ignored", name);
4157 *no_add_attrs = true;
4160 return NULL_TREE;
4163 /* Handle a "transparent_union" attribute; arguments as in
4164 struct attribute_spec.handler. */
4166 static tree
4167 handle_transparent_union_attribute (tree *node, tree name,
4168 tree ARG_UNUSED (args), int flags,
4169 bool *no_add_attrs)
4171 tree decl = NULL_TREE;
4172 tree *type = NULL;
4173 int is_type = 0;
4175 if (DECL_P (*node))
4177 decl = *node;
4178 type = &TREE_TYPE (decl);
4179 is_type = TREE_CODE (*node) == TYPE_DECL;
4181 else if (TYPE_P (*node))
4182 type = node, is_type = 1;
4184 if (is_type
4185 && TREE_CODE (*type) == UNION_TYPE
4186 && (decl == 0
4187 || (TYPE_FIELDS (*type) != 0
4188 && TYPE_MODE (*type) == DECL_MODE (TYPE_FIELDS (*type)))))
4190 if (!(flags & (int) ATTR_FLAG_TYPE_IN_PLACE))
4191 *type = build_variant_type_copy (*type);
4192 TYPE_TRANSPARENT_UNION (*type) = 1;
4194 else if (decl != 0 && TREE_CODE (decl) == PARM_DECL
4195 && TREE_CODE (*type) == UNION_TYPE
4196 && TYPE_MODE (*type) == DECL_MODE (TYPE_FIELDS (*type)))
4197 DECL_TRANSPARENT_UNION (decl) = 1;
4198 else
4200 warning (0, "%qE attribute ignored", name);
4201 *no_add_attrs = true;
4204 return NULL_TREE;
4207 /* Handle a "constructor" attribute; arguments as in
4208 struct attribute_spec.handler. */
4210 static tree
4211 handle_constructor_attribute (tree *node, tree name,
4212 tree ARG_UNUSED (args),
4213 int ARG_UNUSED (flags),
4214 bool *no_add_attrs)
4216 tree decl = *node;
4217 tree type = TREE_TYPE (decl);
4219 if (TREE_CODE (decl) == FUNCTION_DECL
4220 && TREE_CODE (type) == FUNCTION_TYPE
4221 && decl_function_context (decl) == 0)
4223 DECL_STATIC_CONSTRUCTOR (decl) = 1;
4224 TREE_USED (decl) = 1;
4226 else
4228 warning (0, "%qE attribute ignored", name);
4229 *no_add_attrs = true;
4232 return NULL_TREE;
4235 /* Handle a "destructor" attribute; arguments as in
4236 struct attribute_spec.handler. */
4238 static tree
4239 handle_destructor_attribute (tree *node, tree name,
4240 tree ARG_UNUSED (args),
4241 int ARG_UNUSED (flags),
4242 bool *no_add_attrs)
4244 tree decl = *node;
4245 tree type = TREE_TYPE (decl);
4247 if (TREE_CODE (decl) == FUNCTION_DECL
4248 && TREE_CODE (type) == FUNCTION_TYPE
4249 && decl_function_context (decl) == 0)
4251 DECL_STATIC_DESTRUCTOR (decl) = 1;
4252 TREE_USED (decl) = 1;
4254 else
4256 warning (0, "%qE attribute ignored", name);
4257 *no_add_attrs = true;
4260 return NULL_TREE;
4263 /* Handle a "mode" attribute; arguments as in
4264 struct attribute_spec.handler. */
4266 static tree
4267 handle_mode_attribute (tree *node, tree name, tree args,
4268 int ARG_UNUSED (flags), bool *no_add_attrs)
4270 tree type = *node;
4272 *no_add_attrs = true;
4274 if (TREE_CODE (TREE_VALUE (args)) != IDENTIFIER_NODE)
4275 warning (0, "%qE attribute ignored", name);
4276 else
4278 int j;
4279 const char *p = IDENTIFIER_POINTER (TREE_VALUE (args));
4280 int len = strlen (p);
4281 enum machine_mode mode = VOIDmode;
4282 tree typefm;
4283 bool valid_mode;
4285 if (len > 4 && p[0] == '_' && p[1] == '_'
4286 && p[len - 1] == '_' && p[len - 2] == '_')
4288 char *newp = (char *) alloca (len - 1);
4290 strcpy (newp, &p[2]);
4291 newp[len - 4] = '\0';
4292 p = newp;
4295 /* Change this type to have a type with the specified mode.
4296 First check for the special modes. */
4297 if (!strcmp (p, "byte"))
4298 mode = byte_mode;
4299 else if (!strcmp (p, "word"))
4300 mode = word_mode;
4301 else if (!strcmp (p, "pointer"))
4302 mode = ptr_mode;
4303 else
4304 for (j = 0; j < NUM_MACHINE_MODES; j++)
4305 if (!strcmp (p, GET_MODE_NAME (j)))
4307 mode = (enum machine_mode) j;
4308 break;
4311 if (mode == VOIDmode)
4313 error ("unknown machine mode %qs", p);
4314 return NULL_TREE;
4317 valid_mode = false;
4318 switch (GET_MODE_CLASS (mode))
4320 case MODE_INT:
4321 case MODE_PARTIAL_INT:
4322 case MODE_FLOAT:
4323 valid_mode = targetm.scalar_mode_supported_p (mode);
4324 break;
4326 case MODE_COMPLEX_INT:
4327 case MODE_COMPLEX_FLOAT:
4328 valid_mode = targetm.scalar_mode_supported_p (GET_MODE_INNER (mode));
4329 break;
4331 case MODE_VECTOR_INT:
4332 case MODE_VECTOR_FLOAT:
4333 warning (0, "specifying vector types with __attribute__ ((mode)) "
4334 "is deprecated");
4335 warning (0, "use __attribute__ ((vector_size)) instead");
4336 valid_mode = vector_mode_valid_p (mode);
4337 break;
4339 default:
4340 break;
4342 if (!valid_mode)
4344 error ("unable to emulate %qs", p);
4345 return NULL_TREE;
4348 if (POINTER_TYPE_P (type))
4350 tree (*fn)(tree, enum machine_mode, bool);
4352 if (!targetm.valid_pointer_mode (mode))
4354 error ("invalid pointer mode %qs", p);
4355 return NULL_TREE;
4358 if (TREE_CODE (type) == POINTER_TYPE)
4359 fn = build_pointer_type_for_mode;
4360 else
4361 fn = build_reference_type_for_mode;
4362 typefm = fn (TREE_TYPE (type), mode, false);
4364 else
4365 typefm = lang_hooks.types.type_for_mode (mode, TYPE_UNSIGNED (type));
4367 if (typefm == NULL_TREE)
4369 error ("no data type for mode %qs", p);
4370 return NULL_TREE;
4372 else if (TREE_CODE (type) == ENUMERAL_TYPE)
4374 /* For enumeral types, copy the precision from the integer
4375 type returned above. If not an INTEGER_TYPE, we can't use
4376 this mode for this type. */
4377 if (TREE_CODE (typefm) != INTEGER_TYPE)
4379 error ("cannot use mode %qs for enumeral types", p);
4380 return NULL_TREE;
4383 if (!(flags & (int) ATTR_FLAG_TYPE_IN_PLACE))
4384 type = build_variant_type_copy (type);
4386 /* We cannot use layout_type here, because that will attempt
4387 to re-layout all variants, corrupting our original. */
4388 TYPE_PRECISION (type) = TYPE_PRECISION (typefm);
4389 TYPE_MIN_VALUE (type) = TYPE_MIN_VALUE (typefm);
4390 TYPE_MAX_VALUE (type) = TYPE_MAX_VALUE (typefm);
4391 TYPE_SIZE (type) = TYPE_SIZE (typefm);
4392 TYPE_SIZE_UNIT (type) = TYPE_SIZE_UNIT (typefm);
4393 TYPE_MODE (type) = TYPE_MODE (typefm);
4394 if (!TYPE_USER_ALIGN (type))
4395 TYPE_ALIGN (type) = TYPE_ALIGN (typefm);
4397 typefm = type;
4399 else if (VECTOR_MODE_P (mode)
4400 ? TREE_CODE (type) != TREE_CODE (TREE_TYPE (typefm))
4401 : TREE_CODE (type) != TREE_CODE (typefm))
4403 error ("mode %qs applied to inappropriate type", p);
4404 return NULL_TREE;
4407 *node = typefm;
4410 return NULL_TREE;
4413 /* Handle a "section" attribute; arguments as in
4414 struct attribute_spec.handler. */
4416 static tree
4417 handle_section_attribute (tree *node, tree ARG_UNUSED (name), tree args,
4418 int ARG_UNUSED (flags), bool *no_add_attrs)
4420 tree decl = *node;
4422 if (targetm.have_named_sections)
4424 user_defined_section_attribute = true;
4426 if ((TREE_CODE (decl) == FUNCTION_DECL
4427 || TREE_CODE (decl) == VAR_DECL)
4428 && TREE_CODE (TREE_VALUE (args)) == STRING_CST)
4430 if (TREE_CODE (decl) == VAR_DECL
4431 && current_function_decl != NULL_TREE
4432 && !TREE_STATIC (decl))
4434 error ("%Jsection attribute cannot be specified for "
4435 "local variables", decl);
4436 *no_add_attrs = true;
4439 /* The decl may have already been given a section attribute
4440 from a previous declaration. Ensure they match. */
4441 else if (DECL_SECTION_NAME (decl) != NULL_TREE
4442 && strcmp (TREE_STRING_POINTER (DECL_SECTION_NAME (decl)),
4443 TREE_STRING_POINTER (TREE_VALUE (args))) != 0)
4445 error ("%Jsection of %qD conflicts with previous declaration",
4446 *node, *node);
4447 *no_add_attrs = true;
4449 else
4450 DECL_SECTION_NAME (decl) = TREE_VALUE (args);
4452 else
4454 error ("%Jsection attribute not allowed for %qD", *node, *node);
4455 *no_add_attrs = true;
4458 else
4460 error ("%Jsection attributes are not supported for this target", *node);
4461 *no_add_attrs = true;
4464 return NULL_TREE;
4467 /* Handle a "aligned" attribute; arguments as in
4468 struct attribute_spec.handler. */
4470 static tree
4471 handle_aligned_attribute (tree *node, tree ARG_UNUSED (name), tree args,
4472 int flags, bool *no_add_attrs)
4474 tree decl = NULL_TREE;
4475 tree *type = NULL;
4476 int is_type = 0;
4477 tree align_expr = (args ? TREE_VALUE (args)
4478 : size_int (BIGGEST_ALIGNMENT / BITS_PER_UNIT));
4479 int i;
4481 if (DECL_P (*node))
4483 decl = *node;
4484 type = &TREE_TYPE (decl);
4485 is_type = TREE_CODE (*node) == TYPE_DECL;
4487 else if (TYPE_P (*node))
4488 type = node, is_type = 1;
4490 if (TREE_CODE (align_expr) != INTEGER_CST)
4492 error ("requested alignment is not a constant");
4493 *no_add_attrs = true;
4495 else if ((i = tree_log2 (align_expr)) == -1)
4497 error ("requested alignment is not a power of 2");
4498 *no_add_attrs = true;
4500 else if (i > HOST_BITS_PER_INT - 2)
4502 error ("requested alignment is too large");
4503 *no_add_attrs = true;
4505 else if (is_type)
4507 /* If we have a TYPE_DECL, then copy the type, so that we
4508 don't accidentally modify a builtin type. See pushdecl. */
4509 if (decl && TREE_TYPE (decl) != error_mark_node
4510 && DECL_ORIGINAL_TYPE (decl) == NULL_TREE)
4512 tree tt = TREE_TYPE (decl);
4513 *type = build_variant_type_copy (*type);
4514 DECL_ORIGINAL_TYPE (decl) = tt;
4515 TYPE_NAME (*type) = decl;
4516 TREE_USED (*type) = TREE_USED (decl);
4517 TREE_TYPE (decl) = *type;
4519 else if (!(flags & (int) ATTR_FLAG_TYPE_IN_PLACE))
4520 *type = build_variant_type_copy (*type);
4522 TYPE_ALIGN (*type) = (1 << i) * BITS_PER_UNIT;
4523 TYPE_USER_ALIGN (*type) = 1;
4525 else if (TREE_CODE (decl) != VAR_DECL
4526 && TREE_CODE (decl) != FIELD_DECL)
4528 error ("%Jalignment may not be specified for %qD", decl, decl);
4529 *no_add_attrs = true;
4531 else
4533 DECL_ALIGN (decl) = (1 << i) * BITS_PER_UNIT;
4534 DECL_USER_ALIGN (decl) = 1;
4537 return NULL_TREE;
4540 /* Handle a "weak" attribute; arguments as in
4541 struct attribute_spec.handler. */
4543 static tree
4544 handle_weak_attribute (tree *node, tree ARG_UNUSED (name),
4545 tree ARG_UNUSED (args),
4546 int ARG_UNUSED (flags),
4547 bool * ARG_UNUSED (no_add_attrs))
4549 declare_weak (*node);
4551 return NULL_TREE;
4554 /* Handle an "alias" attribute; arguments as in
4555 struct attribute_spec.handler. */
4557 static tree
4558 handle_alias_attribute (tree *node, tree name, tree args,
4559 int ARG_UNUSED (flags), bool *no_add_attrs)
4561 tree decl = *node;
4563 if ((TREE_CODE (decl) == FUNCTION_DECL && DECL_INITIAL (decl))
4564 || (TREE_CODE (decl) != FUNCTION_DECL && !DECL_EXTERNAL (decl)))
4566 error ("%J%qD defined both normally and as an alias", decl, decl);
4567 *no_add_attrs = true;
4570 /* Note that the very first time we process a nested declaration,
4571 decl_function_context will not be set. Indeed, *would* never
4572 be set except for the DECL_INITIAL/DECL_EXTERNAL frobbery that
4573 we do below. After such frobbery, pushdecl would set the context.
4574 In any case, this is never what we want. */
4575 else if (decl_function_context (decl) == 0 && current_function_decl == NULL)
4577 tree id;
4579 id = TREE_VALUE (args);
4580 if (TREE_CODE (id) != STRING_CST)
4582 error ("alias argument not a string");
4583 *no_add_attrs = true;
4584 return NULL_TREE;
4586 id = get_identifier (TREE_STRING_POINTER (id));
4587 /* This counts as a use of the object pointed to. */
4588 TREE_USED (id) = 1;
4590 if (TREE_CODE (decl) == FUNCTION_DECL)
4591 DECL_INITIAL (decl) = error_mark_node;
4592 else
4594 DECL_EXTERNAL (decl) = 0;
4595 TREE_STATIC (decl) = 1;
4598 else
4600 warning (0, "%qE attribute ignored", name);
4601 *no_add_attrs = true;
4604 return NULL_TREE;
4607 /* Handle an "visibility" attribute; arguments as in
4608 struct attribute_spec.handler. */
4610 static tree
4611 handle_visibility_attribute (tree *node, tree name, tree args,
4612 int ARG_UNUSED (flags),
4613 bool *no_add_attrs)
4615 tree decl = *node;
4616 tree id = TREE_VALUE (args);
4618 *no_add_attrs = true;
4620 if (TYPE_P (*node))
4622 if (TREE_CODE (*node) != RECORD_TYPE && TREE_CODE (*node) != UNION_TYPE)
4624 warning (0, "%qE attribute ignored on non-class types", name);
4625 return NULL_TREE;
4628 else if (decl_function_context (decl) != 0 || !TREE_PUBLIC (decl))
4630 warning (0, "%qE attribute ignored", name);
4631 return NULL_TREE;
4634 if (TREE_CODE (id) != STRING_CST)
4636 error ("visibility argument not a string");
4637 return NULL_TREE;
4640 /* If this is a type, set the visibility on the type decl. */
4641 if (TYPE_P (decl))
4643 decl = TYPE_NAME (decl);
4644 if (!decl)
4645 return NULL_TREE;
4646 if (TREE_CODE (decl) == IDENTIFIER_NODE)
4648 warning (0, "%qE attribute ignored on types",
4649 name);
4650 return NULL_TREE;
4654 if (strcmp (TREE_STRING_POINTER (id), "default") == 0)
4655 DECL_VISIBILITY (decl) = VISIBILITY_DEFAULT;
4656 else if (strcmp (TREE_STRING_POINTER (id), "internal") == 0)
4657 DECL_VISIBILITY (decl) = VISIBILITY_INTERNAL;
4658 else if (strcmp (TREE_STRING_POINTER (id), "hidden") == 0)
4659 DECL_VISIBILITY (decl) = VISIBILITY_HIDDEN;
4660 else if (strcmp (TREE_STRING_POINTER (id), "protected") == 0)
4661 DECL_VISIBILITY (decl) = VISIBILITY_PROTECTED;
4662 else
4663 error ("visibility argument must be one of \"default\", \"hidden\", \"protected\" or \"internal\"");
4664 DECL_VISIBILITY_SPECIFIED (decl) = 1;
4666 /* For decls only, go ahead and attach the attribute to the node as well.
4667 This is needed so we can determine whether we have VISIBILITY_DEFAULT
4668 because the visibility was not specified, or because it was explicitly
4669 overridden from the class visibility. */
4670 if (DECL_P (*node))
4671 *no_add_attrs = false;
4673 return NULL_TREE;
4676 /* Determine the ELF symbol visibility for DECL, which is either a
4677 variable or a function. It is an error to use this function if a
4678 definition of DECL is not available in this translation unit.
4679 Returns true if the final visibility has been determined by this
4680 function; false if the caller is free to make additional
4681 modifications. */
4683 bool
4684 c_determine_visibility (tree decl)
4686 gcc_assert (TREE_CODE (decl) == VAR_DECL
4687 || TREE_CODE (decl) == FUNCTION_DECL);
4689 /* If the user explicitly specified the visibility with an
4690 attribute, honor that. DECL_VISIBILITY will have been set during
4691 the processing of the attribute. We check for an explicit
4692 attribute, rather than just checking DECL_VISIBILITY_SPECIFIED,
4693 to distinguish the use of an attribute from the use of a "#pragma
4694 GCC visibility push(...)"; in the latter case we still want other
4695 considerations to be able to overrule the #pragma. */
4696 if (lookup_attribute ("visibility", DECL_ATTRIBUTES (decl)))
4697 return true;
4699 /* Anything that is exported must have default visibility. */
4700 if (TARGET_DLLIMPORT_DECL_ATTRIBUTES
4701 && lookup_attribute ("dllexport", DECL_ATTRIBUTES (decl)))
4703 DECL_VISIBILITY (decl) = VISIBILITY_DEFAULT;
4704 DECL_VISIBILITY_SPECIFIED (decl) = 1;
4705 return true;
4708 return false;
4711 /* Handle an "tls_model" attribute; arguments as in
4712 struct attribute_spec.handler. */
4714 static tree
4715 handle_tls_model_attribute (tree *node, tree name, tree args,
4716 int ARG_UNUSED (flags), bool *no_add_attrs)
4718 tree decl = *node;
4720 if (!DECL_THREAD_LOCAL (decl))
4722 warning (0, "%qE attribute ignored", name);
4723 *no_add_attrs = true;
4725 else
4727 tree id;
4729 id = TREE_VALUE (args);
4730 if (TREE_CODE (id) != STRING_CST)
4732 error ("tls_model argument not a string");
4733 *no_add_attrs = true;
4734 return NULL_TREE;
4736 if (strcmp (TREE_STRING_POINTER (id), "local-exec")
4737 && strcmp (TREE_STRING_POINTER (id), "initial-exec")
4738 && strcmp (TREE_STRING_POINTER (id), "local-dynamic")
4739 && strcmp (TREE_STRING_POINTER (id), "global-dynamic"))
4741 error ("tls_model argument must be one of \"local-exec\", \"initial-exec\", \"local-dynamic\" or \"global-dynamic\"");
4742 *no_add_attrs = true;
4743 return NULL_TREE;
4747 return NULL_TREE;
4750 /* Handle a "no_instrument_function" attribute; arguments as in
4751 struct attribute_spec.handler. */
4753 static tree
4754 handle_no_instrument_function_attribute (tree *node, tree name,
4755 tree ARG_UNUSED (args),
4756 int ARG_UNUSED (flags),
4757 bool *no_add_attrs)
4759 tree decl = *node;
4761 if (TREE_CODE (decl) != FUNCTION_DECL)
4763 error ("%J%qE attribute applies only to functions", decl, name);
4764 *no_add_attrs = true;
4766 else if (DECL_INITIAL (decl))
4768 error ("%Jcan%'t set %qE attribute after definition", decl, name);
4769 *no_add_attrs = true;
4771 else
4772 DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (decl) = 1;
4774 return NULL_TREE;
4777 /* Handle a "malloc" attribute; arguments as in
4778 struct attribute_spec.handler. */
4780 static tree
4781 handle_malloc_attribute (tree *node, tree name, tree ARG_UNUSED (args),
4782 int ARG_UNUSED (flags), bool *no_add_attrs)
4784 if (TREE_CODE (*node) == FUNCTION_DECL
4785 && POINTER_TYPE_P (TREE_TYPE (TREE_TYPE (*node))))
4786 DECL_IS_MALLOC (*node) = 1;
4787 else
4789 warning (0, "%qE attribute ignored", name);
4790 *no_add_attrs = true;
4793 return NULL_TREE;
4796 /* Handle a "returns_twice" attribute; arguments as in
4797 struct attribute_spec.handler. */
4799 static tree
4800 handle_returns_twice_attribute (tree *node, tree name, tree ARG_UNUSED (args),
4801 int ARG_UNUSED (flags), bool *no_add_attrs)
4803 if (TREE_CODE (*node) == FUNCTION_DECL)
4804 DECL_IS_RETURNS_TWICE (*node) = 1;
4805 else
4807 warning (0, "%qE attribute ignored", name);
4808 *no_add_attrs = true;
4811 return NULL_TREE;
4814 /* Handle a "no_limit_stack" attribute; arguments as in
4815 struct attribute_spec.handler. */
4817 static tree
4818 handle_no_limit_stack_attribute (tree *node, tree name,
4819 tree ARG_UNUSED (args),
4820 int ARG_UNUSED (flags),
4821 bool *no_add_attrs)
4823 tree decl = *node;
4825 if (TREE_CODE (decl) != FUNCTION_DECL)
4827 error ("%J%qE attribute applies only to functions", decl, name);
4828 *no_add_attrs = true;
4830 else if (DECL_INITIAL (decl))
4832 error ("%Jcan%'t set %qE attribute after definition", decl, name);
4833 *no_add_attrs = true;
4835 else
4836 DECL_NO_LIMIT_STACK (decl) = 1;
4838 return NULL_TREE;
4841 /* Handle a "pure" attribute; arguments as in
4842 struct attribute_spec.handler. */
4844 static tree
4845 handle_pure_attribute (tree *node, tree name, tree ARG_UNUSED (args),
4846 int ARG_UNUSED (flags), bool *no_add_attrs)
4848 if (TREE_CODE (*node) == FUNCTION_DECL)
4849 DECL_IS_PURE (*node) = 1;
4850 /* ??? TODO: Support types. */
4851 else
4853 warning (0, "%qE attribute ignored", name);
4854 *no_add_attrs = true;
4857 return NULL_TREE;
4860 /* Handle a "no vops" attribute; arguments as in
4861 struct attribute_spec.handler. */
4863 static tree
4864 handle_novops_attribute (tree *node, tree ARG_UNUSED (name),
4865 tree ARG_UNUSED (args), int ARG_UNUSED (flags),
4866 bool *ARG_UNUSED (no_add_attrs))
4868 gcc_assert (TREE_CODE (*node) == FUNCTION_DECL);
4869 DECL_IS_NOVOPS (*node) = 1;
4870 return NULL_TREE;
4873 /* Handle a "deprecated" attribute; arguments as in
4874 struct attribute_spec.handler. */
4876 static tree
4877 handle_deprecated_attribute (tree *node, tree name,
4878 tree ARG_UNUSED (args), int flags,
4879 bool *no_add_attrs)
4881 tree type = NULL_TREE;
4882 int warn = 0;
4883 tree what = NULL_TREE;
4885 if (DECL_P (*node))
4887 tree decl = *node;
4888 type = TREE_TYPE (decl);
4890 if (TREE_CODE (decl) == TYPE_DECL
4891 || TREE_CODE (decl) == PARM_DECL
4892 || TREE_CODE (decl) == VAR_DECL
4893 || TREE_CODE (decl) == FUNCTION_DECL
4894 || TREE_CODE (decl) == FIELD_DECL)
4895 TREE_DEPRECATED (decl) = 1;
4896 else
4897 warn = 1;
4899 else if (TYPE_P (*node))
4901 if (!(flags & (int) ATTR_FLAG_TYPE_IN_PLACE))
4902 *node = build_variant_type_copy (*node);
4903 TREE_DEPRECATED (*node) = 1;
4904 type = *node;
4906 else
4907 warn = 1;
4909 if (warn)
4911 *no_add_attrs = true;
4912 if (type && TYPE_NAME (type))
4914 if (TREE_CODE (TYPE_NAME (type)) == IDENTIFIER_NODE)
4915 what = TYPE_NAME (*node);
4916 else if (TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
4917 && DECL_NAME (TYPE_NAME (type)))
4918 what = DECL_NAME (TYPE_NAME (type));
4920 if (what)
4921 warning (0, "%qE attribute ignored for %qE", name, what);
4922 else
4923 warning (0, "%qE attribute ignored", name);
4926 return NULL_TREE;
4929 /* Handle a "vector_size" attribute; arguments as in
4930 struct attribute_spec.handler. */
4932 static tree
4933 handle_vector_size_attribute (tree *node, tree name, tree args,
4934 int ARG_UNUSED (flags),
4935 bool *no_add_attrs)
4937 unsigned HOST_WIDE_INT vecsize, nunits;
4938 enum machine_mode orig_mode;
4939 tree type = *node, new_type, size;
4941 *no_add_attrs = true;
4943 size = TREE_VALUE (args);
4945 if (!host_integerp (size, 1))
4947 warning (0, "%qE attribute ignored", name);
4948 return NULL_TREE;
4951 /* Get the vector size (in bytes). */
4952 vecsize = tree_low_cst (size, 1);
4954 /* We need to provide for vector pointers, vector arrays, and
4955 functions returning vectors. For example:
4957 __attribute__((vector_size(16))) short *foo;
4959 In this case, the mode is SI, but the type being modified is
4960 HI, so we need to look further. */
4962 while (POINTER_TYPE_P (type)
4963 || TREE_CODE (type) == FUNCTION_TYPE
4964 || TREE_CODE (type) == METHOD_TYPE
4965 || TREE_CODE (type) == ARRAY_TYPE)
4966 type = TREE_TYPE (type);
4968 /* Get the mode of the type being modified. */
4969 orig_mode = TYPE_MODE (type);
4971 if (TREE_CODE (type) == RECORD_TYPE
4972 || (GET_MODE_CLASS (orig_mode) != MODE_FLOAT
4973 && GET_MODE_CLASS (orig_mode) != MODE_INT)
4974 || !host_integerp (TYPE_SIZE_UNIT (type), 1))
4976 error ("invalid vector type for attribute %qE", name);
4977 return NULL_TREE;
4980 /* Calculate how many units fit in the vector. */
4981 nunits = vecsize / tree_low_cst (TYPE_SIZE_UNIT (type), 1);
4982 if (nunits & (nunits - 1))
4984 error ("number of components of the vector not a power of two");
4985 return NULL_TREE;
4988 new_type = build_vector_type (type, nunits);
4990 /* Build back pointers if needed. */
4991 *node = reconstruct_complex_type (*node, new_type);
4993 return NULL_TREE;
4996 /* Handle the "nonnull" attribute. */
4997 static tree
4998 handle_nonnull_attribute (tree *node, tree ARG_UNUSED (name),
4999 tree args, int ARG_UNUSED (flags),
5000 bool *no_add_attrs)
5002 tree type = *node;
5003 unsigned HOST_WIDE_INT attr_arg_num;
5005 /* If no arguments are specified, all pointer arguments should be
5006 non-null. Verify a full prototype is given so that the arguments
5007 will have the correct types when we actually check them later. */
5008 if (!args)
5010 if (!TYPE_ARG_TYPES (type))
5012 error ("nonnull attribute without arguments on a non-prototype");
5013 *no_add_attrs = true;
5015 return NULL_TREE;
5018 /* Argument list specified. Verify that each argument number references
5019 a pointer argument. */
5020 for (attr_arg_num = 1; args; args = TREE_CHAIN (args))
5022 tree argument;
5023 unsigned HOST_WIDE_INT arg_num = 0, ck_num;
5025 if (!get_nonnull_operand (TREE_VALUE (args), &arg_num))
5027 error ("nonnull argument has invalid operand number (argument %lu)",
5028 (unsigned long) attr_arg_num);
5029 *no_add_attrs = true;
5030 return NULL_TREE;
5033 argument = TYPE_ARG_TYPES (type);
5034 if (argument)
5036 for (ck_num = 1; ; ck_num++)
5038 if (!argument || ck_num == arg_num)
5039 break;
5040 argument = TREE_CHAIN (argument);
5043 if (!argument
5044 || TREE_CODE (TREE_VALUE (argument)) == VOID_TYPE)
5046 error ("nonnull argument with out-of-range operand number (argument %lu, operand %lu)",
5047 (unsigned long) attr_arg_num, (unsigned long) arg_num);
5048 *no_add_attrs = true;
5049 return NULL_TREE;
5052 if (TREE_CODE (TREE_VALUE (argument)) != POINTER_TYPE)
5054 error ("nonnull argument references non-pointer operand (argument %lu, operand %lu)",
5055 (unsigned long) attr_arg_num, (unsigned long) arg_num);
5056 *no_add_attrs = true;
5057 return NULL_TREE;
5062 return NULL_TREE;
5065 /* Check the argument list of a function call for null in argument slots
5066 that are marked as requiring a non-null pointer argument. */
5068 static void
5069 check_function_nonnull (tree attrs, tree params)
5071 tree a, args, param;
5072 int param_num;
5074 for (a = attrs; a; a = TREE_CHAIN (a))
5076 if (is_attribute_p ("nonnull", TREE_PURPOSE (a)))
5078 args = TREE_VALUE (a);
5080 /* Walk the argument list. If we encounter an argument number we
5081 should check for non-null, do it. If the attribute has no args,
5082 then every pointer argument is checked (in which case the check
5083 for pointer type is done in check_nonnull_arg). */
5084 for (param = params, param_num = 1; ;
5085 param_num++, param = TREE_CHAIN (param))
5087 if (!param)
5088 break;
5089 if (!args || nonnull_check_p (args, param_num))
5090 check_function_arguments_recurse (check_nonnull_arg, NULL,
5091 TREE_VALUE (param),
5092 param_num);
5098 /* Check that the Nth argument of a function call (counting backwards
5099 from the end) is a (pointer)0. */
5101 static void
5102 check_function_sentinel (tree attrs, tree params)
5104 tree attr = lookup_attribute ("sentinel", attrs);
5106 if (attr)
5108 if (!params)
5109 warning (0, "missing sentinel in function call");
5110 else
5112 tree sentinel, end;
5113 unsigned pos = 0;
5115 if (TREE_VALUE (attr))
5117 tree p = TREE_VALUE (TREE_VALUE (attr));
5118 pos = TREE_INT_CST_LOW (p);
5121 sentinel = end = params;
5123 /* Advance `end' ahead of `sentinel' by `pos' positions. */
5124 while (pos > 0 && TREE_CHAIN (end))
5126 pos--;
5127 end = TREE_CHAIN (end);
5129 if (pos > 0)
5131 warning (0, "not enough arguments to fit a sentinel");
5132 return;
5135 /* Now advance both until we find the last parameter. */
5136 while (TREE_CHAIN (end))
5138 end = TREE_CHAIN (end);
5139 sentinel = TREE_CHAIN (sentinel);
5142 /* Validate the sentinel. */
5143 if ((!POINTER_TYPE_P (TREE_TYPE (TREE_VALUE (sentinel)))
5144 || !integer_zerop (TREE_VALUE (sentinel)))
5145 /* Although __null (in C++) is only an integer we allow it
5146 nevertheless, as we are guaranteed that it's exactly
5147 as wide as a pointer, and we don't want to force
5148 users to cast the NULL they have written there.
5149 We warn with -Wstrict-null-sentinel, though. */
5150 && (warn_strict_null_sentinel
5151 || null_node != TREE_VALUE (sentinel)))
5152 warning (0, "missing sentinel in function call");
5157 /* Helper for check_function_nonnull; given a list of operands which
5158 must be non-null in ARGS, determine if operand PARAM_NUM should be
5159 checked. */
5161 static bool
5162 nonnull_check_p (tree args, unsigned HOST_WIDE_INT param_num)
5164 unsigned HOST_WIDE_INT arg_num = 0;
5166 for (; args; args = TREE_CHAIN (args))
5168 bool found = get_nonnull_operand (TREE_VALUE (args), &arg_num);
5170 gcc_assert (found);
5172 if (arg_num == param_num)
5173 return true;
5175 return false;
5178 /* Check that the function argument PARAM (which is operand number
5179 PARAM_NUM) is non-null. This is called by check_function_nonnull
5180 via check_function_arguments_recurse. */
5182 static void
5183 check_nonnull_arg (void * ARG_UNUSED (ctx), tree param,
5184 unsigned HOST_WIDE_INT param_num)
5186 /* Just skip checking the argument if it's not a pointer. This can
5187 happen if the "nonnull" attribute was given without an operand
5188 list (which means to check every pointer argument). */
5190 if (TREE_CODE (TREE_TYPE (param)) != POINTER_TYPE)
5191 return;
5193 if (integer_zerop (param))
5194 warning (0, "null argument where non-null required (argument %lu)",
5195 (unsigned long) param_num);
5198 /* Helper for nonnull attribute handling; fetch the operand number
5199 from the attribute argument list. */
5201 static bool
5202 get_nonnull_operand (tree arg_num_expr, unsigned HOST_WIDE_INT *valp)
5204 /* Verify the arg number is a constant. */
5205 if (TREE_CODE (arg_num_expr) != INTEGER_CST
5206 || TREE_INT_CST_HIGH (arg_num_expr) != 0)
5207 return false;
5209 *valp = TREE_INT_CST_LOW (arg_num_expr);
5210 return true;
5213 /* Handle a "nothrow" attribute; arguments as in
5214 struct attribute_spec.handler. */
5216 static tree
5217 handle_nothrow_attribute (tree *node, tree name, tree ARG_UNUSED (args),
5218 int ARG_UNUSED (flags), bool *no_add_attrs)
5220 if (TREE_CODE (*node) == FUNCTION_DECL)
5221 TREE_NOTHROW (*node) = 1;
5222 /* ??? TODO: Support types. */
5223 else
5225 warning (0, "%qE attribute ignored", name);
5226 *no_add_attrs = true;
5229 return NULL_TREE;
5232 /* Handle a "cleanup" attribute; arguments as in
5233 struct attribute_spec.handler. */
5235 static tree
5236 handle_cleanup_attribute (tree *node, tree name, tree args,
5237 int ARG_UNUSED (flags), bool *no_add_attrs)
5239 tree decl = *node;
5240 tree cleanup_id, cleanup_decl;
5242 /* ??? Could perhaps support cleanups on TREE_STATIC, much like we do
5243 for global destructors in C++. This requires infrastructure that
5244 we don't have generically at the moment. It's also not a feature
5245 we'd be missing too much, since we do have attribute constructor. */
5246 if (TREE_CODE (decl) != VAR_DECL || TREE_STATIC (decl))
5248 warning (0, "%qE attribute ignored", name);
5249 *no_add_attrs = true;
5250 return NULL_TREE;
5253 /* Verify that the argument is a function in scope. */
5254 /* ??? We could support pointers to functions here as well, if
5255 that was considered desirable. */
5256 cleanup_id = TREE_VALUE (args);
5257 if (TREE_CODE (cleanup_id) != IDENTIFIER_NODE)
5259 error ("cleanup argument not an identifier");
5260 *no_add_attrs = true;
5261 return NULL_TREE;
5263 cleanup_decl = lookup_name (cleanup_id);
5264 if (!cleanup_decl || TREE_CODE (cleanup_decl) != FUNCTION_DECL)
5266 error ("cleanup argument not a function");
5267 *no_add_attrs = true;
5268 return NULL_TREE;
5271 /* That the function has proper type is checked with the
5272 eventual call to build_function_call. */
5274 return NULL_TREE;
5277 /* Handle a "warn_unused_result" attribute. No special handling. */
5279 static tree
5280 handle_warn_unused_result_attribute (tree *node, tree name,
5281 tree ARG_UNUSED (args),
5282 int ARG_UNUSED (flags), bool *no_add_attrs)
5284 /* Ignore the attribute for functions not returning any value. */
5285 if (VOID_TYPE_P (TREE_TYPE (*node)))
5287 warning (0, "%qE attribute ignored", name);
5288 *no_add_attrs = true;
5291 return NULL_TREE;
5294 /* Handle a "sentinel" attribute. */
5296 static tree
5297 handle_sentinel_attribute (tree *node, tree name, tree args,
5298 int ARG_UNUSED (flags), bool *no_add_attrs)
5300 tree params = TYPE_ARG_TYPES (*node);
5302 if (!params)
5304 warning (0, "%qE attribute requires prototypes with named arguments", name);
5305 *no_add_attrs = true;
5307 else
5309 while (TREE_CHAIN (params))
5310 params = TREE_CHAIN (params);
5312 if (VOID_TYPE_P (TREE_VALUE (params)))
5314 warning (0, "%qE attribute only applies to variadic functions", name);
5315 *no_add_attrs = true;
5319 if (args)
5321 tree position = TREE_VALUE (args);
5323 if (TREE_CODE (position) != INTEGER_CST)
5325 warning (0, "requested position is not an integer constant");
5326 *no_add_attrs = true;
5328 else
5330 if (tree_int_cst_lt (position, integer_zero_node))
5332 warning (0, "requested position is less than zero");
5333 *no_add_attrs = true;
5338 return NULL_TREE;
5341 /* Check for valid arguments being passed to a function. */
5342 void
5343 check_function_arguments (tree attrs, tree params)
5345 /* Check for null being passed in a pointer argument that must be
5346 non-null. We also need to do this if format checking is enabled. */
5348 if (warn_nonnull)
5349 check_function_nonnull (attrs, params);
5351 /* Check for errors in format strings. */
5353 if (warn_format)
5355 check_function_format (attrs, params);
5356 check_function_sentinel (attrs, params);
5360 /* Generic argument checking recursion routine. PARAM is the argument to
5361 be checked. PARAM_NUM is the number of the argument. CALLBACK is invoked
5362 once the argument is resolved. CTX is context for the callback. */
5363 void
5364 check_function_arguments_recurse (void (*callback)
5365 (void *, tree, unsigned HOST_WIDE_INT),
5366 void *ctx, tree param,
5367 unsigned HOST_WIDE_INT param_num)
5369 if (TREE_CODE (param) == NOP_EXPR)
5371 /* Strip coercion. */
5372 check_function_arguments_recurse (callback, ctx,
5373 TREE_OPERAND (param, 0), param_num);
5374 return;
5377 if (TREE_CODE (param) == CALL_EXPR)
5379 tree type = TREE_TYPE (TREE_TYPE (TREE_OPERAND (param, 0)));
5380 tree attrs;
5381 bool found_format_arg = false;
5383 /* See if this is a call to a known internationalization function
5384 that modifies a format arg. Such a function may have multiple
5385 format_arg attributes (for example, ngettext). */
5387 for (attrs = TYPE_ATTRIBUTES (type);
5388 attrs;
5389 attrs = TREE_CHAIN (attrs))
5390 if (is_attribute_p ("format_arg", TREE_PURPOSE (attrs)))
5392 tree inner_args;
5393 tree format_num_expr;
5394 int format_num;
5395 int i;
5397 /* Extract the argument number, which was previously checked
5398 to be valid. */
5399 format_num_expr = TREE_VALUE (TREE_VALUE (attrs));
5401 gcc_assert (TREE_CODE (format_num_expr) == INTEGER_CST
5402 && !TREE_INT_CST_HIGH (format_num_expr));
5404 format_num = TREE_INT_CST_LOW (format_num_expr);
5406 for (inner_args = TREE_OPERAND (param, 1), i = 1;
5407 inner_args != 0;
5408 inner_args = TREE_CHAIN (inner_args), i++)
5409 if (i == format_num)
5411 check_function_arguments_recurse (callback, ctx,
5412 TREE_VALUE (inner_args),
5413 param_num);
5414 found_format_arg = true;
5415 break;
5419 /* If we found a format_arg attribute and did a recursive check,
5420 we are done with checking this argument. Otherwise, we continue
5421 and this will be considered a non-literal. */
5422 if (found_format_arg)
5423 return;
5426 if (TREE_CODE (param) == COND_EXPR)
5428 /* Check both halves of the conditional expression. */
5429 check_function_arguments_recurse (callback, ctx,
5430 TREE_OPERAND (param, 1), param_num);
5431 check_function_arguments_recurse (callback, ctx,
5432 TREE_OPERAND (param, 2), param_num);
5433 return;
5436 (*callback) (ctx, param, param_num);
5439 /* Function to help qsort sort FIELD_DECLs by name order. */
5442 field_decl_cmp (const void *x_p, const void *y_p)
5444 const tree *const x = (const tree *const) x_p;
5445 const tree *const y = (const tree *const) y_p;
5447 if (DECL_NAME (*x) == DECL_NAME (*y))
5448 /* A nontype is "greater" than a type. */
5449 return (TREE_CODE (*y) == TYPE_DECL) - (TREE_CODE (*x) == TYPE_DECL);
5450 if (DECL_NAME (*x) == NULL_TREE)
5451 return -1;
5452 if (DECL_NAME (*y) == NULL_TREE)
5453 return 1;
5454 if (DECL_NAME (*x) < DECL_NAME (*y))
5455 return -1;
5456 return 1;
5459 static struct {
5460 gt_pointer_operator new_value;
5461 void *cookie;
5462 } resort_data;
5464 /* This routine compares two fields like field_decl_cmp but using the
5465 pointer operator in resort_data. */
5467 static int
5468 resort_field_decl_cmp (const void *x_p, const void *y_p)
5470 const tree *const x = (const tree *const) x_p;
5471 const tree *const y = (const tree *const) y_p;
5473 if (DECL_NAME (*x) == DECL_NAME (*y))
5474 /* A nontype is "greater" than a type. */
5475 return (TREE_CODE (*y) == TYPE_DECL) - (TREE_CODE (*x) == TYPE_DECL);
5476 if (DECL_NAME (*x) == NULL_TREE)
5477 return -1;
5478 if (DECL_NAME (*y) == NULL_TREE)
5479 return 1;
5481 tree d1 = DECL_NAME (*x);
5482 tree d2 = DECL_NAME (*y);
5483 resort_data.new_value (&d1, resort_data.cookie);
5484 resort_data.new_value (&d2, resort_data.cookie);
5485 if (d1 < d2)
5486 return -1;
5488 return 1;
5491 /* Resort DECL_SORTED_FIELDS because pointers have been reordered. */
5493 void
5494 resort_sorted_fields (void *obj,
5495 void * ARG_UNUSED (orig_obj),
5496 gt_pointer_operator new_value,
5497 void *cookie)
5499 struct sorted_fields_type *sf = (struct sorted_fields_type *) obj;
5500 resort_data.new_value = new_value;
5501 resort_data.cookie = cookie;
5502 qsort (&sf->elts[0], sf->len, sizeof (tree),
5503 resort_field_decl_cmp);
5506 /* Subroutine of c_parse_error.
5507 Return the result of concatenating LHS and RHS. RHS is really
5508 a string literal, its first character is indicated by RHS_START and
5509 RHS_SIZE is its length (including the terminating NUL character).
5511 The caller is responsible for deleting the returned pointer. */
5513 static char *
5514 catenate_strings (const char *lhs, const char *rhs_start, int rhs_size)
5516 const int lhs_size = strlen (lhs);
5517 char *result = XNEWVEC (char, lhs_size + rhs_size);
5518 strncpy (result, lhs, lhs_size);
5519 strncpy (result + lhs_size, rhs_start, rhs_size);
5520 return result;
5523 /* Issue the error given by MSGID, indicating that it occurred before
5524 TOKEN, which had the associated VALUE. */
5526 void
5527 c_parse_error (const char *msgid, enum cpp_ttype token, tree value)
5529 #define catenate_messages(M1, M2) catenate_strings ((M1), (M2), sizeof (M2))
5531 char *message = NULL;
5533 if (token == CPP_EOF)
5534 message = catenate_messages (msgid, " at end of input");
5535 else if (token == CPP_CHAR || token == CPP_WCHAR)
5537 unsigned int val = TREE_INT_CST_LOW (value);
5538 const char *const ell = (token == CPP_CHAR) ? "" : "L";
5539 if (val <= UCHAR_MAX && ISGRAPH (val))
5540 message = catenate_messages (msgid, " before %s'%c'");
5541 else
5542 message = catenate_messages (msgid, " before %s'\\x%x'");
5544 error (message, ell, val);
5545 free (message);
5546 message = NULL;
5548 else if (token == CPP_STRING || token == CPP_WSTRING)
5549 message = catenate_messages (msgid, " before string constant");
5550 else if (token == CPP_NUMBER)
5551 message = catenate_messages (msgid, " before numeric constant");
5552 else if (token == CPP_NAME)
5554 message = catenate_messages (msgid, " before %qE");
5555 error (message, value);
5556 free (message);
5557 message = NULL;
5559 else if (token < N_TTYPES)
5561 message = catenate_messages (msgid, " before %qs token");
5562 error (message, cpp_type2name (token));
5563 free (message);
5564 message = NULL;
5566 else
5567 error (msgid);
5569 if (message)
5571 error (message);
5572 free (message);
5574 #undef catenate_messages
5577 /* Walk a gimplified function and warn for functions whose return value is
5578 ignored and attribute((warn_unused_result)) is set. This is done before
5579 inlining, so we don't have to worry about that. */
5581 void
5582 c_warn_unused_result (tree *top_p)
5584 tree t = *top_p;
5585 tree_stmt_iterator i;
5586 tree fdecl, ftype;
5588 switch (TREE_CODE (t))
5590 case STATEMENT_LIST:
5591 for (i = tsi_start (*top_p); !tsi_end_p (i); tsi_next (&i))
5592 c_warn_unused_result (tsi_stmt_ptr (i));
5593 break;
5595 case COND_EXPR:
5596 c_warn_unused_result (&COND_EXPR_THEN (t));
5597 c_warn_unused_result (&COND_EXPR_ELSE (t));
5598 break;
5599 case BIND_EXPR:
5600 c_warn_unused_result (&BIND_EXPR_BODY (t));
5601 break;
5602 case TRY_FINALLY_EXPR:
5603 case TRY_CATCH_EXPR:
5604 c_warn_unused_result (&TREE_OPERAND (t, 0));
5605 c_warn_unused_result (&TREE_OPERAND (t, 1));
5606 break;
5607 case CATCH_EXPR:
5608 c_warn_unused_result (&CATCH_BODY (t));
5609 break;
5610 case EH_FILTER_EXPR:
5611 c_warn_unused_result (&EH_FILTER_FAILURE (t));
5612 break;
5614 case CALL_EXPR:
5615 if (TREE_USED (t))
5616 break;
5618 /* This is a naked call, as opposed to a CALL_EXPR nested inside
5619 a MODIFY_EXPR. All calls whose value is ignored should be
5620 represented like this. Look for the attribute. */
5621 fdecl = get_callee_fndecl (t);
5622 if (fdecl)
5623 ftype = TREE_TYPE (fdecl);
5624 else
5626 ftype = TREE_TYPE (TREE_OPERAND (t, 0));
5627 /* Look past pointer-to-function to the function type itself. */
5628 ftype = TREE_TYPE (ftype);
5631 if (lookup_attribute ("warn_unused_result", TYPE_ATTRIBUTES (ftype)))
5633 if (fdecl)
5634 warning (0, "%Hignoring return value of %qD, "
5635 "declared with attribute warn_unused_result",
5636 EXPR_LOCUS (t), fdecl);
5637 else
5638 warning (0, "%Hignoring return value of function "
5639 "declared with attribute warn_unused_result",
5640 EXPR_LOCUS (t));
5642 break;
5644 default:
5645 /* Not a container, not a call, or a call whose value is used. */
5646 break;
5650 /* Convert a character from the host to the target execution character
5651 set. cpplib handles this, mostly. */
5653 HOST_WIDE_INT
5654 c_common_to_target_charset (HOST_WIDE_INT c)
5656 /* Character constants in GCC proper are sign-extended under -fsigned-char,
5657 zero-extended under -fno-signed-char. cpplib insists that characters
5658 and character constants are always unsigned. Hence we must convert
5659 back and forth. */
5660 cppchar_t uc = ((cppchar_t)c) & ((((cppchar_t)1) << CHAR_BIT)-1);
5662 uc = cpp_host_to_exec_charset (parse_in, uc);
5664 if (flag_signed_char)
5665 return ((HOST_WIDE_INT)uc) << (HOST_BITS_PER_WIDE_INT - CHAR_TYPE_SIZE)
5666 >> (HOST_BITS_PER_WIDE_INT - CHAR_TYPE_SIZE);
5667 else
5668 return uc;
5671 /* Build the result of __builtin_offsetof. EXPR is a nested sequence of
5672 component references, with an INDIRECT_REF at the bottom; much like
5673 the traditional rendering of offsetof as a macro. Returns the folded
5674 and properly cast result. */
5676 static tree
5677 fold_offsetof_1 (tree expr)
5679 enum tree_code code = PLUS_EXPR;
5680 tree base, off, t;
5682 switch (TREE_CODE (expr))
5684 case ERROR_MARK:
5685 return expr;
5687 case INDIRECT_REF:
5688 return size_zero_node;
5690 case COMPONENT_REF:
5691 base = fold_offsetof_1 (TREE_OPERAND (expr, 0));
5692 if (base == error_mark_node)
5693 return base;
5695 t = TREE_OPERAND (expr, 1);
5696 if (DECL_C_BIT_FIELD (t))
5698 error ("attempt to take address of bit-field structure "
5699 "member %qD", t);
5700 return error_mark_node;
5702 off = size_binop (PLUS_EXPR, DECL_FIELD_OFFSET (t),
5703 size_int (tree_low_cst (DECL_FIELD_BIT_OFFSET (t), 1)
5704 / BITS_PER_UNIT));
5705 break;
5707 case ARRAY_REF:
5708 base = fold_offsetof_1 (TREE_OPERAND (expr, 0));
5709 if (base == error_mark_node)
5710 return base;
5712 t = TREE_OPERAND (expr, 1);
5713 if (TREE_CODE (t) == INTEGER_CST && tree_int_cst_sgn (t) < 0)
5715 code = MINUS_EXPR;
5716 t = fold (build1 (NEGATE_EXPR, TREE_TYPE (t), t));
5718 t = convert (sizetype, t);
5719 off = size_binop (MULT_EXPR, TYPE_SIZE_UNIT (TREE_TYPE (expr)), t);
5720 break;
5722 default:
5723 gcc_unreachable ();
5726 return size_binop (code, base, off);
5729 tree
5730 fold_offsetof (tree expr)
5732 /* Convert back from the internal sizetype to size_t. */
5733 return convert (size_type_node, fold_offsetof_1 (expr));
5736 /* Print an error message for an invalid lvalue. USE says
5737 how the lvalue is being used and so selects the error message. */
5739 void
5740 lvalue_error (enum lvalue_use use)
5742 switch (use)
5744 case lv_assign:
5745 error ("invalid lvalue in assignment");
5746 break;
5747 case lv_increment:
5748 error ("invalid lvalue in increment");
5749 break;
5750 case lv_decrement:
5751 error ("invalid lvalue in decrement");
5752 break;
5753 case lv_addressof:
5754 error ("invalid lvalue in unary %<&%>");
5755 break;
5756 case lv_asm:
5757 error ("invalid lvalue in asm statement");
5758 break;
5759 default:
5760 gcc_unreachable ();
5764 /* *PTYPE is an incomplete array. Complete it with a domain based on
5765 INITIAL_VALUE. If INITIAL_VALUE is not present, use 1 if DO_DEFAULT
5766 is true. Return 0 if successful, 1 if INITIAL_VALUE can't be deciphered,
5767 2 if INITIAL_VALUE was NULL, and 3 if INITIAL_VALUE was empty. */
5770 complete_array_type (tree *ptype, tree initial_value, bool do_default)
5772 tree maxindex, type, main_type, elt, unqual_elt;
5773 int failure = 0, quals;
5775 maxindex = size_zero_node;
5776 if (initial_value)
5778 if (TREE_CODE (initial_value) == STRING_CST)
5780 int eltsize
5781 = int_size_in_bytes (TREE_TYPE (TREE_TYPE (initial_value)));
5782 maxindex = size_int (TREE_STRING_LENGTH (initial_value)/eltsize - 1);
5784 else if (TREE_CODE (initial_value) == CONSTRUCTOR)
5786 tree elts = CONSTRUCTOR_ELTS (initial_value);
5788 if (elts == NULL)
5790 if (pedantic)
5791 failure = 3;
5792 maxindex = integer_minus_one_node;
5794 else
5796 tree curindex;
5798 if (TREE_PURPOSE (elts))
5799 maxindex = fold_convert (sizetype, TREE_PURPOSE (elts));
5800 curindex = maxindex;
5802 for (elts = TREE_CHAIN (elts); elts; elts = TREE_CHAIN (elts))
5804 if (TREE_PURPOSE (elts))
5805 curindex = fold_convert (sizetype, TREE_PURPOSE (elts));
5806 else
5807 curindex = size_binop (PLUS_EXPR, curindex, size_one_node);
5809 if (tree_int_cst_lt (maxindex, curindex))
5810 maxindex = curindex;
5814 else
5816 /* Make an error message unless that happened already. */
5817 if (initial_value != error_mark_node)
5818 failure = 1;
5821 else
5823 failure = 2;
5824 if (!do_default)
5825 return failure;
5828 type = *ptype;
5829 elt = TREE_TYPE (type);
5830 quals = TYPE_QUALS (strip_array_types (elt));
5831 if (quals == 0)
5832 unqual_elt = elt;
5833 else
5834 unqual_elt = c_build_qualified_type (elt, TYPE_UNQUALIFIED);
5836 /* Using build_distinct_type_copy and modifying things afterward instead
5837 of using build_array_type to create a new type preserves all of the
5838 TYPE_LANG_FLAG_? bits that the front end may have set. */
5839 main_type = build_distinct_type_copy (TYPE_MAIN_VARIANT (type));
5840 TREE_TYPE (main_type) = unqual_elt;
5841 TYPE_DOMAIN (main_type) = build_index_type (maxindex);
5842 layout_type (main_type);
5844 if (quals == 0)
5845 type = main_type;
5846 else
5847 type = c_build_qualified_type (main_type, quals);
5849 *ptype = type;
5850 return failure;
5854 /* Used to help initialize the builtin-types.def table. When a type of
5855 the correct size doesn't exist, use error_mark_node instead of NULL.
5856 The later results in segfaults even when a decl using the type doesn't
5857 get invoked. */
5859 tree
5860 builtin_type_for_size (int size, bool unsignedp)
5862 tree type = lang_hooks.types.type_for_size (size, unsignedp);
5863 return type ? type : error_mark_node;
5866 /* A helper function for resolve_overloaded_builtin in resolving the
5867 overloaded __sync_ builtins. Returns a positive power of 2 if the
5868 first operand of PARAMS is a pointer to a supported data type.
5869 Returns 0 if an error is encountered. */
5871 static int
5872 sync_resolve_size (tree function, tree params)
5874 tree type;
5875 int size;
5877 if (params == NULL)
5879 error ("too few arguments to function %qE", function);
5880 return 0;
5883 type = TREE_TYPE (TREE_VALUE (params));
5884 if (TREE_CODE (type) != POINTER_TYPE)
5885 goto incompatible;
5887 type = TREE_TYPE (type);
5888 if (!INTEGRAL_TYPE_P (type) && !POINTER_TYPE_P (type))
5889 goto incompatible;
5891 size = tree_low_cst (TYPE_SIZE_UNIT (type), 1);
5892 if (size == 1 || size == 2 || size == 4 || size == 8)
5893 return size;
5895 incompatible:
5896 error ("incompatible type for argument %d of %qE", 1, function);
5897 return 0;
5900 /* A helper function for resolve_overloaded_builtin. Adds casts to
5901 PARAMS to make arguments match up with those of FUNCTION. Drops
5902 the variadic arguments at the end. Returns false if some error
5903 was encountered; true on success. */
5905 static bool
5906 sync_resolve_params (tree orig_function, tree function, tree params)
5908 tree arg_types = TYPE_ARG_TYPES (TREE_TYPE (function));
5909 tree ptype;
5910 int number;
5912 /* We've declared the implementation functions to use "volatile void *"
5913 as the pointer parameter, so we shouldn't get any complaints from the
5914 call to check_function_arguments what ever type the user used. */
5915 arg_types = TREE_CHAIN (arg_types);
5916 ptype = TREE_TYPE (TREE_TYPE (TREE_VALUE (params)));
5917 number = 2;
5919 /* For the rest of the values, we need to cast these to FTYPE, so that we
5920 don't get warnings for passing pointer types, etc. */
5921 while (arg_types != void_list_node)
5923 tree val;
5925 params = TREE_CHAIN (params);
5926 if (params == NULL)
5928 error ("too few arguments to function %qE", orig_function);
5929 return false;
5932 /* ??? Ideally for the first conversion we'd use convert_for_assignment
5933 so that we get warnings for anything that doesn't match the pointer
5934 type. This isn't portable across the C and C++ front ends atm. */
5935 val = TREE_VALUE (params);
5936 val = convert (ptype, val);
5937 val = convert (TREE_VALUE (arg_types), val);
5938 TREE_VALUE (params) = val;
5940 arg_types = TREE_CHAIN (arg_types);
5941 number++;
5944 /* The definition of these primitives is variadic, with the remaining
5945 being "an optional list of variables protected by the memory barrier".
5946 No clue what that's supposed to mean, precisely, but we consider all
5947 call-clobbered variables to be protected so we're safe. */
5948 TREE_CHAIN (params) = NULL;
5950 return true;
5953 /* A helper function for resolve_overloaded_builtin. Adds a cast to
5954 RESULT to make it match the type of the first pointer argument in
5955 PARAMS. */
5957 static tree
5958 sync_resolve_return (tree params, tree result)
5960 tree ptype = TREE_TYPE (TREE_TYPE (TREE_VALUE (params)));
5961 return convert (ptype, result);
5964 /* Some builtin functions are placeholders for other expressions. This
5965 function should be called immediately after parsing the call expression
5966 before surrounding code has committed to the type of the expression.
5968 FUNCTION is the DECL that has been invoked; it is known to be a builtin.
5969 PARAMS is the argument list for the call. The return value is non-null
5970 when expansion is complete, and null if normal processing should
5971 continue. */
5973 tree
5974 resolve_overloaded_builtin (tree function, tree params)
5976 enum built_in_function orig_code = DECL_FUNCTION_CODE (function);
5977 switch (DECL_BUILT_IN_CLASS (function))
5979 case BUILT_IN_NORMAL:
5980 break;
5981 case BUILT_IN_MD:
5982 if (targetm.resolve_overloaded_builtin)
5983 return targetm.resolve_overloaded_builtin (function, params);
5984 else
5985 return NULL_TREE;
5986 default:
5987 return NULL_TREE;
5990 /* Handle BUILT_IN_NORMAL here. */
5991 switch (orig_code)
5993 case BUILT_IN_FETCH_AND_ADD_N:
5994 case BUILT_IN_FETCH_AND_SUB_N:
5995 case BUILT_IN_FETCH_AND_OR_N:
5996 case BUILT_IN_FETCH_AND_AND_N:
5997 case BUILT_IN_FETCH_AND_XOR_N:
5998 case BUILT_IN_FETCH_AND_NAND_N:
5999 case BUILT_IN_ADD_AND_FETCH_N:
6000 case BUILT_IN_SUB_AND_FETCH_N:
6001 case BUILT_IN_OR_AND_FETCH_N:
6002 case BUILT_IN_AND_AND_FETCH_N:
6003 case BUILT_IN_XOR_AND_FETCH_N:
6004 case BUILT_IN_NAND_AND_FETCH_N:
6005 case BUILT_IN_BOOL_COMPARE_AND_SWAP_N:
6006 case BUILT_IN_VAL_COMPARE_AND_SWAP_N:
6007 case BUILT_IN_LOCK_TEST_AND_SET_N:
6008 case BUILT_IN_LOCK_RELEASE_N:
6010 int n = sync_resolve_size (function, params);
6011 tree new_function, result;
6013 if (n == 0)
6014 return error_mark_node;
6016 new_function = built_in_decls[orig_code + exact_log2 (n) + 1];
6017 if (!sync_resolve_params (function, new_function, params))
6018 return error_mark_node;
6020 result = build_function_call (new_function, params);
6021 if (orig_code != BUILT_IN_BOOL_COMPARE_AND_SWAP_N
6022 && orig_code != BUILT_IN_LOCK_RELEASE_N)
6023 result = sync_resolve_return (params, result);
6025 return result;
6028 default:
6029 return NULL_TREE;
6033 #include "gt-c-common.h"