This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH] Workaround more _Bool problems on HP-UX


 > From: Richard Henderson <rth@redhat.com>
 > 
 > > Something like this?  (Suitably polished and propagated.)
 > > If so, what GCC_VERSION should it be activated on?  (3.0?)
 > 
 > Something like that.  I don't know what version.  In theory, we could
 > use _Bool for any proper C99 compiler, though the HP experience makes
 > me wonder how we can identify such a beast.
 > r~

I was originally going to test HAVE__BOOL, but based on Dave's reply
in thread, I limited BOOL_BITFIELD to gcc3 or later.  This patch
survived mainline C,C++ bootstrap on sparc-sun-solaris2.7 using
gcc2.95 for stage1 to test the non-_Bool case.

Roger, does it fix the hpux problem?

If so, and assuming it passes full regtest, ok for trunk and 3.4?

		--Kaveh


2004-01-25  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* system.h (CHAR_BITFIELD): Delete.
	(BOOL_BITFIELD): New.
	* c-decl.c (c_scope): Use BOOL_BITFIELD.
	* gengtype-lex.l: Recognize BOOL_BITFIELD instead of CHAR_BITFIELD.
cp:
	* cp-tree.h (language_function, lang_type_header): Use
	BOOL_BITFIELD.
	* name-lookup.h (cp_binding_level): Likewise.

diff -rup orig/egcc-CVS20040125/gcc/system.h egcc-CVS20040125/gcc/system.h
--- orig/egcc-CVS20040125/gcc/system.h	Wed Jan 21 20:02:40 2004
+++ egcc-CVS20040125/gcc/system.h	Sun Jan 25 21:09:32 2004
@@ -486,16 +486,21 @@ extern int snprintf (char *, size_t, con
 #define HOST_BIT_BUCKET "/dev/null"
 #endif
 
-/* Be conservative and only use enum bitfields with GCC.  Likewise for
-   char bitfields.
+/* Be conservative and only use enum bitfields with GCC.
    FIXME: provide a complete autoconf test for buggy enum bitfields.  */
 
 #if (GCC_VERSION > 2000)
 #define ENUM_BITFIELD(TYPE) __extension__ enum TYPE
-#define CHAR_BITFIELD __extension__ unsigned char
 #else
 #define ENUM_BITFIELD(TYPE) unsigned int
-#define CHAR_BITFIELD unsigned int
+#endif
+
+/* We only use bool bitfields with gcc3.  Some supposedly C99
+   compilers don't handle them correctly.  */
+#if (GCC_VERSION >= 3000)
+#define BOOL_BITFIELD _Bool
+#else
+#define BOOL_BITFIELD unsigned int
 #endif
 
 #ifndef offsetof
diff -rup orig/egcc-CVS20040125/gcc/c-decl.c egcc-CVS20040125/gcc/c-decl.c
--- orig/egcc-CVS20040125/gcc/c-decl.c	Sun Jan 25 20:01:08 2004
+++ egcc-CVS20040125/gcc/c-decl.c	Sun Jan 25 21:07:50 2004
@@ -230,21 +230,21 @@ struct c_scope GTY(())
 
   /* True if we are currently filling this scope with parameter
      declarations.  */
-  bool parm_flag : 1;
+  BOOL_BITFIELD parm_flag : 1;
 
   /* True if we already complained about forward parameter decls
      in this scope.  This prevents double warnings on
      foo (int a; int b; ...)  */
-  bool warned_forward_parm_decls : 1;
+  BOOL_BITFIELD warned_forward_parm_decls : 1;
 
   /* True if this is the outermost block scope of a function body.
      This scope contains the parameters, the local variables declared
      in the outermost block, and all the labels (except those in
      nested functions, or declared at block scope with __label__).  */
-  bool function_body : 1;
+  BOOL_BITFIELD function_body : 1;
 
   /* True means make a BLOCK for this scope no matter what.  */
-  bool keep : 1;
+  BOOL_BITFIELD keep : 1;
 };
 
 /* The scope currently in effect.  */
diff -rup orig/egcc-CVS20040125/gcc/cp/cp-tree.h egcc-CVS20040125/gcc/cp/cp-tree.h
--- orig/egcc-CVS20040125/gcc/cp/cp-tree.h	Mon Jan 19 20:02:20 2004
+++ egcc-CVS20040125/gcc/cp/cp-tree.h	Sun Jan 25 21:07:50 2004
@@ -794,7 +794,7 @@ struct language_function GTY(())
   int in_base_initializer;
 
   /* True if this function can throw an exception.  */
-  bool can_throw : 1;
+  BOOL_BITFIELD can_throw : 1;
 
   struct named_label_use_list *x_named_label_uses;
   struct named_label_list *x_named_labels;
@@ -1013,15 +1013,15 @@ enum languages { lang_c, lang_cplusplus,
    are put in this structure to save space.  */
 struct lang_type_header GTY(())
 {
-  CHAR_BITFIELD is_lang_type_class : 1;
+  BOOL_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;
+  BOOL_BITFIELD has_type_conversion : 1;
+  BOOL_BITFIELD has_init_ref : 1;
+  BOOL_BITFIELD has_default_ctor : 1;
+  BOOL_BITFIELD uses_multiple_inheritance : 1;
+  BOOL_BITFIELD const_needs_init : 1;
+  BOOL_BITFIELD ref_needs_init : 1;
+  BOOL_BITFIELD has_const_assign_ref : 1;
 };
 
 /* This structure provides additional information above and beyond
diff -rup orig/egcc-CVS20040125/gcc/cp/name-lookup.h egcc-CVS20040125/gcc/cp/name-lookup.h
--- orig/egcc-CVS20040125/gcc/cp/name-lookup.h	Thu Jan 15 20:01:30 2004
+++ egcc-CVS20040125/gcc/cp/name-lookup.h	Sun Jan 25 21:07:50 2004
@@ -215,7 +215,7 @@ struct cp_binding_level GTY(())
 
     /* True if this scope is an SK_TEMPLATE_SPEC scope.  This field is
        only valid if KIND == SK_TEMPLATE_PARMS.  */
-    bool explicit_spec_p : 1;
+    BOOL_BITFIELD explicit_spec_p : 1;
 
     /* true means make a BLOCK for this level regardless of all else.  */
     unsigned keep : 1;
diff -rup orig/egcc-CVS20040125/gcc/gengtype-lex.l egcc-CVS20040125/gcc/gengtype-lex.l
--- orig/egcc-CVS20040125/gcc/gengtype-lex.l	Wed Dec 10 20:01:24 2003
+++ egcc-CVS20040125/gcc/gengtype-lex.l	Sun Jan 25 21:07:50 2004
@@ -47,7 +47,7 @@ update_lineno (const char *l, size_t len
 
 ID	[[:alpha:]_][[:alnum:]_]*
 WS	[[:space:]]+
-IWORD	short|long|(un)?signed|char|int|HOST_WIDE_INT|bool|size_t|CHAR_BITFIELD
+IWORD	short|long|(un)?signed|char|int|HOST_WIDE_INT|bool|size_t|BOOL_BITFIELD
 ITYPE	{IWORD}({WS}{IWORD})*
 
 %x in_struct in_struct_comment in_comment in_yacc_escape


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]