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