diff options
author | ghazi <ghazi@138bc75d-0d04-0410-961f-82ee72b054a4> | 2003-04-03 15:42:16 +0000 |
---|---|---|
committer | ghazi <ghazi@138bc75d-0d04-0410-961f-82ee72b054a4> | 2003-04-03 15:42:16 +0000 |
commit | 4fa0b096fecff8fd63e8cab50890ce1de2995a93 (patch) | |
tree | d3d44863b6742a605d5b7492dbb65562073f1f4c | |
parent | 7b259c7a4a8c4c0983ca8ecfe3fbb4bb2fb51244 (diff) | |
download | gcc-4fa0b096fecff8fd63e8cab50890ce1de2995a93.tar.gz |
gcc:
* gengtype-lex.l (IWORD): Add CHAR_BITFIELD.
* system.h (CHAR_BITFIELD): New.
cp:
* operators.def (DEF_SIMPLE_OPERATOR, DEF_ASSN_OPERATOR,
DEF_ASSN_OPERATOR): Delete spurious semi-colon.
* rtti.c (dfs_class_hint_mark): Likewise.
* decl.c (push_local_name, push_class_level_binding,
maybe_inject_for_scope_var): Don't use POP_TIMEVAR_AND_RETURN in
functions returning void.
* decl2.c (add_using_namespace): Likewise.
* decl.c (print_binding_level, print_other_binding_stack,
print_binding_stack): Cast argument of %p specifier to void*.
* ptree.c (cxx_print_decl): Likewise.
* cp-tree.h (VAR_OR_FUNCTION_DECL_CHECK,
VAR_FUNCTION_OR_PARM_DECL_CHECK,
VAR_TEMPL_TYPE_OR_FUNCTION_DECL_CHECK, RECORD_OR_UNION_TYPE_CHECK,
BOUND_TEMPLATE_TEMPLATE_PARM_TYPE_CHECK, LANG_TYPE_CLASS_CHECK,
LANG_TYPE_PTRMEM_CHECK, LANG_DECL_U2_CHECK): Add __extension__.
* decl.c (set_current_binding_level): New macro. Use throughout
when setting the current binding level.
* cp-tree.h (cp_lvalue_kind, base_access): Delete trailing comma
in enum.
* method.c (mangling_flags): Likewise.
* cp-tree.h (lang_type_header): Add __extension__ and use
CHAR_BITFIELD for members.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@65201 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r-- | gcc/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/cp/ChangeLog | 31 | ||||
-rw-r--r-- | gcc/cp/cp-tree.h | 40 | ||||
-rw-r--r-- | gcc/cp/decl.c | 61 | ||||
-rw-r--r-- | gcc/cp/decl2.c | 8 | ||||
-rw-r--r-- | gcc/cp/method.c | 2 | ||||
-rw-r--r-- | gcc/cp/operators.def | 6 | ||||
-rw-r--r-- | gcc/cp/ptree.c | 6 | ||||
-rw-r--r-- | gcc/cp/rtti.c | 2 | ||||
-rw-r--r-- | gcc/gengtype-lex.l | 2 | ||||
-rw-r--r-- | gcc/system.h | 5 |
11 files changed, 115 insertions, 53 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index c9ba702a635..3d9392bf376 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2003-04-03 Kaveh R. Ghazi <ghazi@caip.rutgers.edu> + + * gengtype-lex.l (IWORD): Add CHAR_BITFIELD. + * system.h (CHAR_BITFIELD): New. + 2003-04-03 Kazu Hirata <kazu@cs.umass.edu> * config/h8300/h8300.md (a peephole2): Generalize to accept GT diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 16f58f293c4..8667f01bd81 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,34 @@ +2003-04-03 Kaveh R. Ghazi <ghazi@caip.rutgers.edu> + + * operators.def (DEF_SIMPLE_OPERATOR, DEF_ASSN_OPERATOR, + DEF_ASSN_OPERATOR): Delete spurious semi-colon. + * rtti.c (dfs_class_hint_mark): Likewise. + + * decl.c (push_local_name, push_class_level_binding, + maybe_inject_for_scope_var): Don't use POP_TIMEVAR_AND_RETURN in + functions returning void. + * decl2.c (add_using_namespace): Likewise. + + * decl.c (print_binding_level, print_other_binding_stack, + print_binding_stack): Cast argument of %p specifier to void*. + * ptree.c (cxx_print_decl): Likewise. + + * cp-tree.h (VAR_OR_FUNCTION_DECL_CHECK, + VAR_FUNCTION_OR_PARM_DECL_CHECK, + VAR_TEMPL_TYPE_OR_FUNCTION_DECL_CHECK, RECORD_OR_UNION_TYPE_CHECK, + BOUND_TEMPLATE_TEMPLATE_PARM_TYPE_CHECK, LANG_TYPE_CLASS_CHECK, + LANG_TYPE_PTRMEM_CHECK, LANG_DECL_U2_CHECK): Add __extension__. + + * decl.c (set_current_binding_level): New macro. Use throughout + when setting the current binding level. + + * cp-tree.h (cp_lvalue_kind, base_access): Delete trailing comma + in enum. + * method.c (mangling_flags): Likewise. + + * cp-tree.h (lang_type_header): Add __extension__ and use + CHAR_BITFIELD for members. + 2003-04-02 Geoffrey Keating <geoffk@apple.com> PR other/9274 diff --git a/gcc/cp/cp-tree.h b/gcc/cp/cp-tree.h index a9692fe2842..66c6355a7cf 100644 --- a/gcc/cp/cp-tree.h +++ b/gcc/cp/cp-tree.h @@ -158,7 +158,7 @@ struct diagnostic_context; #if defined ENABLE_TREE_CHECKING && (GCC_VERSION >= 2007) -#define VAR_OR_FUNCTION_DECL_CHECK(NODE) \ +#define VAR_OR_FUNCTION_DECL_CHECK(NODE) __extension__ \ ({ const tree __t = (NODE); \ enum tree_code const __c = TREE_CODE(__t); \ if (__c != VAR_DECL && __c != FUNCTION_DECL) \ @@ -166,7 +166,7 @@ struct diagnostic_context; __FUNCTION__); \ __t; }) -#define VAR_FUNCTION_OR_PARM_DECL_CHECK(NODE) \ +#define VAR_FUNCTION_OR_PARM_DECL_CHECK(NODE) __extension__ \ ({ const tree __t = (NODE); \ enum tree_code const __c = TREE_CODE(__t); \ if (__c != VAR_DECL \ @@ -176,7 +176,7 @@ struct diagnostic_context; __FUNCTION__); \ __t; }) -#define VAR_TEMPL_TYPE_OR_FUNCTION_DECL_CHECK(NODE) \ +#define VAR_TEMPL_TYPE_OR_FUNCTION_DECL_CHECK(NODE) __extension__ \ ({ const tree __t = (NODE); \ enum tree_code const __c = TREE_CODE(__t); \ if (__c != VAR_DECL \ @@ -187,7 +187,7 @@ struct diagnostic_context; __FUNCTION__); \ __t; }) -#define RECORD_OR_UNION_TYPE_CHECK(NODE) \ +#define RECORD_OR_UNION_TYPE_CHECK(NODE) __extension__ \ ({ const tree __t = (NODE); \ enum tree_code const __c = TREE_CODE(__t); \ if (__c != RECORD_TYPE && __c != UNION_TYPE) \ @@ -195,7 +195,7 @@ struct diagnostic_context; __FUNCTION__); \ __t; }) -#define BOUND_TEMPLATE_TEMPLATE_PARM_TYPE_CHECK(NODE) \ +#define BOUND_TEMPLATE_TEMPLATE_PARM_TYPE_CHECK(NODE) __extension__ \ ({ const tree __t = (NODE); \ enum tree_code const __c = TREE_CODE(__t); \ if (__c != BOUND_TEMPLATE_TEMPLATE_PARM) \ @@ -1036,17 +1036,17 @@ enum languages { lang_c, lang_cplusplus, lang_java }; /* This is a few header flags for 'struct lang_type'. Actually, all but the first are used only for lang_type_class; they are put in this structure to save space. */ -struct lang_type_header GTY(()) +__extension__ struct lang_type_header GTY(()) { - unsigned char is_lang_type_class : 1; - - unsigned char has_type_conversion : 1; - unsigned char has_init_ref : 1; - unsigned char has_default_ctor : 1; - unsigned char uses_multiple_inheritance : 1; - unsigned char const_needs_init : 1; - unsigned char ref_needs_init : 1; - unsigned char has_const_assign_ref : 1; + CHAR_BITFIELD is_lang_type_class : 1; + + CHAR_BITFIELD has_type_conversion : 1; + CHAR_BITFIELD has_init_ref : 1; + CHAR_BITFIELD has_default_ctor : 1; + CHAR_BITFIELD uses_multiple_inheritance : 1; + CHAR_BITFIELD const_needs_init : 1; + CHAR_BITFIELD ref_needs_init : 1; + CHAR_BITFIELD has_const_assign_ref : 1; }; /* This structure provides additional information above and beyond @@ -1154,13 +1154,13 @@ struct lang_type GTY(()) #if defined ENABLE_TREE_CHECKING && (GCC_VERSION >= 2007) -#define LANG_TYPE_CLASS_CHECK(NODE) \ +#define LANG_TYPE_CLASS_CHECK(NODE) __extension__ \ ({ struct lang_type *lt = TYPE_LANG_SPECIFIC (NODE); \ if (! lt->u.h.is_lang_type_class) \ lang_check_failed (__FILE__, __LINE__, __FUNCTION__); \ <->u.c; }) -#define LANG_TYPE_PTRMEM_CHECK(NODE) \ +#define LANG_TYPE_PTRMEM_CHECK(NODE) __extension__ \ ({ struct lang_type *lt = TYPE_LANG_SPECIFIC (NODE); \ if (lt->u.h.is_lang_type_class) \ lang_check_failed (__FILE__, __LINE__, __FUNCTION__); \ @@ -1748,7 +1748,7 @@ struct lang_decl GTY(()) #if defined ENABLE_TREE_CHECKING && (GCC_VERSION >= 2007) -#define LANG_DECL_U2_CHECK(NODE, TF) \ +#define LANG_DECL_U2_CHECK(NODE, TF) __extension__ \ ({ struct lang_decl *lt = DECL_LANG_SPECIFIC (NODE); \ if (lt->decl_flags.u2sel != TF) \ lang_check_failed (__FILE__, __LINE__, __FUNCTION__); \ @@ -2941,7 +2941,7 @@ typedef enum cp_lvalue_kind { clk_none = 0, /* Things that are not an lvalue. */ clk_ordinary = 1, /* An ordinary lvalue. */ clk_class = 2, /* An rvalue of class-type. */ - clk_bitfield = 4, /* An lvalue for a bit-field. */ + clk_bitfield = 4 /* An lvalue for a bit-field. */ } cp_lvalue_kind; /* The kinds of scopes we recognize. */ @@ -3051,7 +3051,7 @@ typedef enum base_access { ba_check = 2, /* Check access */ ba_not_special = 3, /* Do not consider special privilege current_class_type might give. */ - ba_quiet = 4, /* Do not issue error messages (bit mask). */ + ba_quiet = 4 /* Do not issue error messages (bit mask). */ } base_access; /* The kind of base we can find, looking in a class hierarchy. diff --git a/gcc/cp/decl.c b/gcc/cp/decl.c index e2dc018a23a..f33b733e325 100644 --- a/gcc/cp/decl.c +++ b/gcc/cp/decl.c @@ -438,6 +438,14 @@ struct cp_binding_level GTY(()) ? cp_function_chain->bindings \ : scope_chain->bindings) +#define set_current_binding_level(bl) do { \ + struct cp_binding_level * const bl_ = bl; \ + if (cfun && cp_function_chain->bindings) \ + cp_function_chain->bindings = bl_; \ + else \ + scope_chain->bindings = bl_; \ + } while (0) + /* The binding level of the current class, if any. */ #define class_binding_level scope_chain->class_bindings @@ -487,7 +495,7 @@ push_binding_level (struct cp_binding_level *newlevel, are active. */ memset ((char*) newlevel, 0, sizeof (struct cp_binding_level)); newlevel->level_chain = current_binding_level; - current_binding_level = newlevel; + set_current_binding_level (newlevel); newlevel->tag_transparent = tag_transparent; newlevel->more_cleanups_ok = 1; @@ -543,7 +551,7 @@ pop_binding_level (void) #endif /* defined(DEBUG_BINDING_LEVELS) */ { register struct cp_binding_level *level = current_binding_level; - current_binding_level = current_binding_level->level_chain; + set_current_binding_level (current_binding_level->level_chain); level->level_chain = free_binding_level; #if 0 /* defined(DEBUG_BINDING_LEVELS) */ if (level->binding_depth != binding_depth) @@ -558,7 +566,7 @@ static void suspend_binding_level (void) { if (class_binding_level) - current_binding_level = class_binding_level; + set_current_binding_level (class_binding_level); if (global_binding_level) { @@ -580,7 +588,7 @@ suspend_binding_level (void) } is_class_level = 0; #endif /* defined(DEBUG_BINDING_LEVELS) */ - current_binding_level = current_binding_level->level_chain; + set_current_binding_level (current_binding_level->level_chain); find_class_binding_level (); } @@ -592,7 +600,7 @@ resume_binding_level (struct cp_binding_level* b) my_friendly_assert(!class_binding_level, 386); /* Also, resuming a non-directly nested namespace is a no-no. */ my_friendly_assert(b->level_chain == current_binding_level, 386); - current_binding_level = b; + set_current_binding_level (b); #if defined(DEBUG_BINDING_LEVELS) b->binding_depth = binding_depth; indent (); @@ -1860,7 +1868,7 @@ print_binding_level (struct cp_binding_level* lvl) tree t; int i = 0, len; fprintf (stderr, " blocks="); - fprintf (stderr, HOST_PTR_PRINTF, lvl->blocks); + fprintf (stderr, HOST_PTR_PRINTF, (void *) lvl->blocks); if (lvl->tag_transparent) fprintf (stderr, " tag-transparent"); if (lvl->more_cleanups_ok) @@ -1961,7 +1969,7 @@ print_other_binding_stack (struct cp_binding_level *stack) for (level = stack; level != global_binding_level; level = level->level_chain) { fprintf (stderr, "binding level "); - fprintf (stderr, HOST_PTR_PRINTF, level); + fprintf (stderr, HOST_PTR_PRINTF, (void *) level); fprintf (stderr, "\n"); print_binding_level (level); } @@ -1972,11 +1980,11 @@ print_binding_stack (void) { struct cp_binding_level *b; fprintf (stderr, "current_binding_level="); - fprintf (stderr, HOST_PTR_PRINTF, current_binding_level); + fprintf (stderr, HOST_PTR_PRINTF, (void *) current_binding_level); fprintf (stderr, "\nclass_binding_level="); - fprintf (stderr, HOST_PTR_PRINTF, class_binding_level); + fprintf (stderr, HOST_PTR_PRINTF, (void *) class_binding_level); fprintf (stderr, "\nglobal_binding_level="); - fprintf (stderr, HOST_PTR_PRINTF, global_binding_level); + fprintf (stderr, HOST_PTR_PRINTF, (void *) global_binding_level); fprintf (stderr, "\n"); if (class_binding_level) { @@ -2497,7 +2505,8 @@ push_local_name (tree decl) DECL_DISCRIMINATOR (decl) = 1; VARRAY_TREE (local_names, i) = decl; - POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, (void)0); + timevar_pop (TV_NAME_LOOKUP); + return; } } @@ -4065,9 +4074,9 @@ pushdecl_with_scope (tree x, struct cp_binding_level* level) else { b = current_binding_level; - current_binding_level = level; + set_current_binding_level (level); x = pushdecl (x); - current_binding_level = b; + set_current_binding_level (b); } current_function_decl = function_decl; POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, x); @@ -4205,7 +4214,10 @@ push_class_level_binding (tree name, tree x) /* The class_binding_level will be NULL if x is a template parameter name in a member template. */ if (!class_binding_level) - POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, (void)0); + { + timevar_pop (TV_NAME_LOOKUP); + return; + } /* Make sure that this new member does not have the same name as a template parameter. */ @@ -4255,7 +4267,8 @@ push_class_level_binding (tree name, tree x) INHERITED_VALUE_BINDING_P (binding) = 0; TREE_TYPE (shadow) = x; IDENTIFIER_CLASS_VALUE (name) = x; - POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, (void)0); + timevar_pop (TV_NAME_LOOKUP); + return; } } @@ -6190,7 +6203,7 @@ cxx_init_decl_processing (void) current_lang_name = lang_name_c; current_function_decl = NULL_TREE; - current_binding_level = NULL_BINDING_LEVEL; + set_current_binding_level (NULL_BINDING_LEVEL); free_binding_level = NULL_BINDING_LEVEL; build_common_tree_nodes (flag_signed_char); @@ -7846,13 +7859,19 @@ maybe_inject_for_scope_var (tree decl) { timevar_push (TV_NAME_LOOKUP); if (!DECL_NAME (decl)) - POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, (void)0); + { + timevar_pop (TV_NAME_LOOKUP); + return; + } /* Declarations of __FUNCTION__ and its ilk appear magically when the variable is first used. If that happens to be inside a for-loop, we don't want to do anything special. */ if (DECL_PRETTY_FUNCTION_P (decl)) - POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, (void)0); + { + timevar_pop (TV_NAME_LOOKUP); + return; + } if (current_binding_level->is_for_scope) { @@ -9960,10 +9979,10 @@ grokdeclarator (tree declarator, if (decl_context == NORMAL && !toplevel_bindings_p ()) { struct cp_binding_level *b = current_binding_level; - current_binding_level = b->level_chain; + set_current_binding_level (b->level_chain); if (current_binding_level != 0 && toplevel_bindings_p ()) decl_context = PARM; - current_binding_level = b; + set_current_binding_level (b); } if (name == NULL) @@ -13433,7 +13452,7 @@ start_function (tree declspecs, tree declarator, tree attrs, int flags) FIXME factor out the non-RTL stuff. */ bl = current_binding_level; init_function_start (decl1, input_filename, lineno); - current_binding_level = bl; + set_current_binding_level (bl); /* Even though we're inside a function body, we still don't want to call expand_expr to calculate the size of a variable-sized array. diff --git a/gcc/cp/decl2.c b/gcc/cp/decl2.c index b7b0054b7ee..0f8617c141f 100644 --- a/gcc/cp/decl2.c +++ b/gcc/cp/decl2.c @@ -3457,7 +3457,10 @@ add_using_namespace (tree user, tree used, bool indirect) timevar_push (TV_NAME_LOOKUP); /* Using oneself is a no-op. */ if (user == used) - POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, (void)0); + { + timevar_pop (TV_NAME_LOOKUP); + return; + } my_friendly_assert (TREE_CODE (user) == NAMESPACE_DECL, 380); my_friendly_assert (TREE_CODE (used) == NAMESPACE_DECL, 380); /* Check if we already have this. */ @@ -3467,7 +3470,8 @@ add_using_namespace (tree user, tree used, bool indirect) if (!indirect) /* Promote to direct usage. */ TREE_INDIRECT_USING (t) = 0; - POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, (void)0); + timevar_pop (TV_NAME_LOOKUP); + return; } /* Add used to the user's using list. */ diff --git a/gcc/cp/method.c b/gcc/cp/method.c index a60b75f1cbf..b5a88f2f11d 100644 --- a/gcc/cp/method.c +++ b/gcc/cp/method.c @@ -50,7 +50,7 @@ enum mangling_flags mf_maybe_uninstantiated = 1, /* When mangling a numeric value, use the form `_XX_' (instead of just `XX') if the value has more than one digit. */ - mf_use_underscores_around_value = 2, + mf_use_underscores_around_value = 2 }; typedef enum mangling_flags mangling_flags; diff --git a/gcc/cp/operators.def b/gcc/cp/operators.def index 98e31740928..b4de745a154 100644 --- a/gcc/cp/operators.def +++ b/gcc/cp/operators.def @@ -131,7 +131,7 @@ DEF_SIMPLE_OPERATOR ("--", POSTDECREMENT_EXPR, "mm", 2) DEF_SIMPLE_OPERATOR ("<?", MIN_EXPR, "v23min", 2) DEF_SIMPLE_OPERATOR (">?", MAX_EXPR, "v23max", 2) /* This one is needed for mangling. */ -DEF_SIMPLE_OPERATOR ("::", SCOPE_REF, "sr", 2); +DEF_SIMPLE_OPERATOR ("::", SCOPE_REF, "sr", 2) /* Assignment operators. */ DEF_ASSN_OPERATOR ("=", NOP_EXPR, "aS", 2) @@ -146,8 +146,8 @@ DEF_ASSN_OPERATOR ("^=", BIT_XOR_EXPR, "eO", 2) DEF_ASSN_OPERATOR ("<<=", LSHIFT_EXPR, "lS", 2) DEF_ASSN_OPERATOR (">>=", RSHIFT_EXPR, "rS", 2) /* These operators are GNU extensions. */ -DEF_ASSN_OPERATOR ("<?=", MIN_EXPR, "v23miN", 2); -DEF_ASSN_OPERATOR (">?=", MAX_EXPR, "v23maX", 2); +DEF_ASSN_OPERATOR ("<?=", MIN_EXPR, "v23miN", 2) +DEF_ASSN_OPERATOR (">?=", MAX_EXPR, "v23maX", 2) /* Ternary operators. */ DEF_SIMPLE_OPERATOR ("?:", COND_EXPR, "qu", 3) diff --git a/gcc/cp/ptree.c b/gcc/cp/ptree.c index 305a4f135c6..aefc9613e75 100644 --- a/gcc/cp/ptree.c +++ b/gcc/cp/ptree.c @@ -48,19 +48,19 @@ cxx_print_decl (FILE *file, tree node, int indent) && DECL_PENDING_INLINE_INFO (node)) { fprintf (file, " pending-inline-info "); - fprintf (file, HOST_PTR_PRINTF, DECL_PENDING_INLINE_INFO (node)); + fprintf (file, HOST_PTR_PRINTF, (void *) DECL_PENDING_INLINE_INFO (node)); } if (TREE_CODE (node) == TYPE_DECL && DECL_SORTED_FIELDS (node)) { fprintf (file, " sorted-fields "); - fprintf (file, HOST_PTR_PRINTF, DECL_SORTED_FIELDS (node)); + fprintf (file, HOST_PTR_PRINTF, (void *) DECL_SORTED_FIELDS (node)); } if ((TREE_CODE (node) == FUNCTION_DECL || TREE_CODE (node) == VAR_DECL) && DECL_TEMPLATE_INFO (node)) { fprintf (file, " template-info "); - fprintf (file, HOST_PTR_PRINTF, DECL_TEMPLATE_INFO (node)); + fprintf (file, HOST_PTR_PRINTF, (void *) DECL_TEMPLATE_INFO (node)); } } diff --git a/gcc/cp/rtti.c b/gcc/cp/rtti.c index a9a7cdbcea0..24ba0fd9b02 100644 --- a/gcc/cp/rtti.c +++ b/gcc/cp/rtti.c @@ -922,7 +922,7 @@ dfs_class_hint_mark (tree binfo, void *data) SET_CLASSTYPE_MARKED (basetype); } return NULL_TREE; -}; +} /* Clear the base's dfs marks, after searching for duplicate bases. */ diff --git a/gcc/gengtype-lex.l b/gcc/gengtype-lex.l index c4f96c59e73..36b1596651e 100644 --- a/gcc/gengtype-lex.l +++ b/gcc/gengtype-lex.l @@ -52,7 +52,7 @@ update_lineno (l, len) ID [[:alpha:]_][[:alnum:]_]* WS [[:space:]]+ -IWORD short|long|(un)?signed|char|int|HOST_WIDE_INT|bool|size_t +IWORD short|long|(un)?signed|char|int|HOST_WIDE_INT|bool|size_t|CHAR_BITFIELD ITYPE {IWORD}({WS}{IWORD})* %x in_struct in_struct_comment in_comment in_yacc_escape diff --git a/gcc/system.h b/gcc/system.h index 2f16008be19..adece55d99b 100644 --- a/gcc/system.h +++ b/gcc/system.h @@ -508,13 +508,16 @@ extern void abort PARAMS ((void)); #define HOST_BIT_BUCKET "/dev/null" #endif -/* Be conservative and only use enum bitfields with GCC. +/* Be conservative and only use enum bitfields with GCC. Likewise for + char bitfields. FIXME: provide a complete autoconf test for buggy enum bitfields. */ #if (GCC_VERSION > 2000) #define ENUM_BITFIELD(TYPE) enum TYPE +#define CHAR_BITFIELD unsigned char #else #define ENUM_BITFIELD(TYPE) unsigned int +#define CHAR_BITFIELD unsigned int #endif #ifndef offsetof |