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