This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
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