Merge FreeBSD modifications into gcc 3.4.2-prerelease:

1.2   framework for our kernel printf enhancements.
  1.3   suppress prototype warnings on K&R main.

Both flag variables declared here were disconnected through the 5-current
lifetime and are retained here for backwards compatibility reasons only.
This commit is contained in:
Alexander Kabaev 2004-07-28 03:46:02 +00:00
parent 48b98bbb98
commit 42eb4c1088

View File

@ -1,6 +1,6 @@
/* Definitions for c-common.c.
Copyright (C) 1987, 1993, 1994, 1995, 1997, 1998,
1999, 2000, 2001, 2002 Free Software Foundation, Inc.
1999, 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
This file is part of GCC.
@ -24,6 +24,7 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA
#include "splay-tree.h"
#include "cpplib.h"
#include "ggc.h"
/* Usage of TREE_LANG_FLAG_?:
0: COMPOUND_STMT_NO_SCOPE (in COMPOUND_STMT).
@ -39,6 +40,7 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA
2: STMT_LINENO_FOR_FN_P (in _STMT)
3: SCOPE_NO_CLEANUPS_P (in SCOPE_STMT)
COMPOUND_STMT_BODY_BLOCK (in COMPOUND_STMT)
STMT_EXPR_WARN_UNUSED_RESULT (in STMT_EXPR)
4: SCOPE_PARTIAL_P (in SCOPE_STMT)
*/
@ -58,7 +60,7 @@ enum rid
RID_VOLATILE, RID_SIGNED, RID_AUTO, RID_RESTRICT,
/* C extensions */
RID_BOUNDED, RID_UNBOUNDED, RID_COMPLEX, RID_THREAD,
RID_COMPLEX, RID_THREAD,
/* C++ */
RID_FRIEND, RID_VIRTUAL, RID_EXPLICIT, RID_EXPORT, RID_MUTABLE,
@ -86,9 +88,10 @@ enum rid
RID_PUBLIC, RID_PRIVATE, RID_PROTECTED,
RID_TEMPLATE, RID_NULL, RID_CATCH,
RID_DELETE, RID_FALSE, RID_NAMESPACE,
RID_NEW, RID_OPERATOR, RID_THIS,
RID_THROW, RID_TRUE, RID_TRY,
RID_TYPENAME, RID_TYPEID, RID_USING,
RID_NEW, RID_OFFSETOF, RID_OPERATOR,
RID_THIS, RID_THROW, RID_TRUE,
RID_TRY, RID_TYPENAME, RID_TYPEID,
RID_USING,
/* casts */
RID_CONSTCAST, RID_DYNCAST, RID_REINTCAST, RID_STATCAST,
@ -97,7 +100,10 @@ enum rid
RID_ID, RID_AT_ENCODE, RID_AT_END,
RID_AT_CLASS, RID_AT_ALIAS, RID_AT_DEFS,
RID_AT_PRIVATE, RID_AT_PROTECTED, RID_AT_PUBLIC,
RID_AT_PROTOCOL, RID_AT_SELECTOR, RID_AT_INTERFACE,
RID_AT_PROTOCOL, RID_AT_SELECTOR,
RID_AT_THROW, RID_AT_TRY, RID_AT_CATCH,
RID_AT_FINALLY, RID_AT_SYNCHRONIZED,
RID_AT_INTERFACE,
RID_AT_IMPLEMENTATION,
RID_MAX,
@ -121,7 +127,7 @@ enum rid
/* The elements of `ridpointers' are identifier nodes for the reserved
type names and storage classes. It is indexed by a RID_... value. */
extern tree *ridpointers;
extern GTY ((length ("(int)RID_MAX"))) tree *ridpointers;
/* Standard named or nameless data types of the C compiler. */
@ -145,13 +151,10 @@ enum c_tree_index
CTI_CONST_STRING_TYPE,
/* Type for boolean expressions (bool in C++, int in C). */
CTI_BOOLEAN_TYPE,
CTI_BOOLEAN_TRUE,
CTI_BOOLEAN_FALSE,
/* C99's _Bool type. */
CTI_C_BOOL_TYPE,
CTI_C_BOOL_TRUE,
CTI_C_BOOL_FALSE,
CTI_TRUTHVALUE_TYPE,
CTI_TRUTHVALUE_TRUE,
CTI_TRUTHVALUE_FALSE,
CTI_DEFAULT_FUNCTION_TYPE,
CTI_G77_INTEGER_TYPE,
@ -177,7 +180,7 @@ enum c_tree_index
struct c_common_identifier GTY(())
{
struct tree_common common;
struct cpp_hashnode GTY ((skip (""))) node;
struct cpp_hashnode node;
};
#define wchar_type_node c_global_trees[CTI_WCHAR_TYPE]
@ -191,13 +194,9 @@ struct c_common_identifier GTY(())
#define widest_integer_literal_type_node c_global_trees[CTI_WIDEST_INT_LIT_TYPE]
#define widest_unsigned_literal_type_node c_global_trees[CTI_WIDEST_UINT_LIT_TYPE]
#define boolean_type_node c_global_trees[CTI_BOOLEAN_TYPE]
#define boolean_true_node c_global_trees[CTI_BOOLEAN_TRUE]
#define boolean_false_node c_global_trees[CTI_BOOLEAN_FALSE]
#define c_bool_type_node c_global_trees[CTI_C_BOOL_TYPE]
#define c_bool_true_node c_global_trees[CTI_C_BOOL_TRUE]
#define c_bool_false_node c_global_trees[CTI_C_BOOL_FALSE]
#define truthvalue_type_node c_global_trees[CTI_TRUTHVALUE_TYPE]
#define truthvalue_true_node c_global_trees[CTI_TRUTHVALUE_TRUE]
#define truthvalue_false_node c_global_trees[CTI_TRUTHVALUE_FALSE]
#define char_array_type_node c_global_trees[CTI_CHAR_ARRAY_TYPE]
#define wchar_array_type_node c_global_trees[CTI_WCHAR_ARRAY_TYPE]
@ -223,6 +222,14 @@ struct c_common_identifier GTY(())
extern GTY(()) tree c_global_trees[CTI_MAX];
/* In a RECORD_TYPE, a sorted array of the fields of the type, not a
tree for size reasons. */
struct sorted_fields_type GTY(())
{
int len;
tree GTY((length ("%h.len"))) elts[1];
};
/* Mark which labels are explicitly declared.
These may be shadowed, and may be referenced from nested functions. */
#define C_DECLARED_LABEL_FLAG(label) TREE_LANG_FLAG_1 (label)
@ -233,11 +240,20 @@ extern GTY(()) tree c_global_trees[CTI_MAX];
typedef enum c_language_kind
{
clk_c = 0, /* A dialect of C: K&R C, ANSI/ISO C89, C2000, etc. */
clk_cplusplus /* ANSI/ISO C++ */
clk_c = 0, /* C90, C94 or C99 */
clk_objc = 1, /* clk_c with ObjC features. */
clk_cxx = 2, /* ANSI/ISO C++ */
clk_objcxx = 3 /* clk_cxx with ObjC features. */
}
c_language_kind;
/* To test for a specific language use c_language, defined by each
front end. For "ObjC features" or "not C++" use the macros. */
extern c_language_kind c_language;
#define c_dialect_cxx() (c_language & clk_cxx)
#define c_dialect_objc() (c_language & clk_objc)
/* Information about a statement tree. */
struct stmt_tree_s GTY(()) {
@ -305,75 +321,90 @@ struct c_language_function GTY(()) {
/* Language-specific hooks. */
extern int (*lang_statement_code_p) PARAMS ((enum tree_code));
extern void (*lang_expand_stmt) PARAMS ((tree));
extern void (*lang_expand_decl_stmt) PARAMS ((tree));
extern void (*lang_expand_function_end) PARAMS ((void));
extern tree gettags PARAMS ((void));
extern void (*lang_expand_stmt) (tree);
extern void (*lang_expand_decl_stmt) (tree);
extern void (*lang_expand_function_end) (void);
/* Callback that determines if it's ok for a function to have no
noreturn attribute. */
extern int (*lang_missing_noreturn_ok_p) PARAMS ((tree));
extern int (*lang_missing_noreturn_ok_p) (tree);
extern int yyparse PARAMS ((void));
extern void free_parser_stacks PARAMS ((void));
extern int yyparse (void);
extern stmt_tree current_stmt_tree (void);
extern tree *current_scope_stmt_stack (void);
extern void begin_stmt_tree (tree *);
extern tree add_stmt (tree);
extern void add_decl_stmt (tree);
extern tree add_scope_stmt (int, int);
extern void finish_stmt_tree (tree *);
extern stmt_tree current_stmt_tree PARAMS ((void));
extern tree *current_scope_stmt_stack PARAMS ((void));
extern void begin_stmt_tree PARAMS ((tree *));
extern tree add_stmt PARAMS ((tree));
extern void add_decl_stmt PARAMS ((tree));
extern tree add_scope_stmt PARAMS ((int, int));
extern void finish_stmt_tree PARAMS ((tree *));
extern int statement_code_p PARAMS ((enum tree_code));
extern tree walk_stmt_tree PARAMS ((tree *,
walk_tree_fn,
void *));
extern void prep_stmt PARAMS ((tree));
extern void expand_stmt PARAMS ((tree));
extern void shadow_warning PARAMS ((const char *,
tree, tree));
extern tree c_begin_if_stmt PARAMS ((void));
extern tree c_begin_while_stmt PARAMS ((void));
extern void c_finish_while_stmt_cond PARAMS ((tree, tree));
/* Extra information associated with a DECL. Other C dialects extend
this structure in various ways. The C front-end only uses this
structure for FUNCTION_DECLs; all other DECLs have a NULL
DECL_LANG_SPECIFIC field. */
struct c_lang_decl GTY(()) {
unsigned declared_inline : 1;
};
/* In a FUNCTION_DECL for which DECL_BUILT_IN does not hold, this is
the approximate number of statements in this function. There is
no need for this number to be exact; it is only used in various
heuristics regarding optimization. */
#define DECL_NUM_STMTS(NODE) \
(FUNCTION_DECL_CHECK (NODE)->decl.u1.i)
/* The variant of the C language being processed. Each C language
front-end defines this variable. */
extern c_language_kind c_language;
extern tree walk_stmt_tree (tree *, walk_tree_fn, void *);
extern void prep_stmt (tree);
extern void expand_stmt (tree);
extern tree c_begin_if_stmt (void);
extern tree c_begin_while_stmt (void);
extern void c_finish_while_stmt_cond (tree, tree);
extern int field_decl_cmp (const void *, const void *);
extern void resort_sorted_fields (void *, void *, gt_pointer_operator,
void *);
/* Switches common to the C front ends. */
/* Nonzero if prepreprocessing only. */
extern int flag_preprocess_only;
/* Zero means that faster, ...NonNil variants of objc_msgSend...
calls will be used in ObjC; passing nil receivers to such calls
will most likely result in crashes. */
extern int flag_nil_receivers;
/* Nonzero means that we will allow new ObjC exception syntax (@throw,
@try, etc.) in source code. */
extern int flag_objc_exceptions;
/* Nonzero means that code generation will be altered to support
"zero-link" execution. This currently affects ObjC only, but may
affect other languages in the future. */
extern int flag_zero_link;
/* Nonzero means emit an '__OBJC, __image_info' for the current translation
unit. It will inform the ObjC runtime that class definition(s) herein
contained are to replace one(s) previously loaded. */
extern int flag_replace_objc_classes;
/* Nonzero means don't output line number information. */
extern char flag_no_line_commands;
/* Nonzero causes -E output not to be done, but directives such as
#define that have side effects are still obeyed. */
extern char flag_no_output;
/* Nonzero means dump macros in some fashion; contains the 'D', 'M' or
'N' of the command line switch. */
extern char flag_dump_macros;
/* Nonzero means pass #include lines through to the output. */
extern char flag_dump_includes;
/* The file name to which we should write a precompiled header, or
NULL if no header will be written in this compile. */
extern const char *pch_file;
/* Nonzero if an ISO standard was selected. It rejects macros in the
user's namespace. */
extern int flag_iso;
/* Nonzero whenever Objective-C functionality is being used. */
extern int flag_objc;
extern int flag_iso;
/* Nonzero if -undef was given. It suppresses target built-in macros
and assertions. */
extern int flag_undef;
/* Nonzero means don't recognize the non-ANSI builtin functions. */
@ -405,10 +436,6 @@ extern int flag_no_asm;
extern int flag_const_strings;
/* Nonzero means `$' can be in an identifier. */
extern int dollars_in_ident;
/* Nonzero means to treat bitfields as signed unless they say `unsigned'. */
extern int flag_signed_bitfields;
@ -530,15 +557,10 @@ extern int flag_isoc99;
extern int flag_bsd_format;
/* Nonzero means that we have builtin functions, and main is an int */
/* Nonzero means that we have builtin functions, and main is an int. */
extern int flag_hosted;
/* Nonzero means add default format_arg attributes for functions not
in ISO C. */
extern int flag_noniso_default_format_attributes;
/* Nonzero means warn when casting a function call to a type that does
not match the return type (e.g. (float)sqrt() or (anything*)malloc()
when there is no previous declaration of sqrt or malloc. */
@ -549,6 +571,10 @@ extern int warn_bad_function_cast;
extern int warn_traditional;
/* Nonzero means warn for a declaration found after a statement. */
extern int warn_declaration_after_statement;
/* Nonzero means warn for non-prototype function decls
or non-prototyped defs without previous prototype. */
@ -575,6 +601,12 @@ extern int warn_main;
extern int warn_sequence_point;
/* Nonzero means warn about uninitialized variable when it is initialized with itself.
For example: int i = i;, GCC will not warn about this when warn_init_self is nonzero. */
extern int warn_init_self;
/* Nonzero means to warn about compile-time division by zero. */
extern int warn_div_by_zero;
@ -587,6 +619,10 @@ extern int warn_implicit_int;
extern int warn_nonnull;
/* Warn about old-style parameter declaration. */
extern int warn_old_style_definition;
/* ObjC language option variables. */
@ -642,17 +678,6 @@ extern int flag_no_gnu_keywords;
extern int flag_implement_inlines;
/* Nonzero means do emit exported implementations of templates, instead of
multiple static copies in each file that needs a definition. */
extern int flag_external_templates;
/* Nonzero means that the decision to emit or not emit the implementation of a
template depends on where the template is instantiated, rather than where
it is defined. */
extern int flag_alt_external_templates;
/* Nonzero means that implicit instantiations will be emitted if needed. */
extern int flag_implicit_templates;
@ -718,15 +743,18 @@ extern int flag_new_for_scope;
extern int flag_weak;
/* 0 means we want the preprocessor to not emit line directives for
the current working directory. 1 means we want it to do it. -1
means we should decide depending on whether debugging information
is being emitted or not. */
extern int flag_working_directory;
/* Nonzero to use __cxa_atexit, rather than atexit, to register
destructors for local statics and global objects. */
extern int flag_use_cxa_atexit;
/* Nonzero means output .vtable_{entry,inherit} for use in doing vtable gc. */
extern int flag_vtable_gc;
/* Nonzero means make the default pedwarns warnings instead of errors.
The value of this flag is ignored if -pedantic is specified. */
@ -739,26 +767,15 @@ extern int flag_permissive;
extern int flag_enforce_eh_specs;
/* The version of the C++ ABI in use. The following values are
allowed:
0: The version of the ABI believed most conformant with the
C++ ABI specification. This ABI may change as bugs are
discovered and fixed. Therefore, 0 will not necessarily
indicate the same ABI in different versions of G++.
1: The version of the ABI first used in G++ 3.2.
Additional positive integers will be assigned as new versions of
the ABI become the default version of the ABI. */
extern int flag_abi_version;
/* Nonzero means warn about things that will change when compiling
with an ABI-compliant compiler. */
extern int warn_abi;
/* Nonzero means warn about invalid uses of offsetof. */
extern int warn_invalid_offsetof;
/* Nonzero means warn about implicit declarations. */
extern int warn_implicit;
@ -854,66 +871,60 @@ extern const struct attribute_spec c_common_format_attribute_table[];
TYPE_DEP indicates whether it depends on type of the function or not
(i.e. __PRETTY_FUNCTION__). */
extern tree (*make_fname_decl) PARAMS ((tree, int));
extern tree (*make_fname_decl) (tree, int);
extern tree identifier_global_value PARAMS ((tree));
extern void record_builtin_type PARAMS ((enum rid,
const char *, tree));
extern tree build_void_list_node PARAMS ((void));
extern void start_fname_decls PARAMS ((void));
extern void finish_fname_decls PARAMS ((void));
extern const char *fname_as_string PARAMS ((int));
extern tree fname_decl PARAMS ((unsigned, tree));
extern const char *fname_string PARAMS ((unsigned));
extern tree identifier_global_value (tree);
extern void record_builtin_type (enum rid, const char *, tree);
extern tree build_void_list_node (void);
extern void start_fname_decls (void);
extern void finish_fname_decls (void);
extern const char *fname_as_string (int);
extern tree fname_decl (unsigned, tree);
extern void check_function_arguments PARAMS ((tree, tree));
extern void check_function_arguments_recurse PARAMS ((void (*) (void *,
tree,
unsigned HOST_WIDE_INT),
void *, tree,
unsigned HOST_WIDE_INT));
extern void check_function_format PARAMS ((int *, tree, tree));
extern void set_Wformat PARAMS ((int));
extern tree handle_format_attribute PARAMS ((tree *, tree, tree,
int, bool *));
extern tree handle_format_arg_attribute PARAMS ((tree *, tree, tree,
int, bool *));
extern void c_common_insert_default_attributes PARAMS ((tree));
extern int c_common_decode_option PARAMS ((int, char **));
extern tree c_common_type_for_mode PARAMS ((enum machine_mode,
int));
extern tree c_common_type_for_size PARAMS ((unsigned int, int));
extern tree c_common_unsigned_type PARAMS ((tree));
extern tree c_common_signed_type PARAMS ((tree));
extern tree c_common_signed_or_unsigned_type PARAMS ((int, tree));
extern tree c_common_truthvalue_conversion PARAMS ((tree));
extern void c_apply_type_quals_to_decl PARAMS ((int, tree));
extern tree c_sizeof_or_alignof_type PARAMS ((tree, enum tree_code, int));
extern tree c_alignof_expr PARAMS ((tree));
extern void check_function_arguments (tree, tree);
extern void check_function_arguments_recurse (void (*)
(void *, tree,
unsigned HOST_WIDE_INT),
void *, tree,
unsigned HOST_WIDE_INT);
extern void check_function_format (int *, tree, tree);
extern void set_Wformat (int);
extern tree handle_format_attribute (tree *, tree, tree, int, bool *);
extern tree handle_format_arg_attribute (tree *, tree, tree, int, bool *);
extern int c_common_handle_option (size_t code, const char *arg, int value);
extern bool c_common_missing_argument (const char *opt, size_t code);
extern tree c_common_type_for_mode (enum machine_mode, int);
extern tree c_common_type_for_size (unsigned int, int);
extern tree c_common_unsigned_type (tree);
extern tree c_common_signed_type (tree);
extern tree c_common_signed_or_unsigned_type (int, tree);
extern tree c_common_truthvalue_conversion (tree);
extern void c_apply_type_quals_to_decl (int, tree);
extern tree c_sizeof_or_alignof_type (tree, enum tree_code, int);
extern tree c_alignof_expr (tree);
/* Print an error message for invalid operands to arith operation CODE.
NOP_EXPR is used as a special case (see truthvalue_conversion). */
extern void binary_op_error PARAMS ((enum tree_code));
extern void binary_op_error (enum tree_code);
#define my_friendly_assert(EXP, N) (void) \
(((EXP) == 0) ? (fancy_abort (__FILE__, __LINE__, __FUNCTION__), 0) : 0)
extern tree c_expand_expr_stmt PARAMS ((tree));
extern void c_expand_start_cond PARAMS ((tree, int, tree));
extern void c_finish_then PARAMS ((void));
extern void c_expand_start_else PARAMS ((void));
extern void c_finish_else PARAMS ((void));
extern void c_expand_end_cond PARAMS ((void));
extern tree c_expand_expr_stmt (tree);
extern void c_expand_start_cond (tree, int, tree);
extern void c_finish_then (void);
extern void c_expand_start_else (void);
extern void c_finish_else (void);
extern void c_expand_end_cond (void);
/* Validate the expression after `case' and apply default promotions. */
extern tree check_case_value PARAMS ((tree));
extern tree fix_string_type PARAMS ((tree));
extern tree check_case_value (tree);
extern tree fix_string_type (tree);
struct varray_head_tag;
extern tree combine_strings PARAMS ((struct varray_head_tag *));
extern void constant_expression_warning PARAMS ((tree));
extern tree convert_and_check PARAMS ((tree, tree));
extern void overflow_warning PARAMS ((tree));
extern void unsigned_conversion_warning PARAMS ((tree, tree));
extern void constant_expression_warning (tree);
extern tree convert_and_check (tree, tree);
extern void overflow_warning (tree);
extern void unsigned_conversion_warning (tree, tree);
/* Read the rest of the current #-directive line. */
extern char *get_directive_line PARAMS ((void));
extern char *get_directive_line (void);
#define GET_DIRECTIVE_LINE() get_directive_line ()
#define c_sizeof(T) c_sizeof_or_alignof_type (T, SIZEOF_EXPR, 1)
#define c_alignof(T) c_sizeof_or_alignof_type (T, ALIGNOF_EXPR, 1)
@ -921,31 +932,41 @@ extern char *get_directive_line PARAMS ((void));
/* Subroutine of build_binary_op, used for comparison operations.
See if the operands have both been converted from subword integer types
and, if so, perhaps change them both back to their original type. */
extern tree shorten_compare PARAMS ((tree *, tree *, tree *, enum tree_code *));
extern tree shorten_compare (tree *, tree *, tree *, enum tree_code *);
extern tree pointer_int_sum PARAMS ((enum tree_code, tree, tree));
extern unsigned int min_precision PARAMS ((tree, int));
extern tree pointer_int_sum (enum tree_code, tree, tree);
extern unsigned int min_precision (tree, int);
/* Add qualifiers to a type, in the fashion for C. */
extern tree c_build_qualified_type PARAMS ((tree, int));
extern tree c_build_qualified_type (tree, int);
/* Build tree nodes and builtin functions common to both C and C++ language
frontends. */
extern void c_common_nodes_and_builtins PARAMS ((void));
extern void c_common_nodes_and_builtins (void);
extern void disable_builtin_function PARAMS ((const char *));
extern void disable_builtin_function (const char *);
extern tree build_va_arg PARAMS ((tree, tree));
extern tree build_va_arg (tree, tree);
extern void c_common_init_options PARAMS ((enum c_language_kind));
extern bool c_common_post_options PARAMS ((void));
extern const char *c_common_init PARAMS ((const char *));
extern void c_common_finish PARAMS ((void));
extern void c_common_parse_file PARAMS ((int));
extern HOST_WIDE_INT c_common_get_alias_set PARAMS ((tree));
extern bool c_promoting_integer_type_p PARAMS ((tree));
extern int self_promoting_args_p PARAMS ((tree));
extern tree strip_array_types PARAMS ((tree));
extern unsigned int c_common_init_options (unsigned int, const char **);
extern bool c_common_post_options (const char **);
extern bool c_common_init (void);
extern void c_common_finish (void);
extern void c_common_parse_file (int);
extern HOST_WIDE_INT c_common_get_alias_set (tree);
extern void c_register_builtin_type (tree, const char*);
extern bool c_promoting_integer_type_p (tree);
extern int self_promoting_args_p (tree);
extern tree strip_array_types (tree);
extern tree strip_pointer_operator (tree);
/* This function resets the parsers' state in preparation for parsing
a new file. */
extern void c_reset_state (void);
/* This is the basic parsing function. */
extern void c_parse_file (void);
/* This is misnamed, it actually performs end-of-compilation processing. */
extern void finish_file (void);
/* These macros provide convenient access to the various _STMT nodes. */
@ -1005,7 +1026,7 @@ extern tree strip_array_types PARAMS ((tree));
/* GOTO_STMT accessor. This gives access to the label associated with
a goto statement. */
#define GOTO_DESTINATION(NODE) TREE_OPERAND (GOTO_STMT_CHECK (NODE), 0)
/* True for goto created artifically by the compiler. */
/* True for goto created artificially by the compiler. */
#define GOTO_FAKE_P(NODE) (TREE_LANG_FLAG_0 (GOTO_STMT_CHECK (NODE)))
/* COMPOUND_STMT accessor. This gives access to the TREE_LIST of
@ -1035,6 +1056,11 @@ extern tree strip_array_types PARAMS ((tree));
#define STMT_EXPR_NO_SCOPE(NODE) \
TREE_LANG_FLAG_0 (STMT_EXPR_CHECK (NODE))
/* Nonzero if this statement-expression should cause warning if its result
is not used. */
#define STMT_EXPR_WARN_UNUSED_RESULT(NODE) \
TREE_LANG_FLAG_3 (STMT_EXPR_CHECK (NODE))
/* LABEL_STMT accessor. This gives access to the label associated with
the given label statement. */
#define LABEL_STMT_LABEL(NODE) TREE_OPERAND (LABEL_STMT_CHECK (NODE), 0)
@ -1128,28 +1154,48 @@ enum c_tree_code {
#undef DEFTREECODE
extern void genrtl_do_pushlevel PARAMS ((void));
extern void genrtl_goto_stmt PARAMS ((tree));
extern void genrtl_expr_stmt PARAMS ((tree));
extern void genrtl_expr_stmt_value PARAMS ((tree, int, int));
extern void genrtl_decl_stmt PARAMS ((tree));
extern void genrtl_if_stmt PARAMS ((tree));
extern void genrtl_while_stmt PARAMS ((tree));
extern void genrtl_do_stmt PARAMS ((tree));
extern void genrtl_return_stmt PARAMS ((tree));
extern void genrtl_for_stmt PARAMS ((tree));
extern void genrtl_break_stmt PARAMS ((void));
extern void genrtl_continue_stmt PARAMS ((void));
extern void genrtl_scope_stmt PARAMS ((tree));
extern void genrtl_switch_stmt PARAMS ((tree));
extern void genrtl_case_label PARAMS ((tree));
extern void genrtl_compound_stmt PARAMS ((tree));
extern void genrtl_asm_stmt PARAMS ((tree, tree,
tree, tree,
tree, int));
extern void genrtl_decl_cleanup PARAMS ((tree));
extern int stmts_are_full_exprs_p PARAMS ((void));
extern int anon_aggr_type_p PARAMS ((tree));
#define c_common_stmt_codes \
CLEANUP_STMT, EXPR_STMT, COMPOUND_STMT, \
DECL_STMT, IF_STMT, FOR_STMT, \
WHILE_STMT, DO_STMT, RETURN_STMT, \
BREAK_STMT, CONTINUE_STMT, SCOPE_STMT, \
SWITCH_STMT, GOTO_STMT, LABEL_STMT, \
ASM_STMT, FILE_STMT, CASE_LABEL
/* TRUE if a code represents a statement. The front end init
langhook should take care of initialization of this array. */
extern bool statement_code_p[MAX_TREE_CODES];
#define STATEMENT_CODE_P(CODE) statement_code_p[(int) (CODE)]
#define INIT_STATEMENT_CODES(STMT_CODES) \
do { \
unsigned int i; \
memset (&statement_code_p, 0, sizeof (statement_code_p)); \
for (i = 0; i < ARRAY_SIZE (STMT_CODES); i++) \
statement_code_p[STMT_CODES[i]] = true; \
} while (0)
extern void genrtl_do_pushlevel (void);
extern void genrtl_goto_stmt (tree);
extern void genrtl_expr_stmt (tree);
extern void genrtl_expr_stmt_value (tree, int, int);
extern void genrtl_decl_stmt (tree);
extern void genrtl_if_stmt (tree);
extern void genrtl_while_stmt (tree);
extern void genrtl_do_stmt (tree);
extern void genrtl_return_stmt (tree);
extern void genrtl_for_stmt (tree);
extern void genrtl_break_stmt (void);
extern void genrtl_continue_stmt (void);
extern void genrtl_scope_stmt (tree);
extern void genrtl_switch_stmt (tree);
extern void genrtl_case_label (tree);
extern void genrtl_compound_stmt (tree);
extern void genrtl_asm_stmt (tree, tree, tree, tree, tree, int);
extern void genrtl_cleanup_stmt (tree);
extern int stmts_are_full_exprs_p (void);
extern int anon_aggr_type_p (tree);
/* For a VAR_DECL that is an anonymous union, these are the various
sub-variables that make up the anonymous union. */
@ -1167,16 +1213,16 @@ extern int anon_aggr_type_p PARAMS ((tree));
an explicit asm specification. */
#define DECL_C_HARD_REGISTER(DECL) DECL_LANG_FLAG_4 (VAR_DECL_CHECK (DECL))
extern void emit_local_var PARAMS ((tree));
extern void make_rtl_for_local_static PARAMS ((tree));
extern tree expand_cond PARAMS ((tree));
extern tree c_expand_return PARAMS ((tree));
extern tree do_case PARAMS ((tree, tree));
extern tree build_stmt PARAMS ((enum tree_code, ...));
extern tree build_case_label PARAMS ((tree, tree, tree));
extern tree build_continue_stmt PARAMS ((void));
extern tree build_break_stmt PARAMS ((void));
extern tree build_return_stmt PARAMS ((tree));
extern void emit_local_var (tree);
extern void make_rtl_for_local_static (tree);
extern tree expand_cond (tree);
extern tree c_expand_return (tree);
extern tree do_case (tree, tree);
extern tree build_stmt (enum tree_code, ...);
extern tree build_case_label (tree, tree, tree);
extern tree build_continue_stmt (void);
extern tree build_break_stmt (void);
extern tree build_return_stmt (tree);
#define COMPOUND_STMT_NO_SCOPE(NODE) TREE_LANG_FLAG_0 (NODE)
@ -1184,63 +1230,59 @@ extern tree build_return_stmt PARAMS ((tree));
initializers and cleanups. */
#define COMPOUND_STMT_BODY_BLOCK(NODE) TREE_LANG_FLAG_3 (NODE)
extern void c_expand_asm_operands PARAMS ((tree, tree, tree, tree, int, const char *, int));
extern void c_expand_asm_operands (tree, tree, tree, tree, int, location_t);
/* These functions must be defined by each front-end which implements
a variant of the C language. They are used in c-common.c. */
extern tree build_unary_op PARAMS ((enum tree_code,
tree, int));
extern tree build_binary_op PARAMS ((enum tree_code,
tree, tree, int));
extern int lvalue_p PARAMS ((tree));
extern tree default_conversion PARAMS ((tree));
extern tree build_unary_op (enum tree_code, tree, int);
extern tree build_binary_op (enum tree_code, tree, tree, int);
extern int lvalue_p (tree);
extern tree default_conversion (tree);
/* Given two integer or real types, return the type for their sum.
Given two compatible ANSI C types, returns the merged type. */
extern tree common_type PARAMS ((tree, tree));
extern tree common_type (tree, tree);
extern tree expand_tree_builtin PARAMS ((tree, tree, tree));
extern tree expand_tree_builtin (tree, tree, tree);
extern tree decl_constant_value PARAMS ((tree));
extern tree decl_constant_value (tree);
/* Handle increment and decrement of boolean types. */
extern tree boolean_increment PARAMS ((enum tree_code,
tree));
extern tree boolean_increment (enum tree_code, tree);
/* Hook currently used only by the C++ front end to reset internal state
after entering or leaving a header file. */
extern void extract_interface_info PARAMS ((void));
extern void extract_interface_info (void);
extern int case_compare PARAMS ((splay_tree_key,
splay_tree_key));
extern int case_compare (splay_tree_key, splay_tree_key);
extern tree c_add_case_label PARAMS ((splay_tree,
tree, tree,
tree));
extern tree c_add_case_label (splay_tree, tree, tree, tree);
extern tree build_function_call PARAMS ((tree, tree));
extern tree build_function_call (tree, tree);
extern tree finish_label_address_expr PARAMS ((tree));
extern tree finish_label_address_expr (tree);
/* Same function prototype, but the C and C++ front ends have
different implementations. Used in c-common.c. */
extern tree lookup_label PARAMS ((tree));
extern tree lookup_label (tree);
extern rtx c_expand_expr PARAMS ((tree, rtx,
enum machine_mode,
int));
extern rtx c_expand_expr (tree, rtx, enum machine_mode, int, rtx *);
extern int c_safe_from_p PARAMS ((rtx, tree));
extern int c_safe_from_p (rtx, tree);
extern int c_staticp PARAMS ((tree));
extern int c_staticp (tree);
extern int c_common_unsafe_for_reeval PARAMS ((tree));
extern int c_common_unsafe_for_reeval (tree);
extern const char *init_c_lex PARAMS ((const char *));
extern void init_c_lex (void);
extern void cb_register_builtins PARAMS ((cpp_reader *));
extern void c_cpp_builtins (cpp_reader *);
/* Positive if an implicit `extern "C"' scope has just been entered;
negative if such a scope has just been exited. */
extern int pending_lang_change;
/* Information recorded about each file examined during compilation. */
@ -1251,9 +1293,41 @@ struct c_fileinfo
short interface_unknown;
};
struct c_fileinfo *get_fileinfo PARAMS ((const char *));
extern void dump_time_statistics PARAMS ((void));
struct c_fileinfo *get_fileinfo (const char *);
extern void dump_time_statistics (void);
extern int c_dump_tree PARAMS ((void *, tree));
extern bool c_dump_tree (void *, tree);
extern void pch_init (void);
extern int c_common_valid_pch (cpp_reader *pfile, const char *name, int fd);
extern void c_common_read_pch (cpp_reader *pfile, const char *name, int fd,
const char *orig);
extern void c_common_write_pch (void);
extern void c_common_no_more_pch (void);
extern void builtin_define_with_value (const char *, const char *, int);
extern void c_stddef_cpp_builtins (void);
extern void fe_file_change (const struct line_map *);
extern int c_estimate_num_insns (tree decl);
extern bool c_decl_uninit (tree t);
extern void c_parse_error (const char *, enum cpp_ttype, tree);
/* The following have been moved here from c-tree.h, since they're needed
in the ObjC++ world, too. What is more, stub-objc.c could use a few
prototypes. */
extern tree lookup_interface (tree);
extern tree is_class_name (tree);
extern tree objc_is_object_ptr (tree);
extern void objc_check_decl (tree);
extern int objc_comptypes (tree, tree, int);
extern tree objc_message_selector (void);
extern tree lookup_objc_ivar (tree);
extern void *get_current_scope (void);
extern void objc_mark_locals_volatile (void *);
/* In c-ppoutput.c */
extern void init_pp_output (FILE *);
extern void preprocess_file (cpp_reader *);
extern void pp_file_change (const struct line_map *);
extern void pp_dir_change (cpp_reader *, const char *);
#endif /* ! GCC_C_COMMON_H */