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, 2007 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
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
17 You should have received a copy of the GNU General Public License
18 along with GCC; see the file COPYING. If not, write to the Free
19 Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA
24 #include "coretypes.h"
36 #include "diagnostic.h"
41 #include "langhooks.h"
42 #include "tree-inline.h"
45 #include "tree-iterator.h"
47 #include "tree-mudflap.h"
52 cpp_reader
*parse_in
; /* Declared in c-pragma.h. */
54 /* We let tm.h override the types used here, to handle trivial differences
55 such as the choice of unsigned int or long unsigned int for size_t.
56 When machines start needing nontrivial differences in the size type,
57 it would be best to do something here to figure out automatically
58 from other information what type to use. */
61 #define SIZE_TYPE "long unsigned int"
65 #define PID_TYPE "int"
69 #define WCHAR_TYPE "int"
72 /* WCHAR_TYPE gets overridden by -fshort-wchar. */
73 #define MODIFIED_WCHAR_TYPE \
74 (flag_short_wchar ? "short unsigned int" : WCHAR_TYPE)
77 #define PTRDIFF_TYPE "long int"
81 #define WINT_TYPE "unsigned int"
85 #define INTMAX_TYPE ((INT_TYPE_SIZE == LONG_LONG_TYPE_SIZE) \
87 : ((LONG_TYPE_SIZE == LONG_LONG_TYPE_SIZE) \
93 #define UINTMAX_TYPE ((INT_TYPE_SIZE == LONG_LONG_TYPE_SIZE) \
95 : ((LONG_TYPE_SIZE == LONG_LONG_TYPE_SIZE) \
96 ? "long unsigned int" \
97 : "long long unsigned int"))
100 /* The following symbols are subsumed in the c_global_trees array, and
101 listed here individually for documentation purposes.
103 INTEGER_TYPE and REAL_TYPE nodes for the standard data types.
105 tree short_integer_type_node;
106 tree long_integer_type_node;
107 tree long_long_integer_type_node;
109 tree short_unsigned_type_node;
110 tree long_unsigned_type_node;
111 tree long_long_unsigned_type_node;
113 tree truthvalue_type_node;
114 tree truthvalue_false_node;
115 tree truthvalue_true_node;
117 tree ptrdiff_type_node;
119 tree unsigned_char_type_node;
120 tree signed_char_type_node;
121 tree wchar_type_node;
122 tree signed_wchar_type_node;
123 tree unsigned_wchar_type_node;
125 tree float_type_node;
126 tree double_type_node;
127 tree long_double_type_node;
129 tree complex_integer_type_node;
130 tree complex_float_type_node;
131 tree complex_double_type_node;
132 tree complex_long_double_type_node;
134 tree intQI_type_node;
135 tree intHI_type_node;
136 tree intSI_type_node;
137 tree intDI_type_node;
138 tree intTI_type_node;
140 tree unsigned_intQI_type_node;
141 tree unsigned_intHI_type_node;
142 tree unsigned_intSI_type_node;
143 tree unsigned_intDI_type_node;
144 tree unsigned_intTI_type_node;
146 tree widest_integer_literal_type_node;
147 tree widest_unsigned_literal_type_node;
149 Nodes for types `void *' and `const void *'.
151 tree ptr_type_node, const_ptr_type_node;
153 Nodes for types `char *' and `const char *'.
155 tree string_type_node, const_string_type_node;
157 Type `char[SOMENUMBER]'.
158 Used when an array of char is needed and the size is irrelevant.
160 tree char_array_type_node;
162 Type `int[SOMENUMBER]' or something like it.
163 Used when an array of int needed and the size is irrelevant.
165 tree int_array_type_node;
167 Type `wchar_t[SOMENUMBER]' or something like it.
168 Used when a wide string literal is created.
170 tree wchar_array_type_node;
172 Type `int ()' -- used for implicit declaration of functions.
174 tree default_function_type;
176 A VOID_TYPE node, packaged in a TREE_LIST.
180 The lazily created VAR_DECLs for __FUNCTION__, __PRETTY_FUNCTION__,
181 and __func__. (C doesn't generate __FUNCTION__ and__PRETTY_FUNCTION__
182 VAR_DECLS, but C++ does.)
184 tree function_name_decl_node;
185 tree pretty_function_name_decl_node;
186 tree c99_function_name_decl_node;
188 Stack of nested function name VAR_DECLs.
190 tree saved_function_name_decls;
194 tree c_global_trees
[CTI_MAX
];
196 /* Switches common to the C front ends. */
198 /* Nonzero if prepreprocessing only. */
200 int flag_preprocess_only
;
202 /* Nonzero means don't output line number information. */
204 char flag_no_line_commands
;
206 /* Nonzero causes -E output not to be done, but directives such as
207 #define that have side effects are still obeyed. */
211 /* Nonzero means dump macros in some fashion. */
213 char flag_dump_macros
;
215 /* Nonzero means pass #include lines through to the output. */
217 char flag_dump_includes
;
219 /* Nonzero means process PCH files while preprocessing. */
221 bool flag_pch_preprocess
;
223 /* The file name to which we should write a precompiled header, or
224 NULL if no header will be written in this compile. */
226 const char *pch_file
;
228 /* Nonzero if an ISO standard was selected. It rejects macros in the
232 /* Nonzero if -undef was given. It suppresses target built-in macros
236 /* Nonzero means don't recognize the non-ANSI builtin functions. */
240 /* Nonzero means don't recognize the non-ANSI builtin functions.
243 int flag_no_nonansi_builtin
;
245 /* Nonzero means give `double' the same size as `float'. */
247 int flag_short_double
;
249 /* Nonzero means give `wchar_t' the same size as `short'. */
251 int flag_short_wchar
;
253 /* Nonzero means allow Microsoft extensions without warnings or errors. */
254 int flag_ms_extensions
;
256 /* Nonzero means don't recognize the keyword `asm'. */
260 /* Nonzero means give string constants the type `const char *', as mandated
263 int flag_const_strings
;
265 /* Nonzero means to treat bitfields as signed unless they say `unsigned'. */
267 int flag_signed_bitfields
= 1;
269 /* Nonzero means warn about deprecated conversion from string constant to
272 int warn_write_strings
;
274 /* Warn about #pragma directives that are not recognized. */
276 int warn_unknown_pragmas
; /* Tri state variable. */
278 /* Warn about format/argument anomalies in calls to formatted I/O functions
279 (*printf, *scanf, strftime, strfmon, etc.). */
283 /* Warn about using __null (as NULL in C++) as sentinel. For code compiled
284 with GCC this doesn't matter as __null is guaranteed to have the right
287 int warn_strict_null_sentinel
;
289 /* Zero means that faster, ...NonNil variants of objc_msgSend...
290 calls will be used in ObjC; passing nil receivers to such calls
291 will most likely result in crashes. */
292 int flag_nil_receivers
= 1;
294 /* Nonzero means that code generation will be altered to support
295 "zero-link" execution. This currently affects ObjC only, but may
296 affect other languages in the future. */
297 int flag_zero_link
= 0;
299 /* Nonzero means emit an '__OBJC, __image_info' for the current translation
300 unit. It will inform the ObjC runtime that class definition(s) herein
301 contained are to replace one(s) previously loaded. */
302 int flag_replace_objc_classes
= 0;
304 /* C/ObjC language option variables. */
307 /* Nonzero means allow type mismatches in conditional expressions;
308 just make their values `void'. */
310 int flag_cond_mismatch
;
312 /* Nonzero means enable C89 Amendment 1 features. */
316 /* Nonzero means use the ISO C99 dialect of C. */
320 /* Nonzero means that we have builtin functions, and main is an int. */
324 /* Warn if main is suspicious. */
329 /* ObjC language option variables. */
332 /* Open and close the file for outputting class declarations, if
335 int flag_gen_declaration
;
337 /* Tells the compiler that this is a special run. Do not perform any
338 compiling, instead we are to test some platform dependent features
339 and output a C header file with appropriate definitions. */
341 int print_struct_values
;
343 /* Tells the compiler what is the constant string class for Objc. */
345 const char *constant_string_class_name
;
348 /* C++ language option variables. */
351 /* Nonzero means don't recognize any extension keywords. */
353 int flag_no_gnu_keywords
;
355 /* Nonzero means do emit exported implementations of functions even if
356 they can be inlined. */
358 int flag_implement_inlines
= 1;
360 /* Nonzero means that implicit instantiations will be emitted if needed. */
362 int flag_implicit_templates
= 1;
364 /* Nonzero means that implicit instantiations of inline templates will be
365 emitted if needed, even if instantiations of non-inline templates
368 int flag_implicit_inline_templates
= 1;
370 /* Nonzero means generate separate instantiation control files and
371 juggle them at link time. */
373 int flag_use_repository
;
375 /* Nonzero if we want to issue diagnostics that the standard says are not
378 int flag_optional_diags
= 1;
380 /* Nonzero means we should attempt to elide constructors when possible. */
382 int flag_elide_constructors
= 1;
384 /* Nonzero means that member functions defined in class scope are
385 inline by default. */
387 int flag_default_inline
= 1;
389 /* Controls whether compiler generates 'type descriptor' that give
390 run-time type information. */
394 /* Nonzero if we want to conserve space in the .o files. We do this
395 by putting uninitialized data and runtime initialized data into
396 .common instead of .data at the expense of not flagging multiple
399 int flag_conserve_space
;
401 /* Nonzero if we want to obey access control semantics. */
403 int flag_access_control
= 1;
405 /* Nonzero if we want to check the return value of new and avoid calling
406 constructors if it is a null pointer. */
410 /* Nonzero if we want the new ISO rules for pushing a new scope for `for'
411 initialization variables.
412 0: Old rules, set by -fno-for-scope.
413 2: New ISO rules, set by -ffor-scope.
414 1: Try to implement new ISO rules, but with backup compatibility
415 (and warnings). This is the default, for now. */
417 int flag_new_for_scope
= 1;
419 /* Nonzero if we want to emit defined symbols with common-like linkage as
420 weak symbols where possible, in order to conform to C++ semantics.
421 Otherwise, emit them as local symbols. */
425 /* 0 means we want the preprocessor to not emit line directives for
426 the current working directory. 1 means we want it to do it. -1
427 means we should decide depending on whether debugging information
428 is being emitted or not. */
430 int flag_working_directory
= -1;
432 /* Nonzero to use __cxa_atexit, rather than atexit, to register
433 destructors for local statics and global objects. */
435 int flag_use_cxa_atexit
= DEFAULT_USE_CXA_ATEXIT
;
437 /* Nonzero means make the default pedwarns warnings instead of errors.
438 The value of this flag is ignored if -pedantic is specified. */
442 /* Nonzero means to implement standard semantics for exception
443 specifications, calling unexpected if an exception is thrown that
444 doesn't match the specification. Zero means to treat them as
445 assertions and optimize accordingly, but not check them. */
447 int flag_enforce_eh_specs
= 1;
449 /* Nonzero means to generate thread-safe code for initializing local
452 int flag_threadsafe_statics
= 1;
454 /* Nonzero means warn about implicit declarations. */
456 int warn_implicit
= 1;
458 /* Maximum template instantiation depth. This limit is rather
459 arbitrary, but it exists to limit the time it takes to notice
460 infinite template instantiations. */
462 int max_tinst_depth
= 500;
466 /* The elements of `ridpointers' are identifier nodes for the reserved
467 type names and storage classes. It is indexed by a RID_... value. */
470 tree (*make_fname_decl
) (tree
, int);
472 /* Nonzero means the expression being parsed will never be evaluated.
473 This is a count, since unevaluated expressions can nest. */
476 /* Information about how a function name is generated. */
479 tree
*const decl
; /* pointer to the VAR_DECL. */
480 const unsigned rid
; /* RID number for the identifier. */
481 const int pretty
; /* How pretty is it? */
484 /* The three ways of getting then name of the current function. */
486 const struct fname_var_t fname_vars
[] =
488 /* C99 compliant __func__, must be first. */
489 {&c99_function_name_decl_node
, RID_C99_FUNCTION_NAME
, 0},
490 /* GCC __FUNCTION__ compliant. */
491 {&function_name_decl_node
, RID_FUNCTION_NAME
, 0},
492 /* GCC __PRETTY_FUNCTION__ compliant. */
493 {&pretty_function_name_decl_node
, RID_PRETTY_FUNCTION_NAME
, 1},
497 static int constant_fits_type_p (tree
, tree
);
498 static tree
check_case_value (tree
);
499 static bool check_case_bounds (tree
, tree
, tree
*, tree
*);
501 static tree
handle_packed_attribute (tree
*, tree
, tree
, int, bool *);
502 static tree
handle_nocommon_attribute (tree
*, tree
, tree
, int, bool *);
503 static tree
handle_common_attribute (tree
*, tree
, tree
, int, bool *);
504 static tree
handle_noreturn_attribute (tree
*, tree
, tree
, int, bool *);
505 static tree
handle_noinline_attribute (tree
*, tree
, tree
, int, bool *);
506 static tree
handle_always_inline_attribute (tree
*, tree
, tree
, int,
508 static tree
handle_gnu_inline_attribute (tree
*, tree
, tree
, int,
510 static tree
handle_flatten_attribute (tree
*, tree
, tree
, int, bool *);
511 static tree
handle_used_attribute (tree
*, tree
, tree
, int, bool *);
512 static tree
handle_unused_attribute (tree
*, tree
, tree
, int, bool *);
513 static tree
handle_externally_visible_attribute (tree
*, tree
, tree
, int,
515 static tree
handle_const_attribute (tree
*, tree
, tree
, int, bool *);
516 static tree
handle_transparent_union_attribute (tree
*, tree
, tree
,
518 static tree
handle_constructor_attribute (tree
*, tree
, tree
, int, bool *);
519 static tree
handle_destructor_attribute (tree
*, tree
, tree
, int, bool *);
520 static tree
handle_mode_attribute (tree
*, tree
, tree
, int, bool *);
521 static tree
handle_section_attribute (tree
*, tree
, tree
, int, bool *);
522 static tree
handle_aligned_attribute (tree
*, tree
, tree
, int, bool *);
523 static tree
handle_weak_attribute (tree
*, tree
, tree
, int, bool *) ;
524 static tree
handle_alias_attribute (tree
*, tree
, tree
, int, bool *);
525 static tree
handle_weakref_attribute (tree
*, tree
, tree
, int, bool *) ;
526 static tree
handle_visibility_attribute (tree
*, tree
, tree
, int,
528 static tree
handle_tls_model_attribute (tree
*, tree
, tree
, int,
530 static tree
handle_no_instrument_function_attribute (tree
*, tree
,
532 static tree
handle_malloc_attribute (tree
*, tree
, tree
, int, bool *);
533 static tree
handle_returns_twice_attribute (tree
*, tree
, tree
, int, bool *);
534 static tree
handle_no_limit_stack_attribute (tree
*, tree
, tree
, int,
536 static tree
handle_pure_attribute (tree
*, tree
, tree
, int, bool *);
537 static tree
handle_novops_attribute (tree
*, tree
, tree
, int, bool *);
538 static tree
handle_deprecated_attribute (tree
*, tree
, tree
, int,
540 static tree
handle_vector_size_attribute (tree
*, tree
, tree
, int,
542 static tree
handle_nonnull_attribute (tree
*, tree
, tree
, int, bool *);
543 static tree
handle_nothrow_attribute (tree
*, tree
, tree
, int, bool *);
544 static tree
handle_cleanup_attribute (tree
*, tree
, tree
, int, bool *);
545 static tree
handle_warn_unused_result_attribute (tree
*, tree
, tree
, int,
547 static tree
handle_sentinel_attribute (tree
*, tree
, tree
, int, bool *);
549 static void check_function_nonnull (tree
, tree
);
550 static void check_nonnull_arg (void *, tree
, unsigned HOST_WIDE_INT
);
551 static bool nonnull_check_p (tree
, unsigned HOST_WIDE_INT
);
552 static bool get_nonnull_operand (tree
, unsigned HOST_WIDE_INT
*);
553 static int resort_field_decl_cmp (const void *, const void *);
555 /* Table of machine-independent attributes common to all C-like languages. */
556 const struct attribute_spec c_common_attribute_table
[] =
558 /* { name, min_len, max_len, decl_req, type_req, fn_type_req, handler } */
559 { "packed", 0, 0, false, false, false,
560 handle_packed_attribute
},
561 { "nocommon", 0, 0, true, false, false,
562 handle_nocommon_attribute
},
563 { "common", 0, 0, true, false, false,
564 handle_common_attribute
},
565 /* FIXME: logically, noreturn attributes should be listed as
566 "false, true, true" and apply to function types. But implementing this
567 would require all the places in the compiler that use TREE_THIS_VOLATILE
568 on a decl to identify non-returning functions to be located and fixed
569 to check the function type instead. */
570 { "noreturn", 0, 0, true, false, false,
571 handle_noreturn_attribute
},
572 { "volatile", 0, 0, true, false, false,
573 handle_noreturn_attribute
},
574 { "noinline", 0, 0, true, false, false,
575 handle_noinline_attribute
},
576 { "always_inline", 0, 0, true, false, false,
577 handle_always_inline_attribute
},
578 { "gnu_inline", 0, 0, true, false, false,
579 handle_gnu_inline_attribute
},
580 { "flatten", 0, 0, true, false, false,
581 handle_flatten_attribute
},
582 { "used", 0, 0, true, false, false,
583 handle_used_attribute
},
584 { "unused", 0, 0, false, false, false,
585 handle_unused_attribute
},
586 { "externally_visible", 0, 0, true, false, false,
587 handle_externally_visible_attribute
},
588 /* The same comments as for noreturn attributes apply to const ones. */
589 { "const", 0, 0, true, false, false,
590 handle_const_attribute
},
591 { "transparent_union", 0, 0, false, false, false,
592 handle_transparent_union_attribute
},
593 { "constructor", 0, 0, true, false, false,
594 handle_constructor_attribute
},
595 { "destructor", 0, 0, true, false, false,
596 handle_destructor_attribute
},
597 { "mode", 1, 1, false, true, false,
598 handle_mode_attribute
},
599 { "section", 1, 1, true, false, false,
600 handle_section_attribute
},
601 { "aligned", 0, 1, false, false, false,
602 handle_aligned_attribute
},
603 { "weak", 0, 0, true, false, false,
604 handle_weak_attribute
},
605 { "alias", 1, 1, true, false, false,
606 handle_alias_attribute
},
607 { "weakref", 0, 1, true, false, false,
608 handle_weakref_attribute
},
609 { "no_instrument_function", 0, 0, true, false, false,
610 handle_no_instrument_function_attribute
},
611 { "malloc", 0, 0, true, false, false,
612 handle_malloc_attribute
},
613 { "returns_twice", 0, 0, true, false, false,
614 handle_returns_twice_attribute
},
615 { "no_stack_limit", 0, 0, true, false, false,
616 handle_no_limit_stack_attribute
},
617 { "pure", 0, 0, true, false, false,
618 handle_pure_attribute
},
619 /* For internal use (marking of builtins) only. The name contains space
620 to prevent its usage in source code. */
621 { "no vops", 0, 0, true, false, false,
622 handle_novops_attribute
},
623 { "deprecated", 0, 0, false, false, false,
624 handle_deprecated_attribute
},
625 { "vector_size", 1, 1, false, true, false,
626 handle_vector_size_attribute
},
627 { "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
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. */
661 start_fname_decls (void)
664 tree saved
= NULL_TREE
;
666 for (ix
= 0; fname_vars
[ix
].decl
; ix
++)
668 tree decl
= *fname_vars
[ix
].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. */
689 finish_fname_decls (void)
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
);
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_force (*bodyp
, &stmts
);
709 for (ix
= 0; fname_vars
[ix
].decl
; ix
++)
710 *fname_vars
[ix
].decl
= NULL_TREE
;
714 /* We had saved values, restore them. */
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. */
733 fname_as_string (int pretty_p
)
735 const char *name
= "top level";
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))
761 return (char *) cstr
.text
;
765 namep
= xstrdup (name
);
770 /* Expand DECL if it declares an entity not handled by the
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
);
782 expand_anon_union_decl (decl
, NULL_TREE
,
783 DECL_ANON_UNION_ELEMS (decl
));
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. */
800 fname_decl (unsigned int rid
, tree id
)
803 tree decl
= NULL_TREE
;
805 for (ix
= 0; fname_vars
[ix
].decl
; ix
++)
806 if (fname_vars
[ix
].rid
== rid
)
809 decl
= *fname_vars
[ix
].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. */
818 location_t saved_location
= input_location
;
819 #ifdef USE_MAPPED_LOCATION
820 input_location
= UNKNOWN_LOCATION
;
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
);
840 /* Given a STRING_CST, give it a suitable array-of-chars data type. */
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
);
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
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;
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. */
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. */
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. */
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");
956 warning (OPT_Wconversion
,
957 "negative integer implicitly converted to unsigned type");
961 /* Print a warning about casts that might indicate violation
962 of strict aliasing rules if -Wstrict-aliasing is used and
963 strict aliasing mode is in effect. otype is the original
964 TREE_TYPE of expr, and type the type we're casting to. */
967 strict_aliasing_warning(tree otype
, tree type
, tree expr
)
969 if (flag_strict_aliasing
&& warn_strict_aliasing
970 && POINTER_TYPE_P (type
) && POINTER_TYPE_P (otype
)
971 && TREE_CODE (expr
) == ADDR_EXPR
972 && (DECL_P (TREE_OPERAND (expr
, 0))
973 || handled_component_p (TREE_OPERAND (expr
, 0)))
974 && !VOID_TYPE_P (TREE_TYPE (type
)))
976 /* Casting the address of an object to non void pointer. Warn
977 if the cast breaks type based aliasing. */
978 if (!COMPLETE_TYPE_P (TREE_TYPE (type
)))
979 warning (OPT_Wstrict_aliasing
, "type-punning to incomplete type "
980 "might break strict-aliasing rules");
983 HOST_WIDE_INT set1
= get_alias_set (TREE_TYPE (TREE_OPERAND (expr
, 0)));
984 HOST_WIDE_INT set2
= get_alias_set (TREE_TYPE (type
));
986 if (!alias_sets_conflict_p (set1
, set2
))
987 warning (OPT_Wstrict_aliasing
, "dereferencing type-punned "
988 "pointer will break strict-aliasing rules");
989 else if (warn_strict_aliasing
> 1
990 && !alias_sets_might_conflict_p (set1
, set2
))
991 warning (OPT_Wstrict_aliasing
, "dereferencing type-punned "
992 "pointer might break strict-aliasing rules");
997 /* Nonzero if constant C has a value that is permissible
998 for type TYPE (an INTEGER_TYPE). */
1001 constant_fits_type_p (tree c
, tree type
)
1003 if (TREE_CODE (c
) == INTEGER_CST
)
1004 return int_fits_type_p (c
, type
);
1006 c
= convert (type
, c
);
1007 return !TREE_OVERFLOW (c
);
1010 /* Nonzero if vector types T1 and T2 can be converted to each other
1011 without an explicit cast. */
1013 vector_types_convertible_p (tree t1
, tree t2
)
1015 return targetm
.vector_opaque_p (t1
)
1016 || targetm
.vector_opaque_p (t2
)
1017 || (tree_int_cst_equal (TYPE_SIZE (t1
), TYPE_SIZE (t2
))
1018 && (TREE_CODE (TREE_TYPE (t1
)) != REAL_TYPE
||
1019 TYPE_PRECISION (t1
) == TYPE_PRECISION (t2
))
1020 && INTEGRAL_TYPE_P (TREE_TYPE (t1
))
1021 == INTEGRAL_TYPE_P (TREE_TYPE (t2
)));
1024 /* Convert EXPR to TYPE, warning about conversion problems with constants.
1025 Invoke this function on every expression that is converted implicitly,
1026 i.e. because of language rules and not because of an explicit cast. */
1029 convert_and_check (tree type
, tree expr
)
1031 tree t
= convert (type
, expr
);
1032 if (TREE_CODE (t
) == INTEGER_CST
)
1034 if (TREE_OVERFLOW (t
))
1036 TREE_OVERFLOW (t
) = 0;
1038 /* Do not diagnose overflow in a constant expression merely
1039 because a conversion overflowed. */
1040 TREE_CONSTANT_OVERFLOW (t
) = TREE_CONSTANT_OVERFLOW (expr
);
1042 /* No warning for converting 0x80000000 to int. */
1043 if (!(TYPE_UNSIGNED (type
) < TYPE_UNSIGNED (TREE_TYPE (expr
))
1044 && TREE_CODE (TREE_TYPE (expr
)) == INTEGER_TYPE
1045 && TYPE_PRECISION (type
) == TYPE_PRECISION (TREE_TYPE (expr
))))
1046 /* If EXPR fits in the unsigned version of TYPE,
1047 don't warn unless pedantic. */
1049 || TYPE_UNSIGNED (type
)
1050 || !constant_fits_type_p (expr
,
1051 c_common_unsigned_type (type
)))
1052 && skip_evaluation
== 0)
1053 warning (0, "overflow in implicit constant conversion");
1056 unsigned_conversion_warning (t
, expr
);
1061 /* A node in a list that describes references to variables (EXPR), which are
1062 either read accesses if WRITER is zero, or write accesses, in which case
1063 WRITER is the parent of EXPR. */
1070 /* Used to implement a cache the results of a call to verify_tree. We only
1071 use this for SAVE_EXPRs. */
1074 struct tlist_cache
*next
;
1075 struct tlist
*cache_before_sp
;
1076 struct tlist
*cache_after_sp
;
1080 /* Obstack to use when allocating tlist structures, and corresponding
1082 static struct obstack tlist_obstack
;
1083 static char *tlist_firstobj
= 0;
1085 /* Keep track of the identifiers we've warned about, so we can avoid duplicate
1087 static struct tlist
*warned_ids
;
1088 /* SAVE_EXPRs need special treatment. We process them only once and then
1089 cache the results. */
1090 static struct tlist_cache
*save_expr_cache
;
1092 static void add_tlist (struct tlist
**, struct tlist
*, tree
, int);
1093 static void merge_tlist (struct tlist
**, struct tlist
*, int);
1094 static void verify_tree (tree
, struct tlist
**, struct tlist
**, tree
);
1095 static int warning_candidate_p (tree
);
1096 static void warn_for_collisions (struct tlist
*);
1097 static void warn_for_collisions_1 (tree
, tree
, struct tlist
*, int);
1098 static struct tlist
*new_tlist (struct tlist
*, tree
, tree
);
1100 /* Create a new struct tlist and fill in its fields. */
1101 static struct tlist
*
1102 new_tlist (struct tlist
*next
, tree t
, tree writer
)
1105 l
= XOBNEW (&tlist_obstack
, struct tlist
);
1112 /* Add duplicates of the nodes found in ADD to the list *TO. If EXCLUDE_WRITER
1113 is nonnull, we ignore any node we find which has a writer equal to it. */
1116 add_tlist (struct tlist
**to
, struct tlist
*add
, tree exclude_writer
, int copy
)
1120 struct tlist
*next
= add
->next
;
1123 if (!exclude_writer
|| add
->writer
!= exclude_writer
)
1124 *to
= copy
? new_tlist (*to
, add
->expr
, add
->writer
) : add
;
1129 /* Merge the nodes of ADD into TO. This merging process is done so that for
1130 each variable that already exists in TO, no new node is added; however if
1131 there is a write access recorded in ADD, and an occurrence on TO is only
1132 a read access, then the occurrence in TO will be modified to record the
1136 merge_tlist (struct tlist
**to
, struct tlist
*add
, int copy
)
1138 struct tlist
**end
= to
;
1141 end
= &(*end
)->next
;
1147 struct tlist
*next
= add
->next
;
1149 for (tmp2
= *to
; tmp2
; tmp2
= tmp2
->next
)
1150 if (tmp2
->expr
== add
->expr
)
1154 tmp2
->writer
= add
->writer
;
1158 *end
= copy
? add
: new_tlist (NULL
, add
->expr
, add
->writer
);
1159 end
= &(*end
)->next
;
1166 /* WRITTEN is a variable, WRITER is its parent. Warn if any of the variable
1167 references in list LIST conflict with it, excluding reads if ONLY writers
1171 warn_for_collisions_1 (tree written
, tree writer
, struct tlist
*list
,
1176 /* Avoid duplicate warnings. */
1177 for (tmp
= warned_ids
; tmp
; tmp
= tmp
->next
)
1178 if (tmp
->expr
== written
)
1183 if (list
->expr
== written
1184 && list
->writer
!= writer
1185 && (!only_writes
|| list
->writer
)
1186 && DECL_NAME (list
->expr
))
1188 warned_ids
= new_tlist (warned_ids
, written
, NULL_TREE
);
1189 warning (0, "operation on %qE may be undefined", list
->expr
);
1195 /* Given a list LIST of references to variables, find whether any of these
1196 can cause conflicts due to missing sequence points. */
1199 warn_for_collisions (struct tlist
*list
)
1203 for (tmp
= list
; tmp
; tmp
= tmp
->next
)
1206 warn_for_collisions_1 (tmp
->expr
, tmp
->writer
, list
, 0);
1210 /* Return nonzero if X is a tree that can be verified by the sequence point
1213 warning_candidate_p (tree x
)
1215 return TREE_CODE (x
) == VAR_DECL
|| TREE_CODE (x
) == PARM_DECL
;
1218 /* Walk the tree X, and record accesses to variables. If X is written by the
1219 parent tree, WRITER is the parent.
1220 We store accesses in one of the two lists: PBEFORE_SP, and PNO_SP. If this
1221 expression or its only operand forces a sequence point, then everything up
1222 to the sequence point is stored in PBEFORE_SP. Everything else gets stored
1224 Once we return, we will have emitted warnings if any subexpression before
1225 such a sequence point could be undefined. On a higher level, however, the
1226 sequence point may not be relevant, and we'll merge the two lists.
1228 Example: (b++, a) + b;
1229 The call that processes the COMPOUND_EXPR will store the increment of B
1230 in PBEFORE_SP, and the use of A in PNO_SP. The higher-level call that
1231 processes the PLUS_EXPR will need to merge the two lists so that
1232 eventually, all accesses end up on the same list (and we'll warn about the
1233 unordered subexpressions b++ and b.
1235 A note on merging. If we modify the former example so that our expression
1238 care must be taken not simply to add all three expressions into the final
1239 PNO_SP list. The function merge_tlist takes care of that by merging the
1240 before-SP list of the COMPOUND_EXPR into its after-SP list in a special
1241 way, so that no more than one access to B is recorded. */
1244 verify_tree (tree x
, struct tlist
**pbefore_sp
, struct tlist
**pno_sp
,
1247 struct tlist
*tmp_before
, *tmp_nosp
, *tmp_list2
, *tmp_list3
;
1248 enum tree_code code
;
1249 enum tree_code_class cl
;
1251 /* X may be NULL if it is the operand of an empty statement expression
1257 code
= TREE_CODE (x
);
1258 cl
= TREE_CODE_CLASS (code
);
1260 if (warning_candidate_p (x
))
1262 *pno_sp
= new_tlist (*pno_sp
, x
, writer
);
1272 case TRUTH_ANDIF_EXPR
:
1273 case TRUTH_ORIF_EXPR
:
1274 tmp_before
= tmp_nosp
= tmp_list3
= 0;
1275 verify_tree (TREE_OPERAND (x
, 0), &tmp_before
, &tmp_nosp
, NULL_TREE
);
1276 warn_for_collisions (tmp_nosp
);
1277 merge_tlist (pbefore_sp
, tmp_before
, 0);
1278 merge_tlist (pbefore_sp
, tmp_nosp
, 0);
1279 verify_tree (TREE_OPERAND (x
, 1), &tmp_list3
, pno_sp
, NULL_TREE
);
1280 merge_tlist (pbefore_sp
, tmp_list3
, 0);
1284 tmp_before
= tmp_list2
= 0;
1285 verify_tree (TREE_OPERAND (x
, 0), &tmp_before
, &tmp_list2
, NULL_TREE
);
1286 warn_for_collisions (tmp_list2
);
1287 merge_tlist (pbefore_sp
, tmp_before
, 0);
1288 merge_tlist (pbefore_sp
, tmp_list2
, 1);
1290 tmp_list3
= tmp_nosp
= 0;
1291 verify_tree (TREE_OPERAND (x
, 1), &tmp_list3
, &tmp_nosp
, NULL_TREE
);
1292 warn_for_collisions (tmp_nosp
);
1293 merge_tlist (pbefore_sp
, tmp_list3
, 0);
1295 tmp_list3
= tmp_list2
= 0;
1296 verify_tree (TREE_OPERAND (x
, 2), &tmp_list3
, &tmp_list2
, NULL_TREE
);
1297 warn_for_collisions (tmp_list2
);
1298 merge_tlist (pbefore_sp
, tmp_list3
, 0);
1299 /* Rather than add both tmp_nosp and tmp_list2, we have to merge the
1300 two first, to avoid warning for (a ? b++ : b++). */
1301 merge_tlist (&tmp_nosp
, tmp_list2
, 0);
1302 add_tlist (pno_sp
, tmp_nosp
, NULL_TREE
, 0);
1305 case PREDECREMENT_EXPR
:
1306 case PREINCREMENT_EXPR
:
1307 case POSTDECREMENT_EXPR
:
1308 case POSTINCREMENT_EXPR
:
1309 verify_tree (TREE_OPERAND (x
, 0), pno_sp
, pno_sp
, x
);
1313 tmp_before
= tmp_nosp
= tmp_list3
= 0;
1314 verify_tree (TREE_OPERAND (x
, 1), &tmp_before
, &tmp_nosp
, NULL_TREE
);
1315 verify_tree (TREE_OPERAND (x
, 0), &tmp_list3
, &tmp_list3
, x
);
1316 /* Expressions inside the LHS are not ordered wrt. the sequence points
1317 in the RHS. Example:
1319 Despite the fact that the modification of "a" is in the before_sp
1320 list (tmp_before), it conflicts with the use of "a" in the LHS.
1321 We can handle this by adding the contents of tmp_list3
1322 to those of tmp_before, and redoing the collision warnings for that
1324 add_tlist (&tmp_before
, tmp_list3
, x
, 1);
1325 warn_for_collisions (tmp_before
);
1326 /* Exclude the LHS itself here; we first have to merge it into the
1327 tmp_nosp list. This is done to avoid warning for "a = a"; if we
1328 didn't exclude the LHS, we'd get it twice, once as a read and once
1330 add_tlist (pno_sp
, tmp_list3
, x
, 0);
1331 warn_for_collisions_1 (TREE_OPERAND (x
, 0), x
, tmp_nosp
, 1);
1333 merge_tlist (pbefore_sp
, tmp_before
, 0);
1334 if (warning_candidate_p (TREE_OPERAND (x
, 0)))
1335 merge_tlist (&tmp_nosp
, new_tlist (NULL
, TREE_OPERAND (x
, 0), x
), 0);
1336 add_tlist (pno_sp
, tmp_nosp
, NULL_TREE
, 1);
1340 /* We need to warn about conflicts among arguments and conflicts between
1341 args and the function address. Side effects of the function address,
1342 however, are not ordered by the sequence point of the call. */
1343 tmp_before
= tmp_nosp
= tmp_list2
= tmp_list3
= 0;
1344 verify_tree (TREE_OPERAND (x
, 0), &tmp_before
, &tmp_nosp
, NULL_TREE
);
1345 if (TREE_OPERAND (x
, 1))
1346 verify_tree (TREE_OPERAND (x
, 1), &tmp_list2
, &tmp_list3
, NULL_TREE
);
1347 merge_tlist (&tmp_list3
, tmp_list2
, 0);
1348 add_tlist (&tmp_before
, tmp_list3
, NULL_TREE
, 0);
1349 add_tlist (&tmp_before
, tmp_nosp
, NULL_TREE
, 0);
1350 warn_for_collisions (tmp_before
);
1351 add_tlist (pbefore_sp
, tmp_before
, NULL_TREE
, 0);
1355 /* Scan all the list, e.g. indices of multi dimensional array. */
1358 tmp_before
= tmp_nosp
= 0;
1359 verify_tree (TREE_VALUE (x
), &tmp_before
, &tmp_nosp
, NULL_TREE
);
1360 merge_tlist (&tmp_nosp
, tmp_before
, 0);
1361 add_tlist (pno_sp
, tmp_nosp
, NULL_TREE
, 0);
1368 struct tlist_cache
*t
;
1369 for (t
= save_expr_cache
; t
; t
= t
->next
)
1375 t
= XOBNEW (&tlist_obstack
, struct tlist_cache
);
1376 t
->next
= save_expr_cache
;
1378 save_expr_cache
= t
;
1380 tmp_before
= tmp_nosp
= 0;
1381 verify_tree (TREE_OPERAND (x
, 0), &tmp_before
, &tmp_nosp
, NULL_TREE
);
1382 warn_for_collisions (tmp_nosp
);
1387 struct tlist
*t
= tmp_nosp
;
1389 merge_tlist (&tmp_list3
, t
, 0);
1391 t
->cache_before_sp
= tmp_before
;
1392 t
->cache_after_sp
= tmp_list3
;
1394 merge_tlist (pbefore_sp
, t
->cache_before_sp
, 1);
1395 add_tlist (pno_sp
, t
->cache_after_sp
, NULL_TREE
, 1);
1400 /* For other expressions, simply recurse on their operands.
1401 Manual tail recursion for unary expressions.
1402 Other non-expressions need not be processed. */
1403 if (cl
== tcc_unary
)
1405 x
= TREE_OPERAND (x
, 0);
1409 else if (IS_EXPR_CODE_CLASS (cl
))
1412 int max
= TREE_CODE_LENGTH (TREE_CODE (x
));
1413 for (lp
= 0; lp
< max
; lp
++)
1415 tmp_before
= tmp_nosp
= 0;
1416 verify_tree (TREE_OPERAND (x
, lp
), &tmp_before
, &tmp_nosp
, 0);
1417 merge_tlist (&tmp_nosp
, tmp_before
, 0);
1418 add_tlist (pno_sp
, tmp_nosp
, NULL_TREE
, 0);
1425 /* Try to warn for undefined behavior in EXPR due to missing sequence
1429 verify_sequence_points (tree expr
)
1431 struct tlist
*before_sp
= 0, *after_sp
= 0;
1434 save_expr_cache
= 0;
1435 if (tlist_firstobj
== 0)
1437 gcc_obstack_init (&tlist_obstack
);
1438 tlist_firstobj
= (char *) obstack_alloc (&tlist_obstack
, 0);
1441 verify_tree (expr
, &before_sp
, &after_sp
, 0);
1442 warn_for_collisions (after_sp
);
1443 obstack_free (&tlist_obstack
, tlist_firstobj
);
1446 /* Validate the expression after `case' and apply default promotions. */
1449 check_case_value (tree value
)
1451 if (value
== NULL_TREE
)
1454 /* ??? Can we ever get nops here for a valid case value? We
1456 STRIP_TYPE_NOPS (value
);
1457 /* In C++, the following is allowed:
1460 switch (...) { case i: ... }
1462 So, we try to reduce the VALUE to a constant that way. */
1463 if (c_dialect_cxx ())
1465 value
= decl_constant_value (value
);
1466 STRIP_TYPE_NOPS (value
);
1467 value
= fold (value
);
1470 if (TREE_CODE (value
) == INTEGER_CST
)
1471 /* Promote char or short to int. */
1472 value
= perform_integral_promotions (value
);
1473 else if (value
!= error_mark_node
)
1475 error ("case label does not reduce to an integer constant");
1476 value
= error_mark_node
;
1479 constant_expression_warning (value
);
1484 /* See if the case values LOW and HIGH are in the range of the original
1485 type (i.e. before the default conversion to int) of the switch testing
1487 TYPE is the promoted type of the testing expression, and ORIG_TYPE is
1488 the type before promoting it. CASE_LOW_P is a pointer to the lower
1489 bound of the case label, and CASE_HIGH_P is the upper bound or NULL
1490 if the case is not a case range.
1491 The caller has to make sure that we are not called with NULL for
1492 CASE_LOW_P (i.e. the default case).
1493 Returns true if the case label is in range of ORIG_TYPE (saturated or
1494 untouched) or false if the label is out of range. */
1497 check_case_bounds (tree type
, tree orig_type
,
1498 tree
*case_low_p
, tree
*case_high_p
)
1500 tree min_value
, max_value
;
1501 tree case_low
= *case_low_p
;
1502 tree case_high
= case_high_p
? *case_high_p
: case_low
;
1504 /* If there was a problem with the original type, do nothing. */
1505 if (orig_type
== error_mark_node
)
1508 min_value
= TYPE_MIN_VALUE (orig_type
);
1509 max_value
= TYPE_MAX_VALUE (orig_type
);
1511 /* Case label is less than minimum for type. */
1512 if (tree_int_cst_compare (case_low
, min_value
) < 0
1513 && tree_int_cst_compare (case_high
, min_value
) < 0)
1515 warning (0, "case label value is less than minimum value for type");
1519 /* Case value is greater than maximum for type. */
1520 if (tree_int_cst_compare (case_low
, max_value
) > 0
1521 && tree_int_cst_compare (case_high
, max_value
) > 0)
1523 warning (0, "case label value exceeds maximum value for type");
1527 /* Saturate lower case label value to minimum. */
1528 if (tree_int_cst_compare (case_high
, min_value
) >= 0
1529 && tree_int_cst_compare (case_low
, min_value
) < 0)
1531 warning (0, "lower value in case label range"
1532 " less than minimum value for type");
1533 case_low
= min_value
;
1536 /* Saturate upper case label value to maximum. */
1537 if (tree_int_cst_compare (case_low
, max_value
) <= 0
1538 && tree_int_cst_compare (case_high
, max_value
) > 0)
1540 warning (0, "upper value in case label range"
1541 " exceeds maximum value for type");
1542 case_high
= max_value
;
1545 if (*case_low_p
!= case_low
)
1546 *case_low_p
= convert (type
, case_low
);
1547 if (case_high_p
&& *case_high_p
!= case_high
)
1548 *case_high_p
= convert (type
, case_high
);
1553 /* Return an integer type with BITS bits of precision,
1554 that is unsigned if UNSIGNEDP is nonzero, otherwise signed. */
1557 c_common_type_for_size (unsigned int bits
, int unsignedp
)
1559 if (bits
== TYPE_PRECISION (integer_type_node
))
1560 return unsignedp
? unsigned_type_node
: integer_type_node
;
1562 if (bits
== TYPE_PRECISION (signed_char_type_node
))
1563 return unsignedp
? unsigned_char_type_node
: signed_char_type_node
;
1565 if (bits
== TYPE_PRECISION (short_integer_type_node
))
1566 return unsignedp
? short_unsigned_type_node
: short_integer_type_node
;
1568 if (bits
== TYPE_PRECISION (long_integer_type_node
))
1569 return unsignedp
? long_unsigned_type_node
: long_integer_type_node
;
1571 if (bits
== TYPE_PRECISION (long_long_integer_type_node
))
1572 return (unsignedp
? long_long_unsigned_type_node
1573 : long_long_integer_type_node
);
1575 if (bits
== TYPE_PRECISION (widest_integer_literal_type_node
))
1576 return (unsignedp
? widest_unsigned_literal_type_node
1577 : widest_integer_literal_type_node
);
1579 if (bits
<= TYPE_PRECISION (intQI_type_node
))
1580 return unsignedp
? unsigned_intQI_type_node
: intQI_type_node
;
1582 if (bits
<= TYPE_PRECISION (intHI_type_node
))
1583 return unsignedp
? unsigned_intHI_type_node
: intHI_type_node
;
1585 if (bits
<= TYPE_PRECISION (intSI_type_node
))
1586 return unsignedp
? unsigned_intSI_type_node
: intSI_type_node
;
1588 if (bits
<= TYPE_PRECISION (intDI_type_node
))
1589 return unsignedp
? unsigned_intDI_type_node
: intDI_type_node
;
1594 /* Used for communication between c_common_type_for_mode and
1595 c_register_builtin_type. */
1596 static GTY(()) tree registered_builtin_types
;
1598 /* Return a data type that has machine mode MODE.
1599 If the mode is an integer,
1600 then UNSIGNEDP selects between signed and unsigned types. */
1603 c_common_type_for_mode (enum machine_mode mode
, int unsignedp
)
1607 if (mode
== TYPE_MODE (integer_type_node
))
1608 return unsignedp
? unsigned_type_node
: integer_type_node
;
1610 if (mode
== TYPE_MODE (signed_char_type_node
))
1611 return unsignedp
? unsigned_char_type_node
: signed_char_type_node
;
1613 if (mode
== TYPE_MODE (short_integer_type_node
))
1614 return unsignedp
? short_unsigned_type_node
: short_integer_type_node
;
1616 if (mode
== TYPE_MODE (long_integer_type_node
))
1617 return unsignedp
? long_unsigned_type_node
: long_integer_type_node
;
1619 if (mode
== TYPE_MODE (long_long_integer_type_node
))
1620 return unsignedp
? long_long_unsigned_type_node
: long_long_integer_type_node
;
1622 if (mode
== TYPE_MODE (widest_integer_literal_type_node
))
1623 return unsignedp
? widest_unsigned_literal_type_node
1624 : widest_integer_literal_type_node
;
1627 return unsignedp
? unsigned_intQI_type_node
: intQI_type_node
;
1630 return unsignedp
? unsigned_intHI_type_node
: intHI_type_node
;
1633 return unsignedp
? unsigned_intSI_type_node
: intSI_type_node
;
1636 return unsignedp
? unsigned_intDI_type_node
: intDI_type_node
;
1638 #if HOST_BITS_PER_WIDE_INT >= 64
1639 if (mode
== TYPE_MODE (intTI_type_node
))
1640 return unsignedp
? unsigned_intTI_type_node
: intTI_type_node
;
1643 if (mode
== TYPE_MODE (float_type_node
))
1644 return float_type_node
;
1646 if (mode
== TYPE_MODE (double_type_node
))
1647 return double_type_node
;
1649 if (mode
== TYPE_MODE (long_double_type_node
))
1650 return long_double_type_node
;
1652 if (mode
== TYPE_MODE (void_type_node
))
1653 return void_type_node
;
1655 if (mode
== TYPE_MODE (build_pointer_type (char_type_node
)))
1657 ? make_unsigned_type (GET_MODE_PRECISION (mode
))
1658 : make_signed_type (GET_MODE_PRECISION (mode
)));
1660 if (mode
== TYPE_MODE (build_pointer_type (integer_type_node
)))
1662 ? make_unsigned_type (GET_MODE_PRECISION (mode
))
1663 : make_signed_type (GET_MODE_PRECISION (mode
)));
1665 if (COMPLEX_MODE_P (mode
))
1667 enum machine_mode inner_mode
;
1670 if (mode
== TYPE_MODE (complex_float_type_node
))
1671 return complex_float_type_node
;
1672 if (mode
== TYPE_MODE (complex_double_type_node
))
1673 return complex_double_type_node
;
1674 if (mode
== TYPE_MODE (complex_long_double_type_node
))
1675 return complex_long_double_type_node
;
1677 if (mode
== TYPE_MODE (complex_integer_type_node
) && !unsignedp
)
1678 return complex_integer_type_node
;
1680 inner_mode
= GET_MODE_INNER (mode
);
1681 inner_type
= c_common_type_for_mode (inner_mode
, unsignedp
);
1682 if (inner_type
!= NULL_TREE
)
1683 return build_complex_type (inner_type
);
1685 else if (VECTOR_MODE_P (mode
))
1687 enum machine_mode inner_mode
= GET_MODE_INNER (mode
);
1688 tree inner_type
= c_common_type_for_mode (inner_mode
, unsignedp
);
1689 if (inner_type
!= NULL_TREE
)
1690 return build_vector_type_for_mode (inner_type
, mode
);
1693 for (t
= registered_builtin_types
; t
; t
= TREE_CHAIN (t
))
1694 if (TYPE_MODE (TREE_VALUE (t
)) == mode
)
1695 return TREE_VALUE (t
);
1700 /* Return an unsigned type the same as TYPE in other respects. */
1702 c_common_unsigned_type (tree type
)
1704 tree type1
= TYPE_MAIN_VARIANT (type
);
1705 if (type1
== signed_char_type_node
|| type1
== char_type_node
)
1706 return unsigned_char_type_node
;
1707 if (type1
== integer_type_node
)
1708 return unsigned_type_node
;
1709 if (type1
== short_integer_type_node
)
1710 return short_unsigned_type_node
;
1711 if (type1
== long_integer_type_node
)
1712 return long_unsigned_type_node
;
1713 if (type1
== long_long_integer_type_node
)
1714 return long_long_unsigned_type_node
;
1715 if (type1
== widest_integer_literal_type_node
)
1716 return widest_unsigned_literal_type_node
;
1717 #if HOST_BITS_PER_WIDE_INT >= 64
1718 if (type1
== intTI_type_node
)
1719 return unsigned_intTI_type_node
;
1721 if (type1
== intDI_type_node
)
1722 return unsigned_intDI_type_node
;
1723 if (type1
== intSI_type_node
)
1724 return unsigned_intSI_type_node
;
1725 if (type1
== intHI_type_node
)
1726 return unsigned_intHI_type_node
;
1727 if (type1
== intQI_type_node
)
1728 return unsigned_intQI_type_node
;
1730 return c_common_signed_or_unsigned_type (1, type
);
1733 /* Return a signed type the same as TYPE in other respects. */
1736 c_common_signed_type (tree type
)
1738 tree type1
= TYPE_MAIN_VARIANT (type
);
1739 if (type1
== unsigned_char_type_node
|| type1
== char_type_node
)
1740 return signed_char_type_node
;
1741 if (type1
== unsigned_type_node
)
1742 return integer_type_node
;
1743 if (type1
== short_unsigned_type_node
)
1744 return short_integer_type_node
;
1745 if (type1
== long_unsigned_type_node
)
1746 return long_integer_type_node
;
1747 if (type1
== long_long_unsigned_type_node
)
1748 return long_long_integer_type_node
;
1749 if (type1
== widest_unsigned_literal_type_node
)
1750 return widest_integer_literal_type_node
;
1751 #if HOST_BITS_PER_WIDE_INT >= 64
1752 if (type1
== unsigned_intTI_type_node
)
1753 return intTI_type_node
;
1755 if (type1
== unsigned_intDI_type_node
)
1756 return intDI_type_node
;
1757 if (type1
== unsigned_intSI_type_node
)
1758 return intSI_type_node
;
1759 if (type1
== unsigned_intHI_type_node
)
1760 return intHI_type_node
;
1761 if (type1
== unsigned_intQI_type_node
)
1762 return intQI_type_node
;
1764 return c_common_signed_or_unsigned_type (0, type
);
1767 /* Return a type the same as TYPE except unsigned or
1768 signed according to UNSIGNEDP. */
1771 c_common_signed_or_unsigned_type (int unsignedp
, tree type
)
1773 if (!INTEGRAL_TYPE_P (type
)
1774 || TYPE_UNSIGNED (type
) == unsignedp
)
1777 /* For ENUMERAL_TYPEs in C++, must check the mode of the types, not
1778 the precision; they have precision set to match their range, but
1779 may use a wider mode to match an ABI. If we change modes, we may
1780 wind up with bad conversions. For INTEGER_TYPEs in C, must check
1781 the precision as well, so as to yield correct results for
1782 bit-field types. C++ does not have these separate bit-field
1783 types, and producing a signed or unsigned variant of an
1784 ENUMERAL_TYPE may cause other problems as well. */
1786 #define TYPE_OK(node) \
1787 (TYPE_MODE (type) == TYPE_MODE (node) \
1788 && (c_dialect_cxx () || TYPE_PRECISION (type) == TYPE_PRECISION (node)))
1789 if (TYPE_OK (signed_char_type_node
))
1790 return unsignedp
? unsigned_char_type_node
: signed_char_type_node
;
1791 if (TYPE_OK (integer_type_node
))
1792 return unsignedp
? unsigned_type_node
: integer_type_node
;
1793 if (TYPE_OK (short_integer_type_node
))
1794 return unsignedp
? short_unsigned_type_node
: short_integer_type_node
;
1795 if (TYPE_OK (long_integer_type_node
))
1796 return unsignedp
? long_unsigned_type_node
: long_integer_type_node
;
1797 if (TYPE_OK (long_long_integer_type_node
))
1798 return (unsignedp
? long_long_unsigned_type_node
1799 : long_long_integer_type_node
);
1800 if (TYPE_OK (widest_integer_literal_type_node
))
1801 return (unsignedp
? widest_unsigned_literal_type_node
1802 : widest_integer_literal_type_node
);
1804 #if HOST_BITS_PER_WIDE_INT >= 64
1805 if (TYPE_OK (intTI_type_node
))
1806 return unsignedp
? unsigned_intTI_type_node
: intTI_type_node
;
1808 if (TYPE_OK (intDI_type_node
))
1809 return unsignedp
? unsigned_intDI_type_node
: intDI_type_node
;
1810 if (TYPE_OK (intSI_type_node
))
1811 return unsignedp
? unsigned_intSI_type_node
: intSI_type_node
;
1812 if (TYPE_OK (intHI_type_node
))
1813 return unsignedp
? unsigned_intHI_type_node
: intHI_type_node
;
1814 if (TYPE_OK (intQI_type_node
))
1815 return unsignedp
? unsigned_intQI_type_node
: intQI_type_node
;
1818 if (c_dialect_cxx ())
1821 return build_nonstandard_integer_type (TYPE_PRECISION (type
), unsignedp
);
1824 /* The C version of the register_builtin_type langhook. */
1827 c_register_builtin_type (tree type
, const char* name
)
1831 decl
= build_decl (TYPE_DECL
, get_identifier (name
), type
);
1832 DECL_ARTIFICIAL (decl
) = 1;
1833 if (!TYPE_NAME (type
))
1834 TYPE_NAME (type
) = decl
;
1837 registered_builtin_types
= tree_cons (0, type
, registered_builtin_types
);
1841 /* Return the minimum number of bits needed to represent VALUE in a
1842 signed or unsigned type, UNSIGNEDP says which. */
1845 min_precision (tree value
, int unsignedp
)
1849 /* If the value is negative, compute its negative minus 1. The latter
1850 adjustment is because the absolute value of the largest negative value
1851 is one larger than the largest positive value. This is equivalent to
1852 a bit-wise negation, so use that operation instead. */
1854 if (tree_int_cst_sgn (value
) < 0)
1855 value
= fold_build1 (BIT_NOT_EXPR
, TREE_TYPE (value
), value
);
1857 /* Return the number of bits needed, taking into account the fact
1858 that we need one more bit for a signed than unsigned type. */
1860 if (integer_zerop (value
))
1863 log
= tree_floor_log2 (value
);
1865 return log
+ 1 + !unsignedp
;
1868 /* Print an error message for invalid operands to arith operation
1869 CODE. NOP_EXPR is used as a special case (see
1870 c_common_truthvalue_conversion). */
1873 binary_op_error (enum tree_code code
)
1880 error ("invalid truth-value expression");
1884 opname
= "+"; break;
1886 opname
= "-"; break;
1888 opname
= "*"; break;
1890 opname
= "max"; break;
1892 opname
= "min"; break;
1894 opname
= "=="; break;
1896 opname
= "!="; break;
1898 opname
= "<="; break;
1900 opname
= ">="; break;
1902 opname
= "<"; break;
1904 opname
= ">"; break;
1906 opname
= "<<"; break;
1908 opname
= ">>"; break;
1909 case TRUNC_MOD_EXPR
:
1910 case FLOOR_MOD_EXPR
:
1911 opname
= "%"; break;
1912 case TRUNC_DIV_EXPR
:
1913 case FLOOR_DIV_EXPR
:
1914 opname
= "/"; break;
1916 opname
= "&"; break;
1918 opname
= "|"; break;
1919 case TRUTH_ANDIF_EXPR
:
1920 opname
= "&&"; break;
1921 case TRUTH_ORIF_EXPR
:
1922 opname
= "||"; break;
1924 opname
= "^"; break;
1928 error ("invalid operands to binary %s", opname
);
1931 /* Subroutine of build_binary_op, used for comparison operations.
1932 See if the operands have both been converted from subword integer types
1933 and, if so, perhaps change them both back to their original type.
1934 This function is also responsible for converting the two operands
1935 to the proper common type for comparison.
1937 The arguments of this function are all pointers to local variables
1938 of build_binary_op: OP0_PTR is &OP0, OP1_PTR is &OP1,
1939 RESTYPE_PTR is &RESULT_TYPE and RESCODE_PTR is &RESULTCODE.
1941 If this function returns nonzero, it means that the comparison has
1942 a constant value. What this function returns is an expression for
1946 shorten_compare (tree
*op0_ptr
, tree
*op1_ptr
, tree
*restype_ptr
,
1947 enum tree_code
*rescode_ptr
)
1950 tree op0
= *op0_ptr
;
1951 tree op1
= *op1_ptr
;
1952 int unsignedp0
, unsignedp1
;
1954 tree primop0
, primop1
;
1955 enum tree_code code
= *rescode_ptr
;
1957 /* Throw away any conversions to wider types
1958 already present in the operands. */
1960 primop0
= get_narrower (op0
, &unsignedp0
);
1961 primop1
= get_narrower (op1
, &unsignedp1
);
1963 /* Handle the case that OP0 does not *contain* a conversion
1964 but it *requires* conversion to FINAL_TYPE. */
1966 if (op0
== primop0
&& TREE_TYPE (op0
) != *restype_ptr
)
1967 unsignedp0
= TYPE_UNSIGNED (TREE_TYPE (op0
));
1968 if (op1
== primop1
&& TREE_TYPE (op1
) != *restype_ptr
)
1969 unsignedp1
= TYPE_UNSIGNED (TREE_TYPE (op1
));
1971 /* If one of the operands must be floated, we cannot optimize. */
1972 real1
= TREE_CODE (TREE_TYPE (primop0
)) == REAL_TYPE
;
1973 real2
= TREE_CODE (TREE_TYPE (primop1
)) == REAL_TYPE
;
1975 /* If first arg is constant, swap the args (changing operation
1976 so value is preserved), for canonicalization. Don't do this if
1977 the second arg is 0. */
1979 if (TREE_CONSTANT (primop0
)
1980 && !integer_zerop (primop1
) && !real_zerop (primop1
))
1983 int temi
= unsignedp0
;
1991 unsignedp0
= unsignedp1
;
2014 *rescode_ptr
= code
;
2017 /* If comparing an integer against a constant more bits wide,
2018 maybe we can deduce a value of 1 or 0 independent of the data.
2019 Or else truncate the constant now
2020 rather than extend the variable at run time.
2022 This is only interesting if the constant is the wider arg.
2023 Also, it is not safe if the constant is unsigned and the
2024 variable arg is signed, since in this case the variable
2025 would be sign-extended and then regarded as unsigned.
2026 Our technique fails in this case because the lowest/highest
2027 possible unsigned results don't follow naturally from the
2028 lowest/highest possible values of the variable operand.
2029 For just EQ_EXPR and NE_EXPR there is another technique that
2030 could be used: see if the constant can be faithfully represented
2031 in the other operand's type, by truncating it and reextending it
2032 and see if that preserves the constant's value. */
2034 if (!real1
&& !real2
2035 && TREE_CODE (primop1
) == INTEGER_CST
2036 && TYPE_PRECISION (TREE_TYPE (primop0
)) < TYPE_PRECISION (*restype_ptr
))
2038 int min_gt
, max_gt
, min_lt
, max_lt
;
2039 tree maxval
, minval
;
2040 /* 1 if comparison is nominally unsigned. */
2041 int unsignedp
= TYPE_UNSIGNED (*restype_ptr
);
2044 type
= c_common_signed_or_unsigned_type (unsignedp0
,
2045 TREE_TYPE (primop0
));
2047 maxval
= TYPE_MAX_VALUE (type
);
2048 minval
= TYPE_MIN_VALUE (type
);
2050 if (unsignedp
&& !unsignedp0
)
2051 *restype_ptr
= c_common_signed_type (*restype_ptr
);
2053 if (TREE_TYPE (primop1
) != *restype_ptr
)
2055 /* Convert primop1 to target type, but do not introduce
2056 additional overflow. We know primop1 is an int_cst. */
2057 tree tmp
= build_int_cst_wide (*restype_ptr
,
2058 TREE_INT_CST_LOW (primop1
),
2059 TREE_INT_CST_HIGH (primop1
));
2061 primop1
= force_fit_type (tmp
, 0, TREE_OVERFLOW (primop1
),
2062 TREE_CONSTANT_OVERFLOW (primop1
));
2064 if (type
!= *restype_ptr
)
2066 minval
= convert (*restype_ptr
, minval
);
2067 maxval
= convert (*restype_ptr
, maxval
);
2070 if (unsignedp
&& unsignedp0
)
2072 min_gt
= INT_CST_LT_UNSIGNED (primop1
, minval
);
2073 max_gt
= INT_CST_LT_UNSIGNED (primop1
, maxval
);
2074 min_lt
= INT_CST_LT_UNSIGNED (minval
, primop1
);
2075 max_lt
= INT_CST_LT_UNSIGNED (maxval
, primop1
);
2079 min_gt
= INT_CST_LT (primop1
, minval
);
2080 max_gt
= INT_CST_LT (primop1
, maxval
);
2081 min_lt
= INT_CST_LT (minval
, primop1
);
2082 max_lt
= INT_CST_LT (maxval
, primop1
);
2086 /* This used to be a switch, but Genix compiler can't handle that. */
2087 if (code
== NE_EXPR
)
2089 if (max_lt
|| min_gt
)
2090 val
= truthvalue_true_node
;
2092 else if (code
== EQ_EXPR
)
2094 if (max_lt
|| min_gt
)
2095 val
= truthvalue_false_node
;
2097 else if (code
== LT_EXPR
)
2100 val
= truthvalue_true_node
;
2102 val
= truthvalue_false_node
;
2104 else if (code
== GT_EXPR
)
2107 val
= truthvalue_true_node
;
2109 val
= truthvalue_false_node
;
2111 else if (code
== LE_EXPR
)
2114 val
= truthvalue_true_node
;
2116 val
= truthvalue_false_node
;
2118 else if (code
== GE_EXPR
)
2121 val
= truthvalue_true_node
;
2123 val
= truthvalue_false_node
;
2126 /* If primop0 was sign-extended and unsigned comparison specd,
2127 we did a signed comparison above using the signed type bounds.
2128 But the comparison we output must be unsigned.
2130 Also, for inequalities, VAL is no good; but if the signed
2131 comparison had *any* fixed result, it follows that the
2132 unsigned comparison just tests the sign in reverse
2133 (positive values are LE, negative ones GE).
2134 So we can generate an unsigned comparison
2135 against an extreme value of the signed type. */
2137 if (unsignedp
&& !unsignedp0
)
2144 primop1
= TYPE_MIN_VALUE (type
);
2150 primop1
= TYPE_MAX_VALUE (type
);
2157 type
= c_common_unsigned_type (type
);
2160 if (TREE_CODE (primop0
) != INTEGER_CST
)
2162 if (val
== truthvalue_false_node
)
2163 warning (0, "comparison is always false due to limited range of data type");
2164 if (val
== truthvalue_true_node
)
2165 warning (0, "comparison is always true due to limited range of data type");
2170 /* Don't forget to evaluate PRIMOP0 if it has side effects. */
2171 if (TREE_SIDE_EFFECTS (primop0
))
2172 return build2 (COMPOUND_EXPR
, TREE_TYPE (val
), primop0
, val
);
2176 /* Value is not predetermined, but do the comparison
2177 in the type of the operand that is not constant.
2178 TYPE is already properly set. */
2180 else if (real1
&& real2
2181 && (TYPE_PRECISION (TREE_TYPE (primop0
))
2182 == TYPE_PRECISION (TREE_TYPE (primop1
))))
2183 type
= TREE_TYPE (primop0
);
2185 /* If args' natural types are both narrower than nominal type
2186 and both extend in the same manner, compare them
2187 in the type of the wider arg.
2188 Otherwise must actually extend both to the nominal
2189 common type lest different ways of extending
2191 (eg, (short)-1 == (unsigned short)-1 should be 0.) */
2193 else if (unsignedp0
== unsignedp1
&& real1
== real2
2194 && TYPE_PRECISION (TREE_TYPE (primop0
)) < TYPE_PRECISION (*restype_ptr
)
2195 && TYPE_PRECISION (TREE_TYPE (primop1
)) < TYPE_PRECISION (*restype_ptr
))
2197 type
= common_type (TREE_TYPE (primop0
), TREE_TYPE (primop1
));
2198 type
= c_common_signed_or_unsigned_type (unsignedp0
2199 || TYPE_UNSIGNED (*restype_ptr
),
2201 /* Make sure shorter operand is extended the right way
2202 to match the longer operand. */
2204 = convert (c_common_signed_or_unsigned_type (unsignedp0
,
2205 TREE_TYPE (primop0
)),
2208 = convert (c_common_signed_or_unsigned_type (unsignedp1
,
2209 TREE_TYPE (primop1
)),
2214 /* Here we must do the comparison on the nominal type
2215 using the args exactly as we received them. */
2216 type
= *restype_ptr
;
2220 if (!real1
&& !real2
&& integer_zerop (primop1
)
2221 && TYPE_UNSIGNED (*restype_ptr
))
2227 /* All unsigned values are >= 0, so we warn if extra warnings
2228 are requested. However, if OP0 is a constant that is
2229 >= 0, the signedness of the comparison isn't an issue,
2230 so suppress the warning. */
2231 if (extra_warnings
&& !in_system_header
2232 && !(TREE_CODE (primop0
) == INTEGER_CST
2233 && !TREE_OVERFLOW (convert (c_common_signed_type (type
),
2235 warning (0, "comparison of unsigned expression >= 0 is always true");
2236 value
= truthvalue_true_node
;
2240 if (extra_warnings
&& !in_system_header
2241 && !(TREE_CODE (primop0
) == INTEGER_CST
2242 && !TREE_OVERFLOW (convert (c_common_signed_type (type
),
2244 warning (0, "comparison of unsigned expression < 0 is always false");
2245 value
= truthvalue_false_node
;
2254 /* Don't forget to evaluate PRIMOP0 if it has side effects. */
2255 if (TREE_SIDE_EFFECTS (primop0
))
2256 return build2 (COMPOUND_EXPR
, TREE_TYPE (value
),
2263 *op0_ptr
= convert (type
, primop0
);
2264 *op1_ptr
= convert (type
, primop1
);
2266 *restype_ptr
= truthvalue_type_node
;
2271 /* Return a tree for the sum or difference (RESULTCODE says which)
2272 of pointer PTROP and integer INTOP. */
2275 pointer_int_sum (enum tree_code resultcode
, tree ptrop
, tree intop
)
2279 /* The result is a pointer of the same type that is being added. */
2281 tree result_type
= TREE_TYPE (ptrop
);
2283 if (TREE_CODE (TREE_TYPE (result_type
)) == VOID_TYPE
)
2285 if (pedantic
|| warn_pointer_arith
)
2286 pedwarn ("pointer of type %<void *%> used in arithmetic");
2287 size_exp
= integer_one_node
;
2289 else if (TREE_CODE (TREE_TYPE (result_type
)) == FUNCTION_TYPE
)
2291 if (pedantic
|| warn_pointer_arith
)
2292 pedwarn ("pointer to a function used in arithmetic");
2293 size_exp
= integer_one_node
;
2295 else if (TREE_CODE (TREE_TYPE (result_type
)) == METHOD_TYPE
)
2297 if (pedantic
|| warn_pointer_arith
)
2298 pedwarn ("pointer to member function used in arithmetic");
2299 size_exp
= integer_one_node
;
2302 size_exp
= size_in_bytes (TREE_TYPE (result_type
));
2304 /* If what we are about to multiply by the size of the elements
2305 contains a constant term, apply distributive law
2306 and multiply that constant term separately.
2307 This helps produce common subexpressions. */
2309 if ((TREE_CODE (intop
) == PLUS_EXPR
|| TREE_CODE (intop
) == MINUS_EXPR
)
2310 && !TREE_CONSTANT (intop
)
2311 && TREE_CONSTANT (TREE_OPERAND (intop
, 1))
2312 && TREE_CONSTANT (size_exp
)
2313 /* If the constant comes from pointer subtraction,
2314 skip this optimization--it would cause an error. */
2315 && TREE_CODE (TREE_TYPE (TREE_OPERAND (intop
, 0))) == INTEGER_TYPE
2316 /* If the constant is unsigned, and smaller than the pointer size,
2317 then we must skip this optimization. This is because it could cause
2318 an overflow error if the constant is negative but INTOP is not. */
2319 && (!TYPE_UNSIGNED (TREE_TYPE (intop
))
2320 || (TYPE_PRECISION (TREE_TYPE (intop
))
2321 == TYPE_PRECISION (TREE_TYPE (ptrop
)))))
2323 enum tree_code subcode
= resultcode
;
2324 tree int_type
= TREE_TYPE (intop
);
2325 if (TREE_CODE (intop
) == MINUS_EXPR
)
2326 subcode
= (subcode
== PLUS_EXPR
? MINUS_EXPR
: PLUS_EXPR
);
2327 /* Convert both subexpression types to the type of intop,
2328 because weird cases involving pointer arithmetic
2329 can result in a sum or difference with different type args. */
2330 ptrop
= build_binary_op (subcode
, ptrop
,
2331 convert (int_type
, TREE_OPERAND (intop
, 1)), 1);
2332 intop
= convert (int_type
, TREE_OPERAND (intop
, 0));
2335 /* Convert the integer argument to a type the same size as sizetype
2336 so the multiply won't overflow spuriously. */
2338 if (TYPE_PRECISION (TREE_TYPE (intop
)) != TYPE_PRECISION (sizetype
)
2339 || TYPE_UNSIGNED (TREE_TYPE (intop
)) != TYPE_UNSIGNED (sizetype
))
2340 intop
= convert (c_common_type_for_size (TYPE_PRECISION (sizetype
),
2341 TYPE_UNSIGNED (sizetype
)), intop
);
2343 /* Replace the integer argument with a suitable product by the object size.
2344 Do this multiplication as signed, then convert to the appropriate
2345 pointer type (actually unsigned integral). */
2347 intop
= convert (result_type
,
2348 build_binary_op (MULT_EXPR
, intop
,
2349 convert (TREE_TYPE (intop
), size_exp
), 1));
2351 /* Create the sum or difference. */
2352 return fold_build2 (resultcode
, result_type
, ptrop
, intop
);
2355 /* Prepare expr to be an argument of a TRUTH_NOT_EXPR,
2356 or for an `if' or `while' statement or ?..: exp. It should already
2357 have been validated to be of suitable type; otherwise, a bad
2358 diagnostic may result.
2360 This preparation consists of taking the ordinary
2361 representation of an expression expr and producing a valid tree
2362 boolean expression describing whether expr is nonzero. We could
2363 simply always do build_binary_op (NE_EXPR, expr, truthvalue_false_node, 1),
2364 but we optimize comparisons, &&, ||, and !.
2366 The resulting type should always be `truthvalue_type_node'. */
2369 c_common_truthvalue_conversion (tree expr
)
2371 switch (TREE_CODE (expr
))
2373 case EQ_EXPR
: case NE_EXPR
: case UNEQ_EXPR
: case LTGT_EXPR
:
2374 case LE_EXPR
: case GE_EXPR
: case LT_EXPR
: case GT_EXPR
:
2375 case UNLE_EXPR
: case UNGE_EXPR
: case UNLT_EXPR
: case UNGT_EXPR
:
2376 case ORDERED_EXPR
: case UNORDERED_EXPR
:
2377 if (TREE_TYPE (expr
) == truthvalue_type_node
)
2379 return build2 (TREE_CODE (expr
), truthvalue_type_node
,
2380 TREE_OPERAND (expr
, 0), TREE_OPERAND (expr
, 1));
2382 case TRUTH_ANDIF_EXPR
:
2383 case TRUTH_ORIF_EXPR
:
2384 case TRUTH_AND_EXPR
:
2386 case TRUTH_XOR_EXPR
:
2387 if (TREE_TYPE (expr
) == truthvalue_type_node
)
2389 return build2 (TREE_CODE (expr
), truthvalue_type_node
,
2390 c_common_truthvalue_conversion (TREE_OPERAND (expr
, 0)),
2391 c_common_truthvalue_conversion (TREE_OPERAND (expr
, 1)));
2393 case TRUTH_NOT_EXPR
:
2394 if (TREE_TYPE (expr
) == truthvalue_type_node
)
2396 return build1 (TREE_CODE (expr
), truthvalue_type_node
,
2397 c_common_truthvalue_conversion (TREE_OPERAND (expr
, 0)));
2403 /* Avoid integer_zerop to ignore TREE_CONSTANT_OVERFLOW. */
2404 return (TREE_INT_CST_LOW (expr
) != 0 || TREE_INT_CST_HIGH (expr
) != 0)
2405 ? truthvalue_true_node
2406 : truthvalue_false_node
;
2409 return real_compare (NE_EXPR
, &TREE_REAL_CST (expr
), &dconst0
)
2410 ? truthvalue_true_node
2411 : truthvalue_false_node
;
2414 expr
= build_unary_op (ADDR_EXPR
, expr
, 0);
2419 if (TREE_CODE (TREE_OPERAND (expr
, 0)) == FUNCTION_DECL
2420 && !DECL_WEAK (TREE_OPERAND (expr
, 0)))
2422 /* Common Ada/Pascal programmer's mistake. We always warn
2423 about this since it is so bad. */
2424 warning (0, "the address of %qD, will always evaluate as %<true%>",
2425 TREE_OPERAND (expr
, 0));
2426 return truthvalue_true_node
;
2429 /* If we are taking the address of an external decl, it might be
2430 zero if it is weak, so we cannot optimize. */
2431 if (DECL_P (TREE_OPERAND (expr
, 0))
2432 && DECL_EXTERNAL (TREE_OPERAND (expr
, 0)))
2435 if (TREE_SIDE_EFFECTS (TREE_OPERAND (expr
, 0)))
2436 return build2 (COMPOUND_EXPR
, truthvalue_type_node
,
2437 TREE_OPERAND (expr
, 0), truthvalue_true_node
);
2439 return truthvalue_true_node
;
2443 return build_binary_op ((TREE_SIDE_EFFECTS (TREE_OPERAND (expr
, 1))
2444 ? TRUTH_OR_EXPR
: TRUTH_ORIF_EXPR
),
2445 c_common_truthvalue_conversion (TREE_OPERAND (expr
, 0)),
2446 c_common_truthvalue_conversion (TREE_OPERAND (expr
, 1)),
2452 /* These don't change whether an object is nonzero or zero. */
2453 return c_common_truthvalue_conversion (TREE_OPERAND (expr
, 0));
2457 /* These don't change whether an object is zero or nonzero, but
2458 we can't ignore them if their second arg has side-effects. */
2459 if (TREE_SIDE_EFFECTS (TREE_OPERAND (expr
, 1)))
2460 return build2 (COMPOUND_EXPR
, truthvalue_type_node
,
2461 TREE_OPERAND (expr
, 1),
2462 c_common_truthvalue_conversion (TREE_OPERAND (expr
, 0)));
2464 return c_common_truthvalue_conversion (TREE_OPERAND (expr
, 0));
2467 /* Distribute the conversion into the arms of a COND_EXPR. */
2468 return fold_build3 (COND_EXPR
, truthvalue_type_node
,
2469 TREE_OPERAND (expr
, 0),
2470 c_common_truthvalue_conversion (TREE_OPERAND (expr
, 1)),
2471 c_common_truthvalue_conversion (TREE_OPERAND (expr
, 2)));
2474 /* Don't cancel the effect of a CONVERT_EXPR from a REFERENCE_TYPE,
2475 since that affects how `default_conversion' will behave. */
2476 if (TREE_CODE (TREE_TYPE (expr
)) == REFERENCE_TYPE
2477 || TREE_CODE (TREE_TYPE (TREE_OPERAND (expr
, 0))) == REFERENCE_TYPE
)
2479 /* Fall through.... */
2481 /* If this is widening the argument, we can ignore it. */
2482 if (TYPE_PRECISION (TREE_TYPE (expr
))
2483 >= TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (expr
, 0))))
2484 return c_common_truthvalue_conversion (TREE_OPERAND (expr
, 0));
2488 /* Perhaps reduce (x - y) != 0 to (x != y). The expressions
2489 aren't guaranteed to the be same for modes that can represent
2490 infinity, since if x and y are both +infinity, or both
2491 -infinity, then x - y is not a number.
2493 Note that this transformation is safe when x or y is NaN.
2494 (x - y) is then NaN, and both (x - y) != 0 and x != y will
2496 if (HONOR_INFINITIES (TYPE_MODE (TREE_TYPE (TREE_OPERAND (expr
, 0)))))
2498 /* Fall through.... */
2500 /* This and MINUS_EXPR can be changed into a comparison of the
2502 if (TREE_TYPE (TREE_OPERAND (expr
, 0))
2503 == TREE_TYPE (TREE_OPERAND (expr
, 1)))
2504 return fold_build2 (NE_EXPR
, truthvalue_type_node
,
2505 TREE_OPERAND (expr
, 0), TREE_OPERAND (expr
, 1));
2506 return fold_build2 (NE_EXPR
, truthvalue_type_node
,
2507 TREE_OPERAND (expr
, 0),
2508 fold_convert (TREE_TYPE (TREE_OPERAND (expr
, 0)),
2509 TREE_OPERAND (expr
, 1)));
2512 if (integer_onep (TREE_OPERAND (expr
, 1))
2513 && TREE_TYPE (expr
) != truthvalue_type_node
)
2514 /* Using convert here would cause infinite recursion. */
2515 return build1 (NOP_EXPR
, truthvalue_type_node
, expr
);
2519 if (!TREE_NO_WARNING (expr
))
2520 warning (OPT_Wparentheses
,
2521 "suggest parentheses around assignment used as truth value");
2528 if (TREE_CODE (TREE_TYPE (expr
)) == COMPLEX_TYPE
)
2530 tree t
= save_expr (expr
);
2531 return (build_binary_op
2532 ((TREE_SIDE_EFFECTS (expr
)
2533 ? TRUTH_OR_EXPR
: TRUTH_ORIF_EXPR
),
2534 c_common_truthvalue_conversion (build_unary_op (REALPART_EXPR
, t
, 0)),
2535 c_common_truthvalue_conversion (build_unary_op (IMAGPART_EXPR
, t
, 0)),
2539 return build_binary_op (NE_EXPR
, expr
, integer_zero_node
, 1);
2542 static void def_builtin_1 (enum built_in_function fncode
,
2544 enum built_in_class fnclass
,
2545 tree fntype
, tree libtype
,
2546 bool both_p
, bool fallback_p
, bool nonansi_p
,
2547 tree fnattrs
, bool implicit_p
);
2549 /* Make a variant type in the proper way for C/C++, propagating qualifiers
2550 down to the element type of an array. */
2553 c_build_qualified_type (tree type
, int type_quals
)
2555 if (type
== error_mark_node
)
2558 if (TREE_CODE (type
) == ARRAY_TYPE
)
2561 tree element_type
= c_build_qualified_type (TREE_TYPE (type
),
2564 /* See if we already have an identically qualified type. */
2565 for (t
= TYPE_MAIN_VARIANT (type
); t
; t
= TYPE_NEXT_VARIANT (t
))
2567 if (TYPE_QUALS (strip_array_types (t
)) == type_quals
2568 && TYPE_NAME (t
) == TYPE_NAME (type
)
2569 && TYPE_CONTEXT (t
) == TYPE_CONTEXT (type
)
2570 && attribute_list_equal (TYPE_ATTRIBUTES (t
),
2571 TYPE_ATTRIBUTES (type
)))
2576 t
= build_variant_type_copy (type
);
2577 TREE_TYPE (t
) = element_type
;
2582 /* A restrict-qualified pointer type must be a pointer to object or
2583 incomplete type. Note that the use of POINTER_TYPE_P also allows
2584 REFERENCE_TYPEs, which is appropriate for C++. */
2585 if ((type_quals
& TYPE_QUAL_RESTRICT
)
2586 && (!POINTER_TYPE_P (type
)
2587 || !C_TYPE_OBJECT_OR_INCOMPLETE_P (TREE_TYPE (type
))))
2589 error ("invalid use of %<restrict%>");
2590 type_quals
&= ~TYPE_QUAL_RESTRICT
;
2593 return build_qualified_type (type
, type_quals
);
2596 /* Apply the TYPE_QUALS to the new DECL. */
2599 c_apply_type_quals_to_decl (int type_quals
, tree decl
)
2601 tree type
= TREE_TYPE (decl
);
2603 if (type
== error_mark_node
)
2606 if (((type_quals
& TYPE_QUAL_CONST
)
2607 || (type
&& TREE_CODE (type
) == REFERENCE_TYPE
))
2608 /* An object declared 'const' is only readonly after it is
2609 initialized. We don't have any way of expressing this currently,
2610 so we need to be conservative and unset TREE_READONLY for types
2611 with constructors. Otherwise aliasing code will ignore stores in
2612 an inline constructor. */
2613 && !(type
&& TYPE_NEEDS_CONSTRUCTING (type
)))
2614 TREE_READONLY (decl
) = 1;
2615 if (type_quals
& TYPE_QUAL_VOLATILE
)
2617 TREE_SIDE_EFFECTS (decl
) = 1;
2618 TREE_THIS_VOLATILE (decl
) = 1;
2620 if (type_quals
& TYPE_QUAL_RESTRICT
)
2622 while (type
&& TREE_CODE (type
) == ARRAY_TYPE
)
2623 /* Allow 'restrict' on arrays of pointers.
2624 FIXME currently we just ignore it. */
2625 type
= TREE_TYPE (type
);
2627 || !POINTER_TYPE_P (type
)
2628 || !C_TYPE_OBJECT_OR_INCOMPLETE_P (TREE_TYPE (type
)))
2629 error ("invalid use of %<restrict%>");
2630 else if (flag_strict_aliasing
&& type
== TREE_TYPE (decl
))
2631 /* Indicate we need to make a unique alias set for this pointer.
2632 We can't do it here because it might be pointing to an
2634 DECL_POINTER_ALIAS_SET (decl
) = -2;
2638 /* Hash function for the problem of multiple type definitions in
2639 different files. This must hash all types that will compare
2640 equal via comptypes to the same value. In practice it hashes
2641 on some of the simple stuff and leaves the details to comptypes. */
2644 c_type_hash (const void *p
)
2650 switch (TREE_CODE (t
))
2652 /* For pointers, hash on pointee type plus some swizzling. */
2654 return c_type_hash (TREE_TYPE (t
)) ^ 0x3003003;
2655 /* Hash on number of elements and total size. */
2658 t2
= TYPE_VALUES (t
);
2662 t2
= TYPE_FIELDS (t
);
2664 case QUAL_UNION_TYPE
:
2666 t2
= TYPE_FIELDS (t
);
2670 t2
= TYPE_FIELDS (t
);
2675 for (; t2
; t2
= TREE_CHAIN (t2
))
2677 size
= TREE_INT_CST_LOW (TYPE_SIZE (t
));
2678 return ((size
<< 24) | (i
<< shift
));
2681 static GTY((param_is (union tree_node
))) htab_t type_hash_table
;
2683 /* Return the typed-based alias set for T, which may be an expression
2684 or a type. Return -1 if we don't do anything special. */
2687 c_common_get_alias_set (tree t
)
2692 /* Permit type-punning when accessing a union, provided the access
2693 is directly through the union. For example, this code does not
2694 permit taking the address of a union member and then storing
2695 through it. Even the type-punning allowed here is a GCC
2696 extension, albeit a common and useful one; the C standard says
2697 that such accesses have implementation-defined behavior. */
2699 TREE_CODE (u
) == COMPONENT_REF
|| TREE_CODE (u
) == ARRAY_REF
;
2700 u
= TREE_OPERAND (u
, 0))
2701 if (TREE_CODE (u
) == COMPONENT_REF
2702 && TREE_CODE (TREE_TYPE (TREE_OPERAND (u
, 0))) == UNION_TYPE
)
2705 /* That's all the expressions we handle specially. */
2709 /* The C standard guarantees that any object may be accessed via an
2710 lvalue that has character type. */
2711 if (t
== char_type_node
2712 || t
== signed_char_type_node
2713 || t
== unsigned_char_type_node
)
2716 /* If it has the may_alias attribute, it can alias anything. */
2717 if (lookup_attribute ("may_alias", TYPE_ATTRIBUTES (t
)))
2720 /* The C standard specifically allows aliasing between signed and
2721 unsigned variants of the same type. We treat the signed
2722 variant as canonical. */
2723 if (TREE_CODE (t
) == INTEGER_TYPE
&& TYPE_UNSIGNED (t
))
2725 tree t1
= c_common_signed_type (t
);
2727 /* t1 == t can happen for boolean nodes which are always unsigned. */
2729 return get_alias_set (t1
);
2731 else if (POINTER_TYPE_P (t
))
2735 /* Unfortunately, there is no canonical form of a pointer type.
2736 In particular, if we have `typedef int I', then `int *', and
2737 `I *' are different types. So, we have to pick a canonical
2738 representative. We do this below.
2740 Technically, this approach is actually more conservative that
2741 it needs to be. In particular, `const int *' and `int *'
2742 should be in different alias sets, according to the C and C++
2743 standard, since their types are not the same, and so,
2744 technically, an `int **' and `const int **' cannot point at
2747 But, the standard is wrong. In particular, this code is
2752 const int* const* cipp = ipp;
2754 And, it doesn't make sense for that to be legal unless you
2755 can dereference IPP and CIPP. So, we ignore cv-qualifiers on
2756 the pointed-to types. This issue has been reported to the
2758 t1
= build_type_no_quals (t
);
2760 return get_alias_set (t1
);
2763 /* Handle the case of multiple type nodes referring to "the same" type,
2764 which occurs with IMA. These share an alias set. FIXME: Currently only
2765 C90 is handled. (In C99 type compatibility is not transitive, which
2766 complicates things mightily. The alias set splay trees can theoretically
2767 represent this, but insertion is tricky when you consider all the
2768 different orders things might arrive in.) */
2770 if (c_language
!= clk_c
|| flag_isoc99
)
2773 /* Save time if there's only one input file. */
2774 if (num_in_fnames
== 1)
2777 /* Pointers need special handling if they point to any type that
2778 needs special handling (below). */
2779 if (TREE_CODE (t
) == POINTER_TYPE
)
2782 /* Find bottom type under any nested POINTERs. */
2783 for (t2
= TREE_TYPE (t
);
2784 TREE_CODE (t2
) == POINTER_TYPE
;
2785 t2
= TREE_TYPE (t2
))
2787 if (TREE_CODE (t2
) != RECORD_TYPE
2788 && TREE_CODE (t2
) != ENUMERAL_TYPE
2789 && TREE_CODE (t2
) != QUAL_UNION_TYPE
2790 && TREE_CODE (t2
) != UNION_TYPE
)
2792 if (TYPE_SIZE (t2
) == 0)
2795 /* These are the only cases that need special handling. */
2796 if (TREE_CODE (t
) != RECORD_TYPE
2797 && TREE_CODE (t
) != ENUMERAL_TYPE
2798 && TREE_CODE (t
) != QUAL_UNION_TYPE
2799 && TREE_CODE (t
) != UNION_TYPE
2800 && TREE_CODE (t
) != POINTER_TYPE
)
2803 if (TYPE_SIZE (t
) == 0)
2806 /* Look up t in hash table. Only one of the compatible types within each
2807 alias set is recorded in the table. */
2808 if (!type_hash_table
)
2809 type_hash_table
= htab_create_ggc (1021, c_type_hash
,
2810 (htab_eq
) lang_hooks
.types_compatible_p
,
2812 slot
= htab_find_slot (type_hash_table
, t
, INSERT
);
2815 TYPE_ALIAS_SET (t
) = TYPE_ALIAS_SET ((tree
)*slot
);
2816 return TYPE_ALIAS_SET ((tree
)*slot
);
2819 /* Our caller will assign and record (in t) a new alias set; all we need
2820 to do is remember t in the hash table. */
2826 /* Compute the value of 'sizeof (TYPE)' or '__alignof__ (TYPE)', where the
2827 second parameter indicates which OPERATOR is being applied. The COMPLAIN
2828 flag controls whether we should diagnose possibly ill-formed
2829 constructs or not. */
2832 c_sizeof_or_alignof_type (tree type
, bool is_sizeof
, int complain
)
2834 const char *op_name
;
2836 enum tree_code type_code
= TREE_CODE (type
);
2838 op_name
= is_sizeof
? "sizeof" : "__alignof__";
2840 if (type_code
== FUNCTION_TYPE
)
2844 if (complain
&& (pedantic
|| warn_pointer_arith
))
2845 pedwarn ("invalid application of %<sizeof%> to a function type");
2846 value
= size_one_node
;
2849 value
= size_int (FUNCTION_BOUNDARY
/ BITS_PER_UNIT
);
2851 else if (type_code
== VOID_TYPE
|| type_code
== ERROR_MARK
)
2853 if (type_code
== VOID_TYPE
2854 && complain
&& (pedantic
|| warn_pointer_arith
))
2855 pedwarn ("invalid application of %qs to a void type", op_name
);
2856 value
= size_one_node
;
2858 else if (!COMPLETE_TYPE_P (type
))
2861 error ("invalid application of %qs to incomplete type %qT ",
2863 value
= size_zero_node
;
2868 /* Convert in case a char is more than one unit. */
2869 value
= size_binop (CEIL_DIV_EXPR
, TYPE_SIZE_UNIT (type
),
2870 size_int (TYPE_PRECISION (char_type_node
)
2873 value
= size_int (TYPE_ALIGN_UNIT (type
));
2876 /* VALUE will have an integer type with TYPE_IS_SIZETYPE set.
2877 TYPE_IS_SIZETYPE means that certain things (like overflow) will
2878 never happen. However, this node should really have type
2879 `size_t', which is just a typedef for an ordinary integer type. */
2880 value
= fold_build1 (NOP_EXPR
, size_type_node
, value
);
2881 gcc_assert (!TYPE_IS_SIZETYPE (TREE_TYPE (value
)));
2886 /* Implement the __alignof keyword: Return the minimum required
2887 alignment of EXPR, measured in bytes. For VAR_DECL's and
2888 FIELD_DECL's return DECL_ALIGN (which can be set from an
2889 "aligned" __attribute__ specification). */
2892 c_alignof_expr (tree expr
)
2896 if (TREE_CODE (expr
) == VAR_DECL
)
2897 t
= size_int (DECL_ALIGN_UNIT (expr
));
2899 else if (TREE_CODE (expr
) == COMPONENT_REF
2900 && DECL_C_BIT_FIELD (TREE_OPERAND (expr
, 1)))
2902 error ("%<__alignof%> applied to a bit-field");
2905 else if (TREE_CODE (expr
) == COMPONENT_REF
2906 && TREE_CODE (TREE_OPERAND (expr
, 1)) == FIELD_DECL
)
2907 t
= size_int (DECL_ALIGN_UNIT (TREE_OPERAND (expr
, 1)));
2909 else if (TREE_CODE (expr
) == INDIRECT_REF
)
2911 tree t
= TREE_OPERAND (expr
, 0);
2913 int bestalign
= TYPE_ALIGN (TREE_TYPE (TREE_TYPE (t
)));
2915 while (TREE_CODE (t
) == NOP_EXPR
2916 && TREE_CODE (TREE_TYPE (TREE_OPERAND (t
, 0))) == POINTER_TYPE
)
2920 t
= TREE_OPERAND (t
, 0);
2921 thisalign
= TYPE_ALIGN (TREE_TYPE (TREE_TYPE (t
)));
2922 if (thisalign
> bestalign
)
2923 best
= t
, bestalign
= thisalign
;
2925 return c_alignof (TREE_TYPE (TREE_TYPE (best
)));
2928 return c_alignof (TREE_TYPE (expr
));
2930 return fold_build1 (NOP_EXPR
, size_type_node
, t
);
2933 /* Handle C and C++ default attributes. */
2935 enum built_in_attribute
2937 #define DEF_ATTR_NULL_TREE(ENUM) ENUM,
2938 #define DEF_ATTR_INT(ENUM, VALUE) ENUM,
2939 #define DEF_ATTR_IDENT(ENUM, STRING) ENUM,
2940 #define DEF_ATTR_TREE_LIST(ENUM, PURPOSE, VALUE, CHAIN) ENUM,
2941 #include "builtin-attrs.def"
2942 #undef DEF_ATTR_NULL_TREE
2944 #undef DEF_ATTR_IDENT
2945 #undef DEF_ATTR_TREE_LIST
2949 static GTY(()) tree built_in_attributes
[(int) ATTR_LAST
];
2951 static void c_init_attributes (void);
2953 /* Build tree nodes and builtin functions common to both C and C++ language
2957 c_common_nodes_and_builtins (void)
2961 #define DEF_PRIMITIVE_TYPE(NAME, VALUE) NAME,
2962 #define DEF_FUNCTION_TYPE_0(NAME, RETURN) NAME,
2963 #define DEF_FUNCTION_TYPE_1(NAME, RETURN, ARG1) NAME,
2964 #define DEF_FUNCTION_TYPE_2(NAME, RETURN, ARG1, ARG2) NAME,
2965 #define DEF_FUNCTION_TYPE_3(NAME, RETURN, ARG1, ARG2, ARG3) NAME,
2966 #define DEF_FUNCTION_TYPE_4(NAME, RETURN, ARG1, ARG2, ARG3, ARG4) NAME,
2967 #define DEF_FUNCTION_TYPE_5(NAME, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5) NAME,
2968 #define DEF_FUNCTION_TYPE_6(NAME, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, ARG6) \
2970 #define DEF_FUNCTION_TYPE_VAR_0(NAME, RETURN) NAME,
2971 #define DEF_FUNCTION_TYPE_VAR_1(NAME, RETURN, ARG1) NAME,
2972 #define DEF_FUNCTION_TYPE_VAR_2(NAME, RETURN, ARG1, ARG2) NAME,
2973 #define DEF_FUNCTION_TYPE_VAR_3(NAME, RETURN, ARG1, ARG2, ARG3) NAME,
2974 #define DEF_FUNCTION_TYPE_VAR_4(NAME, RETURN, ARG1, ARG2, ARG3, ARG4) NAME,
2975 #define DEF_FUNCTION_TYPE_VAR_5(NAME, RETURN, ARG1, ARG2, ARG3, ARG4, ARG6) \
2977 #define DEF_POINTER_TYPE(NAME, TYPE) NAME,
2978 #include "builtin-types.def"
2979 #undef DEF_PRIMITIVE_TYPE
2980 #undef DEF_FUNCTION_TYPE_0
2981 #undef DEF_FUNCTION_TYPE_1
2982 #undef DEF_FUNCTION_TYPE_2
2983 #undef DEF_FUNCTION_TYPE_3
2984 #undef DEF_FUNCTION_TYPE_4
2985 #undef DEF_FUNCTION_TYPE_5
2986 #undef DEF_FUNCTION_TYPE_6
2987 #undef DEF_FUNCTION_TYPE_VAR_0
2988 #undef DEF_FUNCTION_TYPE_VAR_1
2989 #undef DEF_FUNCTION_TYPE_VAR_2
2990 #undef DEF_FUNCTION_TYPE_VAR_3
2991 #undef DEF_FUNCTION_TYPE_VAR_4
2992 #undef DEF_FUNCTION_TYPE_VAR_5
2993 #undef DEF_POINTER_TYPE
2997 typedef enum builtin_type builtin_type
;
2999 tree builtin_types
[(int) BT_LAST
+ 1];
3000 int wchar_type_size
;
3001 tree array_domain_type
;
3002 tree va_list_ref_type_node
;
3003 tree va_list_arg_type_node
;
3005 /* Define `int' and `char' first so that dbx will output them first. */
3006 record_builtin_type (RID_INT
, NULL
, integer_type_node
);
3007 record_builtin_type (RID_CHAR
, "char", char_type_node
);
3009 /* `signed' is the same as `int'. FIXME: the declarations of "signed",
3010 "unsigned long", "long long unsigned" and "unsigned short" were in C++
3011 but not C. Are the conditionals here needed? */
3012 if (c_dialect_cxx ())
3013 record_builtin_type (RID_SIGNED
, NULL
, integer_type_node
);
3014 record_builtin_type (RID_LONG
, "long int", long_integer_type_node
);
3015 record_builtin_type (RID_UNSIGNED
, "unsigned int", unsigned_type_node
);
3016 record_builtin_type (RID_MAX
, "long unsigned int",
3017 long_unsigned_type_node
);
3018 if (c_dialect_cxx ())
3019 record_builtin_type (RID_MAX
, "unsigned long", long_unsigned_type_node
);
3020 record_builtin_type (RID_MAX
, "long long int",
3021 long_long_integer_type_node
);
3022 record_builtin_type (RID_MAX
, "long long unsigned int",
3023 long_long_unsigned_type_node
);
3024 if (c_dialect_cxx ())
3025 record_builtin_type (RID_MAX
, "long long unsigned",
3026 long_long_unsigned_type_node
);
3027 record_builtin_type (RID_SHORT
, "short int", short_integer_type_node
);
3028 record_builtin_type (RID_MAX
, "short unsigned int",
3029 short_unsigned_type_node
);
3030 if (c_dialect_cxx ())
3031 record_builtin_type (RID_MAX
, "unsigned short",
3032 short_unsigned_type_node
);
3034 /* Define both `signed char' and `unsigned char'. */
3035 record_builtin_type (RID_MAX
, "signed char", signed_char_type_node
);
3036 record_builtin_type (RID_MAX
, "unsigned char", unsigned_char_type_node
);
3038 /* These are types that c_common_type_for_size and
3039 c_common_type_for_mode use. */
3040 lang_hooks
.decls
.pushdecl (build_decl (TYPE_DECL
, NULL_TREE
,
3042 lang_hooks
.decls
.pushdecl (build_decl (TYPE_DECL
, NULL_TREE
,
3044 lang_hooks
.decls
.pushdecl (build_decl (TYPE_DECL
, NULL_TREE
,
3046 lang_hooks
.decls
.pushdecl (build_decl (TYPE_DECL
, NULL_TREE
,
3048 #if HOST_BITS_PER_WIDE_INT >= 64
3049 if (targetm
.scalar_mode_supported_p (TImode
))
3050 lang_hooks
.decls
.pushdecl (build_decl (TYPE_DECL
,
3051 get_identifier ("__int128_t"),
3054 lang_hooks
.decls
.pushdecl (build_decl (TYPE_DECL
, NULL_TREE
,
3055 unsigned_intQI_type_node
));
3056 lang_hooks
.decls
.pushdecl (build_decl (TYPE_DECL
, NULL_TREE
,
3057 unsigned_intHI_type_node
));
3058 lang_hooks
.decls
.pushdecl (build_decl (TYPE_DECL
, NULL_TREE
,
3059 unsigned_intSI_type_node
));
3060 lang_hooks
.decls
.pushdecl (build_decl (TYPE_DECL
, NULL_TREE
,
3061 unsigned_intDI_type_node
));
3062 #if HOST_BITS_PER_WIDE_INT >= 64
3063 if (targetm
.scalar_mode_supported_p (TImode
))
3064 lang_hooks
.decls
.pushdecl (build_decl (TYPE_DECL
,
3065 get_identifier ("__uint128_t"),
3066 unsigned_intTI_type_node
));
3069 /* Create the widest literal types. */
3070 widest_integer_literal_type_node
3071 = make_signed_type (HOST_BITS_PER_WIDE_INT
* 2);
3072 lang_hooks
.decls
.pushdecl (build_decl (TYPE_DECL
, NULL_TREE
,
3073 widest_integer_literal_type_node
));
3075 widest_unsigned_literal_type_node
3076 = make_unsigned_type (HOST_BITS_PER_WIDE_INT
* 2);
3077 lang_hooks
.decls
.pushdecl (build_decl (TYPE_DECL
, NULL_TREE
,
3078 widest_unsigned_literal_type_node
));
3080 /* `unsigned long' is the standard type for sizeof.
3081 Note that stddef.h uses `unsigned long',
3082 and this must agree, even if long and int are the same size. */
3084 TREE_TYPE (identifier_global_value (get_identifier (SIZE_TYPE
)));
3085 signed_size_type_node
= c_common_signed_type (size_type_node
);
3086 set_sizetype (size_type_node
);
3089 TREE_TYPE (identifier_global_value (get_identifier (PID_TYPE
)));
3091 build_common_tree_nodes_2 (flag_short_double
);
3093 record_builtin_type (RID_FLOAT
, NULL
, float_type_node
);
3094 record_builtin_type (RID_DOUBLE
, NULL
, double_type_node
);
3095 record_builtin_type (RID_MAX
, "long double", long_double_type_node
);
3097 lang_hooks
.decls
.pushdecl (build_decl (TYPE_DECL
,
3098 get_identifier ("complex int"),
3099 complex_integer_type_node
));
3100 lang_hooks
.decls
.pushdecl (build_decl (TYPE_DECL
,
3101 get_identifier ("complex float"),
3102 complex_float_type_node
));
3103 lang_hooks
.decls
.pushdecl (build_decl (TYPE_DECL
,
3104 get_identifier ("complex double"),
3105 complex_double_type_node
));
3106 lang_hooks
.decls
.pushdecl
3107 (build_decl (TYPE_DECL
, get_identifier ("complex long double"),
3108 complex_long_double_type_node
));
3110 if (c_dialect_cxx ())
3111 /* For C++, make fileptr_type_node a distinct void * type until
3112 FILE type is defined. */
3113 fileptr_type_node
= build_variant_type_copy (ptr_type_node
);
3115 record_builtin_type (RID_VOID
, NULL
, void_type_node
);
3117 /* This node must not be shared. */
3118 void_zero_node
= make_node (INTEGER_CST
);
3119 TREE_TYPE (void_zero_node
) = void_type_node
;
3121 void_list_node
= build_void_list_node ();
3123 /* Make a type to be the domain of a few array types
3124 whose domains don't really matter.
3125 200 is small enough that it always fits in size_t
3126 and large enough that it can hold most function names for the
3127 initializations of __FUNCTION__ and __PRETTY_FUNCTION__. */
3128 array_domain_type
= build_index_type (size_int (200));
3130 /* Make a type for arrays of characters.
3131 With luck nothing will ever really depend on the length of this
3133 char_array_type_node
3134 = build_array_type (char_type_node
, array_domain_type
);
3136 /* Likewise for arrays of ints. */
3138 = build_array_type (integer_type_node
, array_domain_type
);
3140 string_type_node
= build_pointer_type (char_type_node
);
3141 const_string_type_node
3142 = build_pointer_type (build_qualified_type
3143 (char_type_node
, TYPE_QUAL_CONST
));
3145 /* This is special for C++ so functions can be overloaded. */
3146 wchar_type_node
= get_identifier (MODIFIED_WCHAR_TYPE
);
3147 wchar_type_node
= TREE_TYPE (identifier_global_value (wchar_type_node
));
3148 wchar_type_size
= TYPE_PRECISION (wchar_type_node
);
3149 if (c_dialect_cxx ())
3151 if (TYPE_UNSIGNED (wchar_type_node
))
3152 wchar_type_node
= make_unsigned_type (wchar_type_size
);
3154 wchar_type_node
= make_signed_type (wchar_type_size
);
3155 record_builtin_type (RID_WCHAR
, "wchar_t", wchar_type_node
);
3159 signed_wchar_type_node
= c_common_signed_type (wchar_type_node
);
3160 unsigned_wchar_type_node
= c_common_unsigned_type (wchar_type_node
);
3163 /* This is for wide string constants. */
3164 wchar_array_type_node
3165 = build_array_type (wchar_type_node
, array_domain_type
);
3168 TREE_TYPE (identifier_global_value (get_identifier (WINT_TYPE
)));
3171 TREE_TYPE (identifier_global_value (get_identifier (INTMAX_TYPE
)));
3173 TREE_TYPE (identifier_global_value (get_identifier (UINTMAX_TYPE
)));
3175 default_function_type
= build_function_type (integer_type_node
, NULL_TREE
);
3177 = TREE_TYPE (identifier_global_value (get_identifier (PTRDIFF_TYPE
)));
3178 unsigned_ptrdiff_type_node
= c_common_unsigned_type (ptrdiff_type_node
);
3180 lang_hooks
.decls
.pushdecl
3181 (build_decl (TYPE_DECL
, get_identifier ("__builtin_va_list"),
3182 va_list_type_node
));
3184 if (TREE_CODE (va_list_type_node
) == ARRAY_TYPE
)
3186 va_list_arg_type_node
= va_list_ref_type_node
=
3187 build_pointer_type (TREE_TYPE (va_list_type_node
));
3191 va_list_arg_type_node
= va_list_type_node
;
3192 va_list_ref_type_node
= build_reference_type (va_list_type_node
);
3195 #define DEF_PRIMITIVE_TYPE(ENUM, VALUE) \
3196 builtin_types[(int) ENUM] = VALUE;
3197 #define DEF_FUNCTION_TYPE_0(ENUM, RETURN) \
3198 builtin_types[(int) ENUM] \
3199 = build_function_type (builtin_types[(int) RETURN], \
3201 #define DEF_FUNCTION_TYPE_1(ENUM, RETURN, ARG1) \
3202 builtin_types[(int) ENUM] \
3203 = build_function_type (builtin_types[(int) RETURN], \
3204 tree_cons (NULL_TREE, \
3205 builtin_types[(int) ARG1], \
3207 #define DEF_FUNCTION_TYPE_2(ENUM, RETURN, ARG1, ARG2) \
3208 builtin_types[(int) ENUM] \
3209 = build_function_type \
3210 (builtin_types[(int) RETURN], \
3211 tree_cons (NULL_TREE, \
3212 builtin_types[(int) ARG1], \
3213 tree_cons (NULL_TREE, \
3214 builtin_types[(int) ARG2], \
3216 #define DEF_FUNCTION_TYPE_3(ENUM, RETURN, ARG1, ARG2, ARG3) \
3217 builtin_types[(int) ENUM] \
3218 = build_function_type \
3219 (builtin_types[(int) RETURN], \
3220 tree_cons (NULL_TREE, \
3221 builtin_types[(int) ARG1], \
3222 tree_cons (NULL_TREE, \
3223 builtin_types[(int) ARG2], \
3224 tree_cons (NULL_TREE, \
3225 builtin_types[(int) ARG3], \
3227 #define DEF_FUNCTION_TYPE_4(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4) \
3228 builtin_types[(int) ENUM] \
3229 = build_function_type \
3230 (builtin_types[(int) RETURN], \
3231 tree_cons (NULL_TREE, \
3232 builtin_types[(int) ARG1], \
3233 tree_cons (NULL_TREE, \
3234 builtin_types[(int) ARG2], \
3237 builtin_types[(int) ARG3], \
3238 tree_cons (NULL_TREE, \
3239 builtin_types[(int) ARG4], \
3240 void_list_node)))));
3241 #define DEF_FUNCTION_TYPE_5(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5) \
3242 builtin_types[(int) ENUM] \
3243 = build_function_type \
3244 (builtin_types[(int) RETURN], \
3245 tree_cons (NULL_TREE, \
3246 builtin_types[(int) ARG1], \
3247 tree_cons (NULL_TREE, \
3248 builtin_types[(int) ARG2], \
3251 builtin_types[(int) ARG3], \
3252 tree_cons (NULL_TREE, \
3253 builtin_types[(int) ARG4], \
3254 tree_cons (NULL_TREE, \
3255 builtin_types[(int) ARG5],\
3256 void_list_node))))));
3257 #define DEF_FUNCTION_TYPE_6(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, \
3259 builtin_types[(int) ENUM] \
3260 = build_function_type \
3261 (builtin_types[(int) RETURN], \
3262 tree_cons (NULL_TREE, \
3263 builtin_types[(int) ARG1], \
3264 tree_cons (NULL_TREE, \
3265 builtin_types[(int) ARG2], \
3268 builtin_types[(int) ARG3], \
3271 builtin_types[(int) ARG4], \
3272 tree_cons (NULL_TREE, \
3273 builtin_types[(int) ARG5], \
3274 tree_cons (NULL_TREE, \
3275 builtin_types[(int) ARG6],\
3276 void_list_node)))))));
3277 #define DEF_FUNCTION_TYPE_VAR_0(ENUM, RETURN) \
3278 builtin_types[(int) ENUM] \
3279 = build_function_type (builtin_types[(int) RETURN], NULL_TREE);
3280 #define DEF_FUNCTION_TYPE_VAR_1(ENUM, RETURN, ARG1) \
3281 builtin_types[(int) ENUM] \
3282 = build_function_type (builtin_types[(int) RETURN], \
3283 tree_cons (NULL_TREE, \
3284 builtin_types[(int) ARG1], \
3287 #define DEF_FUNCTION_TYPE_VAR_2(ENUM, RETURN, ARG1, ARG2) \
3288 builtin_types[(int) ENUM] \
3289 = build_function_type \
3290 (builtin_types[(int) RETURN], \
3291 tree_cons (NULL_TREE, \
3292 builtin_types[(int) ARG1], \
3293 tree_cons (NULL_TREE, \
3294 builtin_types[(int) ARG2], \
3297 #define DEF_FUNCTION_TYPE_VAR_3(ENUM, RETURN, ARG1, ARG2, ARG3) \
3298 builtin_types[(int) ENUM] \
3299 = build_function_type \
3300 (builtin_types[(int) RETURN], \
3301 tree_cons (NULL_TREE, \
3302 builtin_types[(int) ARG1], \
3303 tree_cons (NULL_TREE, \
3304 builtin_types[(int) ARG2], \
3305 tree_cons (NULL_TREE, \
3306 builtin_types[(int) ARG3], \
3309 #define DEF_FUNCTION_TYPE_VAR_4(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4) \
3310 builtin_types[(int) ENUM] \
3311 = build_function_type \
3312 (builtin_types[(int) RETURN], \
3313 tree_cons (NULL_TREE, \
3314 builtin_types[(int) ARG1], \
3315 tree_cons (NULL_TREE, \
3316 builtin_types[(int) ARG2], \
3317 tree_cons (NULL_TREE, \
3318 builtin_types[(int) ARG3], \
3319 tree_cons (NULL_TREE, \
3320 builtin_types[(int) ARG4],\
3323 #define DEF_FUNCTION_TYPE_VAR_5(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4, \
3325 builtin_types[(int) ENUM] \
3326 = build_function_type \
3327 (builtin_types[(int) RETURN], \
3328 tree_cons (NULL_TREE, \
3329 builtin_types[(int) ARG1], \
3330 tree_cons (NULL_TREE, \
3331 builtin_types[(int) ARG2], \
3334 builtin_types[(int) ARG3], \
3335 tree_cons (NULL_TREE, \
3336 builtin_types[(int) ARG4], \
3337 tree_cons (NULL_TREE, \
3338 builtin_types[(int) ARG5],\
3341 #define DEF_POINTER_TYPE(ENUM, TYPE) \
3342 builtin_types[(int) ENUM] \
3343 = build_pointer_type (builtin_types[(int) TYPE]);
3344 #include "builtin-types.def"
3345 #undef DEF_PRIMITIVE_TYPE
3346 #undef DEF_FUNCTION_TYPE_1
3347 #undef DEF_FUNCTION_TYPE_2
3348 #undef DEF_FUNCTION_TYPE_3
3349 #undef DEF_FUNCTION_TYPE_4
3350 #undef DEF_FUNCTION_TYPE_5
3351 #undef DEF_FUNCTION_TYPE_6
3352 #undef DEF_FUNCTION_TYPE_VAR_0
3353 #undef DEF_FUNCTION_TYPE_VAR_1
3354 #undef DEF_FUNCTION_TYPE_VAR_2
3355 #undef DEF_FUNCTION_TYPE_VAR_3
3356 #undef DEF_FUNCTION_TYPE_VAR_4
3357 #undef DEF_FUNCTION_TYPE_VAR_5
3358 #undef DEF_POINTER_TYPE
3359 builtin_types
[(int) BT_LAST
] = NULL_TREE
;
3361 c_init_attributes ();
3363 #define DEF_BUILTIN(ENUM, NAME, CLASS, TYPE, LIBTYPE, BOTH_P, FALLBACK_P, \
3364 NONANSI_P, ATTRS, IMPLICIT, COND) \
3366 def_builtin_1 (ENUM, NAME, CLASS, \
3367 builtin_types[(int) TYPE], \
3368 builtin_types[(int) LIBTYPE], \
3369 BOTH_P, FALLBACK_P, NONANSI_P, \
3370 built_in_attributes[(int) ATTRS], IMPLICIT);
3371 #include "builtins.def"
3374 build_common_builtin_nodes ();
3376 targetm
.init_builtins ();
3380 main_identifier_node
= get_identifier ("main");
3382 /* Create the built-in __null node. It is important that this is
3384 null_node
= make_node (INTEGER_CST
);
3385 TREE_TYPE (null_node
) = c_common_type_for_size (POINTER_SIZE
, 0);
3388 /* Look up the function in built_in_decls that corresponds to DECL
3389 and set ASMSPEC as its user assembler name. DECL must be a
3390 function decl that declares a builtin. */
3393 set_builtin_user_assembler_name (tree decl
, const char *asmspec
)
3396 gcc_assert (TREE_CODE (decl
) == FUNCTION_DECL
3397 && DECL_BUILT_IN_CLASS (decl
) == BUILT_IN_NORMAL
3400 builtin
= built_in_decls
[DECL_FUNCTION_CODE (decl
)];
3401 set_user_assembler_name (builtin
, asmspec
);
3402 if (DECL_FUNCTION_CODE (decl
) == BUILT_IN_MEMCPY
)
3403 init_block_move_fn (asmspec
);
3404 else if (DECL_FUNCTION_CODE (decl
) == BUILT_IN_MEMSET
)
3405 init_block_clear_fn (asmspec
);
3408 /* The number of named compound-literals generated thus far. */
3409 static GTY(()) int compound_literal_number
;
3411 /* Set DECL_NAME for DECL, a VAR_DECL for a compound-literal. */
3414 set_compound_literal_name (tree decl
)
3417 ASM_FORMAT_PRIVATE_NAME (name
, "__compound_literal",
3418 compound_literal_number
);
3419 compound_literal_number
++;
3420 DECL_NAME (decl
) = get_identifier (name
);
3424 build_va_arg (tree expr
, tree type
)
3426 return build1 (VA_ARG_EXPR
, type
, expr
);
3430 /* Linked list of disabled built-in functions. */
3432 typedef struct disabled_builtin
3435 struct disabled_builtin
*next
;
3437 static disabled_builtin
*disabled_builtins
= NULL
;
3439 static bool builtin_function_disabled_p (const char *);
3441 /* Disable a built-in function specified by -fno-builtin-NAME. If NAME
3442 begins with "__builtin_", give an error. */
3445 disable_builtin_function (const char *name
)
3447 if (strncmp (name
, "__builtin_", strlen ("__builtin_")) == 0)
3448 error ("cannot disable built-in function %qs", name
);
3451 disabled_builtin
*new_disabled_builtin
= XNEW (disabled_builtin
);
3452 new_disabled_builtin
->name
= name
;
3453 new_disabled_builtin
->next
= disabled_builtins
;
3454 disabled_builtins
= new_disabled_builtin
;
3459 /* Return true if the built-in function NAME has been disabled, false
3463 builtin_function_disabled_p (const char *name
)
3465 disabled_builtin
*p
;
3466 for (p
= disabled_builtins
; p
!= NULL
; p
= p
->next
)
3468 if (strcmp (name
, p
->name
) == 0)
3475 /* Worker for DEF_BUILTIN.
3476 Possibly define a builtin function with one or two names.
3477 Does not declare a non-__builtin_ function if flag_no_builtin, or if
3478 nonansi_p and flag_no_nonansi_builtin. */
3481 def_builtin_1 (enum built_in_function fncode
,
3483 enum built_in_class fnclass
,
3484 tree fntype
, tree libtype
,
3485 bool both_p
, bool fallback_p
, bool nonansi_p
,
3486 tree fnattrs
, bool implicit_p
)
3489 const char *libname
;
3491 gcc_assert ((!both_p
&& !fallback_p
)
3492 || !strncmp (name
, "__builtin_",
3493 strlen ("__builtin_")));
3495 libname
= name
+ strlen ("__builtin_");
3496 decl
= lang_hooks
.builtin_function (name
, fntype
, fncode
, fnclass
,
3497 (fallback_p
? libname
: NULL
),
3500 && !flag_no_builtin
&& !builtin_function_disabled_p (libname
)
3501 && !(nonansi_p
&& flag_no_nonansi_builtin
))
3502 lang_hooks
.builtin_function (libname
, libtype
, fncode
, fnclass
,
3505 built_in_decls
[(int) fncode
] = decl
;
3507 implicit_built_in_decls
[(int) fncode
] = decl
;
3510 /* Nonzero if the type T promotes to int. This is (nearly) the
3511 integral promotions defined in ISO C99 6.3.1.1/2. */
3514 c_promoting_integer_type_p (tree t
)
3516 switch (TREE_CODE (t
))
3519 return (TYPE_MAIN_VARIANT (t
) == char_type_node
3520 || TYPE_MAIN_VARIANT (t
) == signed_char_type_node
3521 || TYPE_MAIN_VARIANT (t
) == unsigned_char_type_node
3522 || TYPE_MAIN_VARIANT (t
) == short_integer_type_node
3523 || TYPE_MAIN_VARIANT (t
) == short_unsigned_type_node
3524 || TYPE_PRECISION (t
) < TYPE_PRECISION (integer_type_node
));
3527 /* ??? Technically all enumerations not larger than an int
3528 promote to an int. But this is used along code paths
3529 that only want to notice a size change. */
3530 return TYPE_PRECISION (t
) < TYPE_PRECISION (integer_type_node
);
3540 /* Return 1 if PARMS specifies a fixed number of parameters
3541 and none of their types is affected by default promotions. */
3544 self_promoting_args_p (tree parms
)
3547 for (t
= parms
; t
; t
= TREE_CHAIN (t
))
3549 tree type
= TREE_VALUE (t
);
3551 if (TREE_CHAIN (t
) == 0 && type
!= void_type_node
)
3557 if (TYPE_MAIN_VARIANT (type
) == float_type_node
)
3560 if (c_promoting_integer_type_p (type
))
3566 /* Recursively examines the array elements of TYPE, until a non-array
3567 element type is found. */
3570 strip_array_types (tree type
)
3572 while (TREE_CODE (type
) == ARRAY_TYPE
)
3573 type
= TREE_TYPE (type
);
3578 /* Recursively remove any '*' or '&' operator from TYPE. */
3580 strip_pointer_operator (tree t
)
3582 while (POINTER_TYPE_P (t
))
3587 /* Used to compare case labels. K1 and K2 are actually tree nodes
3588 representing case labels, or NULL_TREE for a `default' label.
3589 Returns -1 if K1 is ordered before K2, -1 if K1 is ordered after
3590 K2, and 0 if K1 and K2 are equal. */
3593 case_compare (splay_tree_key k1
, splay_tree_key k2
)
3595 /* Consider a NULL key (such as arises with a `default' label) to be
3596 smaller than anything else. */
3602 return tree_int_cst_compare ((tree
) k1
, (tree
) k2
);
3605 /* Process a case label for the range LOW_VALUE ... HIGH_VALUE. If
3606 LOW_VALUE and HIGH_VALUE are both NULL_TREE then this case label is
3607 actually a `default' label. If only HIGH_VALUE is NULL_TREE, then
3608 case label was declared using the usual C/C++ syntax, rather than
3609 the GNU case range extension. CASES is a tree containing all the
3610 case ranges processed so far; COND is the condition for the
3611 switch-statement itself. Returns the CASE_LABEL_EXPR created, or
3612 ERROR_MARK_NODE if no CASE_LABEL_EXPR is created. */
3615 c_add_case_label (splay_tree cases
, tree cond
, tree orig_type
,
3616 tree low_value
, tree high_value
)
3621 splay_tree_node node
;
3623 /* Create the LABEL_DECL itself. */
3624 label
= create_artificial_label ();
3626 /* If there was an error processing the switch condition, bail now
3627 before we get more confused. */
3628 if (!cond
|| cond
== error_mark_node
)
3631 if ((low_value
&& TREE_TYPE (low_value
)
3632 && POINTER_TYPE_P (TREE_TYPE (low_value
)))
3633 || (high_value
&& TREE_TYPE (high_value
)
3634 && POINTER_TYPE_P (TREE_TYPE (high_value
))))
3636 error ("pointers are not permitted as case values");
3640 /* Case ranges are a GNU extension. */
3641 if (high_value
&& pedantic
)
3642 pedwarn ("range expressions in switch statements are non-standard");
3644 type
= TREE_TYPE (cond
);
3647 low_value
= check_case_value (low_value
);
3648 low_value
= convert_and_check (type
, low_value
);
3649 if (low_value
== error_mark_node
)
3654 high_value
= check_case_value (high_value
);
3655 high_value
= convert_and_check (type
, high_value
);
3656 if (high_value
== error_mark_node
)
3660 if (low_value
&& high_value
)
3662 /* If the LOW_VALUE and HIGH_VALUE are the same, then this isn't
3663 really a case range, even though it was written that way.
3664 Remove the HIGH_VALUE to simplify later processing. */
3665 if (tree_int_cst_equal (low_value
, high_value
))
3666 high_value
= NULL_TREE
;
3667 else if (!tree_int_cst_lt (low_value
, high_value
))
3668 warning (0, "empty range specified");
3671 /* See if the case is in range of the type of the original testing
3672 expression. If both low_value and high_value are out of range,
3673 don't insert the case label and return NULL_TREE. */
3675 && !check_case_bounds (type
, orig_type
,
3676 &low_value
, high_value
? &high_value
: NULL
))
3679 /* Look up the LOW_VALUE in the table of case labels we already
3681 node
= splay_tree_lookup (cases
, (splay_tree_key
) low_value
);
3682 /* If there was not an exact match, check for overlapping ranges.
3683 There's no need to do this if there's no LOW_VALUE or HIGH_VALUE;
3684 that's a `default' label and the only overlap is an exact match. */
3685 if (!node
&& (low_value
|| high_value
))
3687 splay_tree_node low_bound
;
3688 splay_tree_node high_bound
;
3690 /* Even though there wasn't an exact match, there might be an
3691 overlap between this case range and another case range.
3692 Since we've (inductively) not allowed any overlapping case
3693 ranges, we simply need to find the greatest low case label
3694 that is smaller that LOW_VALUE, and the smallest low case
3695 label that is greater than LOW_VALUE. If there is an overlap
3696 it will occur in one of these two ranges. */
3697 low_bound
= splay_tree_predecessor (cases
,
3698 (splay_tree_key
) low_value
);
3699 high_bound
= splay_tree_successor (cases
,
3700 (splay_tree_key
) low_value
);
3702 /* Check to see if the LOW_BOUND overlaps. It is smaller than
3703 the LOW_VALUE, so there is no need to check unless the
3704 LOW_BOUND is in fact itself a case range. */
3706 && CASE_HIGH ((tree
) low_bound
->value
)
3707 && tree_int_cst_compare (CASE_HIGH ((tree
) low_bound
->value
),
3710 /* Check to see if the HIGH_BOUND overlaps. The low end of that
3711 range is bigger than the low end of the current range, so we
3712 are only interested if the current range is a real range, and
3713 not an ordinary case label. */
3716 && (tree_int_cst_compare ((tree
) high_bound
->key
,
3721 /* If there was an overlap, issue an error. */
3724 tree duplicate
= CASE_LABEL ((tree
) node
->value
);
3728 error ("duplicate (or overlapping) case value");
3729 error ("%Jthis is the first entry overlapping that value", duplicate
);
3733 error ("duplicate case value") ;
3734 error ("%Jpreviously used here", duplicate
);
3738 error ("multiple default labels in one switch");
3739 error ("%Jthis is the first default label", duplicate
);
3744 /* Add a CASE_LABEL to the statement-tree. */
3745 case_label
= add_stmt (build_case_label (low_value
, high_value
, label
));
3746 /* Register this case label in the splay tree. */
3747 splay_tree_insert (cases
,
3748 (splay_tree_key
) low_value
,
3749 (splay_tree_value
) case_label
);
3754 /* Add a label so that the back-end doesn't think that the beginning of
3755 the switch is unreachable. Note that we do not add a case label, as
3756 that just leads to duplicates and thence to failure later on. */
3759 tree t
= create_artificial_label ();
3760 add_stmt (build_stmt (LABEL_EXPR
, t
));
3762 return error_mark_node
;
3765 /* Subroutines of c_do_switch_warnings, called via splay_tree_foreach.
3766 Used to verify that case values match up with enumerator values. */
3769 match_case_to_enum_1 (tree key
, tree type
, tree label
)
3771 char buf
[2 + 2*HOST_BITS_PER_WIDE_INT
/4 + 1];
3773 /* ??? Not working too hard to print the double-word value.
3774 Should perhaps be done with %lwd in the diagnostic routines? */
3775 if (TREE_INT_CST_HIGH (key
) == 0)
3776 snprintf (buf
, sizeof (buf
), HOST_WIDE_INT_PRINT_UNSIGNED
,
3777 TREE_INT_CST_LOW (key
));
3778 else if (!TYPE_UNSIGNED (type
)
3779 && TREE_INT_CST_HIGH (key
) == -1
3780 && TREE_INT_CST_LOW (key
) != 0)
3781 snprintf (buf
, sizeof (buf
), "-" HOST_WIDE_INT_PRINT_UNSIGNED
,
3782 -TREE_INT_CST_LOW (key
));
3784 snprintf (buf
, sizeof (buf
), HOST_WIDE_INT_PRINT_DOUBLE_HEX
,
3785 TREE_INT_CST_HIGH (key
), TREE_INT_CST_LOW (key
));
3787 if (TYPE_NAME (type
) == 0)
3788 warning (0, "%Jcase value %qs not in enumerated type",
3789 CASE_LABEL (label
), buf
);
3791 warning (0, "%Jcase value %qs not in enumerated type %qT",
3792 CASE_LABEL (label
), buf
, type
);
3796 match_case_to_enum (splay_tree_node node
, void *data
)
3798 tree label
= (tree
) node
->value
;
3799 tree type
= (tree
) data
;
3801 /* Skip default case. */
3802 if (!CASE_LOW (label
))
3805 /* If TREE_ADDRESSABLE is not set, that means CASE_LOW did not appear
3806 when we did our enum->case scan. Reset our scratch bit after. */
3807 if (!TREE_ADDRESSABLE (label
))
3808 match_case_to_enum_1 (CASE_LOW (label
), type
, label
);
3810 TREE_ADDRESSABLE (label
) = 0;
3812 /* If CASE_HIGH is non-null, we have a range. Here we must search.
3813 Note that the old code in stmt.c did not check for the values in
3814 the range either, just the endpoints. */
3815 if (CASE_HIGH (label
))
3817 tree chain
, key
= CASE_HIGH (label
);
3819 for (chain
= TYPE_VALUES (type
);
3820 chain
&& !tree_int_cst_equal (key
, TREE_VALUE (chain
));
3821 chain
= TREE_CHAIN (chain
))
3824 match_case_to_enum_1 (key
, type
, label
);
3830 /* Handle -Wswitch*. Called from the front end after parsing the
3831 switch construct. */
3832 /* ??? Should probably be somewhere generic, since other languages
3833 besides C and C++ would want this. At the moment, however, C/C++
3834 are the only tree-ssa languages that support enumerations at all,
3835 so the point is moot. */
3838 c_do_switch_warnings (splay_tree cases
, location_t switch_location
,
3839 tree type
, tree cond
)
3841 splay_tree_node default_node
;
3843 if (!warn_switch
&& !warn_switch_enum
&& !warn_switch_default
)
3846 default_node
= splay_tree_lookup (cases
, (splay_tree_key
) NULL
);
3848 warning (OPT_Wswitch_default
, "%Hswitch missing default case",
3851 /* If the switch expression was an enumerated type, check that
3852 exactly all enumeration literals are covered by the cases.
3853 The check is made when -Wswitch was specified and there is no
3854 default case, or when -Wswitch-enum was specified. */
3855 if (((warn_switch
&& !default_node
) || warn_switch_enum
)
3856 && type
&& TREE_CODE (type
) == ENUMERAL_TYPE
3857 && TREE_CODE (cond
) != INTEGER_CST
)
3861 /* The time complexity here is O(N*lg(N)) worst case, but for the
3862 common case of monotonically increasing enumerators, it is
3863 O(N), since the nature of the splay tree will keep the next
3864 element adjacent to the root at all times. */
3866 for (chain
= TYPE_VALUES (type
); chain
; chain
= TREE_CHAIN (chain
))
3868 splay_tree_node node
3869 = splay_tree_lookup (cases
, (splay_tree_key
) TREE_VALUE (chain
));
3872 tree low_value
= TREE_VALUE (chain
);
3873 splay_tree_node low_bound
;
3874 splay_tree_node high_bound
;
3875 /* Even though there wasn't an exact match, there might be a
3876 case range which includes the enumator's value. */
3877 low_bound
= splay_tree_predecessor (cases
,
3878 (splay_tree_key
) low_value
);
3879 high_bound
= splay_tree_successor (cases
,
3880 (splay_tree_key
) low_value
);
3882 /* It is smaller than the LOW_VALUE, so there is no need to check
3883 unless the LOW_BOUND is in fact itself a case range. */
3885 && CASE_HIGH ((tree
) low_bound
->value
)
3886 && tree_int_cst_compare (CASE_HIGH ((tree
) low_bound
->value
),
3889 /* The low end of that range is bigger than the current value. */
3891 && (tree_int_cst_compare ((tree
) high_bound
->key
,
3898 /* Mark the CASE_LOW part of the case entry as seen, so
3899 that we save time later. Choose TREE_ADDRESSABLE
3900 randomly as a bit that won't have been set to-date. */
3901 tree label
= (tree
) node
->value
;
3902 TREE_ADDRESSABLE (label
) = 1;
3906 /* Warn if there are enumerators that don't correspond to
3907 case expressions. */
3908 warning (0, "%Henumeration value %qE not handled in switch",
3909 &switch_location
, TREE_PURPOSE (chain
));
3913 /* Warn if there are case expressions that don't correspond to
3914 enumerators. This can occur since C and C++ don't enforce
3915 type-checking of assignments to enumeration variables.
3917 The time complexity here is O(N**2) worst case, since we've
3918 not sorted the enumeration values. However, in the absence
3919 of case ranges this is O(N), since all single cases that
3920 corresponded to enumerations have been marked above. */
3922 splay_tree_foreach (cases
, match_case_to_enum
, type
);
3926 /* Finish an expression taking the address of LABEL (an
3927 IDENTIFIER_NODE). Returns an expression for the address. */
3930 finish_label_address_expr (tree label
)
3935 pedwarn ("taking the address of a label is non-standard");
3937 if (label
== error_mark_node
)
3938 return error_mark_node
;
3940 label
= lookup_label (label
);
3941 if (label
== NULL_TREE
)
3942 result
= null_pointer_node
;
3945 TREE_USED (label
) = 1;
3946 result
= build1 (ADDR_EXPR
, ptr_type_node
, label
);
3947 /* The current function in not necessarily uninlinable.
3948 Computed gotos are incompatible with inlining, but the value
3949 here could be used only in a diagnostic, for example. */
3955 /* Hook used by expand_expr to expand language-specific tree codes. */
3956 /* The only things that should go here are bits needed to expand
3957 constant initializers. Everything else should be handled by the
3958 gimplification routines. */
3961 c_expand_expr (tree exp
, rtx target
, enum machine_mode tmode
,
3962 int modifier
/* Actually enum_modifier. */,
3965 switch (TREE_CODE (exp
))
3967 case COMPOUND_LITERAL_EXPR
:
3969 /* Initialize the anonymous variable declared in the compound
3970 literal, then return the variable. */
3971 tree decl
= COMPOUND_LITERAL_EXPR_DECL (exp
);
3972 emit_local_var (decl
);
3973 return expand_expr_real (decl
, target
, tmode
, modifier
, alt_rtl
);
3981 /* Hook used by staticp to handle language-specific tree codes. */
3984 c_staticp (tree exp
)
3986 return (TREE_CODE (exp
) == COMPOUND_LITERAL_EXPR
3987 && TREE_STATIC (COMPOUND_LITERAL_EXPR_DECL (exp
))
3992 /* Given a boolean expression ARG, return a tree representing an increment
3993 or decrement (as indicated by CODE) of ARG. The front end must check for
3994 invalid cases (e.g., decrement in C++). */
3996 boolean_increment (enum tree_code code
, tree arg
)
3999 tree true_res
= boolean_true_node
;
4001 arg
= stabilize_reference (arg
);
4004 case PREINCREMENT_EXPR
:
4005 val
= build2 (MODIFY_EXPR
, TREE_TYPE (arg
), arg
, true_res
);
4007 case POSTINCREMENT_EXPR
:
4008 val
= build2 (MODIFY_EXPR
, TREE_TYPE (arg
), arg
, true_res
);
4009 arg
= save_expr (arg
);
4010 val
= build2 (COMPOUND_EXPR
, TREE_TYPE (arg
), val
, arg
);
4011 val
= build2 (COMPOUND_EXPR
, TREE_TYPE (arg
), arg
, val
);
4013 case PREDECREMENT_EXPR
:
4014 val
= build2 (MODIFY_EXPR
, TREE_TYPE (arg
), arg
,
4015 invert_truthvalue (arg
));
4017 case POSTDECREMENT_EXPR
:
4018 val
= build2 (MODIFY_EXPR
, TREE_TYPE (arg
), arg
,
4019 invert_truthvalue (arg
));
4020 arg
= save_expr (arg
);
4021 val
= build2 (COMPOUND_EXPR
, TREE_TYPE (arg
), val
, arg
);
4022 val
= build2 (COMPOUND_EXPR
, TREE_TYPE (arg
), arg
, val
);
4027 TREE_SIDE_EFFECTS (val
) = 1;
4031 /* Built-in macros for stddef.h, that require macros defined in this
4034 c_stddef_cpp_builtins(void)
4036 builtin_define_with_value ("__SIZE_TYPE__", SIZE_TYPE
, 0);
4037 builtin_define_with_value ("__PTRDIFF_TYPE__", PTRDIFF_TYPE
, 0);
4038 builtin_define_with_value ("__WCHAR_TYPE__", MODIFIED_WCHAR_TYPE
, 0);
4039 builtin_define_with_value ("__WINT_TYPE__", WINT_TYPE
, 0);
4040 builtin_define_with_value ("__INTMAX_TYPE__", INTMAX_TYPE
, 0);
4041 builtin_define_with_value ("__UINTMAX_TYPE__", UINTMAX_TYPE
, 0);
4045 c_init_attributes (void)
4047 /* Fill in the built_in_attributes array. */
4048 #define DEF_ATTR_NULL_TREE(ENUM) \
4049 built_in_attributes[(int) ENUM] = NULL_TREE;
4050 #define DEF_ATTR_INT(ENUM, VALUE) \
4051 built_in_attributes[(int) ENUM] = build_int_cst (NULL_TREE, VALUE);
4052 #define DEF_ATTR_IDENT(ENUM, STRING) \
4053 built_in_attributes[(int) ENUM] = get_identifier (STRING);
4054 #define DEF_ATTR_TREE_LIST(ENUM, PURPOSE, VALUE, CHAIN) \
4055 built_in_attributes[(int) ENUM] \
4056 = tree_cons (built_in_attributes[(int) PURPOSE], \
4057 built_in_attributes[(int) VALUE], \
4058 built_in_attributes[(int) CHAIN]);
4059 #include "builtin-attrs.def"
4060 #undef DEF_ATTR_NULL_TREE
4062 #undef DEF_ATTR_IDENT
4063 #undef DEF_ATTR_TREE_LIST
4066 /* Attribute handlers common to C front ends. */
4068 /* Handle a "packed" attribute; arguments as in
4069 struct attribute_spec.handler. */
4072 handle_packed_attribute (tree
*node
, tree name
, tree
ARG_UNUSED (args
),
4073 int flags
, bool *no_add_attrs
)
4077 if (!(flags
& (int) ATTR_FLAG_TYPE_IN_PLACE
))
4078 *node
= build_variant_type_copy (*node
);
4079 TYPE_PACKED (*node
) = 1;
4080 if (TYPE_MAIN_VARIANT (*node
) == *node
)
4082 /* If it is the main variant, then pack the other variants
4083 too. This happens in,
4086 struct Foo const *ptr; // creates a variant w/o packed flag
4087 } __ attribute__((packed)); // packs it now.
4091 for (probe
= *node
; probe
; probe
= TYPE_NEXT_VARIANT (probe
))
4092 TYPE_PACKED (probe
) = 1;
4095 else if (TREE_CODE (*node
) == FIELD_DECL
)
4097 if (TYPE_ALIGN (TREE_TYPE (*node
)) <= BITS_PER_UNIT
)
4098 warning (OPT_Wattributes
,
4099 "%qE attribute ignored for field of type %qT",
4100 name
, TREE_TYPE (*node
));
4102 DECL_PACKED (*node
) = 1;
4104 /* We can't set DECL_PACKED for a VAR_DECL, because the bit is
4105 used for DECL_REGISTER. It wouldn't mean anything anyway.
4106 We can't set DECL_PACKED on the type of a TYPE_DECL, because
4107 that changes what the typedef is typing. */
4110 warning (OPT_Wattributes
, "%qE attribute ignored", name
);
4111 *no_add_attrs
= true;
4117 /* Handle a "nocommon" attribute; arguments as in
4118 struct attribute_spec.handler. */
4121 handle_nocommon_attribute (tree
*node
, tree name
,
4122 tree
ARG_UNUSED (args
),
4123 int ARG_UNUSED (flags
), bool *no_add_attrs
)
4125 if (TREE_CODE (*node
) == VAR_DECL
)
4126 DECL_COMMON (*node
) = 0;
4129 warning (OPT_Wattributes
, "%qE attribute ignored", name
);
4130 *no_add_attrs
= true;
4136 /* Handle a "common" attribute; arguments as in
4137 struct attribute_spec.handler. */
4140 handle_common_attribute (tree
*node
, tree name
, tree
ARG_UNUSED (args
),
4141 int ARG_UNUSED (flags
), bool *no_add_attrs
)
4143 if (TREE_CODE (*node
) == VAR_DECL
)
4144 DECL_COMMON (*node
) = 1;
4147 warning (OPT_Wattributes
, "%qE attribute ignored", name
);
4148 *no_add_attrs
= true;
4154 /* Handle a "noreturn" attribute; arguments as in
4155 struct attribute_spec.handler. */
4158 handle_noreturn_attribute (tree
*node
, tree name
, tree
ARG_UNUSED (args
),
4159 int ARG_UNUSED (flags
), bool *no_add_attrs
)
4161 tree type
= TREE_TYPE (*node
);
4163 /* See FIXME comment in c_common_attribute_table. */
4164 if (TREE_CODE (*node
) == FUNCTION_DECL
)
4165 TREE_THIS_VOLATILE (*node
) = 1;
4166 else if (TREE_CODE (type
) == POINTER_TYPE
4167 && TREE_CODE (TREE_TYPE (type
)) == FUNCTION_TYPE
)
4169 = build_pointer_type
4170 (build_type_variant (TREE_TYPE (type
),
4171 TYPE_READONLY (TREE_TYPE (type
)), 1));
4174 warning (OPT_Wattributes
, "%qE attribute ignored", name
);
4175 *no_add_attrs
= true;
4181 /* Handle a "noinline" attribute; arguments as in
4182 struct attribute_spec.handler. */
4185 handle_noinline_attribute (tree
*node
, tree name
,
4186 tree
ARG_UNUSED (args
),
4187 int ARG_UNUSED (flags
), bool *no_add_attrs
)
4189 if (TREE_CODE (*node
) == FUNCTION_DECL
)
4190 DECL_UNINLINABLE (*node
) = 1;
4193 warning (OPT_Wattributes
, "%qE attribute ignored", name
);
4194 *no_add_attrs
= true;
4200 /* Handle a "always_inline" attribute; arguments as in
4201 struct attribute_spec.handler. */
4204 handle_always_inline_attribute (tree
*node
, tree name
,
4205 tree
ARG_UNUSED (args
),
4206 int ARG_UNUSED (flags
),
4209 if (TREE_CODE (*node
) == FUNCTION_DECL
)
4211 /* Do nothing else, just set the attribute. We'll get at
4212 it later with lookup_attribute. */
4216 warning (OPT_Wattributes
, "%qE attribute ignored", name
);
4217 *no_add_attrs
= true;
4223 /* Handle a "gnu_inline" attribute; arguments as in
4224 struct attribute_spec.handler. */
4227 handle_gnu_inline_attribute (tree
*node
, tree name
,
4228 tree
ARG_UNUSED (args
),
4229 int ARG_UNUSED (flags
),
4232 if (TREE_CODE (*node
) == FUNCTION_DECL
&& DECL_DECLARED_INLINE_P (*node
))
4234 /* Do nothing else, just set the attribute. We'll get at
4235 it later with lookup_attribute. */
4239 warning (OPT_Wattributes
, "%qE attribute ignored", name
);
4240 *no_add_attrs
= true;
4246 /* Handle a "flatten" attribute; arguments as in
4247 struct attribute_spec.handler. */
4250 handle_flatten_attribute (tree
*node
, tree name
,
4251 tree args ATTRIBUTE_UNUSED
,
4252 int flags ATTRIBUTE_UNUSED
, bool *no_add_attrs
)
4254 if (TREE_CODE (*node
) == FUNCTION_DECL
)
4255 /* Do nothing else, just set the attribute. We'll get at
4256 it later with lookup_attribute. */
4260 warning (OPT_Wattributes
, "%qE attribute ignored", name
);
4261 *no_add_attrs
= true;
4268 /* Handle a "used" attribute; arguments as in
4269 struct attribute_spec.handler. */
4272 handle_used_attribute (tree
*pnode
, tree name
, tree
ARG_UNUSED (args
),
4273 int ARG_UNUSED (flags
), bool *no_add_attrs
)
4277 if (TREE_CODE (node
) == FUNCTION_DECL
4278 || (TREE_CODE (node
) == VAR_DECL
&& TREE_STATIC (node
)))
4280 TREE_USED (node
) = 1;
4281 DECL_PRESERVE_P (node
) = 1;
4285 warning (OPT_Wattributes
, "%qE attribute ignored", name
);
4286 *no_add_attrs
= true;
4292 /* Handle a "unused" attribute; arguments as in
4293 struct attribute_spec.handler. */
4296 handle_unused_attribute (tree
*node
, tree name
, tree
ARG_UNUSED (args
),
4297 int flags
, bool *no_add_attrs
)
4303 if (TREE_CODE (decl
) == PARM_DECL
4304 || TREE_CODE (decl
) == VAR_DECL
4305 || TREE_CODE (decl
) == FUNCTION_DECL
4306 || TREE_CODE (decl
) == LABEL_DECL
4307 || TREE_CODE (decl
) == TYPE_DECL
)
4308 TREE_USED (decl
) = 1;
4311 warning (OPT_Wattributes
, "%qE attribute ignored", name
);
4312 *no_add_attrs
= true;
4317 if (!(flags
& (int) ATTR_FLAG_TYPE_IN_PLACE
))
4318 *node
= build_variant_type_copy (*node
);
4319 TREE_USED (*node
) = 1;
4325 /* Handle a "externally_visible" attribute; arguments as in
4326 struct attribute_spec.handler. */
4329 handle_externally_visible_attribute (tree
*pnode
, tree name
,
4330 tree
ARG_UNUSED (args
),
4331 int ARG_UNUSED (flags
),
4336 if ((!TREE_STATIC (node
) && TREE_CODE (node
) != FUNCTION_DECL
)
4337 || !TREE_PUBLIC (node
))
4339 warning (OPT_Wattributes
,
4340 "%qE attribute have effect only on public objects", name
);
4341 *no_add_attrs
= true;
4343 else if (TREE_CODE (node
) == FUNCTION_DECL
4344 || TREE_CODE (node
) == VAR_DECL
)
4348 warning (OPT_Wattributes
, "%qE attribute ignored", name
);
4349 *no_add_attrs
= true;
4355 /* Handle a "const" attribute; arguments as in
4356 struct attribute_spec.handler. */
4359 handle_const_attribute (tree
*node
, tree name
, tree
ARG_UNUSED (args
),
4360 int ARG_UNUSED (flags
), bool *no_add_attrs
)
4362 tree type
= TREE_TYPE (*node
);
4364 /* See FIXME comment on noreturn in c_common_attribute_table. */
4365 if (TREE_CODE (*node
) == FUNCTION_DECL
)
4366 TREE_READONLY (*node
) = 1;
4367 else if (TREE_CODE (type
) == POINTER_TYPE
4368 && TREE_CODE (TREE_TYPE (type
)) == FUNCTION_TYPE
)
4370 = build_pointer_type
4371 (build_type_variant (TREE_TYPE (type
), 1,
4372 TREE_THIS_VOLATILE (TREE_TYPE (type
))));
4375 warning (OPT_Wattributes
, "%qE attribute ignored", name
);
4376 *no_add_attrs
= true;
4382 /* Handle a "transparent_union" attribute; arguments as in
4383 struct attribute_spec.handler. */
4386 handle_transparent_union_attribute (tree
*node
, tree name
,
4387 tree
ARG_UNUSED (args
), int flags
,
4392 *no_add_attrs
= true;
4396 if (TREE_CODE (*node
) != TYPE_DECL
)
4398 node
= &TREE_TYPE (*node
);
4401 else if (TYPE_P (*node
))
4406 if (TREE_CODE (type
) == UNION_TYPE
)
4408 /* When IN_PLACE is set, leave the check for FIELDS and MODE to
4409 the code in finish_struct. */
4410 if (!(flags
& (int) ATTR_FLAG_TYPE_IN_PLACE
))
4412 if (TYPE_FIELDS (type
) == NULL_TREE
4413 || TYPE_MODE (type
) != DECL_MODE (TYPE_FIELDS (type
)))
4416 /* A type variant isn't good enough, since we don't a cast
4417 to such a type removed as a no-op. */
4418 *node
= type
= build_duplicate_type (type
);
4421 TYPE_TRANSPARENT_UNION (type
) = 1;
4426 warning (OPT_Wattributes
, "%qE attribute ignored", name
);
4430 /* Handle a "constructor" attribute; arguments as in
4431 struct attribute_spec.handler. */
4434 handle_constructor_attribute (tree
*node
, tree name
,
4435 tree
ARG_UNUSED (args
),
4436 int ARG_UNUSED (flags
),
4440 tree type
= TREE_TYPE (decl
);
4442 if (TREE_CODE (decl
) == FUNCTION_DECL
4443 && TREE_CODE (type
) == FUNCTION_TYPE
4444 && decl_function_context (decl
) == 0)
4446 DECL_STATIC_CONSTRUCTOR (decl
) = 1;
4447 TREE_USED (decl
) = 1;
4451 warning (OPT_Wattributes
, "%qE attribute ignored", name
);
4452 *no_add_attrs
= true;
4458 /* Handle a "destructor" attribute; arguments as in
4459 struct attribute_spec.handler. */
4462 handle_destructor_attribute (tree
*node
, tree name
,
4463 tree
ARG_UNUSED (args
),
4464 int ARG_UNUSED (flags
),
4468 tree type
= TREE_TYPE (decl
);
4470 if (TREE_CODE (decl
) == FUNCTION_DECL
4471 && TREE_CODE (type
) == FUNCTION_TYPE
4472 && decl_function_context (decl
) == 0)
4474 DECL_STATIC_DESTRUCTOR (decl
) = 1;
4475 TREE_USED (decl
) = 1;
4479 warning (OPT_Wattributes
, "%qE attribute ignored", name
);
4480 *no_add_attrs
= true;
4486 /* Handle a "mode" attribute; arguments as in
4487 struct attribute_spec.handler. */
4490 handle_mode_attribute (tree
*node
, tree name
, tree args
,
4491 int ARG_UNUSED (flags
), bool *no_add_attrs
)
4495 *no_add_attrs
= true;
4497 if (TREE_CODE (TREE_VALUE (args
)) != IDENTIFIER_NODE
)
4498 warning (OPT_Wattributes
, "%qE attribute ignored", name
);
4502 const char *p
= IDENTIFIER_POINTER (TREE_VALUE (args
));
4503 int len
= strlen (p
);
4504 enum machine_mode mode
= VOIDmode
;
4508 if (len
> 4 && p
[0] == '_' && p
[1] == '_'
4509 && p
[len
- 1] == '_' && p
[len
- 2] == '_')
4511 char *newp
= (char *) alloca (len
- 1);
4513 strcpy (newp
, &p
[2]);
4514 newp
[len
- 4] = '\0';
4518 /* Change this type to have a type with the specified mode.
4519 First check for the special modes. */
4520 if (!strcmp (p
, "byte"))
4522 else if (!strcmp (p
, "word"))
4524 else if (!strcmp (p
, "pointer"))
4527 for (j
= 0; j
< NUM_MACHINE_MODES
; j
++)
4528 if (!strcmp (p
, GET_MODE_NAME (j
)))
4530 mode
= (enum machine_mode
) j
;
4534 if (mode
== VOIDmode
)
4536 error ("unknown machine mode %qs", p
);
4541 switch (GET_MODE_CLASS (mode
))
4544 case MODE_PARTIAL_INT
:
4546 valid_mode
= targetm
.scalar_mode_supported_p (mode
);
4549 case MODE_COMPLEX_INT
:
4550 case MODE_COMPLEX_FLOAT
:
4551 valid_mode
= targetm
.scalar_mode_supported_p (GET_MODE_INNER (mode
));
4554 case MODE_VECTOR_INT
:
4555 case MODE_VECTOR_FLOAT
:
4556 warning (OPT_Wattributes
, "specifying vector types with "
4557 "__attribute__ ((mode)) is deprecated");
4558 warning (OPT_Wattributes
,
4559 "use __attribute__ ((vector_size)) instead");
4560 valid_mode
= vector_mode_valid_p (mode
);
4568 error ("unable to emulate %qs", p
);
4572 if (POINTER_TYPE_P (type
))
4574 tree (*fn
)(tree
, enum machine_mode
, bool);
4576 if (!targetm
.valid_pointer_mode (mode
))
4578 error ("invalid pointer mode %qs", p
);
4582 if (TREE_CODE (type
) == POINTER_TYPE
)
4583 fn
= build_pointer_type_for_mode
;
4585 fn
= build_reference_type_for_mode
;
4586 typefm
= fn (TREE_TYPE (type
), mode
, false);
4589 typefm
= lang_hooks
.types
.type_for_mode (mode
, TYPE_UNSIGNED (type
));
4591 if (typefm
== NULL_TREE
)
4593 error ("no data type for mode %qs", p
);
4596 else if (TREE_CODE (type
) == ENUMERAL_TYPE
)
4598 /* For enumeral types, copy the precision from the integer
4599 type returned above. If not an INTEGER_TYPE, we can't use
4600 this mode for this type. */
4601 if (TREE_CODE (typefm
) != INTEGER_TYPE
)
4603 error ("cannot use mode %qs for enumeral types", p
);
4607 if (flags
& ATTR_FLAG_TYPE_IN_PLACE
)
4609 TYPE_PRECISION (type
) = TYPE_PRECISION (typefm
);
4614 /* We cannot build a type variant, as there's code that assumes
4615 that TYPE_MAIN_VARIANT has the same mode. This includes the
4616 debug generators. Instead, create a subrange type. This
4617 results in all of the enumeral values being emitted only once
4618 in the original, and the subtype gets them by reference. */
4619 if (TYPE_UNSIGNED (type
))
4620 typefm
= make_unsigned_type (TYPE_PRECISION (typefm
));
4622 typefm
= make_signed_type (TYPE_PRECISION (typefm
));
4623 TREE_TYPE (typefm
) = type
;
4626 else if (VECTOR_MODE_P (mode
)
4627 ? TREE_CODE (type
) != TREE_CODE (TREE_TYPE (typefm
))
4628 : TREE_CODE (type
) != TREE_CODE (typefm
))
4630 error ("mode %qs applied to inappropriate type", p
);
4640 /* Handle a "section" attribute; arguments as in
4641 struct attribute_spec.handler. */
4644 handle_section_attribute (tree
*node
, tree
ARG_UNUSED (name
), tree args
,
4645 int ARG_UNUSED (flags
), bool *no_add_attrs
)
4649 if (targetm
.have_named_sections
)
4651 user_defined_section_attribute
= true;
4653 if ((TREE_CODE (decl
) == FUNCTION_DECL
4654 || TREE_CODE (decl
) == VAR_DECL
)
4655 && TREE_CODE (TREE_VALUE (args
)) == STRING_CST
)
4657 if (TREE_CODE (decl
) == VAR_DECL
4658 && current_function_decl
!= NULL_TREE
4659 && !TREE_STATIC (decl
))
4661 error ("%Jsection attribute cannot be specified for "
4662 "local variables", decl
);
4663 *no_add_attrs
= true;
4666 /* The decl may have already been given a section attribute
4667 from a previous declaration. Ensure they match. */
4668 else if (DECL_SECTION_NAME (decl
) != NULL_TREE
4669 && strcmp (TREE_STRING_POINTER (DECL_SECTION_NAME (decl
)),
4670 TREE_STRING_POINTER (TREE_VALUE (args
))) != 0)
4672 error ("section of %q+D conflicts with previous declaration",
4674 *no_add_attrs
= true;
4677 DECL_SECTION_NAME (decl
) = TREE_VALUE (args
);
4681 error ("section attribute not allowed for %q+D", *node
);
4682 *no_add_attrs
= true;
4687 error ("%Jsection attributes are not supported for this target", *node
);
4688 *no_add_attrs
= true;
4694 /* Handle a "aligned" attribute; arguments as in
4695 struct attribute_spec.handler. */
4698 handle_aligned_attribute (tree
*node
, tree
ARG_UNUSED (name
), tree args
,
4699 int flags
, bool *no_add_attrs
)
4701 tree decl
= NULL_TREE
;
4704 tree align_expr
= (args
? TREE_VALUE (args
)
4705 : size_int (BIGGEST_ALIGNMENT
/ BITS_PER_UNIT
));
4711 type
= &TREE_TYPE (decl
);
4712 is_type
= TREE_CODE (*node
) == TYPE_DECL
;
4714 else if (TYPE_P (*node
))
4715 type
= node
, is_type
= 1;
4717 if (TREE_CODE (align_expr
) != INTEGER_CST
)
4719 error ("requested alignment is not a constant");
4720 *no_add_attrs
= true;
4722 else if ((i
= tree_log2 (align_expr
)) == -1)
4724 error ("requested alignment is not a power of 2");
4725 *no_add_attrs
= true;
4727 else if (i
> HOST_BITS_PER_INT
- 2)
4729 error ("requested alignment is too large");
4730 *no_add_attrs
= true;
4734 /* If we have a TYPE_DECL, then copy the type, so that we
4735 don't accidentally modify a builtin type. See pushdecl. */
4736 if (decl
&& TREE_TYPE (decl
) != error_mark_node
4737 && DECL_ORIGINAL_TYPE (decl
) == NULL_TREE
)
4739 tree tt
= TREE_TYPE (decl
);
4740 *type
= build_variant_type_copy (*type
);
4741 DECL_ORIGINAL_TYPE (decl
) = tt
;
4742 TYPE_NAME (*type
) = decl
;
4743 TREE_USED (*type
) = TREE_USED (decl
);
4744 TREE_TYPE (decl
) = *type
;
4746 else if (!(flags
& (int) ATTR_FLAG_TYPE_IN_PLACE
))
4747 *type
= build_variant_type_copy (*type
);
4749 TYPE_ALIGN (*type
) = (1 << i
) * BITS_PER_UNIT
;
4750 TYPE_USER_ALIGN (*type
) = 1;
4752 else if (TREE_CODE (decl
) != VAR_DECL
4753 && TREE_CODE (decl
) != FIELD_DECL
)
4755 error ("alignment may not be specified for %q+D", decl
);
4756 *no_add_attrs
= true;
4760 DECL_ALIGN (decl
) = (1 << i
) * BITS_PER_UNIT
;
4761 DECL_USER_ALIGN (decl
) = 1;
4767 /* Handle a "weak" attribute; arguments as in
4768 struct attribute_spec.handler. */
4771 handle_weak_attribute (tree
*node
, tree
ARG_UNUSED (name
),
4772 tree
ARG_UNUSED (args
),
4773 int ARG_UNUSED (flags
),
4774 bool * ARG_UNUSED (no_add_attrs
))
4776 declare_weak (*node
);
4781 /* Handle an "alias" attribute; arguments as in
4782 struct attribute_spec.handler. */
4785 handle_alias_attribute (tree
*node
, tree name
, tree args
,
4786 int ARG_UNUSED (flags
), bool *no_add_attrs
)
4790 if ((TREE_CODE (decl
) == FUNCTION_DECL
&& DECL_INITIAL (decl
))
4791 || (TREE_CODE (decl
) != FUNCTION_DECL
&& !DECL_EXTERNAL (decl
)))
4793 error ("%q+D defined both normally and as an alias", decl
);
4794 *no_add_attrs
= true;
4797 /* Note that the very first time we process a nested declaration,
4798 decl_function_context will not be set. Indeed, *would* never
4799 be set except for the DECL_INITIAL/DECL_EXTERNAL frobbery that
4800 we do below. After such frobbery, pushdecl would set the context.
4801 In any case, this is never what we want. */
4802 else if (decl_function_context (decl
) == 0 && current_function_decl
== NULL
)
4806 id
= TREE_VALUE (args
);
4807 if (TREE_CODE (id
) != STRING_CST
)
4809 error ("alias argument not a string");
4810 *no_add_attrs
= true;
4813 id
= get_identifier (TREE_STRING_POINTER (id
));
4814 /* This counts as a use of the object pointed to. */
4817 if (TREE_CODE (decl
) == FUNCTION_DECL
)
4818 DECL_INITIAL (decl
) = error_mark_node
;
4821 if (lookup_attribute ("weakref", DECL_ATTRIBUTES (decl
)))
4822 DECL_EXTERNAL (decl
) = 1;
4824 DECL_EXTERNAL (decl
) = 0;
4825 TREE_STATIC (decl
) = 1;
4830 warning (OPT_Wattributes
, "%qE attribute ignored", name
);
4831 *no_add_attrs
= true;
4837 /* Handle a "weakref" attribute; arguments as in struct
4838 attribute_spec.handler. */
4841 handle_weakref_attribute (tree
*node
, tree
ARG_UNUSED (name
), tree args
,
4842 int flags
, bool *no_add_attrs
)
4844 tree attr
= NULL_TREE
;
4846 /* We must ignore the attribute when it is associated with
4847 local-scoped decls, since attribute alias is ignored and many
4848 such symbols do not even have a DECL_WEAK field. */
4849 if (decl_function_context (*node
) || current_function_decl
)
4851 warning (OPT_Wattributes
, "%qE attribute ignored", name
);
4852 *no_add_attrs
= true;
4856 /* The idea here is that `weakref("name")' mutates into `weakref,
4857 alias("name")', and weakref without arguments, in turn,
4858 implicitly adds weak. */
4862 attr
= tree_cons (get_identifier ("alias"), args
, attr
);
4863 attr
= tree_cons (get_identifier ("weakref"), NULL_TREE
, attr
);
4865 *no_add_attrs
= true;
4869 if (lookup_attribute ("alias", DECL_ATTRIBUTES (*node
)))
4870 error ("%Jweakref attribute must appear before alias attribute",
4873 attr
= tree_cons (get_identifier ("weak"), NULL_TREE
, attr
);
4876 decl_attributes (node
, attr
, flags
);
4881 /* Handle an "visibility" attribute; arguments as in
4882 struct attribute_spec.handler. */
4885 handle_visibility_attribute (tree
*node
, tree name
, tree args
,
4886 int ARG_UNUSED (flags
),
4890 tree id
= TREE_VALUE (args
);
4892 *no_add_attrs
= true;
4896 if (TREE_CODE (*node
) != RECORD_TYPE
&& TREE_CODE (*node
) != UNION_TYPE
)
4898 warning (OPT_Wattributes
, "%qE attribute ignored on non-class types",
4903 else if (decl_function_context (decl
) != 0 || !TREE_PUBLIC (decl
))
4905 warning (OPT_Wattributes
, "%qE attribute ignored", name
);
4909 if (TREE_CODE (id
) != STRING_CST
)
4911 error ("visibility argument not a string");
4915 /* If this is a type, set the visibility on the type decl. */
4918 decl
= TYPE_NAME (decl
);
4921 if (TREE_CODE (decl
) == IDENTIFIER_NODE
)
4923 warning (OPT_Wattributes
, "%qE attribute ignored on types",
4929 if (strcmp (TREE_STRING_POINTER (id
), "default") == 0)
4930 DECL_VISIBILITY (decl
) = VISIBILITY_DEFAULT
;
4931 else if (strcmp (TREE_STRING_POINTER (id
), "internal") == 0)
4932 DECL_VISIBILITY (decl
) = VISIBILITY_INTERNAL
;
4933 else if (strcmp (TREE_STRING_POINTER (id
), "hidden") == 0)
4934 DECL_VISIBILITY (decl
) = VISIBILITY_HIDDEN
;
4935 else if (strcmp (TREE_STRING_POINTER (id
), "protected") == 0)
4936 DECL_VISIBILITY (decl
) = VISIBILITY_PROTECTED
;
4938 error ("visibility argument must be one of \"default\", \"hidden\", \"protected\" or \"internal\"");
4939 DECL_VISIBILITY_SPECIFIED (decl
) = 1;
4941 /* For decls only, go ahead and attach the attribute to the node as well.
4942 This is needed so we can determine whether we have VISIBILITY_DEFAULT
4943 because the visibility was not specified, or because it was explicitly
4944 overridden from the class visibility. */
4946 *no_add_attrs
= false;
4951 /* Determine the ELF symbol visibility for DECL, which is either a
4952 variable or a function. It is an error to use this function if a
4953 definition of DECL is not available in this translation unit.
4954 Returns true if the final visibility has been determined by this
4955 function; false if the caller is free to make additional
4959 c_determine_visibility (tree decl
)
4961 gcc_assert (TREE_CODE (decl
) == VAR_DECL
4962 || TREE_CODE (decl
) == FUNCTION_DECL
);
4964 /* If the user explicitly specified the visibility with an
4965 attribute, honor that. DECL_VISIBILITY will have been set during
4966 the processing of the attribute. We check for an explicit
4967 attribute, rather than just checking DECL_VISIBILITY_SPECIFIED,
4968 to distinguish the use of an attribute from the use of a "#pragma
4969 GCC visibility push(...)"; in the latter case we still want other
4970 considerations to be able to overrule the #pragma. */
4971 if (lookup_attribute ("visibility", DECL_ATTRIBUTES (decl
)))
4974 /* Anything that is exported must have default visibility. */
4975 if (TARGET_DLLIMPORT_DECL_ATTRIBUTES
4976 && lookup_attribute ("dllexport", DECL_ATTRIBUTES (decl
)))
4978 DECL_VISIBILITY (decl
) = VISIBILITY_DEFAULT
;
4979 DECL_VISIBILITY_SPECIFIED (decl
) = 1;
4986 /* Handle an "tls_model" attribute; arguments as in
4987 struct attribute_spec.handler. */
4990 handle_tls_model_attribute (tree
*node
, tree name
, tree args
,
4991 int ARG_UNUSED (flags
), bool *no_add_attrs
)
4995 enum tls_model kind
;
4997 *no_add_attrs
= true;
4999 if (!DECL_THREAD_LOCAL_P (decl
))
5001 warning (OPT_Wattributes
, "%qE attribute ignored", name
);
5005 kind
= DECL_TLS_MODEL (decl
);
5006 id
= TREE_VALUE (args
);
5007 if (TREE_CODE (id
) != STRING_CST
)
5009 error ("tls_model argument not a string");
5013 if (!strcmp (TREE_STRING_POINTER (id
), "local-exec"))
5014 kind
= TLS_MODEL_LOCAL_EXEC
;
5015 else if (!strcmp (TREE_STRING_POINTER (id
), "initial-exec"))
5016 kind
= TLS_MODEL_INITIAL_EXEC
;
5017 else if (!strcmp (TREE_STRING_POINTER (id
), "local-dynamic"))
5018 kind
= optimize
? TLS_MODEL_LOCAL_DYNAMIC
: TLS_MODEL_GLOBAL_DYNAMIC
;
5019 else if (!strcmp (TREE_STRING_POINTER (id
), "global-dynamic"))
5020 kind
= TLS_MODEL_GLOBAL_DYNAMIC
;
5022 error ("tls_model argument must be one of \"local-exec\", \"initial-exec\", \"local-dynamic\" or \"global-dynamic\"");
5024 DECL_TLS_MODEL (decl
) = kind
;
5028 /* Handle a "no_instrument_function" attribute; arguments as in
5029 struct attribute_spec.handler. */
5032 handle_no_instrument_function_attribute (tree
*node
, tree name
,
5033 tree
ARG_UNUSED (args
),
5034 int ARG_UNUSED (flags
),
5039 if (TREE_CODE (decl
) != FUNCTION_DECL
)
5041 error ("%J%qE attribute applies only to functions", decl
, name
);
5042 *no_add_attrs
= true;
5044 else if (DECL_INITIAL (decl
))
5046 error ("%Jcan%'t set %qE attribute after definition", decl
, name
);
5047 *no_add_attrs
= true;
5050 DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (decl
) = 1;
5055 /* Handle a "malloc" attribute; arguments as in
5056 struct attribute_spec.handler. */
5059 handle_malloc_attribute (tree
*node
, tree name
, tree
ARG_UNUSED (args
),
5060 int ARG_UNUSED (flags
), bool *no_add_attrs
)
5062 if (TREE_CODE (*node
) == FUNCTION_DECL
5063 && POINTER_TYPE_P (TREE_TYPE (TREE_TYPE (*node
))))
5064 DECL_IS_MALLOC (*node
) = 1;
5067 warning (OPT_Wattributes
, "%qE attribute ignored", name
);
5068 *no_add_attrs
= true;
5074 /* Handle a "returns_twice" attribute; arguments as in
5075 struct attribute_spec.handler. */
5078 handle_returns_twice_attribute (tree
*node
, tree name
, tree
ARG_UNUSED (args
),
5079 int ARG_UNUSED (flags
), bool *no_add_attrs
)
5081 if (TREE_CODE (*node
) == FUNCTION_DECL
)
5082 DECL_IS_RETURNS_TWICE (*node
) = 1;
5085 warning (OPT_Wattributes
, "%qE attribute ignored", name
);
5086 *no_add_attrs
= true;
5092 /* Handle a "no_limit_stack" attribute; arguments as in
5093 struct attribute_spec.handler. */
5096 handle_no_limit_stack_attribute (tree
*node
, tree name
,
5097 tree
ARG_UNUSED (args
),
5098 int ARG_UNUSED (flags
),
5103 if (TREE_CODE (decl
) != FUNCTION_DECL
)
5105 error ("%J%qE attribute applies only to functions", decl
, name
);
5106 *no_add_attrs
= true;
5108 else if (DECL_INITIAL (decl
))
5110 error ("%Jcan%'t set %qE attribute after definition", decl
, name
);
5111 *no_add_attrs
= true;
5114 DECL_NO_LIMIT_STACK (decl
) = 1;
5119 /* Handle a "pure" attribute; arguments as in
5120 struct attribute_spec.handler. */
5123 handle_pure_attribute (tree
*node
, tree name
, tree
ARG_UNUSED (args
),
5124 int ARG_UNUSED (flags
), bool *no_add_attrs
)
5126 if (TREE_CODE (*node
) == FUNCTION_DECL
)
5127 DECL_IS_PURE (*node
) = 1;
5128 /* ??? TODO: Support types. */
5131 warning (OPT_Wattributes
, "%qE attribute ignored", name
);
5132 *no_add_attrs
= true;
5138 /* Handle a "no vops" attribute; arguments as in
5139 struct attribute_spec.handler. */
5142 handle_novops_attribute (tree
*node
, tree
ARG_UNUSED (name
),
5143 tree
ARG_UNUSED (args
), int ARG_UNUSED (flags
),
5144 bool *ARG_UNUSED (no_add_attrs
))
5146 gcc_assert (TREE_CODE (*node
) == FUNCTION_DECL
);
5147 DECL_IS_NOVOPS (*node
) = 1;
5151 /* Handle a "deprecated" attribute; arguments as in
5152 struct attribute_spec.handler. */
5155 handle_deprecated_attribute (tree
*node
, tree name
,
5156 tree
ARG_UNUSED (args
), int flags
,
5159 tree type
= NULL_TREE
;
5161 tree what
= NULL_TREE
;
5166 type
= TREE_TYPE (decl
);
5168 if (TREE_CODE (decl
) == TYPE_DECL
5169 || TREE_CODE (decl
) == PARM_DECL
5170 || TREE_CODE (decl
) == VAR_DECL
5171 || TREE_CODE (decl
) == FUNCTION_DECL
5172 || TREE_CODE (decl
) == FIELD_DECL
)
5173 TREE_DEPRECATED (decl
) = 1;
5177 else if (TYPE_P (*node
))
5179 if (!(flags
& (int) ATTR_FLAG_TYPE_IN_PLACE
))
5180 *node
= build_variant_type_copy (*node
);
5181 TREE_DEPRECATED (*node
) = 1;
5189 *no_add_attrs
= true;
5190 if (type
&& TYPE_NAME (type
))
5192 if (TREE_CODE (TYPE_NAME (type
)) == IDENTIFIER_NODE
)
5193 what
= TYPE_NAME (*node
);
5194 else if (TREE_CODE (TYPE_NAME (type
)) == TYPE_DECL
5195 && DECL_NAME (TYPE_NAME (type
)))
5196 what
= DECL_NAME (TYPE_NAME (type
));
5199 warning (OPT_Wattributes
, "%qE attribute ignored for %qE", name
, what
);
5201 warning (OPT_Wattributes
, "%qE attribute ignored", name
);
5207 /* Handle a "vector_size" attribute; arguments as in
5208 struct attribute_spec.handler. */
5211 handle_vector_size_attribute (tree
*node
, tree name
, tree args
,
5212 int ARG_UNUSED (flags
),
5215 unsigned HOST_WIDE_INT vecsize
, nunits
;
5216 enum machine_mode orig_mode
;
5217 tree type
= *node
, new_type
, size
;
5219 *no_add_attrs
= true;
5221 size
= TREE_VALUE (args
);
5223 if (!host_integerp (size
, 1))
5225 warning (OPT_Wattributes
, "%qE attribute ignored", name
);
5229 /* Get the vector size (in bytes). */
5230 vecsize
= tree_low_cst (size
, 1);
5232 /* We need to provide for vector pointers, vector arrays, and
5233 functions returning vectors. For example:
5235 __attribute__((vector_size(16))) short *foo;
5237 In this case, the mode is SI, but the type being modified is
5238 HI, so we need to look further. */
5240 while (POINTER_TYPE_P (type
)
5241 || TREE_CODE (type
) == FUNCTION_TYPE
5242 || TREE_CODE (type
) == METHOD_TYPE
5243 || TREE_CODE (type
) == ARRAY_TYPE
)
5244 type
= TREE_TYPE (type
);
5246 /* Get the mode of the type being modified. */
5247 orig_mode
= TYPE_MODE (type
);
5249 if (TREE_CODE (type
) == RECORD_TYPE
5250 || TREE_CODE (type
) == UNION_TYPE
5251 || TREE_CODE (type
) == VECTOR_TYPE
5252 || (GET_MODE_CLASS (orig_mode
) != MODE_FLOAT
5253 && GET_MODE_CLASS (orig_mode
) != MODE_INT
)
5254 || !host_integerp (TYPE_SIZE_UNIT (type
), 1))
5256 error ("invalid vector type for attribute %qE", name
);
5260 if (vecsize
% tree_low_cst (TYPE_SIZE_UNIT (type
), 1))
5262 error ("vector size not an integral multiple of component size");
5268 error ("zero vector size");
5272 /* Calculate how many units fit in the vector. */
5273 nunits
= vecsize
/ tree_low_cst (TYPE_SIZE_UNIT (type
), 1);
5274 if (nunits
& (nunits
- 1))
5276 error ("number of components of the vector not a power of two");
5280 new_type
= build_vector_type (type
, nunits
);
5282 /* Build back pointers if needed. */
5283 *node
= reconstruct_complex_type (*node
, new_type
);
5288 /* Handle the "nonnull" attribute. */
5290 handle_nonnull_attribute (tree
*node
, tree
ARG_UNUSED (name
),
5291 tree args
, int ARG_UNUSED (flags
),
5295 unsigned HOST_WIDE_INT attr_arg_num
;
5297 /* If no arguments are specified, all pointer arguments should be
5298 non-null. Verify a full prototype is given so that the arguments
5299 will have the correct types when we actually check them later. */
5302 if (!TYPE_ARG_TYPES (type
))
5304 error ("nonnull attribute without arguments on a non-prototype");
5305 *no_add_attrs
= true;
5310 /* Argument list specified. Verify that each argument number references
5311 a pointer argument. */
5312 for (attr_arg_num
= 1; args
; args
= TREE_CHAIN (args
))
5315 unsigned HOST_WIDE_INT arg_num
= 0, ck_num
;
5317 if (!get_nonnull_operand (TREE_VALUE (args
), &arg_num
))
5319 error ("nonnull argument has invalid operand number (argument %lu)",
5320 (unsigned long) attr_arg_num
);
5321 *no_add_attrs
= true;
5325 argument
= TYPE_ARG_TYPES (type
);
5328 for (ck_num
= 1; ; ck_num
++)
5330 if (!argument
|| ck_num
== arg_num
)
5332 argument
= TREE_CHAIN (argument
);
5336 || TREE_CODE (TREE_VALUE (argument
)) == VOID_TYPE
)
5338 error ("nonnull argument with out-of-range operand number (argument %lu, operand %lu)",
5339 (unsigned long) attr_arg_num
, (unsigned long) arg_num
);
5340 *no_add_attrs
= true;
5344 if (TREE_CODE (TREE_VALUE (argument
)) != POINTER_TYPE
)
5346 error ("nonnull argument references non-pointer operand (argument %lu, operand %lu)",
5347 (unsigned long) attr_arg_num
, (unsigned long) arg_num
);
5348 *no_add_attrs
= true;
5357 /* Check the argument list of a function call for null in argument slots
5358 that are marked as requiring a non-null pointer argument. */
5361 check_function_nonnull (tree attrs
, tree params
)
5363 tree a
, args
, param
;
5366 for (a
= attrs
; a
; a
= TREE_CHAIN (a
))
5368 if (is_attribute_p ("nonnull", TREE_PURPOSE (a
)))
5370 args
= TREE_VALUE (a
);
5372 /* Walk the argument list. If we encounter an argument number we
5373 should check for non-null, do it. If the attribute has no args,
5374 then every pointer argument is checked (in which case the check
5375 for pointer type is done in check_nonnull_arg). */
5376 for (param
= params
, param_num
= 1; ;
5377 param_num
++, param
= TREE_CHAIN (param
))
5381 if (!args
|| nonnull_check_p (args
, param_num
))
5382 check_function_arguments_recurse (check_nonnull_arg
, NULL
,
5390 /* Check that the Nth argument of a function call (counting backwards
5391 from the end) is a (pointer)0. */
5394 check_function_sentinel (tree attrs
, tree params
, tree typelist
)
5396 tree attr
= lookup_attribute ("sentinel", attrs
);
5400 /* Skip over the named arguments. */
5401 while (typelist
&& params
)
5403 typelist
= TREE_CHAIN (typelist
);
5404 params
= TREE_CHAIN (params
);
5407 if (typelist
|| !params
)
5408 warning (OPT_Wformat
,
5409 "not enough variable arguments to fit a sentinel");
5415 if (TREE_VALUE (attr
))
5417 tree p
= TREE_VALUE (TREE_VALUE (attr
));
5418 pos
= TREE_INT_CST_LOW (p
);
5421 sentinel
= end
= params
;
5423 /* Advance `end' ahead of `sentinel' by `pos' positions. */
5424 while (pos
> 0 && TREE_CHAIN (end
))
5427 end
= TREE_CHAIN (end
);
5431 warning (OPT_Wformat
,
5432 "not enough variable arguments to fit a sentinel");
5436 /* Now advance both until we find the last parameter. */
5437 while (TREE_CHAIN (end
))
5439 end
= TREE_CHAIN (end
);
5440 sentinel
= TREE_CHAIN (sentinel
);
5443 /* Validate the sentinel. */
5444 if ((!POINTER_TYPE_P (TREE_TYPE (TREE_VALUE (sentinel
)))
5445 || !integer_zerop (TREE_VALUE (sentinel
)))
5446 /* Although __null (in C++) is only an integer we allow it
5447 nevertheless, as we are guaranteed that it's exactly
5448 as wide as a pointer, and we don't want to force
5449 users to cast the NULL they have written there.
5450 We warn with -Wstrict-null-sentinel, though. */
5451 && (warn_strict_null_sentinel
5452 || null_node
!= TREE_VALUE (sentinel
)))
5453 warning (OPT_Wformat
, "missing sentinel in function call");
5458 /* Helper for check_function_nonnull; given a list of operands which
5459 must be non-null in ARGS, determine if operand PARAM_NUM should be
5463 nonnull_check_p (tree args
, unsigned HOST_WIDE_INT param_num
)
5465 unsigned HOST_WIDE_INT arg_num
= 0;
5467 for (; args
; args
= TREE_CHAIN (args
))
5469 bool found
= get_nonnull_operand (TREE_VALUE (args
), &arg_num
);
5473 if (arg_num
== param_num
)
5479 /* Check that the function argument PARAM (which is operand number
5480 PARAM_NUM) is non-null. This is called by check_function_nonnull
5481 via check_function_arguments_recurse. */
5484 check_nonnull_arg (void * ARG_UNUSED (ctx
), tree param
,
5485 unsigned HOST_WIDE_INT param_num
)
5487 /* Just skip checking the argument if it's not a pointer. This can
5488 happen if the "nonnull" attribute was given without an operand
5489 list (which means to check every pointer argument). */
5491 if (TREE_CODE (TREE_TYPE (param
)) != POINTER_TYPE
)
5494 if (integer_zerop (param
))
5495 warning (OPT_Wnonnull
, "null argument where non-null required "
5496 "(argument %lu)", (unsigned long) param_num
);
5499 /* Helper for nonnull attribute handling; fetch the operand number
5500 from the attribute argument list. */
5503 get_nonnull_operand (tree arg_num_expr
, unsigned HOST_WIDE_INT
*valp
)
5505 /* Verify the arg number is a constant. */
5506 if (TREE_CODE (arg_num_expr
) != INTEGER_CST
5507 || TREE_INT_CST_HIGH (arg_num_expr
) != 0)
5510 *valp
= TREE_INT_CST_LOW (arg_num_expr
);
5514 /* Handle a "nothrow" attribute; arguments as in
5515 struct attribute_spec.handler. */
5518 handle_nothrow_attribute (tree
*node
, tree name
, tree
ARG_UNUSED (args
),
5519 int ARG_UNUSED (flags
), bool *no_add_attrs
)
5521 if (TREE_CODE (*node
) == FUNCTION_DECL
)
5522 TREE_NOTHROW (*node
) = 1;
5523 /* ??? TODO: Support types. */
5526 warning (OPT_Wattributes
, "%qE attribute ignored", name
);
5527 *no_add_attrs
= true;
5533 /* Handle a "cleanup" attribute; arguments as in
5534 struct attribute_spec.handler. */
5537 handle_cleanup_attribute (tree
*node
, tree name
, tree args
,
5538 int ARG_UNUSED (flags
), bool *no_add_attrs
)
5541 tree cleanup_id
, cleanup_decl
;
5543 /* ??? Could perhaps support cleanups on TREE_STATIC, much like we do
5544 for global destructors in C++. This requires infrastructure that
5545 we don't have generically at the moment. It's also not a feature
5546 we'd be missing too much, since we do have attribute constructor. */
5547 if (TREE_CODE (decl
) != VAR_DECL
|| TREE_STATIC (decl
))
5549 warning (OPT_Wattributes
, "%qE attribute ignored", name
);
5550 *no_add_attrs
= true;
5554 /* Verify that the argument is a function in scope. */
5555 /* ??? We could support pointers to functions here as well, if
5556 that was considered desirable. */
5557 cleanup_id
= TREE_VALUE (args
);
5558 if (TREE_CODE (cleanup_id
) != IDENTIFIER_NODE
)
5560 error ("cleanup argument not an identifier");
5561 *no_add_attrs
= true;
5564 cleanup_decl
= lang_hooks
.decls
.lookup_name (cleanup_id
);
5565 if (!cleanup_decl
|| TREE_CODE (cleanup_decl
) != FUNCTION_DECL
)
5567 error ("cleanup argument not a function");
5568 *no_add_attrs
= true;
5572 /* That the function has proper type is checked with the
5573 eventual call to build_function_call. */
5578 /* Handle a "warn_unused_result" attribute. No special handling. */
5581 handle_warn_unused_result_attribute (tree
*node
, tree name
,
5582 tree
ARG_UNUSED (args
),
5583 int ARG_UNUSED (flags
), bool *no_add_attrs
)
5585 /* Ignore the attribute for functions not returning any value. */
5586 if (VOID_TYPE_P (TREE_TYPE (*node
)))
5588 warning (OPT_Wattributes
, "%qE attribute ignored", name
);
5589 *no_add_attrs
= true;
5595 /* Handle a "sentinel" attribute. */
5598 handle_sentinel_attribute (tree
*node
, tree name
, tree args
,
5599 int ARG_UNUSED (flags
), bool *no_add_attrs
)
5601 tree params
= TYPE_ARG_TYPES (*node
);
5605 warning (OPT_Wattributes
,
5606 "%qE attribute requires prototypes with named arguments", name
);
5607 *no_add_attrs
= true;
5611 while (TREE_CHAIN (params
))
5612 params
= TREE_CHAIN (params
);
5614 if (VOID_TYPE_P (TREE_VALUE (params
)))
5616 warning (OPT_Wattributes
,
5617 "%qE attribute only applies to variadic functions", name
);
5618 *no_add_attrs
= true;
5624 tree position
= TREE_VALUE (args
);
5626 if (TREE_CODE (position
) != INTEGER_CST
)
5628 warning (0, "requested position is not an integer constant");
5629 *no_add_attrs
= true;
5633 if (tree_int_cst_lt (position
, integer_zero_node
))
5635 warning (0, "requested position is less than zero");
5636 *no_add_attrs
= true;
5644 /* Check for valid arguments being passed to a function. */
5646 check_function_arguments (tree attrs
, tree params
, tree typelist
)
5648 /* Check for null being passed in a pointer argument that must be
5649 non-null. We also need to do this if format checking is enabled. */
5652 check_function_nonnull (attrs
, params
);
5654 /* Check for errors in format strings. */
5656 if (warn_format
|| warn_missing_format_attribute
)
5657 check_function_format (attrs
, params
);
5660 check_function_sentinel (attrs
, params
, typelist
);
5663 /* Generic argument checking recursion routine. PARAM is the argument to
5664 be checked. PARAM_NUM is the number of the argument. CALLBACK is invoked
5665 once the argument is resolved. CTX is context for the callback. */
5667 check_function_arguments_recurse (void (*callback
)
5668 (void *, tree
, unsigned HOST_WIDE_INT
),
5669 void *ctx
, tree param
,
5670 unsigned HOST_WIDE_INT param_num
)
5672 if (TREE_CODE (param
) == NOP_EXPR
)
5674 /* Strip coercion. */
5675 check_function_arguments_recurse (callback
, ctx
,
5676 TREE_OPERAND (param
, 0), param_num
);
5680 if (TREE_CODE (param
) == CALL_EXPR
)
5682 tree type
= TREE_TYPE (TREE_TYPE (TREE_OPERAND (param
, 0)));
5684 bool found_format_arg
= false;
5686 /* See if this is a call to a known internationalization function
5687 that modifies a format arg. Such a function may have multiple
5688 format_arg attributes (for example, ngettext). */
5690 for (attrs
= TYPE_ATTRIBUTES (type
);
5692 attrs
= TREE_CHAIN (attrs
))
5693 if (is_attribute_p ("format_arg", TREE_PURPOSE (attrs
)))
5696 tree format_num_expr
;
5700 /* Extract the argument number, which was previously checked
5702 format_num_expr
= TREE_VALUE (TREE_VALUE (attrs
));
5704 gcc_assert (TREE_CODE (format_num_expr
) == INTEGER_CST
5705 && !TREE_INT_CST_HIGH (format_num_expr
));
5707 format_num
= TREE_INT_CST_LOW (format_num_expr
);
5709 for (inner_args
= TREE_OPERAND (param
, 1), i
= 1;
5711 inner_args
= TREE_CHAIN (inner_args
), i
++)
5712 if (i
== format_num
)
5714 check_function_arguments_recurse (callback
, ctx
,
5715 TREE_VALUE (inner_args
),
5717 found_format_arg
= true;
5722 /* If we found a format_arg attribute and did a recursive check,
5723 we are done with checking this argument. Otherwise, we continue
5724 and this will be considered a non-literal. */
5725 if (found_format_arg
)
5729 if (TREE_CODE (param
) == COND_EXPR
)
5731 /* Check both halves of the conditional expression. */
5732 check_function_arguments_recurse (callback
, ctx
,
5733 TREE_OPERAND (param
, 1), param_num
);
5734 check_function_arguments_recurse (callback
, ctx
,
5735 TREE_OPERAND (param
, 2), param_num
);
5739 (*callback
) (ctx
, param
, param_num
);
5742 /* Function to help qsort sort FIELD_DECLs by name order. */
5745 field_decl_cmp (const void *x_p
, const void *y_p
)
5747 const tree
*const x
= (const tree
*const) x_p
;
5748 const tree
*const y
= (const tree
*const) y_p
;
5750 if (DECL_NAME (*x
) == DECL_NAME (*y
))
5751 /* A nontype is "greater" than a type. */
5752 return (TREE_CODE (*y
) == TYPE_DECL
) - (TREE_CODE (*x
) == TYPE_DECL
);
5753 if (DECL_NAME (*x
) == NULL_TREE
)
5755 if (DECL_NAME (*y
) == NULL_TREE
)
5757 if (DECL_NAME (*x
) < DECL_NAME (*y
))
5763 gt_pointer_operator new_value
;
5767 /* This routine compares two fields like field_decl_cmp but using the
5768 pointer operator in resort_data. */
5771 resort_field_decl_cmp (const void *x_p
, const void *y_p
)
5773 const tree
*const x
= (const tree
*const) x_p
;
5774 const tree
*const y
= (const tree
*const) y_p
;
5776 if (DECL_NAME (*x
) == DECL_NAME (*y
))
5777 /* A nontype is "greater" than a type. */
5778 return (TREE_CODE (*y
) == TYPE_DECL
) - (TREE_CODE (*x
) == TYPE_DECL
);
5779 if (DECL_NAME (*x
) == NULL_TREE
)
5781 if (DECL_NAME (*y
) == NULL_TREE
)
5784 tree d1
= DECL_NAME (*x
);
5785 tree d2
= DECL_NAME (*y
);
5786 resort_data
.new_value (&d1
, resort_data
.cookie
);
5787 resort_data
.new_value (&d2
, resort_data
.cookie
);
5794 /* Resort DECL_SORTED_FIELDS because pointers have been reordered. */
5797 resort_sorted_fields (void *obj
,
5798 void * ARG_UNUSED (orig_obj
),
5799 gt_pointer_operator new_value
,
5802 struct sorted_fields_type
*sf
= (struct sorted_fields_type
*) obj
;
5803 resort_data
.new_value
= new_value
;
5804 resort_data
.cookie
= cookie
;
5805 qsort (&sf
->elts
[0], sf
->len
, sizeof (tree
),
5806 resort_field_decl_cmp
);
5809 /* Subroutine of c_parse_error.
5810 Return the result of concatenating LHS and RHS. RHS is really
5811 a string literal, its first character is indicated by RHS_START and
5812 RHS_SIZE is its length (including the terminating NUL character).
5814 The caller is responsible for deleting the returned pointer. */
5817 catenate_strings (const char *lhs
, const char *rhs_start
, int rhs_size
)
5819 const int lhs_size
= strlen (lhs
);
5820 char *result
= XNEWVEC (char, lhs_size
+ rhs_size
);
5821 strncpy (result
, lhs
, lhs_size
);
5822 strncpy (result
+ lhs_size
, rhs_start
, rhs_size
);
5826 /* Issue the error given by GMSGID, indicating that it occurred before
5827 TOKEN, which had the associated VALUE. */
5830 c_parse_error (const char *gmsgid
, enum cpp_ttype token
, tree value
)
5832 #define catenate_messages(M1, M2) catenate_strings ((M1), (M2), sizeof (M2))
5834 char *message
= NULL
;
5836 if (token
== CPP_EOF
)
5837 message
= catenate_messages (gmsgid
, " at end of input");
5838 else if (token
== CPP_CHAR
|| token
== CPP_WCHAR
)
5840 unsigned int val
= TREE_INT_CST_LOW (value
);
5841 const char *const ell
= (token
== CPP_CHAR
) ? "" : "L";
5842 if (val
<= UCHAR_MAX
&& ISGRAPH (val
))
5843 message
= catenate_messages (gmsgid
, " before %s'%c'");
5845 message
= catenate_messages (gmsgid
, " before %s'\\x%x'");
5847 error (message
, ell
, val
);
5851 else if (token
== CPP_STRING
|| token
== CPP_WSTRING
)
5852 message
= catenate_messages (gmsgid
, " before string constant");
5853 else if (token
== CPP_NUMBER
)
5854 message
= catenate_messages (gmsgid
, " before numeric constant");
5855 else if (token
== CPP_NAME
)
5857 message
= catenate_messages (gmsgid
, " before %qE");
5858 error (message
, value
);
5862 else if (token
< N_TTYPES
)
5864 message
= catenate_messages (gmsgid
, " before %qs token");
5865 error (message
, cpp_type2name (token
));
5877 #undef catenate_messages
5880 /* Walk a gimplified function and warn for functions whose return value is
5881 ignored and attribute((warn_unused_result)) is set. This is done before
5882 inlining, so we don't have to worry about that. */
5885 c_warn_unused_result (tree
*top_p
)
5888 tree_stmt_iterator i
;
5891 switch (TREE_CODE (t
))
5893 case STATEMENT_LIST
:
5894 for (i
= tsi_start (*top_p
); !tsi_end_p (i
); tsi_next (&i
))
5895 c_warn_unused_result (tsi_stmt_ptr (i
));
5899 c_warn_unused_result (&COND_EXPR_THEN (t
));
5900 c_warn_unused_result (&COND_EXPR_ELSE (t
));
5903 c_warn_unused_result (&BIND_EXPR_BODY (t
));
5905 case TRY_FINALLY_EXPR
:
5906 case TRY_CATCH_EXPR
:
5907 c_warn_unused_result (&TREE_OPERAND (t
, 0));
5908 c_warn_unused_result (&TREE_OPERAND (t
, 1));
5911 c_warn_unused_result (&CATCH_BODY (t
));
5913 case EH_FILTER_EXPR
:
5914 c_warn_unused_result (&EH_FILTER_FAILURE (t
));
5921 /* This is a naked call, as opposed to a CALL_EXPR nested inside
5922 a MODIFY_EXPR. All calls whose value is ignored should be
5923 represented like this. Look for the attribute. */
5924 fdecl
= get_callee_fndecl (t
);
5926 ftype
= TREE_TYPE (fdecl
);
5929 ftype
= TREE_TYPE (TREE_OPERAND (t
, 0));
5930 /* Look past pointer-to-function to the function type itself. */
5931 ftype
= TREE_TYPE (ftype
);
5934 if (lookup_attribute ("warn_unused_result", TYPE_ATTRIBUTES (ftype
)))
5937 warning (0, "%Hignoring return value of %qD, "
5938 "declared with attribute warn_unused_result",
5939 EXPR_LOCUS (t
), fdecl
);
5941 warning (0, "%Hignoring return value of function "
5942 "declared with attribute warn_unused_result",
5948 /* Not a container, not a call, or a call whose value is used. */
5953 /* Convert a character from the host to the target execution character
5954 set. cpplib handles this, mostly. */
5957 c_common_to_target_charset (HOST_WIDE_INT c
)
5959 /* Character constants in GCC proper are sign-extended under -fsigned-char,
5960 zero-extended under -fno-signed-char. cpplib insists that characters
5961 and character constants are always unsigned. Hence we must convert
5963 cppchar_t uc
= ((cppchar_t
)c
) & ((((cppchar_t
)1) << CHAR_BIT
)-1);
5965 uc
= cpp_host_to_exec_charset (parse_in
, uc
);
5967 if (flag_signed_char
)
5968 return ((HOST_WIDE_INT
)uc
) << (HOST_BITS_PER_WIDE_INT
- CHAR_TYPE_SIZE
)
5969 >> (HOST_BITS_PER_WIDE_INT
- CHAR_TYPE_SIZE
);
5974 /* Build the result of __builtin_offsetof. EXPR is a nested sequence of
5975 component references, with an INDIRECT_REF at the bottom; much like
5976 the traditional rendering of offsetof as a macro. Returns the folded
5977 and properly cast result. */
5980 fold_offsetof_1 (tree expr
)
5982 enum tree_code code
= PLUS_EXPR
;
5985 switch (TREE_CODE (expr
))
5991 error ("cannot apply %<offsetof%> to static data member %qD", expr
);
5992 return error_mark_node
;
5995 return size_zero_node
;
5998 base
= fold_offsetof_1 (TREE_OPERAND (expr
, 0));
5999 if (base
== error_mark_node
)
6002 t
= TREE_OPERAND (expr
, 1);
6003 if (DECL_C_BIT_FIELD (t
))
6005 error ("attempt to take address of bit-field structure "
6007 return error_mark_node
;
6009 off
= size_binop (PLUS_EXPR
, DECL_FIELD_OFFSET (t
),
6010 size_int (tree_low_cst (DECL_FIELD_BIT_OFFSET (t
), 1)
6015 base
= fold_offsetof_1 (TREE_OPERAND (expr
, 0));
6016 if (base
== error_mark_node
)
6019 t
= TREE_OPERAND (expr
, 1);
6020 if (TREE_CODE (t
) == INTEGER_CST
&& tree_int_cst_sgn (t
) < 0)
6023 t
= fold_build1 (NEGATE_EXPR
, TREE_TYPE (t
), t
);
6025 t
= convert (sizetype
, t
);
6026 off
= size_binop (MULT_EXPR
, TYPE_SIZE_UNIT (TREE_TYPE (expr
)), t
);
6030 /* Handle static members of volatile structs. */
6031 t
= TREE_OPERAND (expr
, 1);
6032 gcc_assert (TREE_CODE (t
) == VAR_DECL
);
6033 return fold_offsetof_1 (t
);
6039 return size_binop (code
, base
, off
);
6043 fold_offsetof (tree expr
)
6045 /* Convert back from the internal sizetype to size_t. */
6046 return convert (size_type_node
, fold_offsetof_1 (expr
));
6049 /* Print an error message for an invalid lvalue. USE says
6050 how the lvalue is being used and so selects the error message. */
6053 lvalue_error (enum lvalue_use use
)
6058 error ("invalid lvalue in assignment");
6061 error ("invalid lvalue in increment");
6064 error ("invalid lvalue in decrement");
6067 error ("invalid lvalue in unary %<&%>");
6070 error ("invalid lvalue in asm statement");
6077 /* *PTYPE is an incomplete array. Complete it with a domain based on
6078 INITIAL_VALUE. If INITIAL_VALUE is not present, use 1 if DO_DEFAULT
6079 is true. Return 0 if successful, 1 if INITIAL_VALUE can't be deciphered,
6080 2 if INITIAL_VALUE was NULL, and 3 if INITIAL_VALUE was empty. */
6083 complete_array_type (tree
*ptype
, tree initial_value
, bool do_default
)
6085 tree maxindex
, type
, main_type
, elt
, unqual_elt
;
6086 int failure
= 0, quals
;
6088 maxindex
= size_zero_node
;
6091 if (TREE_CODE (initial_value
) == STRING_CST
)
6094 = int_size_in_bytes (TREE_TYPE (TREE_TYPE (initial_value
)));
6095 maxindex
= size_int (TREE_STRING_LENGTH (initial_value
)/eltsize
- 1);
6097 else if (TREE_CODE (initial_value
) == CONSTRUCTOR
)
6099 VEC(constructor_elt
,gc
) *v
= CONSTRUCTOR_ELTS (initial_value
);
6101 if (VEC_empty (constructor_elt
, v
))
6105 maxindex
= integer_minus_one_node
;
6110 unsigned HOST_WIDE_INT cnt
;
6111 constructor_elt
*ce
;
6113 if (VEC_index (constructor_elt
, v
, 0)->index
)
6114 maxindex
= fold_convert (sizetype
,
6115 VEC_index (constructor_elt
,
6117 curindex
= maxindex
;
6120 VEC_iterate (constructor_elt
, v
, cnt
, ce
);
6124 curindex
= fold_convert (sizetype
, ce
->index
);
6126 curindex
= size_binop (PLUS_EXPR
, curindex
, size_one_node
);
6128 if (tree_int_cst_lt (maxindex
, curindex
))
6129 maxindex
= curindex
;
6135 /* Make an error message unless that happened already. */
6136 if (initial_value
!= error_mark_node
)
6148 elt
= TREE_TYPE (type
);
6149 quals
= TYPE_QUALS (strip_array_types (elt
));
6153 unqual_elt
= c_build_qualified_type (elt
, TYPE_UNQUALIFIED
);
6155 /* Using build_distinct_type_copy and modifying things afterward instead
6156 of using build_array_type to create a new type preserves all of the
6157 TYPE_LANG_FLAG_? bits that the front end may have set. */
6158 main_type
= build_distinct_type_copy (TYPE_MAIN_VARIANT (type
));
6159 TREE_TYPE (main_type
) = unqual_elt
;
6160 TYPE_DOMAIN (main_type
) = build_index_type (maxindex
);
6161 layout_type (main_type
);
6166 type
= c_build_qualified_type (main_type
, quals
);
6173 /* Used to help initialize the builtin-types.def table. When a type of
6174 the correct size doesn't exist, use error_mark_node instead of NULL.
6175 The later results in segfaults even when a decl using the type doesn't
6179 builtin_type_for_size (int size
, bool unsignedp
)
6181 tree type
= lang_hooks
.types
.type_for_size (size
, unsignedp
);
6182 return type
? type
: error_mark_node
;
6185 /* A helper function for resolve_overloaded_builtin in resolving the
6186 overloaded __sync_ builtins. Returns a positive power of 2 if the
6187 first operand of PARAMS is a pointer to a supported data type.
6188 Returns 0 if an error is encountered. */
6191 sync_resolve_size (tree function
, tree params
)
6198 error ("too few arguments to function %qE", function
);
6202 type
= TREE_TYPE (TREE_VALUE (params
));
6203 if (TREE_CODE (type
) != POINTER_TYPE
)
6206 type
= TREE_TYPE (type
);
6207 if (!INTEGRAL_TYPE_P (type
) && !POINTER_TYPE_P (type
))
6210 size
= tree_low_cst (TYPE_SIZE_UNIT (type
), 1);
6211 if (size
== 1 || size
== 2 || size
== 4 || size
== 8)
6215 error ("incompatible type for argument %d of %qE", 1, function
);
6219 /* A helper function for resolve_overloaded_builtin. Adds casts to
6220 PARAMS to make arguments match up with those of FUNCTION. Drops
6221 the variadic arguments at the end. Returns false if some error
6222 was encountered; true on success. */
6225 sync_resolve_params (tree orig_function
, tree function
, tree params
)
6227 tree arg_types
= TYPE_ARG_TYPES (TREE_TYPE (function
));
6231 /* We've declared the implementation functions to use "volatile void *"
6232 as the pointer parameter, so we shouldn't get any complaints from the
6233 call to check_function_arguments what ever type the user used. */
6234 arg_types
= TREE_CHAIN (arg_types
);
6235 ptype
= TREE_TYPE (TREE_TYPE (TREE_VALUE (params
)));
6238 /* For the rest of the values, we need to cast these to FTYPE, so that we
6239 don't get warnings for passing pointer types, etc. */
6240 while (arg_types
!= void_list_node
)
6244 params
= TREE_CHAIN (params
);
6247 error ("too few arguments to function %qE", orig_function
);
6251 /* ??? Ideally for the first conversion we'd use convert_for_assignment
6252 so that we get warnings for anything that doesn't match the pointer
6253 type. This isn't portable across the C and C++ front ends atm. */
6254 val
= TREE_VALUE (params
);
6255 val
= convert (ptype
, val
);
6256 val
= convert (TREE_VALUE (arg_types
), val
);
6257 TREE_VALUE (params
) = val
;
6259 arg_types
= TREE_CHAIN (arg_types
);
6263 /* The definition of these primitives is variadic, with the remaining
6264 being "an optional list of variables protected by the memory barrier".
6265 No clue what that's supposed to mean, precisely, but we consider all
6266 call-clobbered variables to be protected so we're safe. */
6267 TREE_CHAIN (params
) = NULL
;
6272 /* A helper function for resolve_overloaded_builtin. Adds a cast to
6273 RESULT to make it match the type of the first pointer argument in
6277 sync_resolve_return (tree params
, tree result
)
6279 tree ptype
= TREE_TYPE (TREE_TYPE (TREE_VALUE (params
)));
6280 ptype
= TYPE_MAIN_VARIANT (ptype
);
6281 return convert (ptype
, result
);
6284 /* Some builtin functions are placeholders for other expressions. This
6285 function should be called immediately after parsing the call expression
6286 before surrounding code has committed to the type of the expression.
6288 FUNCTION is the DECL that has been invoked; it is known to be a builtin.
6289 PARAMS is the argument list for the call. The return value is non-null
6290 when expansion is complete, and null if normal processing should
6294 resolve_overloaded_builtin (tree function
, tree params
)
6296 enum built_in_function orig_code
= DECL_FUNCTION_CODE (function
);
6297 switch (DECL_BUILT_IN_CLASS (function
))
6299 case BUILT_IN_NORMAL
:
6302 if (targetm
.resolve_overloaded_builtin
)
6303 return targetm
.resolve_overloaded_builtin (function
, params
);
6310 /* Handle BUILT_IN_NORMAL here. */
6313 case BUILT_IN_FETCH_AND_ADD_N
:
6314 case BUILT_IN_FETCH_AND_SUB_N
:
6315 case BUILT_IN_FETCH_AND_OR_N
:
6316 case BUILT_IN_FETCH_AND_AND_N
:
6317 case BUILT_IN_FETCH_AND_XOR_N
:
6318 case BUILT_IN_FETCH_AND_NAND_N
:
6319 case BUILT_IN_ADD_AND_FETCH_N
:
6320 case BUILT_IN_SUB_AND_FETCH_N
:
6321 case BUILT_IN_OR_AND_FETCH_N
:
6322 case BUILT_IN_AND_AND_FETCH_N
:
6323 case BUILT_IN_XOR_AND_FETCH_N
:
6324 case BUILT_IN_NAND_AND_FETCH_N
:
6325 case BUILT_IN_BOOL_COMPARE_AND_SWAP_N
:
6326 case BUILT_IN_VAL_COMPARE_AND_SWAP_N
:
6327 case BUILT_IN_LOCK_TEST_AND_SET_N
:
6328 case BUILT_IN_LOCK_RELEASE_N
:
6330 int n
= sync_resolve_size (function
, params
);
6331 tree new_function
, result
;
6334 return error_mark_node
;
6336 new_function
= built_in_decls
[orig_code
+ exact_log2 (n
) + 1];
6337 if (!sync_resolve_params (function
, new_function
, params
))
6338 return error_mark_node
;
6340 result
= build_function_call (new_function
, params
);
6341 if (orig_code
!= BUILT_IN_BOOL_COMPARE_AND_SWAP_N
6342 && orig_code
!= BUILT_IN_LOCK_RELEASE_N
)
6343 result
= sync_resolve_return (params
, result
);
6353 /* Ignoring their sign, return true if two scalar types are the same. */
6355 same_scalar_type_ignoring_signedness (tree t1
, tree t2
)
6357 enum tree_code c1
= TREE_CODE (t1
), c2
= TREE_CODE (t2
);
6359 gcc_assert ((c1
== INTEGER_TYPE
|| c1
== REAL_TYPE
)
6360 && (c2
== INTEGER_TYPE
|| c2
== REAL_TYPE
));
6362 /* Equality works here because c_common_signed_type uses
6363 TYPE_MAIN_VARIANT. */
6364 return lang_hooks
.types
.signed_type (t1
)
6365 == lang_hooks
.types
.signed_type (t2
);
6368 /* Check for missing format attributes on function pointers. LTYPE is
6369 the new type or left-hand side type. RTYPE is the old type or
6370 right-hand side type. Returns TRUE if LTYPE is missing the desired
6374 check_missing_format_attribute (tree ltype
, tree rtype
)
6376 tree
const ttr
= TREE_TYPE (rtype
), ttl
= TREE_TYPE (ltype
);
6379 for (ra
= TYPE_ATTRIBUTES (ttr
); ra
; ra
= TREE_CHAIN (ra
))
6380 if (is_attribute_p ("format", TREE_PURPOSE (ra
)))
6385 for (la
= TYPE_ATTRIBUTES (ttl
); la
; la
= TREE_CHAIN (la
))
6386 if (is_attribute_p ("format", TREE_PURPOSE (la
)))
6394 #include "gt-c-common.h"