]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
gengtype-lex.l (IWORD): Add CHAR_BITFIELD.
authorKaveh R. Ghazi <ghazi@caip.rutgers.edu>
Thu, 3 Apr 2003 15:42:16 +0000 (15:42 +0000)
committerKaveh Ghazi <ghazi@gcc.gnu.org>
Thu, 3 Apr 2003 15:42:16 +0000 (15:42 +0000)
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.

From-SVN: r65201

gcc/ChangeLog
gcc/cp/ChangeLog
gcc/cp/cp-tree.h
gcc/cp/decl.c
gcc/cp/decl2.c
gcc/cp/method.c
gcc/cp/operators.def
gcc/cp/ptree.c
gcc/cp/rtti.c
gcc/gengtype-lex.l
gcc/system.h

index c9ba702a6352801a4e96b695f29fbcdbe680486e..3d9392bf3763ee09e1864b5559416d083fe0dd1a 100644 (file)
@@ -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
index 16f58f293c49391f0a6c31a32d7035dd3d44213d..8667f01bd81c511612a6e59c102577eab55ab0a9 100644 (file)
@@ -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
index a9692fe2842066f2a9268784e89a1182c5ae8576..66c6355a7cf86c01dd1213b62e7dcd1e6644150c 100644 (file)
@@ -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__);    \
     &lt->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.
index e2dc018a23a4bea1f79079bd26372db089836338..f33b733e325e4fe93c382d172f3352aea49b3cfc 100644 (file)
@@ -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.
index b7b0054b7eeaa1510c738d3122e01ce96ab60dc2..0f8617c141f26454016786944f0b9ea552e03063 100644 (file)
@@ -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.  */
index a60b75f1cbfd499fbc047a7ba43291c4a1800823..b5a88f2f11d12416003e14b0abc85e4ba90ef5fa 100644 (file)
@@ -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;
index 98e317409287564df29f7d0c761a1e5b691b830e..b4de745a154ac0ed9eb6c8b3f9c5fb8636b8c2b0 100644 (file)
@@ -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)
index 305a4f135c6fb92821a0b8ffed59fdb3ce50eeb3..aefc9613e7587168e2a8c94927d5717304f2d551 100644 (file)
@@ -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));
     }
 }
 
index a9a7cdbcea084feb2f0bd840c143c3677e4f4efd..24ba0fd9b0244fafda23d110325d7c29fea87124 100644 (file)
@@ -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.  */
 
index c4f96c59e7380e7c7ac613dbc7dd5c72596bf1e5..36b1596651e16e2c8719b1a201c0ddc1f328b210 100644 (file)
@@ -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
index 2f16008be19459c9fb7340dd62b168f5a6e1e7ff..adece55d99bc9f743e4ab6b5546db9c9574aca95 100644 (file)
@@ -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