X-Git-Url: http://git.sourceforge.jp/view?a=blobdiff_plain;f=gcc%2Fc-tree.h;h=0581b38da1f04f7a7c2d46b4784724d7538f8217;hb=4211f78ad1aa9078800828594e1960e3d848d611;hp=9d3d2f30da0dd3d2c56b433b8b5d5a04c3021e60;hpb=843bd2fa78007c193692f6382edf3b6b5c2d3a62;p=pf3gnuchains%2Fgcc-fork.git diff --git a/gcc/c-tree.h b/gcc/c-tree.h index 9d3d2f30da0..0581b38da1f 100644 --- a/gcc/c-tree.h +++ b/gcc/c-tree.h @@ -1,6 +1,6 @@ /* Definitions for C parsing and type checking. Copyright (C) 1987, 1993, 1994, 1995, 1997, 1998, - 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2007, 2008, 2009 + 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. This file is part of GCC. @@ -22,8 +22,7 @@ along with GCC; see the file COPYING3. If not see #ifndef GCC_C_TREE_H #define GCC_C_TREE_H -#include "c-common.h" -#include "toplev.h" +#include "c-family/c-common.h" #include "diagnostic.h" /* struct lang_identifier is private to c-decl.c, but langhooks.c needs to @@ -31,12 +30,6 @@ along with GCC; see the file COPYING3. If not see #define C_SIZEOF_STRUCT_LANG_IDENTIFIER \ (sizeof (struct c_common_identifier) + 3 * sizeof (void *)) -/* Language-specific declaration information. */ - -struct GTY(()) lang_decl { - char dummy; -}; - /* In a RECORD_TYPE or UNION_TYPE, nonzero if any component is read-only. */ #define C_TYPE_FIELDS_READONLY(TYPE) TREE_LANG_FLAG_1 (TYPE) @@ -56,18 +49,6 @@ struct GTY(()) lang_decl { and C_RID_YYCODE is the token number wanted by Yacc. */ #define C_IS_RESERVED_WORD(ID) TREE_LANG_FLAG_0 (ID) -struct GTY(()) lang_type { - /* In a RECORD_TYPE, a sorted array of the fields of the type. */ - struct sorted_fields_type * GTY ((reorder ("resort_sorted_fields"))) s; - /* In an ENUMERAL_TYPE, the min and max values. */ - tree enum_min; - tree enum_max; - /* In a RECORD_TYPE, information specific to Objective-C, such - as a list of adopted protocols or a pointer to a corresponding - @interface. See objc/objc-act.h for details. */ - tree objc_info; -}; - /* Record whether a type or decl was written with nonconstant size. Note that TYPE_SIZE may have simplified to a constant. */ #define C_TYPE_VARIABLE_SIZE(TYPE) TYPE_LANG_FLAG_1 (TYPE) @@ -153,6 +134,8 @@ struct c_expr only used to distinguish tag definitions, tag references and typeof uses. */ enum c_typespec_kind { + /* No typespec. This appears only in struct c_declspec. */ + ctsk_none, /* A reserved keyword type specifier. */ ctsk_resword, /* A reference to a tag, previously declared, such as "struct foo". @@ -178,6 +161,9 @@ enum c_typespec_kind { struct c_typespec { /* What kind of type specifier this is. */ enum c_typespec_kind kind; + /* Whether the expression has operands suitable for use in constant + expressions. */ + bool expr_const_operands; /* The specifier itself. */ tree spec; /* An expression to be evaluated before the type specifier, in the @@ -189,9 +175,6 @@ struct c_typespec { expression itself (as opposed to the array sizes) forms no part of the type and so needs to be recorded separately. */ tree expr; - /* Whether the expression has operands suitable for use in constant - expressions. */ - bool expr_const_operands; }; /* A storage class specifier. */ @@ -214,6 +197,7 @@ enum c_typespec_keyword { cts_char, cts_int, cts_float, + cts_int128, cts_double, cts_dfloat32, cts_dfloat64, @@ -238,18 +222,19 @@ struct c_declspecs { NULL; attributes (possibly from multiple lists) will be passed separately. */ tree attrs; - /* Any type specifier keyword used such as "int", not reflecting - modifiers such as "short", or cts_none if none. */ - enum c_typespec_keyword typespec_word; /* The storage class specifier, or csc_none if none. */ enum c_storage_class storage_class; + /* Any type specifier keyword used such as "int", not reflecting + modifiers such as "short", or cts_none if none. */ + ENUM_BITFIELD (c_typespec_keyword) typespec_word : 8; + /* The kind of type specifier if one has been seen, ctsk_none + otherwise. */ + ENUM_BITFIELD (c_typespec_kind) typespec_kind : 3; /* Whether any expressions in typeof specifiers may appear in constant expressions. */ BOOL_BITFIELD expr_const_operands : 1; /* Whether any declaration specifiers have been seen at all. */ BOOL_BITFIELD declspecs_seen_p : 1; - /* Whether a type specifier has been seen. */ - BOOL_BITFIELD type_seen_p : 1; /* Whether something other than a storage class specifier or attribute has been seen. This is used to warn for the obsolescent usage of storage class specifiers other than at the @@ -259,10 +244,6 @@ struct c_declspecs { BOOL_BITFIELD non_sc_seen_p : 1; /* Whether the type is specified by a typedef or typeof name. */ BOOL_BITFIELD typedef_p : 1; - /* Whether a struct, union or enum type either had its content - defined by a type specifier in the list or was the first visible - declaration of its tag. */ - BOOL_BITFIELD tag_defined_p : 1; /* Whether the type is explicitly "signed" or specified by a typedef whose type is explicitly "signed". */ BOOL_BITFIELD explicit_signed_p : 1; @@ -270,7 +251,7 @@ struct c_declspecs { BOOL_BITFIELD deprecated_p : 1; /* Whether the type defaulted to "int" because there were no type specifiers. */ - BOOL_BITFIELD default_int_p; + BOOL_BITFIELD default_int_p : 1; /* Whether "long" was specified. */ BOOL_BITFIELD long_p : 1; /* Whether "long" was specified more than once. */ @@ -295,6 +276,8 @@ struct c_declspecs { BOOL_BITFIELD restrict_p : 1; /* Whether "_Sat" was specified. */ BOOL_BITFIELD saturating_p : 1; + /* The address space that the declaration belongs to. */ + addr_space_t address_space; }; /* The various kinds of declarators in C. */ @@ -311,22 +294,32 @@ enum c_declarator_kind { cdk_attrs }; +typedef struct GTY(()) c_arg_tag_d { + /* The argument name. */ + tree id; + /* The type of the argument. */ + tree type; +} c_arg_tag; + +DEF_VEC_O(c_arg_tag); +DEF_VEC_ALLOC_O(c_arg_tag,gc); + /* Information about the parameters in a function declarator. */ struct c_arg_info { /* A list of parameter decls. */ tree parms; /* A list of structure, union and enum tags defined. */ - tree tags; + VEC(c_arg_tag,gc) *tags; /* A list of argument types to go in the FUNCTION_TYPE. */ tree types; /* A list of non-parameter decls (notably enumeration constants) defined with the parameters. */ tree others; - /* A list of VLA sizes from the parameters. In a function + /* A VEC of VLA sizes from the parameters. In a function definition, these are used to ensure that side-effects in sizes of arrays converted to pointers (such as a parameter int i[n++]) take place; otherwise, they are ignored. */ - tree pending_sizes; + VEC(tree,gc) *pending_sizes; /* True when these arguments had [*]. */ BOOL_BITFIELD had_vla_unspec : 1; }; @@ -335,9 +328,9 @@ struct c_arg_info { struct c_declarator { /* The kind of declarator. */ enum c_declarator_kind kind; + location_t id_loc; /* Currently only set for cdk_id, cdk_array. */ /* Except for cdk_id, the contained declarator. For cdk_id, NULL. */ struct c_declarator *declarator; - location_t id_loc; /* Currently only set for cdk_id, cdk_array. */ union { /* For identifiers, an IDENTIFIER_NODE or NULL_TREE if an abstract declarator. */ @@ -382,22 +375,6 @@ struct c_parm { struct c_declarator *declarator; }; -/* Save and restore the variables in this file and elsewhere - that keep track of the progress of compilation of the current function. - Used for nested functions. */ - -struct GTY(()) language_function { - struct c_language_function base; - tree x_break_label; - tree x_cont_label; - struct c_switch * GTY((skip)) x_switch_stack; - struct c_arg_info * GTY((skip)) arg_info; - int returns_value; - int returns_null; - int returns_abnormally; - int warn_about_return_type; -}; - /* Used when parsing an enum. Initialized by start_enum. */ struct c_enum_contents { @@ -444,14 +421,14 @@ extern void c_bindings_end_stmt_expr (struct c_spot_bindings *); extern void record_inline_static (location_t, tree, tree, enum c_inline_static_type); extern void c_init_decl_processing (void); -extern void c_dup_lang_specific_decl (tree); extern void c_print_identifier (FILE *, tree, int); extern int quals_from_declspecs (const struct c_declspecs *); extern struct c_declarator *build_array_declarator (location_t, tree, struct c_declspecs *, bool, bool); -extern tree build_enumerator (location_t, struct c_enum_contents *, tree, tree); -extern tree check_for_loop_decls (location_t); +extern tree build_enumerator (location_t, location_t, struct c_enum_contents *, + tree, tree); +extern tree check_for_loop_decls (location_t, bool); extern void mark_forward_parm_decls (void); extern void declare_parm_level (void); extern void undeclared_variable (location_t, tree); @@ -462,12 +439,12 @@ extern struct c_spot_bindings *c_get_switch_bindings (void); extern void c_release_switch_bindings (struct c_spot_bindings *); extern bool c_check_switch_jump_warnings (struct c_spot_bindings *, location_t, location_t); -extern void c_maybe_initialize_eh (void); extern void finish_decl (tree, location_t, tree, tree, tree); extern tree finish_enum (tree, tree, tree); extern void finish_function (void); extern tree finish_struct (location_t, tree, tree, tree, struct c_struct_parse_info *); +extern struct c_arg_info *build_arg_info (void); extern struct c_arg_info *get_parm_info (bool); extern tree grokfield (location_t, struct c_declarator *, struct c_declspecs *, tree, tree *); @@ -512,6 +489,8 @@ extern struct c_declspecs *declspecs_add_type (location_t, struct c_typespec); extern struct c_declspecs *declspecs_add_scspec (struct c_declspecs *, tree); extern struct c_declspecs *declspecs_add_attrs (struct c_declspecs *, tree); +extern struct c_declspecs *declspecs_add_addrspace (struct c_declspecs *, + addr_space_t); extern struct c_declspecs *finish_declspecs (struct c_declspecs *); /* in c-objc-common.c */ @@ -521,11 +500,6 @@ extern bool c_warn_unused_global_decl (const_tree); extern void c_initialize_diagnostics (diagnostic_context *); extern bool c_vla_unspec_p (tree x, tree fn); -#define c_build_type_variant(TYPE, CONST_P, VOLATILE_P) \ - c_build_qualified_type ((TYPE), \ - ((CONST_P) ? TYPE_QUAL_CONST : 0) | \ - ((VOLATILE_P) ? TYPE_QUAL_VOLATILE : 0)) - /* in c-typeck.c */ extern bool in_late_binary_op; extern int in_alignof; @@ -538,12 +512,16 @@ extern tree c_objc_common_truthvalue_conversion (location_t, tree); extern tree require_complete_type (tree); extern int same_translation_unit_p (const_tree, const_tree); extern int comptypes (tree, tree); +extern int comptypes_check_different_types (tree, tree, bool *); extern bool c_vla_type_p (const_tree); extern bool c_mark_addressable (tree); extern void c_incomplete_type_error (const_tree, const_tree); extern tree c_type_promotes_to (tree); extern struct c_expr default_function_array_conversion (location_t, - struct c_expr); + struct c_expr); +extern struct c_expr default_function_array_read_conversion (location_t, + struct c_expr); +extern void mark_exp_read (tree); extern tree composite_type (tree, tree); extern tree build_component_ref (location_t, tree, tree); extern tree build_array_ref (location_t, tree, tree); @@ -553,10 +531,11 @@ extern struct c_expr c_expr_sizeof_expr (location_t, struct c_expr); extern struct c_expr c_expr_sizeof_type (location_t, struct c_type_name *); extern struct c_expr parser_build_unary_op (location_t, enum tree_code, struct c_expr); -extern struct c_expr parser_build_binary_op (location_t, +extern struct c_expr parser_build_binary_op (location_t, enum tree_code, struct c_expr, struct c_expr); -extern tree build_conditional_expr (location_t, tree, bool, tree, tree); +extern tree build_conditional_expr (location_t, tree, bool, tree, tree, + tree, tree); extern tree build_compound_expr (location_t, tree, tree); extern tree c_cast_expr (location_t, struct c_type_name *, tree); extern tree build_c_cast (location_t, tree, tree); @@ -567,16 +546,16 @@ extern void maybe_warn_string_init (tree, struct c_expr); extern void start_init (tree, tree, int); extern void finish_init (void); extern void really_start_incremental_init (tree); -extern void push_init_level (int); -extern struct c_expr pop_init_level (int); -extern void set_init_index (tree, tree); -extern void set_init_label (tree); -extern void process_init_element (struct c_expr, bool); +extern void push_init_level (int, struct obstack *); +extern struct c_expr pop_init_level (int, struct obstack *); +extern void set_init_index (tree, tree, struct obstack *); +extern void set_init_label (tree, struct obstack *); +extern void process_init_element (struct c_expr, bool, struct obstack *); extern tree build_compound_literal (location_t, tree, tree, bool); extern void check_compound_literal_type (location_t, struct c_type_name *); extern tree c_start_case (location_t, location_t, tree); extern void c_finish_case (tree); -extern tree build_asm_expr (location_t, tree, tree, tree, tree, bool); +extern tree build_asm_expr (location_t, tree, tree, tree, tree, tree, bool); extern tree build_asm_stmt (tree, tree); extern int c_types_compatible_p (tree, tree); extern tree c_begin_compound_stmt (bool); @@ -623,27 +602,12 @@ extern int system_header_p; extern bool c_override_global_bindings_to_false; -/* True means we've initialized exception handling. */ -extern bool c_eh_initialized_p; - /* In c-decl.c */ extern void c_finish_incomplete_decl (tree); extern void c_write_global_declarations (void); -/* In order for the format checking to accept the C frontend - diagnostic framework extensions, you must include this file before - toplev.h, not after. */ -#if GCC_VERSION >= 4001 -#define ATTRIBUTE_GCC_CDIAG(m, n) __attribute__ ((__format__ (GCC_DIAG_STYLE, m ,n))) ATTRIBUTE_NONNULL(m) -#else -#define ATTRIBUTE_GCC_CDIAG(m, n) ATTRIBUTE_NONNULL(m) -#endif - -extern void pedwarn_c90 (location_t, int opt, const char *, ...) ATTRIBUTE_GCC_CDIAG(3,4); -extern void pedwarn_c99 (location_t, int opt, const char *, ...) ATTRIBUTE_GCC_CDIAG(3,4); - -extern bool c_cpp_error (cpp_reader *, int, location_t, unsigned int, - const char *, va_list *) - ATTRIBUTE_GCC_CDIAG(5,0); +/* In c-errors.c */ +extern void pedwarn_c90 (location_t, int opt, const char *, ...) ATTRIBUTE_GCC_DIAG(3,4); +extern void pedwarn_c99 (location_t, int opt, const char *, ...) ATTRIBUTE_GCC_DIAG(3,4); #endif /* ! GCC_C_TREE_H */