mirror of
git://gcc.gnu.org/git/gcc.git
synced 2024-12-20 01:49:06 +08:00
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
This commit is contained in:
parent
5403593a44
commit
b89c5a7b53
@ -1,3 +1,8 @@
|
||||
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;
|
||||
|
8
gcc/testsuite/g++.old-deja/g++.other/bitfld2.C
Normal file
8
gcc/testsuite/g++.old-deja/g++.other/bitfld2.C
Normal file
@ -0,0 +1,8 @@
|
||||
// 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
|
||||
};
|
Loading…
Reference in New Issue
Block a user