r247651 - [MS ABI] Overwide bool bitfields should be permitted

David Majnemer via cfe-commits cfe-commits at lists.llvm.org
Mon Sep 14 19:38:53 PDT 2015


On Mon, Sep 14, 2015 at 6:03 PM, Richard Smith <richard at metafoo.co.uk>
wrote:

> On Mon, Sep 14, 2015 at 6:00 PM, David Majnemer via cfe-commits <
> cfe-commits at lists.llvm.org> wrote:
>
>> Author: majnemer
>> Date: Mon Sep 14 20:00:55 2015
>> New Revision: 247651
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=247651&view=rev
>> Log:
>> [MS ABI] Overwide bool bitfields should be permitted
>>
>> Overwide bool bitfields have eight bits of storage size, make sure we
>> take the padding into account when determining whether or not they are
>> problematic.
>>
>> Modified:
>>     cfe/trunk/lib/Sema/SemaDecl.cpp
>>     cfe/trunk/test/SemaCXX/ms_wide_bitfield.cpp
>>
>> Modified: cfe/trunk/lib/Sema/SemaDecl.cpp
>> URL:
>> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaDecl.cpp?rev=247651&r1=247650&r2=247651&view=diff
>>
>> ==============================================================================
>> --- cfe/trunk/lib/Sema/SemaDecl.cpp (original)
>> +++ cfe/trunk/lib/Sema/SemaDecl.cpp Mon Sep 14 20:00:55 2015
>> @@ -12626,11 +12626,14 @@ ExprResult Sema::VerifyBitField(SourceLo
>>    }
>>
>>    if (!FieldTy->isDependentType()) {
>> -    uint64_t TypeWidth = Context.getIntWidth(FieldTy);
>> +    bool UseMSBitfieldSemantics =
>> +        IsMsStruct || Context.getTargetInfo().getCXXABI().isMicrosoft();
>> +    bool UseStorageSize = getLangOpts().CPlusPlus &&
>> UseMSBitfieldSemantics;
>> +    uint64_t TypeWidth = UseStorageSize ? Context.getTypeSize(FieldTy)
>> +                                        : Context.getIntWidth(FieldTy);
>>      if (Value.ugt(TypeWidth)) {
>>
>
> It looks like you've lost the warning on >1-bit bit-fields in C++ mode,
> for the MS record layout case.
>

Thanks, restored in r247659.


>
>
>> -      if (!getLangOpts().CPlusPlus || IsMsStruct ||
>> -          Context.getTargetInfo().getCXXABI().isMicrosoft()) {
>> -        if (FieldName)
>> +      if (!getLangOpts().CPlusPlus || UseMSBitfieldSemantics) {
>> +        if (FieldName)
>>            return Diag(FieldLoc,
>> diag::err_bitfield_width_exceeds_type_width)
>>              << FieldName << (unsigned)Value.getZExtValue()
>>              << (unsigned)TypeWidth;
>>
>> Modified: cfe/trunk/test/SemaCXX/ms_wide_bitfield.cpp
>> URL:
>> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaCXX/ms_wide_bitfield.cpp?rev=247651&r1=247650&r2=247651&view=diff
>>
>> ==============================================================================
>> --- cfe/trunk/test/SemaCXX/ms_wide_bitfield.cpp (original)
>> +++ cfe/trunk/test/SemaCXX/ms_wide_bitfield.cpp Mon Sep 14 20:00:55 2015
>> @@ -3,8 +3,8 @@
>>  struct A {
>>    char a : 9; // expected-error{{width of bit-field 'a' (9 bits) exceeds
>> width of its type (8 bits)}}
>>    int b : 33; // expected-error{{width of bit-field 'b' (33 bits)
>> exceeds width of its type (32 bits)}}
>> -  bool c : 9; // expected-error{{width of bit-field 'c' (9 bits) exceeds
>> width of its type (1 bit)}}
>> -  bool d : 3; // expected-error{{width of bit-field 'd' (3 bits) exceeds
>> width of its type (1 bit)}}
>> +  bool c : 9; // expected-error{{width of bit-field 'c' (9 bits) exceeds
>> width of its type (8 bits)}}
>> +  bool d : 3;
>>  };
>>
>>  int a[sizeof(A) == 1 ? 1 : -1];
>>
>>
>> _______________________________________________
>> cfe-commits mailing list
>> cfe-commits at lists.llvm.org
>> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
>>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20150914/2460cccb/attachment.html>


More information about the cfe-commits mailing list