X-Git-Url: http://git.sourceforge.jp/view?a=blobdiff_plain;f=gcc%2Fc-common.h;h=337eb6d83d1b1b03d666118705e8710daffb9e82;hb=e24e8df7f2b15e0e0378aa8b65d85f1d3b8a348e;hp=f409e7a3aa724e2a8ea4c2ff4af46a60133986ce;hpb=5bf58eeebc1e0d30529a6348483de8a165eed95d;p=pf3gnuchains%2Fgcc-fork.git diff --git a/gcc/c-common.h b/gcc/c-common.h index f409e7a3aa7..337eb6d83d1 100644 --- a/gcc/c-common.h +++ b/gcc/c-common.h @@ -27,21 +27,16 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA #include "ggc.h" /* Usage of TREE_LANG_FLAG_?: - 0: COMPOUND_STMT_NO_SCOPE (in COMPOUND_STMT). - TREE_NEGATED_INT (in INTEGER_CST). + 0: TREE_NEGATED_INT (in INTEGER_CST). IDENTIFIER_MARKED (used by search routines). - SCOPE_BEGIN_P (in SCOPE_STMT) DECL_PRETTY_FUNCTION_P (in VAR_DECL) - NEW_FOR_SCOPE_P (in FOR_STMT) - ASM_INPUT_P (in ASM_STMT) STMT_EXPR_NO_SCOPE (in STMT_EXPR) 1: C_DECLARED_LABEL_FLAG (in LABEL_DECL) STMT_IS_FULL_EXPR_P (in _STMT) - 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) + STATEMENT_LIST_STMT_EXPR (in STATEMENT_LIST) + 2: unused + 3: unused + 4: unused */ /* Reserved identifiers. This is the union of all the keywords for C, @@ -157,11 +152,6 @@ enum c_tree_index CTI_DEFAULT_FUNCTION_TYPE, - CTI_G77_INTEGER_TYPE, - CTI_G77_UINTEGER_TYPE, - CTI_G77_LONGINT_TYPE, - CTI_G77_ULONGINT_TYPE, - /* These are not types, but we have to look them up all the time. */ CTI_FUNCTION_NAME_DECL, CTI_PRETTY_FUNCTION_NAME_DECL, @@ -206,12 +196,6 @@ struct c_common_identifier GTY(()) #define default_function_type c_global_trees[CTI_DEFAULT_FUNCTION_TYPE] -/* g77 integer types, which must be kept in sync with f/com.h */ -#define g77_integer_type_node c_global_trees[CTI_G77_INTEGER_TYPE] -#define g77_uinteger_type_node c_global_trees[CTI_G77_UINTEGER_TYPE] -#define g77_longint_type_node c_global_trees[CTI_G77_LONGINT_TYPE] -#define g77_ulongint_type_node c_global_trees[CTI_G77_ULONGINT_TYPE] - #define function_name_decl_node c_global_trees[CTI_FUNCTION_NAME_DECL] #define pretty_function_name_decl_node c_global_trees[CTI_PRETTY_FUNCTION_NAME_DECL] #define c99_function_name_decl_node c_global_trees[CTI_C99_FUNCTION_NAME_DECL] @@ -257,13 +241,9 @@ extern c_language_kind c_language; /* Information about a statement tree. */ struct stmt_tree_s GTY(()) { - /* The last statement added to the tree. */ - tree x_last_stmt; - /* The type of the last expression statement. (This information is - needed to implement the statement-expression extension.) */ - tree x_last_expr_type; - /* The last filename we recorded. */ - const char *x_last_expr_filename; + /* The current statment list being collected. */ + tree x_cur_stmt_list; + /* In C++, Nonzero if we should treat statements as full expressions. In particular, this variable is no-zero if at the end of a statement we should destroy any temporaries created @@ -290,60 +270,37 @@ struct c_language_function GTY(()) { /* While we are parsing the function, this contains information about the statement-tree that we are building. */ struct stmt_tree_s x_stmt_tree; - /* The stack of SCOPE_STMTs for the current function. */ - tree x_scope_stmt_stack; }; -/* When building a statement-tree, this is the last statement added to - the tree. */ - -#define last_tree (current_stmt_tree ()->x_last_stmt) - -/* The type of the last expression-statement we have seen. */ - -#define last_expr_type (current_stmt_tree ()->x_last_expr_type) +/* When building a statement-tree, this is the current statment list + being collected. It's TREE_CHAIN is a back-pointer to the previous + statment list. */ -/* The name of the last file we have seen. */ - -#define last_expr_filename (current_stmt_tree ()->x_last_expr_filename) - -/* LAST_TREE contains the last statement parsed. These are chained - together through the TREE_CHAIN field, but often need to be - re-organized since the parse is performed bottom-up. This macro - makes LAST_TREE the indicated SUBSTMT of STMT. */ - -#define RECHAIN_STMTS(stmt, substmt) \ - do { \ - substmt = TREE_CHAIN (stmt); \ - TREE_CHAIN (stmt) = NULL_TREE; \ - last_tree = stmt; \ - } while (0) +#define cur_stmt_list (current_stmt_tree ()->x_cur_stmt_list) /* Language-specific hooks. */ -extern void (*lang_expand_stmt) (tree); -extern void (*lang_expand_decl_stmt) (tree); +extern int (*lang_gimplify_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) (tree); +extern void push_file_scope (void); +extern void pop_file_scope (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 push_stmt_list (void); +extern tree re_push_stmt_list (tree); +extern tree pop_stmt_list (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 void push_cleanup (tree, tree, bool); 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 c_expand_decl (tree); extern int field_decl_cmp (const void *, const void *); extern void resort_sorted_fields (void *, void *, gt_pointer_operator, @@ -364,6 +321,9 @@ extern int flag_nil_receivers; @try, etc.) in source code. */ extern int flag_objc_exceptions; +/* Nonzero means that we generate NeXT setjmp based exceptions. */ +extern int flag_objc_sjlj_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. */ @@ -760,21 +720,6 @@ 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. */ @@ -917,11 +862,6 @@ extern void binary_op_error (enum tree_code); (((EXP) == 0) ? (fancy_abort (__FILE__, __LINE__, __FUNCTION__), 0) : 0) 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 (tree); extern tree fix_string_type (tree); @@ -965,9 +905,6 @@ 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. */ @@ -981,6 +918,11 @@ extern void finish_file (void); will always be false, since there are no destructors.) */ #define STMT_IS_FULL_EXPR_P(NODE) TREE_LANG_FLAG_1 ((NODE)) +/* Nonzero if a given STATEMENT_LIST represents the outermost binding + if a statement expression. */ +#define STATEMENT_LIST_STMT_EXPR(NODE) \ + TREE_LANG_FLAG_1 (STATEMENT_LIST_CHECK (NODE)) + /* IF_STMT accessors. These give access to the condition of the if statement, the then block of the if statement, and the else block of the if statement if it exists. */ @@ -1015,41 +957,8 @@ extern void finish_file (void); #define FOR_EXPR(NODE) TREE_OPERAND (FOR_STMT_CHECK (NODE), 2) #define FOR_BODY(NODE) TREE_OPERAND (FOR_STMT_CHECK (NODE), 3) -/* SWITCH_STMT accessors. These give access to the condition, body and - original condition type (before any compiler conversions) - of the switch statement, respectively. */ -#define SWITCH_COND(NODE) TREE_OPERAND (SWITCH_STMT_CHECK (NODE), 0) -#define SWITCH_BODY(NODE) TREE_OPERAND (SWITCH_STMT_CHECK (NODE), 1) #define SWITCH_TYPE(NODE) TREE_OPERAND (SWITCH_STMT_CHECK (NODE), 2) -/* CASE_LABEL accessors. These give access to the high and low values - of a case label, respectively. */ -#define CASE_LOW(NODE) TREE_OPERAND (CASE_LABEL_CHECK (NODE), 0) -#define CASE_HIGH(NODE) TREE_OPERAND (CASE_LABEL_CHECK (NODE), 1) -#define CASE_LABEL_DECL(NODE) TREE_OPERAND (CASE_LABEL_CHECK (NODE), 2) - -/* 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 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 - statements associated with a compound statement. The result is the - first statement in the list. Succeeding nodes can be accessed by - calling TREE_CHAIN on a node in the list. */ -#define COMPOUND_BODY(NODE) TREE_OPERAND (COMPOUND_STMT_CHECK (NODE), 0) - -/* ASM_STMT accessors. ASM_STRING returns a STRING_CST for the - instruction (e.g., "mov x, y"). ASM_OUTPUTS, ASM_INPUTS, and - ASM_CLOBBERS represent the outputs, inputs, and clobbers for the - statement. */ -#define ASM_CV_QUAL(NODE) TREE_OPERAND (ASM_STMT_CHECK (NODE), 0) -#define ASM_STRING(NODE) TREE_OPERAND (ASM_STMT_CHECK (NODE), 1) -#define ASM_OUTPUTS(NODE) TREE_OPERAND (ASM_STMT_CHECK (NODE), 2) -#define ASM_INPUTS(NODE) TREE_OPERAND (ASM_STMT_CHECK (NODE), 3) -#define ASM_CLOBBERS(NODE) TREE_OPERAND (ASM_STMT_CHECK (NODE), 4) - /* DECL_STMT accessor. This gives access to the DECL associated with the given declaration statement. */ #define DECL_STMT_DECL(NODE) TREE_OPERAND (DECL_STMT_CHECK (NODE), 0) @@ -1061,93 +970,21 @@ extern void finish_file (void); #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) - /* COMPOUND_LITERAL_EXPR accessors. */ #define COMPOUND_LITERAL_EXPR_DECL_STMT(NODE) \ TREE_OPERAND (COMPOUND_LITERAL_EXPR_CHECK (NODE), 0) #define COMPOUND_LITERAL_EXPR_DECL(NODE) \ DECL_STMT_DECL (COMPOUND_LITERAL_EXPR_DECL_STMT (NODE)) -/* Nonzero if this SCOPE_STMT is for the beginning of a scope. */ -#define SCOPE_BEGIN_P(NODE) \ - (TREE_LANG_FLAG_0 (SCOPE_STMT_CHECK (NODE))) - -/* Nonzero if this SCOPE_STMT is for the end of a scope. */ -#define SCOPE_END_P(NODE) \ - (!SCOPE_BEGIN_P (SCOPE_STMT_CHECK (NODE))) - -/* The BLOCK containing the declarations contained in this scope. */ -#define SCOPE_STMT_BLOCK(NODE) \ - (TREE_OPERAND (SCOPE_STMT_CHECK (NODE), 0)) - -/* Nonzero for a SCOPE_STMT if there were no variables in this scope. */ -#define SCOPE_NULLIFIED_P(NODE) \ - (SCOPE_STMT_BLOCK ((NODE)) == NULL_TREE) - -/* Nonzero for a SCOPE_STMT which represents a lexical scope, but - which should be treated as non-existent from the point of view of - running cleanup actions. */ -#define SCOPE_NO_CLEANUPS_P(NODE) \ - (TREE_LANG_FLAG_3 (SCOPE_STMT_CHECK (NODE))) - -/* Nonzero for a SCOPE_STMT if this statement is for a partial scope. - For example, in: - - S s; - l: - S s2; - goto l; - - there is (implicitly) a new scope after `l', even though there are - no curly braces. In particular, when we hit the goto, we must - destroy s2 and then re-construct it. For the implicit scope, - SCOPE_PARTIAL_P will be set. */ -#define SCOPE_PARTIAL_P(NODE) \ - (TREE_LANG_FLAG_4 (SCOPE_STMT_CHECK (NODE))) - -/* Nonzero for an ASM_STMT if the assembly statement is volatile. */ -#define ASM_VOLATILE_P(NODE) \ - (ASM_CV_QUAL (ASM_STMT_CHECK (NODE)) != NULL_TREE) - -/* The VAR_DECL to clean up in a CLEANUP_STMT. */ -#define CLEANUP_DECL(NODE) \ +/* The body of the CLEANUP_STMT. */ +#define CLEANUP_BODY(NODE) \ TREE_OPERAND (CLEANUP_STMT_CHECK (NODE), 0) /* The cleanup to run in a CLEANUP_STMT. */ #define CLEANUP_EXPR(NODE) \ TREE_OPERAND (CLEANUP_STMT_CHECK (NODE), 1) - -/* The filename we are changing to as of this FILE_STMT. */ -#define FILE_STMT_FILENAME_NODE(NODE) \ - (TREE_OPERAND (FILE_STMT_CHECK (NODE), 0)) -#define FILE_STMT_FILENAME(NODE) \ - (IDENTIFIER_POINTER (FILE_STMT_FILENAME_NODE (NODE))) - -/* The line-number at which a statement began. But if - STMT_LINENO_FOR_FN_P does holds, then this macro gives the - line number for the end of the current function instead. */ -#define STMT_LINENO(NODE) \ - (TREE_COMPLEXITY ((NODE))) - -/* If nonzero, the STMT_LINENO for NODE is the line at which the - function ended. */ -#define STMT_LINENO_FOR_FN_P(NODE) \ - (TREE_LANG_FLAG_2 ((NODE))) - -/* Nonzero if we want the new ISO rules for pushing a new scope for `for' - initialization variables. */ -#define NEW_FOR_SCOPE_P(NODE) (TREE_LANG_FLAG_0 (NODE)) - -/* Nonzero if we want to create an ASM_INPUT instead of an - ASM_OPERAND with no operands. */ -#define ASM_INPUT_P(NODE) (TREE_LANG_FLAG_0 (NODE)) +/* The VAR_DECL to clean up in a CLEANUP_STMT. */ +#define CLEANUP_DECL(NODE) \ + TREE_OPERAND (CLEANUP_STMT_CHECK (NODE), 2) #define DEFTREECODE(SYM, NAME, TYPE, LENGTH) SYM, @@ -1160,12 +997,10 @@ enum c_tree_code { #undef DEFTREECODE #define c_common_stmt_codes \ - CLEANUP_STMT, EXPR_STMT, COMPOUND_STMT, \ + CLEANUP_STMT, EXPR_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 + BREAK_STMT, CONTINUE_STMT, SWITCH_STMT /* TRUE if a code represents a statement. The front end init langhook should take care of initialization of this array. */ @@ -1181,24 +1016,6 @@ extern bool statement_code_p[MAX_TREE_CODES]; 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); @@ -1214,13 +1031,8 @@ extern int anon_aggr_type_p (tree); #define CLEAR_DECL_C_BIT_FIELD(NODE) \ (DECL_LANG_FLAG_4 (FIELD_DECL_CHECK (NODE)) = 0) -/* In a VAR_DECL, nonzero if the decl is a register variable with - an explicit asm specification. */ -#define DECL_C_HARD_REGISTER(DECL) DECL_LANG_FLAG_4 (VAR_DECL_CHECK (DECL)) - 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, ...); @@ -1229,12 +1041,6 @@ 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) - -/* Used by the C++ frontend to mark the block around the member - initializers and cleanups. */ -#define COMPOUND_STMT_BODY_BLOCK(NODE) TREE_LANG_FLAG_3 (NODE) - extern void c_expand_asm_operands (tree, tree, tree, tree, int, location_t); /* These functions must be defined by each front-end which implements @@ -1265,6 +1071,8 @@ extern int case_compare (splay_tree_key, splay_tree_key); extern tree c_add_case_label (splay_tree, tree, tree, tree); +extern void c_do_switch_warnings (splay_tree, tree); + extern tree build_function_call (tree, tree); extern tree finish_label_address_expr (tree); @@ -1273,6 +1081,8 @@ extern tree finish_label_address_expr (tree); different implementations. Used in c-common.c. */ extern tree lookup_label (tree); +extern int vector_types_convertible_p (tree t1, tree t2); + extern rtx c_expand_expr (tree, rtx, enum machine_mode, int, rtx *); extern int c_safe_from_p (rtx, tree); @@ -1287,7 +1097,7 @@ 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; +extern GTY(()) int pending_lang_change; /* Information recorded about each file examined during compilation. */ @@ -1303,6 +1113,16 @@ extern void dump_time_statistics (void); extern bool c_dump_tree (void *, tree); +extern int c_gimplify_expr (tree *, tree *, tree *); +extern tree c_walk_subtrees (tree*, int*, walk_tree_fn, void*, void*); + +extern void c_warn_unused_result (tree *); + +/* In c-simplify.c */ +extern void c_genericize (tree); +extern int c_gimplify_stmt (tree *); +extern tree c_build_bind_expr (tree, 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, @@ -1312,8 +1132,6 @@ 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 @@ -1328,6 +1146,8 @@ 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 *); +extern void objc_clear_super_receiver (void); +extern int objc_is_public (tree, tree); /* In c-ppoutput.c */ extern void init_pp_output (FILE *);