c-tree.h revision 52300
118334Speter/* Definitions for C parsing and type checking. 252300Sobrien Copyright (C) 1987, 93, 94, 95, 97, 98, 1999 Free Software Foundation, Inc. 318334Speter 418334SpeterThis file is part of GNU CC. 518334Speter 618334SpeterGNU CC is free software; you can redistribute it and/or modify 718334Speterit under the terms of the GNU General Public License as published by 818334Speterthe Free Software Foundation; either version 2, or (at your option) 918334Speterany later version. 1018334Speter 1118334SpeterGNU CC is distributed in the hope that it will be useful, 1218334Speterbut WITHOUT ANY WARRANTY; without even the implied warranty of 1318334SpeterMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 1418334SpeterGNU General Public License for more details. 1518334Speter 1618334SpeterYou should have received a copy of the GNU General Public License 1718334Speteralong with GNU CC; see the file COPYING. If not, write to 1818334Speterthe Free Software Foundation, 59 Temple Place - Suite 330, 1918334SpeterBoston, MA 02111-1307, USA. */ 2018334Speter 2152300Sobrien/* $FreeBSD: head/contrib/gcc/c-tree.h 52300 1999-10-16 08:34:33Z obrien $ */ 2252300Sobrien 2318334Speter#ifndef _C_TREE_H 2418334Speter#define _C_TREE_H 2518334Speter 2618334Speter/* Language-dependent contents of an identifier. */ 2718334Speter 2818334Speter/* The limbo_value is used for block level extern declarations, which need 2918334Speter to be type checked against subsequent extern declarations. They can't 3018334Speter be referenced after they fall out of scope, so they can't be global. */ 3118334Speter 3218334Speterstruct lang_identifier 3318334Speter{ 3418334Speter struct tree_identifier ignore; 3518334Speter tree global_value, local_value, label_value, implicit_decl; 3618334Speter tree error_locus, limbo_value; 3718334Speter}; 3818334Speter 3918334Speter/* Macros for access to language-specific slots in an identifier. */ 4018334Speter/* Each of these slots contains a DECL node or null. */ 4118334Speter 4218334Speter/* This represents the value which the identifier has in the 4318334Speter file-scope namespace. */ 4418334Speter#define IDENTIFIER_GLOBAL_VALUE(NODE) \ 4550453Sobrien (((struct lang_identifier *) (NODE))->global_value) 4618334Speter/* This represents the value which the identifier has in the current 4718334Speter scope. */ 4818334Speter#define IDENTIFIER_LOCAL_VALUE(NODE) \ 4950453Sobrien (((struct lang_identifier *) (NODE))->local_value) 5018334Speter/* This represents the value which the identifier has as a label in 5118334Speter the current label scope. */ 5218334Speter#define IDENTIFIER_LABEL_VALUE(NODE) \ 5350453Sobrien (((struct lang_identifier *) (NODE))->label_value) 5418334Speter/* This records the extern decl of this identifier, if it has had one 5518334Speter at any point in this compilation. */ 5618334Speter#define IDENTIFIER_LIMBO_VALUE(NODE) \ 5750453Sobrien (((struct lang_identifier *) (NODE))->limbo_value) 5818334Speter/* This records the implicit function decl of this identifier, if it 5918334Speter has had one at any point in this compilation. */ 6018334Speter#define IDENTIFIER_IMPLICIT_DECL(NODE) \ 6150453Sobrien (((struct lang_identifier *) (NODE))->implicit_decl) 6218334Speter/* This is the last function in which we printed an "undefined variable" 6318334Speter message for this identifier. Value is a FUNCTION_DECL or null. */ 6418334Speter#define IDENTIFIER_ERROR_LOCUS(NODE) \ 6550453Sobrien (((struct lang_identifier *) (NODE))->error_locus) 6618334Speter 6718334Speter/* In identifiers, C uses the following fields in a special way: 6818334Speter TREE_PUBLIC to record that there was a previous local extern decl. 6918334Speter TREE_USED to record that such a decl was used. 7018334Speter TREE_ADDRESSABLE to record that the address of such a decl was used. */ 7118334Speter 7218334Speter/* Nonzero means reject anything that ANSI standard C forbids. */ 7318334Speterextern int pedantic; 7418334Speter 7518334Speter/* In a RECORD_TYPE or UNION_TYPE, nonzero if any component is read-only. */ 7618334Speter#define C_TYPE_FIELDS_READONLY(type) TREE_LANG_FLAG_1 (type) 7718334Speter 7818334Speter/* In a RECORD_TYPE or UNION_TYPE, nonzero if any component is volatile. */ 7918334Speter#define C_TYPE_FIELDS_VOLATILE(type) TREE_LANG_FLAG_2 (type) 8018334Speter 8118334Speter/* In a RECORD_TYPE or UNION_TYPE or ENUMERAL_TYPE 8218334Speter nonzero if the definition of the type has already started. */ 8318334Speter#define C_TYPE_BEING_DEFINED(type) TYPE_LANG_FLAG_0 (type) 8418334Speter 8552300Sobrien/* C types are partitioned into three subsets: object, function, and 8652300Sobrien incomplete types. */ 8752300Sobrien#define C_TYPE_OBJECT_P(type) \ 8852300Sobrien (TREE_CODE (type) != FUNCTION_TYPE && TYPE_SIZE (type)) 8952300Sobrien 9052300Sobrien#define C_TYPE_FUNCTION_P(type) \ 9152300Sobrien (TREE_CODE (type) == FUNCTION_TYPE) 9252300Sobrien 9352300Sobrien#define C_TYPE_INCOMPLETE_P(type) \ 9452300Sobrien (TREE_CODE (type) != FUNCTION_TYPE && TYPE_SIZE (type) == 0) 9552300Sobrien 9652300Sobrien/* For convenience we define a single macro to identify the class of 9752300Sobrien object or incomplete types. */ 9852300Sobrien#define C_TYPE_OBJECT_OR_INCOMPLETE_P(type) \ 9952300Sobrien (!C_TYPE_FUNCTION_P (type)) 10052300Sobrien 10118334Speter/* In a RECORD_TYPE, a sorted array of the fields of the type. */ 10218334Speterstruct lang_type 10318334Speter{ 10418334Speter int len; 10518334Speter tree elts[1]; 10618334Speter}; 10718334Speter 10818334Speter/* Mark which labels are explicitly declared. 10918334Speter These may be shadowed, and may be referenced from nested functions. */ 11018334Speter#define C_DECLARED_LABEL_FLAG(label) TREE_LANG_FLAG_1 (label) 11118334Speter 11218334Speter/* Record whether a type or decl was written with nonconstant size. 11318334Speter Note that TYPE_SIZE may have simplified to a constant. */ 11418334Speter#define C_TYPE_VARIABLE_SIZE(type) TYPE_LANG_FLAG_1 (type) 11518334Speter#define C_DECL_VARIABLE_SIZE(type) DECL_LANG_FLAG_0 (type) 11618334Speter 11718334Speter/* Record in each node resulting from a binary operator 11818334Speter what operator was specified for it. */ 11918334Speter#define C_EXP_ORIGINAL_CODE(exp) ((enum tree_code) TREE_COMPLEXITY (exp)) 12018334Speter 12118334Speter#if 0 /* Not used. */ 12218334Speter/* Record whether a decl for a function or function pointer has 12318334Speter already been mentioned (in a warning) because it was called 12418334Speter but didn't have a prototype. */ 12518334Speter#define C_MISSING_PROTOTYPE_WARNED(decl) DECL_LANG_FLAG_2(decl) 12618334Speter#endif 12718334Speter 12818334Speter/* Store a value in that field. */ 12918334Speter#define C_SET_EXP_ORIGINAL_CODE(exp, code) \ 13050453Sobrien (TREE_COMPLEXITY (exp) = (int) (code)) 13118334Speter 13218334Speter/* Record whether a typedef for type `int' was actually `signed int'. */ 13318334Speter#define C_TYPEDEF_EXPLICITLY_SIGNED(exp) DECL_LANG_FLAG_1 ((exp)) 13418334Speter 13518334Speter/* Nonzero for a declaration of a built in function if there has been no 13618334Speter occasion that would declare the function in ordinary C. 13718334Speter Using the function draws a pedantic warning in this case. */ 13818334Speter#define C_DECL_ANTICIPATED(exp) DECL_LANG_FLAG_3 ((exp)) 13918334Speter 14018334Speter/* For FUNCTION_TYPE, a hidden list of types of arguments. The same as 14118334Speter TYPE_ARG_TYPES for functions with prototypes, but created for functions 14218334Speter without prototypes. */ 14318334Speter#define TYPE_ACTUAL_ARG_TYPES(NODE) TYPE_NONCOPIED_PARTS (NODE) 14418334Speter 14550453Sobrien/* In a FIELD_DECL, nonzero if the decl was originally a bitfield. */ 14650453Sobrien#define DECL_C_BIT_FIELD(NODE) DECL_LANG_FLAG_4 (NODE) 14750453Sobrien 14818334Speter/* Nonzero if the type T promotes to itself. 14918334Speter ANSI C states explicitly the list of types that promote; 15018334Speter in particular, short promotes to int even if they have the same width. */ 15118334Speter#define C_PROMOTING_INTEGER_TYPE_P(t) \ 15218334Speter (TREE_CODE ((t)) == INTEGER_TYPE \ 15318334Speter && (TYPE_MAIN_VARIANT (t) == char_type_node \ 15418334Speter || TYPE_MAIN_VARIANT (t) == signed_char_type_node \ 15518334Speter || TYPE_MAIN_VARIANT (t) == unsigned_char_type_node \ 15618334Speter || TYPE_MAIN_VARIANT (t) == short_integer_type_node \ 15718334Speter || TYPE_MAIN_VARIANT (t) == short_unsigned_type_node)) 15818334Speter 15918334Speter/* In a VAR_DECL, means the variable is really an iterator. */ 16018334Speter#define ITERATOR_P(D) (DECL_LANG_FLAG_4(D)) 16118334Speter 16218334Speter/* In a VAR_DECL for an iterator, means we are within 16318334Speter an explicit loop over that iterator. */ 16418334Speter#define ITERATOR_BOUND_P(NODE) ((NODE)->common.readonly_flag) 16518334Speter 16618334Speter/* in c-lang.c and objc-act.c */ 16718334Speterextern tree lookup_interface PROTO((tree)); 16818334Speterextern tree is_class_name PROTO((tree)); 16918334Speterextern void maybe_objc_check_decl PROTO((tree)); 17050453Sobrienextern void finish_file PROTO((void)); 17118334Speterextern int maybe_objc_comptypes PROTO((tree, tree, int)); 17218334Speterextern tree maybe_building_objc_message_expr PROTO((void)); 17318334Speterextern tree maybe_objc_method_name PROTO((tree)); 17418334Speterextern int recognize_objc_keyword PROTO((void)); 17552300Sobrienextern tree build_objc_string PROTO((int, const char *)); 17618334Speter 17718334Speter/* in c-aux-info.c */ 17818334Speterextern void gen_aux_info_record PROTO((tree, int, int, int)); 17918334Speter 18018334Speter/* in c-common.c */ 18118334Speterextern void declare_function_name PROTO((void)); 18218334Speterextern void decl_attributes PROTO((tree, tree, tree)); 18318334Speterextern void init_function_format_info PROTO((void)); 18418334Speterextern void check_function_format PROTO((tree, tree, tree)); 18550453Sobrienextern int c_get_alias_set PROTO((tree)); 18652300Sobrienextern void c_apply_type_quals_to_decl PROTO((int, tree)); 18718334Speter/* Print an error message for invalid operands to arith operation CODE. 18818334Speter NOP_EXPR is used as a special case (see truthvalue_conversion). */ 18918334Speterextern void binary_op_error PROTO((enum tree_code)); 19018334Speterextern void c_expand_expr_stmt PROTO((tree)); 19150453Sobrienextern void c_expand_start_cond PROTO((tree, int, int)); 19250453Sobrienextern void c_expand_start_else PROTO((void)); 19350453Sobrienextern void c_expand_end_cond PROTO((void)); 19418334Speter/* Validate the expression after `case' and apply default promotions. */ 19518334Speterextern tree check_case_value PROTO((tree)); 19618334Speter/* Concatenate a list of STRING_CST nodes into one STRING_CST. */ 19718334Speterextern tree combine_strings PROTO((tree)); 19818334Speterextern void constant_expression_warning PROTO((tree)); 19918334Speterextern tree convert_and_check PROTO((tree, tree)); 20018334Speterextern void overflow_warning PROTO((tree)); 20118334Speterextern void unsigned_conversion_warning PROTO((tree, tree)); 20218334Speter/* Read the rest of the current #-directive line. */ 20350453Sobrien#if USE_CPPLIB 20450453Sobrienextern char *get_directive_line PROTO((void)); 20550453Sobrien#define GET_DIRECTIVE_LINE() get_directive_line () 20650453Sobrien#else 20750453Sobrienextern char *get_directive_line PROTO((FILE *)); 20850453Sobrien#define GET_DIRECTIVE_LINE() get_directive_line (finput) 20950453Sobrien#endif 21050453Sobrien 21118334Speter/* Subroutine of build_binary_op, used for comparison operations. 21218334Speter See if the operands have both been converted from subword integer types 21318334Speter and, if so, perhaps change them both back to their original type. */ 21418334Speterextern tree shorten_compare PROTO((tree *, tree *, tree *, enum tree_code *)); 21518334Speter/* Prepare expr to be an argument of a TRUTH_NOT_EXPR, 21618334Speter or validate its data type for an `if' or `while' statement or ?..: exp. */ 21718334Speterextern tree truthvalue_conversion PROTO((tree)); 21818334Speterextern tree type_for_mode PROTO((enum machine_mode, int)); 21918334Speterextern tree type_for_size PROTO((unsigned, int)); 22018334Speter 22118334Speter/* in c-convert.c */ 22218334Speterextern tree convert PROTO((tree, tree)); 22318334Speter 22418334Speter/* in c-decl.c */ 22518334Speter/* Standard named or nameless data types of the C compiler. */ 22618334Speterextern tree char_array_type_node; 22718334Speterextern tree char_type_node; 22818334Speterextern tree const_ptr_type_node; 22918334Speterextern tree const_string_type_node; 23018334Speterextern tree default_function_type; 23118334Speterextern tree double_ftype_double; 23218334Speterextern tree double_ftype_double_double; 23318334Speterextern tree double_type_node; 23418334Speterextern tree float_type_node; 23552300Sobrien#if HOST_BITS_PER_WIDE_INT >= 64 23650453Sobrienextern tree intTI_type_node; 23752300Sobrien#endif 23818334Speterextern tree intDI_type_node; 23918334Speterextern tree intHI_type_node; 24018334Speterextern tree intQI_type_node; 24118334Speterextern tree intSI_type_node; 24218334Speterextern tree int_array_type_node; 24318334Speterextern tree int_ftype_cptr_cptr_sizet; 24418334Speterextern tree int_ftype_int; 24518334Speterextern tree int_ftype_ptr_ptr_int; 24618334Speterextern tree int_ftype_string_string; 24718334Speterextern tree integer_type_node; 24818334Speterextern tree long_double_type_node; 24918334Speterextern tree long_ftype_long; 25018334Speterextern tree long_integer_type_node; 25118334Speterextern tree long_long_integer_type_node; 25218334Speterextern tree long_long_unsigned_type_node; 25318334Speterextern tree long_unsigned_type_node; 25418334Speterextern tree complex_integer_type_node; 25518334Speterextern tree complex_float_type_node; 25618334Speterextern tree complex_double_type_node; 25718334Speterextern tree complex_long_double_type_node; 25818334Speterextern tree ptr_type_node; 25918334Speterextern tree ptrdiff_type_node; 26018334Speterextern tree short_integer_type_node; 26118334Speterextern tree short_unsigned_type_node; 26218334Speterextern tree signed_char_type_node; 26318334Speterextern tree signed_wchar_type_node; 26418334Speterextern tree string_ftype_ptr_ptr; 26518334Speterextern tree string_type_node; 26618334Speterextern tree unsigned_char_type_node; 26752300Sobrien#if HOST_BITS_PER_WIDE_INT >= 64 26850453Sobrienextern tree unsigned_intTI_type_node; 26952300Sobrien#endif 27018334Speterextern tree unsigned_intDI_type_node; 27118334Speterextern tree unsigned_intHI_type_node; 27218334Speterextern tree unsigned_intQI_type_node; 27318334Speterextern tree unsigned_intSI_type_node; 27418334Speterextern tree unsigned_type_node; 27518334Speterextern tree unsigned_wchar_type_node; 27618334Speterextern tree void_ftype_ptr_int_int; 27718334Speterextern tree void_ftype_ptr_ptr_int; 27818334Speterextern tree void_type_node; 27918334Speterextern tree wchar_array_type_node; 28018334Speterextern tree wchar_type_node; 28118334Speterextern tree boolean_type_node; 28218334Speterextern tree boolean_true_node; 28318334Speterextern tree boolean_false_node; 28418334Speter 28518334Speterextern tree build_enumerator PROTO((tree, tree)); 28618334Speter/* Declare a predefined function. Return the declaration. */ 28752300Sobrienextern tree builtin_function PROTO((const char *, tree, enum built_in_function function_, const char *)); 28818334Speter/* Add qualifiers to a type, in the fashion for C. */ 28952300Sobrienextern tree c_build_qualified_type PROTO((tree, int)); 29052300Sobrien#define c_build_type_variant(TYPE, CONST_P, VOLATILE_P) \ 29152300Sobrien c_build_qualified_type (TYPE, \ 29252300Sobrien ((CONST_P) ? TYPE_QUAL_CONST : 0) | \ 29352300Sobrien ((VOLATILE_P) ? TYPE_QUAL_VOLATILE : 0)) 29450453Sobrienextern int c_decode_option PROTO((int, char **)); 29518334Speterextern void c_mark_varargs PROTO((void)); 29618334Speterextern tree check_identifier PROTO((tree, tree)); 29718334Speterextern void clear_parm_order PROTO((void)); 29818334Speterextern tree combine_parm_decls PROTO((tree, tree, int)); 29918334Speterextern int complete_array_type PROTO((tree, tree, int)); 30018334Speterextern void declare_parm_level PROTO((int)); 30118334Speterextern tree define_label PROTO((char *, int, tree)); 30218334Speterextern void delete_block PROTO((tree)); 30318334Speterextern void finish_decl PROTO((tree, tree, tree)); 30418334Speterextern void finish_decl_top_level PROTO((tree, tree, tree)); 30518334Speterextern tree finish_enum PROTO((tree, tree, tree)); 30618334Speterextern void finish_function PROTO((int)); 30718334Speterextern tree finish_struct PROTO((tree, tree, tree)); 30818334Speterextern tree get_parm_info PROTO((int)); 30918334Speterextern tree getdecls PROTO((void)); 31018334Speterextern tree gettags PROTO((void)); 31118334Speterextern int global_bindings_p PROTO((void)); 31252300Sobrienextern tree grokfield PROTO((const char *, int, tree, tree, tree)); 31318334Speterextern tree groktypename PROTO((tree)); 31418334Speterextern tree groktypename_in_parm_context PROTO((tree)); 31518334Speterextern tree implicitly_declare PROTO((tree)); 31618334Speterextern int in_parm_level_p PROTO((void)); 31718334Speterextern void init_decl_processing PROTO((void)); 31818334Speterextern void insert_block PROTO((tree)); 31918334Speterextern void keep_next_level PROTO((void)); 32018334Speterextern int kept_level_p PROTO((void)); 32118334Speterextern tree lookup_label PROTO((tree)); 32218334Speterextern tree lookup_name PROTO((tree)); 32318334Speterextern tree lookup_name_current_level PROTO((tree)); 32418334Speterextern tree lookup_name_current_level_global PROTO((tree)); 32518334Speterextern tree maybe_build_cleanup PROTO((tree)); 32618334Speterextern void parmlist_tags_warning PROTO((void)); 32718334Speterextern void pending_xref_error PROTO((void)); 32818334Speterextern void pop_c_function_context PROTO((void)); 32918334Speterextern void pop_label_level PROTO((void)); 33018334Speterextern tree poplevel PROTO((int, int, int)); 33150453Sobrienextern void print_lang_decl PROTO((FILE *, tree, int)); 33250453Sobrienextern void print_lang_identifier PROTO((FILE *, tree, int)); 33350453Sobrienextern void print_lang_type PROTO((FILE *, tree, int)); 33418334Speterextern void push_c_function_context PROTO((void)); 33518334Speterextern void push_label_level PROTO((void)); 33618334Speterextern void push_parm_decl PROTO((tree)); 33718334Speterextern tree pushdecl PROTO((tree)); 33818334Speterextern tree pushdecl_top_level PROTO((tree)); 33918334Speterextern void pushlevel PROTO((int)); 34018334Speterextern void pushtag PROTO((tree, tree)); 34118334Speterextern void set_block PROTO((tree)); 34218334Speterextern tree shadow_label PROTO((tree)); 34318334Speterextern void shadow_record_fields PROTO((tree)); 34418334Speterextern void shadow_tag PROTO((tree)); 34518334Speterextern void shadow_tag_warned PROTO((tree, int)); 34618334Speterextern tree start_enum PROTO((tree)); 34718334Speterextern int start_function PROTO((tree, tree, tree, 34818334Speter tree, int)); 34918334Speterextern tree start_decl PROTO((tree, tree, int, 35018334Speter tree, tree)); 35118334Speterextern tree start_struct PROTO((enum tree_code, tree)); 35218334Speterextern void store_parm_decls PROTO((void)); 35318334Speterextern tree xref_tag PROTO((enum tree_code, tree)); 35418334Speter 35518334Speter/* in c-typeck.c */ 35618334Speterextern tree require_complete_type PROTO((tree)); 35718334Speterextern void incomplete_type_error PROTO((tree, tree)); 35818334Speter/* Given two integer or real types, return the type for their sum. 35918334Speter Given two compatible ANSI C types, returns the merged type. */ 36018334Speterextern tree common_type PROTO((tree, tree)); 36118334Speterextern int comptypes PROTO((tree, tree)); 36218334Speterextern int self_promoting_args_p PROTO((tree)); 36318334Speterextern tree c_sizeof PROTO((tree)); 36418334Speterextern tree c_sizeof_nowarn PROTO((tree)); 36518334Speterextern tree c_size_in_bytes PROTO((tree)); 36618334Speterextern tree c_alignof PROTO((tree)); 36718334Speterextern tree c_alignof_expr PROTO((tree)); 36818334Speterextern tree default_conversion PROTO((tree)); 36918334Speterextern tree build_component_ref PROTO((tree, tree)); 37052300Sobrienextern tree build_indirect_ref PROTO((tree, const char *)); 37118334Speterextern tree build_array_ref PROTO((tree, tree)); 37218334Speterextern tree build_function_call PROTO((tree, tree)); 37318334Speterextern tree parser_build_binary_op PROTO((enum tree_code, 37418334Speter tree, tree)); 37518334Speterextern tree build_binary_op PROTO((enum tree_code, 37618334Speter tree, tree, int)); 37718334Speterextern tree build_unary_op PROTO((enum tree_code, 37818334Speter tree, int)); 37918334Speterextern int lvalue_p PROTO((tree)); 38052300Sobrienextern int lvalue_or_else PROTO((tree, const char *)); 38152300Sobrienextern void readonly_warning PROTO((tree, const char *)); 38218334Speterextern int mark_addressable PROTO((tree)); 38318334Speterextern tree build_conditional_expr PROTO((tree, tree, tree)); 38418334Speterextern tree build_compound_expr PROTO((tree)); 38518334Speterextern tree build_c_cast PROTO((tree, tree)); 38618334Speterextern tree build_modify_expr PROTO((tree, enum tree_code, 38718334Speter tree)); 38818334Speterextern tree initializer_constant_valid_p PROTO((tree, tree)); 38918334Speterextern void store_init_value PROTO((tree, tree)); 39052300Sobrienextern void error_init PROTO((const char *)); 39152300Sobrienextern void pedwarn_init PROTO((const char *)); 39218334Speterextern void start_init PROTO((tree, tree, int)); 39318334Speterextern void finish_init PROTO((void)); 39418334Speterextern void really_start_incremental_init PROTO((tree)); 39518334Speterextern void push_init_level PROTO((int)); 39618334Speterextern tree pop_init_level PROTO((int)); 39718334Speterextern void set_init_index PROTO((tree, tree)); 39818334Speterextern void set_init_label PROTO((tree)); 39918334Speterextern void process_init_element PROTO((tree)); 40018334Speterextern void c_expand_asm_operands PROTO((tree, tree, tree, tree, 40118334Speter int, char *, int)); 40218334Speterextern void c_expand_return PROTO((tree)); 40318334Speterextern tree c_expand_start_case PROTO((tree)); 40418334Speter 40518334Speter/* in c-iterate.c */ 40650453Sobrienextern void init_iterators PROTO((void)); 40718334Speterextern void iterator_expand PROTO((tree)); 40818334Speterextern void iterator_for_loop_start PROTO((tree)); 40918334Speterextern void iterator_for_loop_end PROTO((tree)); 41018334Speterextern void iterator_for_loop_record PROTO((tree)); 41118334Speterextern void push_iterator_stack PROTO((void)); 41218334Speterextern void pop_iterator_stack PROTO((void)); 41318334Speter 41418334Speter/* Set to 0 at beginning of a function definition, set to 1 if 41518334Speter a return statement that specifies a return value is seen. */ 41618334Speter 41718334Speterextern int current_function_returns_value; 41818334Speter 41918334Speter/* Set to 0 at beginning of a function definition, set to 1 if 42018334Speter a return statement with no argument is seen. */ 42118334Speter 42218334Speterextern int current_function_returns_null; 42318334Speter 42450453Sobrien/* Nonzero means the expression being parsed will never be evaluated. 42550453Sobrien This is a count, since unevaluated expressions can nest. */ 42650453Sobrien 42750453Sobrienextern int skip_evaluation; 42850453Sobrien 42918334Speter/* Nonzero means `$' can be in an identifier. */ 43018334Speter 43118334Speterextern int dollars_in_ident; 43218334Speter 43318334Speter/* Nonzero means allow type mismatches in conditional expressions; 43418334Speter just make their values `void'. */ 43518334Speter 43618334Speterextern int flag_cond_mismatch; 43718334Speter 43818334Speter/* Nonzero means don't recognize the keyword `asm'. */ 43918334Speter 44018334Speterextern int flag_no_asm; 44118334Speter 44250453Sobrien/* Nonzero means environment is hosted (i.e., not freestanding) */ 44350453Sobrien 44450453Sobrienextern int flag_hosted; 44550453Sobrien 44618334Speter/* Nonzero means warn about implicit declarations. */ 44718334Speter 44818334Speterextern int warn_implicit; 44918334Speter 45018334Speter/* Nonzero means give string constants the type `const char *' 45118334Speter to get extra warnings from them. These warnings will be too numerous 45218334Speter to be useful, except in thoroughly ANSIfied programs. */ 45318334Speter 45452300Sobrienextern int flag_const_strings; 45518334Speter 45618334Speter/* Nonzero means warn about sizeof (function) or addition/subtraction 45718334Speter of function pointers. */ 45818334Speter 45918334Speterextern int warn_pointer_arith; 46018334Speter 46118334Speter/* Nonzero means warn for all old-style non-prototype function decls. */ 46218334Speter 46318334Speterextern int warn_strict_prototypes; 46418334Speter 46518334Speter/* Nonzero means warn about multiple (redundant) decls for the same single 46618334Speter variable or function. */ 46718334Speter 46818334Speterextern int warn_redundant_decls; 46918334Speter 47018334Speter/* Nonzero means warn about extern declarations of objects not at 47118334Speter file-scope level and about *all* declarations of functions (whether 47218334Speter extern or static) not at file-scope level. Note that we exclude 47318334Speter implicit function declarations. To get warnings about those, use 47418334Speter -Wimplicit. */ 47518334Speter 47618334Speterextern int warn_nested_externs; 47718334Speter 47818334Speter/* Nonzero means warn about pointer casts that can drop a type qualifier 47918334Speter from the pointer target type. */ 48018334Speter 48118334Speterextern int warn_cast_qual; 48218334Speter 48318334Speter/* Nonzero means warn when casting a function call to a type that does 48418334Speter not match the return type (e.g. (float)sqrt() or (anything*)malloc() 48518334Speter when there is no previous declaration of sqrt or malloc. */ 48618334Speter 48718334Speterextern int warn_bad_function_cast; 48818334Speter 48952300Sobrien/* Warn about functions which might be candidates for attribute noreturn. */ 49052300Sobrien 49152300Sobrienextern int warn_missing_noreturn; 49252300Sobrien 49318334Speter/* Warn about traditional constructs whose meanings changed in ANSI C. */ 49418334Speter 49518334Speterextern int warn_traditional; 49618334Speter 49718334Speter/* Warn about *printf or *scanf format/argument anomalies. */ 49818334Speter 49918334Speterextern int warn_format; 50018334Speter 50118334Speter/* Warn about a subscript that has type char. */ 50218334Speter 50318334Speterextern int warn_char_subscripts; 50418334Speter 50518334Speter/* Warn if a type conversion is done that might have confusing results. */ 50618334Speter 50718334Speterextern int warn_conversion; 50818334Speter 50950453Sobrien/* Warn if main is suspicious. */ 51050453Sobrien 51150453Sobrienextern int warn_main; 51250453Sobrien 51318334Speter/* Nonzero means do some things the same way PCC does. */ 51418334Speter 51518334Speterextern int flag_traditional; 51618334Speter 51752300Sobrien/* Nonzero means use the ISO C9x dialect of C. */ 51852300Sobrien 51952300Sobrienextern int flag_isoc9x; 52052300Sobrien 52118334Speter/* Nonzero means to allow single precision math even if we're generally 52218334Speter being traditional. */ 52318334Speterextern int flag_allow_single_precision; 52418334Speter 52518334Speter/* Nonzero means warn about suggesting putting in ()'s. */ 52618334Speter 52718334Speterextern int warn_parentheses; 52818334Speter 52918334Speter/* Warn if initializer is not completely bracketed. */ 53018334Speter 53118334Speterextern int warn_missing_braces; 53218334Speter 53350453Sobrien/* Warn about comparison of signed and unsigned values. */ 53418334Speter 53550453Sobrienextern int warn_sign_compare; 53618334Speter 53750453Sobrien/* Warn about multicharacter constants. */ 53850453Sobrien 53950453Sobrienextern int warn_multichar; 54050453Sobrien 54152300Sobrien/* Warn about long long. */ 54252300Sobrien 54352300Sobrienextern int warn_long_long; 54452300Sobrien 54518334Speter/* Nonzero means we are reading code that came from a system header file. */ 54618334Speter 54718334Speterextern int system_header_p; 54818334Speter 54918334Speter/* Nonzero enables objc features. */ 55018334Speter 55118334Speterextern int doing_objc_thang; 55218334Speter 55350453Sobrien/* In c-decl.c */ 55450453Sobrienextern void finish_incomplete_decl PROTO((tree)); 55550453Sobrien 55618334Speter#endif /* not _C_TREE_H */ 557