c-tree.h revision 18334
118334Speter/* Definitions for C parsing and type checking. 218334Speter Copyright (C) 1987, 1993, 1994, 1995 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 2118334Speter#ifndef _C_TREE_H 2218334Speter#define _C_TREE_H 2318334Speter 2418334Speter/* Language-dependent contents of an identifier. */ 2518334Speter 2618334Speter/* The limbo_value is used for block level extern declarations, which need 2718334Speter to be type checked against subsequent extern declarations. They can't 2818334Speter be referenced after they fall out of scope, so they can't be global. */ 2918334Speter 3018334Speterstruct lang_identifier 3118334Speter{ 3218334Speter struct tree_identifier ignore; 3318334Speter tree global_value, local_value, label_value, implicit_decl; 3418334Speter tree error_locus, limbo_value; 3518334Speter}; 3618334Speter 3718334Speter/* Macros for access to language-specific slots in an identifier. */ 3818334Speter/* Each of these slots contains a DECL node or null. */ 3918334Speter 4018334Speter/* This represents the value which the identifier has in the 4118334Speter file-scope namespace. */ 4218334Speter#define IDENTIFIER_GLOBAL_VALUE(NODE) \ 4318334Speter (((struct lang_identifier *)(NODE))->global_value) 4418334Speter/* This represents the value which the identifier has in the current 4518334Speter scope. */ 4618334Speter#define IDENTIFIER_LOCAL_VALUE(NODE) \ 4718334Speter (((struct lang_identifier *)(NODE))->local_value) 4818334Speter/* This represents the value which the identifier has as a label in 4918334Speter the current label scope. */ 5018334Speter#define IDENTIFIER_LABEL_VALUE(NODE) \ 5118334Speter (((struct lang_identifier *)(NODE))->label_value) 5218334Speter/* This records the extern decl of this identifier, if it has had one 5318334Speter at any point in this compilation. */ 5418334Speter#define IDENTIFIER_LIMBO_VALUE(NODE) \ 5518334Speter (((struct lang_identifier *)(NODE))->limbo_value) 5618334Speter/* This records the implicit function decl of this identifier, if it 5718334Speter has had one at any point in this compilation. */ 5818334Speter#define IDENTIFIER_IMPLICIT_DECL(NODE) \ 5918334Speter (((struct lang_identifier *)(NODE))->implicit_decl) 6018334Speter/* This is the last function in which we printed an "undefined variable" 6118334Speter message for this identifier. Value is a FUNCTION_DECL or null. */ 6218334Speter#define IDENTIFIER_ERROR_LOCUS(NODE) \ 6318334Speter (((struct lang_identifier *)(NODE))->error_locus) 6418334Speter 6518334Speter/* In identifiers, C uses the following fields in a special way: 6618334Speter TREE_PUBLIC to record that there was a previous local extern decl. 6718334Speter TREE_USED to record that such a decl was used. 6818334Speter TREE_ADDRESSABLE to record that the address of such a decl was used. */ 6918334Speter 7018334Speter/* Nonzero means reject anything that ANSI standard C forbids. */ 7118334Speterextern int pedantic; 7218334Speter 7318334Speter/* In a RECORD_TYPE or UNION_TYPE, nonzero if any component is read-only. */ 7418334Speter#define C_TYPE_FIELDS_READONLY(type) TREE_LANG_FLAG_1 (type) 7518334Speter 7618334Speter/* In a RECORD_TYPE or UNION_TYPE, nonzero if any component is volatile. */ 7718334Speter#define C_TYPE_FIELDS_VOLATILE(type) TREE_LANG_FLAG_2 (type) 7818334Speter 7918334Speter/* In a RECORD_TYPE or UNION_TYPE or ENUMERAL_TYPE 8018334Speter nonzero if the definition of the type has already started. */ 8118334Speter#define C_TYPE_BEING_DEFINED(type) TYPE_LANG_FLAG_0 (type) 8218334Speter 8318334Speter/* In a RECORD_TYPE, a sorted array of the fields of the type. */ 8418334Speterstruct lang_type 8518334Speter{ 8618334Speter int len; 8718334Speter tree elts[1]; 8818334Speter}; 8918334Speter 9018334Speter/* Mark which labels are explicitly declared. 9118334Speter These may be shadowed, and may be referenced from nested functions. */ 9218334Speter#define C_DECLARED_LABEL_FLAG(label) TREE_LANG_FLAG_1 (label) 9318334Speter 9418334Speter/* Record whether a type or decl was written with nonconstant size. 9518334Speter Note that TYPE_SIZE may have simplified to a constant. */ 9618334Speter#define C_TYPE_VARIABLE_SIZE(type) TYPE_LANG_FLAG_1 (type) 9718334Speter#define C_DECL_VARIABLE_SIZE(type) DECL_LANG_FLAG_0 (type) 9818334Speter 9918334Speter/* Record in each node resulting from a binary operator 10018334Speter what operator was specified for it. */ 10118334Speter#define C_EXP_ORIGINAL_CODE(exp) ((enum tree_code) TREE_COMPLEXITY (exp)) 10218334Speter 10318334Speter#if 0 /* Not used. */ 10418334Speter/* Record whether a decl for a function or function pointer has 10518334Speter already been mentioned (in a warning) because it was called 10618334Speter but didn't have a prototype. */ 10718334Speter#define C_MISSING_PROTOTYPE_WARNED(decl) DECL_LANG_FLAG_2(decl) 10818334Speter#endif 10918334Speter 11018334Speter/* Store a value in that field. */ 11118334Speter#define C_SET_EXP_ORIGINAL_CODE(exp, code) \ 11218334Speter (TREE_COMPLEXITY (exp) = (int)(code)) 11318334Speter 11418334Speter/* Record whether a typedef for type `int' was actually `signed int'. */ 11518334Speter#define C_TYPEDEF_EXPLICITLY_SIGNED(exp) DECL_LANG_FLAG_1 ((exp)) 11618334Speter 11718334Speter/* Nonzero for a declaration of a built in function if there has been no 11818334Speter occasion that would declare the function in ordinary C. 11918334Speter Using the function draws a pedantic warning in this case. */ 12018334Speter#define C_DECL_ANTICIPATED(exp) DECL_LANG_FLAG_3 ((exp)) 12118334Speter 12218334Speter/* For FUNCTION_TYPE, a hidden list of types of arguments. The same as 12318334Speter TYPE_ARG_TYPES for functions with prototypes, but created for functions 12418334Speter without prototypes. */ 12518334Speter#define TYPE_ACTUAL_ARG_TYPES(NODE) TYPE_NONCOPIED_PARTS (NODE) 12618334Speter 12718334Speter/* Nonzero if the type T promotes to itself. 12818334Speter ANSI C states explicitly the list of types that promote; 12918334Speter in particular, short promotes to int even if they have the same width. */ 13018334Speter#define C_PROMOTING_INTEGER_TYPE_P(t) \ 13118334Speter (TREE_CODE ((t)) == INTEGER_TYPE \ 13218334Speter && (TYPE_MAIN_VARIANT (t) == char_type_node \ 13318334Speter || TYPE_MAIN_VARIANT (t) == signed_char_type_node \ 13418334Speter || TYPE_MAIN_VARIANT (t) == unsigned_char_type_node \ 13518334Speter || TYPE_MAIN_VARIANT (t) == short_integer_type_node \ 13618334Speter || TYPE_MAIN_VARIANT (t) == short_unsigned_type_node)) 13718334Speter 13818334Speter/* In a VAR_DECL, means the variable is really an iterator. */ 13918334Speter#define ITERATOR_P(D) (DECL_LANG_FLAG_4(D)) 14018334Speter 14118334Speter/* In a VAR_DECL for an iterator, means we are within 14218334Speter an explicit loop over that iterator. */ 14318334Speter#define ITERATOR_BOUND_P(NODE) ((NODE)->common.readonly_flag) 14418334Speter 14518334Speter/* in c-lang.c and objc-act.c */ 14618334Speterextern tree lookup_interface PROTO((tree)); 14718334Speterextern tree is_class_name PROTO((tree)); 14818334Speterextern void maybe_objc_check_decl PROTO((tree)); 14918334Speterextern int maybe_objc_comptypes PROTO((tree, tree, int)); 15018334Speterextern tree maybe_building_objc_message_expr PROTO((void)); 15118334Speterextern tree maybe_objc_method_name PROTO((tree)); 15218334Speterextern int recognize_objc_keyword PROTO((void)); 15318334Speterextern tree build_objc_string PROTO((int, char *)); 15418334Speter 15518334Speter/* in c-aux-info.c */ 15618334Speterextern void gen_aux_info_record PROTO((tree, int, int, int)); 15718334Speter 15818334Speter/* in c-common.c */ 15918334Speterextern void declare_function_name PROTO((void)); 16018334Speterextern void decl_attributes PROTO((tree, tree, tree)); 16118334Speterextern void init_function_format_info PROTO((void)); 16218334Speterextern void record_function_format PROTO((tree, tree, int, int, int)); 16318334Speterextern void check_function_format PROTO((tree, tree, tree)); 16418334Speter/* Print an error message for invalid operands to arith operation CODE. 16518334Speter NOP_EXPR is used as a special case (see truthvalue_conversion). */ 16618334Speterextern void binary_op_error PROTO((enum tree_code)); 16718334Speterextern void c_expand_expr_stmt PROTO((tree)); 16818334Speter/* Validate the expression after `case' and apply default promotions. */ 16918334Speterextern tree check_case_value PROTO((tree)); 17018334Speter/* Concatenate a list of STRING_CST nodes into one STRING_CST. */ 17118334Speterextern tree combine_strings PROTO((tree)); 17218334Speterextern void constant_expression_warning PROTO((tree)); 17318334Speterextern tree convert_and_check PROTO((tree, tree)); 17418334Speterextern void overflow_warning PROTO((tree)); 17518334Speterextern void unsigned_conversion_warning PROTO((tree, tree)); 17618334Speter/* Read the rest of the current #-directive line. */ 17718334Speterextern char *get_directive_line STDIO_PROTO((FILE *)); 17818334Speter/* Subroutine of build_binary_op, used for comparison operations. 17918334Speter See if the operands have both been converted from subword integer types 18018334Speter and, if so, perhaps change them both back to their original type. */ 18118334Speterextern tree shorten_compare PROTO((tree *, tree *, tree *, enum tree_code *)); 18218334Speter/* Prepare expr to be an argument of a TRUTH_NOT_EXPR, 18318334Speter or validate its data type for an `if' or `while' statement or ?..: exp. */ 18418334Speterextern tree truthvalue_conversion PROTO((tree)); 18518334Speterextern tree type_for_mode PROTO((enum machine_mode, int)); 18618334Speterextern tree type_for_size PROTO((unsigned, int)); 18718334Speter 18818334Speter/* in c-convert.c */ 18918334Speterextern tree convert PROTO((tree, tree)); 19018334Speter 19118334Speter/* in c-decl.c */ 19218334Speter/* Standard named or nameless data types of the C compiler. */ 19318334Speterextern tree char_array_type_node; 19418334Speterextern tree char_type_node; 19518334Speterextern tree const_ptr_type_node; 19618334Speterextern tree const_string_type_node; 19718334Speterextern tree default_function_type; 19818334Speterextern tree double_ftype_double; 19918334Speterextern tree double_ftype_double_double; 20018334Speterextern tree double_type_node; 20118334Speterextern tree float_type_node; 20218334Speterextern tree intDI_type_node; 20318334Speterextern tree intHI_type_node; 20418334Speterextern tree intQI_type_node; 20518334Speterextern tree intSI_type_node; 20618334Speterextern tree int_array_type_node; 20718334Speterextern tree int_ftype_cptr_cptr_sizet; 20818334Speterextern tree int_ftype_int; 20918334Speterextern tree int_ftype_ptr_ptr_int; 21018334Speterextern tree int_ftype_string_string; 21118334Speterextern tree integer_type_node; 21218334Speterextern tree long_double_type_node; 21318334Speterextern tree long_ftype_long; 21418334Speterextern tree long_integer_type_node; 21518334Speterextern tree long_long_integer_type_node; 21618334Speterextern tree long_long_unsigned_type_node; 21718334Speterextern tree long_unsigned_type_node; 21818334Speterextern tree complex_integer_type_node; 21918334Speterextern tree complex_float_type_node; 22018334Speterextern tree complex_double_type_node; 22118334Speterextern tree complex_long_double_type_node; 22218334Speterextern tree ptr_type_node; 22318334Speterextern tree ptrdiff_type_node; 22418334Speterextern tree short_integer_type_node; 22518334Speterextern tree short_unsigned_type_node; 22618334Speterextern tree signed_char_type_node; 22718334Speterextern tree signed_wchar_type_node; 22818334Speterextern tree string_ftype_ptr_ptr; 22918334Speterextern tree string_type_node; 23018334Speterextern tree unsigned_char_type_node; 23118334Speterextern tree unsigned_intDI_type_node; 23218334Speterextern tree unsigned_intHI_type_node; 23318334Speterextern tree unsigned_intQI_type_node; 23418334Speterextern tree unsigned_intSI_type_node; 23518334Speterextern tree unsigned_type_node; 23618334Speterextern tree unsigned_wchar_type_node; 23718334Speterextern tree void_ftype_ptr_int_int; 23818334Speterextern tree void_ftype_ptr_ptr_int; 23918334Speterextern tree void_type_node; 24018334Speterextern tree wchar_array_type_node; 24118334Speterextern tree wchar_type_node; 24218334Speterextern tree boolean_type_node; 24318334Speterextern tree boolean_true_node; 24418334Speterextern tree boolean_false_node; 24518334Speter 24618334Speterextern tree build_enumerator PROTO((tree, tree)); 24718334Speter/* Declare a predefined function. Return the declaration. */ 24818334Speterextern tree builtin_function PROTO((char *, tree, enum built_in_function function_, char *)); 24918334Speter/* Add qualifiers to a type, in the fashion for C. */ 25018334Speterextern tree c_build_type_variant PROTO((tree, int, int)); 25118334Speterextern int c_decode_option PROTO((char *)); 25218334Speterextern void c_mark_varargs PROTO((void)); 25318334Speterextern tree check_identifier PROTO((tree, tree)); 25418334Speterextern void clear_parm_order PROTO((void)); 25518334Speterextern tree combine_parm_decls PROTO((tree, tree, int)); 25618334Speterextern int complete_array_type PROTO((tree, tree, int)); 25718334Speterextern void declare_parm_level PROTO((int)); 25818334Speterextern tree define_label PROTO((char *, int, tree)); 25918334Speterextern void delete_block PROTO((tree)); 26018334Speterextern void finish_decl PROTO((tree, tree, tree)); 26118334Speterextern void finish_decl_top_level PROTO((tree, tree, tree)); 26218334Speterextern tree finish_enum PROTO((tree, tree, tree)); 26318334Speterextern void finish_function PROTO((int)); 26418334Speterextern tree finish_struct PROTO((tree, tree, tree)); 26518334Speterextern tree get_parm_info PROTO((int)); 26618334Speterextern tree getdecls PROTO((void)); 26718334Speterextern tree gettags PROTO((void)); 26818334Speterextern int global_bindings_p PROTO((void)); 26918334Speterextern tree grokfield PROTO((char *, int, tree, tree, tree)); 27018334Speterextern tree groktypename PROTO((tree)); 27118334Speterextern tree groktypename_in_parm_context PROTO((tree)); 27218334Speterextern tree implicitly_declare PROTO((tree)); 27318334Speterextern int in_parm_level_p PROTO((void)); 27418334Speterextern void init_decl_processing PROTO((void)); 27518334Speterextern void insert_block PROTO((tree)); 27618334Speterextern void keep_next_level PROTO((void)); 27718334Speterextern int kept_level_p PROTO((void)); 27818334Speterextern tree lookup_label PROTO((tree)); 27918334Speterextern tree lookup_name PROTO((tree)); 28018334Speterextern tree lookup_name_current_level PROTO((tree)); 28118334Speterextern tree lookup_name_current_level_global PROTO((tree)); 28218334Speterextern tree maybe_build_cleanup PROTO((tree)); 28318334Speterextern void parmlist_tags_warning PROTO((void)); 28418334Speterextern void pending_xref_error PROTO((void)); 28518334Speterextern void pop_c_function_context PROTO((void)); 28618334Speterextern void pop_label_level PROTO((void)); 28718334Speterextern tree poplevel PROTO((int, int, int)); 28818334Speterextern void print_lang_decl STDIO_PROTO((FILE *, tree, 28918334Speter int)); 29018334Speterextern void print_lang_identifier STDIO_PROTO((FILE *, tree, 29118334Speter int)); 29218334Speterextern void print_lang_type STDIO_PROTO((FILE *, tree, 29318334Speter int)); 29418334Speterextern void push_c_function_context PROTO((void)); 29518334Speterextern void push_label_level PROTO((void)); 29618334Speterextern void push_parm_decl PROTO((tree)); 29718334Speterextern tree pushdecl PROTO((tree)); 29818334Speterextern tree pushdecl_top_level PROTO((tree)); 29918334Speterextern void pushlevel PROTO((int)); 30018334Speterextern void pushtag PROTO((tree, tree)); 30118334Speterextern void set_block PROTO((tree)); 30218334Speterextern tree shadow_label PROTO((tree)); 30318334Speterextern void shadow_record_fields PROTO((tree)); 30418334Speterextern void shadow_tag PROTO((tree)); 30518334Speterextern void shadow_tag_warned PROTO((tree, int)); 30618334Speterextern tree start_enum PROTO((tree)); 30718334Speterextern int start_function PROTO((tree, tree, tree, 30818334Speter tree, int)); 30918334Speterextern tree start_decl PROTO((tree, tree, int, 31018334Speter tree, tree)); 31118334Speterextern tree start_struct PROTO((enum tree_code, tree)); 31218334Speterextern void store_parm_decls PROTO((void)); 31318334Speterextern tree xref_tag PROTO((enum tree_code, tree)); 31418334Speter 31518334Speter/* in c-typeck.c */ 31618334Speterextern tree require_complete_type PROTO((tree)); 31718334Speterextern void incomplete_type_error PROTO((tree, tree)); 31818334Speter/* Given two integer or real types, return the type for their sum. 31918334Speter Given two compatible ANSI C types, returns the merged type. */ 32018334Speterextern tree common_type PROTO((tree, tree)); 32118334Speterextern int comptypes PROTO((tree, tree)); 32218334Speterextern int self_promoting_args_p PROTO((tree)); 32318334Speterextern tree c_sizeof PROTO((tree)); 32418334Speterextern tree c_sizeof_nowarn PROTO((tree)); 32518334Speterextern tree c_size_in_bytes PROTO((tree)); 32618334Speterextern tree c_alignof PROTO((tree)); 32718334Speterextern tree c_alignof_expr PROTO((tree)); 32818334Speterextern tree default_conversion PROTO((tree)); 32918334Speterextern tree build_component_ref PROTO((tree, tree)); 33018334Speterextern tree build_indirect_ref PROTO((tree, char *)); 33118334Speterextern tree build_array_ref PROTO((tree, tree)); 33218334Speterextern tree build_function_call PROTO((tree, tree)); 33318334Speterextern tree parser_build_binary_op PROTO((enum tree_code, 33418334Speter tree, tree)); 33518334Speterextern tree build_binary_op PROTO((enum tree_code, 33618334Speter tree, tree, int)); 33718334Speterextern tree build_unary_op PROTO((enum tree_code, 33818334Speter tree, int)); 33918334Speterextern int lvalue_p PROTO((tree)); 34018334Speterextern int lvalue_or_else PROTO((tree, char *)); 34118334Speterextern void readonly_warning PROTO((tree, char *)); 34218334Speterextern int mark_addressable PROTO((tree)); 34318334Speterextern tree build_conditional_expr PROTO((tree, tree, tree)); 34418334Speterextern tree build_compound_expr PROTO((tree)); 34518334Speterextern tree build_c_cast PROTO((tree, tree)); 34618334Speterextern tree build_modify_expr PROTO((tree, enum tree_code, 34718334Speter tree)); 34818334Speterextern tree initializer_constant_valid_p PROTO((tree, tree)); 34918334Speterextern void store_init_value PROTO((tree, tree)); 35018334Speterextern void error_init PROTO((char *, char *, 35118334Speter char *)); 35218334Speterextern void pedwarn_init PROTO((char *, char *, 35318334Speter char *)); 35418334Speterextern void start_init PROTO((tree, tree, int)); 35518334Speterextern void finish_init PROTO((void)); 35618334Speterextern void really_start_incremental_init PROTO((tree)); 35718334Speterextern void push_init_level PROTO((int)); 35818334Speterextern tree pop_init_level PROTO((int)); 35918334Speterextern void set_init_index PROTO((tree, tree)); 36018334Speterextern void set_init_label PROTO((tree)); 36118334Speterextern void process_init_element PROTO((tree)); 36218334Speterextern void c_expand_asm_operands PROTO((tree, tree, tree, tree, 36318334Speter int, char *, int)); 36418334Speterextern void c_expand_return PROTO((tree)); 36518334Speterextern tree c_expand_start_case PROTO((tree)); 36618334Speter 36718334Speter/* in c-iterate.c */ 36818334Speterextern void iterator_expand PROTO((tree)); 36918334Speterextern void iterator_for_loop_start PROTO((tree)); 37018334Speterextern void iterator_for_loop_end PROTO((tree)); 37118334Speterextern void iterator_for_loop_record PROTO((tree)); 37218334Speterextern void push_iterator_stack PROTO((void)); 37318334Speterextern void pop_iterator_stack PROTO((void)); 37418334Speter 37518334Speter/* Set to 0 at beginning of a function definition, set to 1 if 37618334Speter a return statement that specifies a return value is seen. */ 37718334Speter 37818334Speterextern int current_function_returns_value; 37918334Speter 38018334Speter/* Set to 0 at beginning of a function definition, set to 1 if 38118334Speter a return statement with no argument is seen. */ 38218334Speter 38318334Speterextern int current_function_returns_null; 38418334Speter 38518334Speter/* Nonzero means `$' can be in an identifier. */ 38618334Speter 38718334Speterextern int dollars_in_ident; 38818334Speter 38918334Speter/* Nonzero means allow type mismatches in conditional expressions; 39018334Speter just make their values `void'. */ 39118334Speter 39218334Speterextern int flag_cond_mismatch; 39318334Speter 39418334Speter/* Nonzero means don't recognize the keyword `asm'. */ 39518334Speter 39618334Speterextern int flag_no_asm; 39718334Speter 39818334Speter/* Nonzero means ignore `#ident' directives. */ 39918334Speter 40018334Speterextern int flag_no_ident; 40118334Speter 40218334Speter/* Nonzero means warn about implicit declarations. */ 40318334Speter 40418334Speterextern int warn_implicit; 40518334Speter 40618334Speter/* Nonzero means give string constants the type `const char *' 40718334Speter to get extra warnings from them. These warnings will be too numerous 40818334Speter to be useful, except in thoroughly ANSIfied programs. */ 40918334Speter 41018334Speterextern int warn_write_strings; 41118334Speter 41218334Speter/* Nonzero means warn about sizeof (function) or addition/subtraction 41318334Speter of function pointers. */ 41418334Speter 41518334Speterextern int warn_pointer_arith; 41618334Speter 41718334Speter/* Nonzero means warn for all old-style non-prototype function decls. */ 41818334Speter 41918334Speterextern int warn_strict_prototypes; 42018334Speter 42118334Speter/* Nonzero means warn about multiple (redundant) decls for the same single 42218334Speter variable or function. */ 42318334Speter 42418334Speterextern int warn_redundant_decls; 42518334Speter 42618334Speter/* Nonzero means warn about extern declarations of objects not at 42718334Speter file-scope level and about *all* declarations of functions (whether 42818334Speter extern or static) not at file-scope level. Note that we exclude 42918334Speter implicit function declarations. To get warnings about those, use 43018334Speter -Wimplicit. */ 43118334Speter 43218334Speterextern int warn_nested_externs; 43318334Speter 43418334Speter/* Nonzero means warn about pointer casts that can drop a type qualifier 43518334Speter from the pointer target type. */ 43618334Speter 43718334Speterextern int warn_cast_qual; 43818334Speter 43918334Speter/* Nonzero means warn when casting a function call to a type that does 44018334Speter not match the return type (e.g. (float)sqrt() or (anything*)malloc() 44118334Speter when there is no previous declaration of sqrt or malloc. */ 44218334Speter 44318334Speterextern int warn_bad_function_cast; 44418334Speter 44518334Speter/* Warn about traditional constructs whose meanings changed in ANSI C. */ 44618334Speter 44718334Speterextern int warn_traditional; 44818334Speter 44918334Speter/* Warn about *printf or *scanf format/argument anomalies. */ 45018334Speter 45118334Speterextern int warn_format; 45218334Speter 45318334Speter/* Warn about a subscript that has type char. */ 45418334Speter 45518334Speterextern int warn_char_subscripts; 45618334Speter 45718334Speter/* Warn if a type conversion is done that might have confusing results. */ 45818334Speter 45918334Speterextern int warn_conversion; 46018334Speter 46118334Speter/* Nonzero means do some things the same way PCC does. */ 46218334Speter 46318334Speterextern int flag_traditional; 46418334Speter 46518334Speter/* Nonzero means to allow single precision math even if we're generally 46618334Speter being traditional. */ 46718334Speterextern int flag_allow_single_precision; 46818334Speter 46918334Speter/* Nonzero means warn about suggesting putting in ()'s. */ 47018334Speter 47118334Speterextern int warn_parentheses; 47218334Speter 47318334Speter/* Warn if initializer is not completely bracketed. */ 47418334Speter 47518334Speterextern int warn_missing_braces; 47618334Speter 47718334Speter/* Nonzero means this is a function to call to perform comptypes 47818334Speter on two record types. */ 47918334Speter 48018334Speterextern int (*comptypes_record_hook) (); 48118334Speter 48218334Speter/* Nonzero means we are reading code that came from a system header file. */ 48318334Speter 48418334Speterextern int system_header_p; 48518334Speter 48618334Speter/* Nonzero enables objc features. */ 48718334Speter 48818334Speterextern int doing_objc_thang; 48918334Speter 49018334Speter#endif /* not _C_TREE_H */ 491