Commit b89c5a7b by Mark Mitchell Committed by Mark Mitchell

decl.c (grokdeclarator): Don't treat arbitrary types as unsigned just because…

decl.c (grokdeclarator): Don't treat arbitrary types as unsigned just because flag_signed_bitfields is false.

	* decl.c (grokdeclarator): Don't treat arbitrary types as unsigned
	just because flag_signed_bitfields is false.

From-SVN: r27328
parent 5403593a
1999-06-03 Mark Mitchell <mark@codesourcery.com>
* decl.c (grokdeclarator): Don't treat arbitrary types as unsigned
just because flag_signed_bitfields is false.
1999-06-03 Nathan Sidwell <nathan@acm.org>
* semantics.c (begin_class_definition): Update the struct's
......
......@@ -9921,14 +9921,24 @@ grokdeclarator (declarator, declspecs, decl_context, initialized, attrlist)
/* Decide whether an integer type is signed or not.
Optionally treat bitfields as signed by default. */
if (RIDBIT_SETP (RID_UNSIGNED, specbits)
|| (bitfield && ! flag_signed_bitfields
&& (explicit_int || defaulted_int || explicit_char
/* A typedef for plain `int' without `signed'
can be controlled just like plain `int'. */
|| ! (typedef_decl != NULL_TREE
&& C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl)))
&& TREE_CODE (type) != ENUMERAL_TYPE
&& RIDBIT_NOTSETP (RID_SIGNED, specbits)))
/* [class.bit]
It is implementation-defined whether a plain (neither
explicitly signed or unsigned) char, short, int, or long
bit-field is signed or unsigned.
Naturally, we extend this to long long as well. Note that
this does not include wchar_t. */
|| (bitfield && !flag_signed_bitfields
&& RIDBIT_NOTSETP (RID_SIGNED, specbits)
/* A typedef for plain `int' without `signed' can be
controlled just like plain `int', but a typedef for
`signed int' cannot be so controlled. */
&& !(typedef_decl
&& C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl)))
&& (TREE_CODE (type) == INTEGER_TYPE
|| TREE_CODE (type) == CHAR_TYPE)
&& !same_type_p (TYPE_MAIN_VARIANT (type), wchar_type_node))
{
if (longlong)
type = long_long_unsigned_type_node;
......
// Origin: Mark Mitchell <mark@codesourcery.com>
// Special g++ Options: -funsigned-bitfields
typedef int i[4];
struct S {
i j:12; // ERROR - array type as bitfield
};
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment