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