r247651 - [MS ABI] Overwide bool bitfields should be permitted
Richard Smith via cfe-commits
cfe-commits at lists.llvm.org
Mon Sep 14 18:03:58 PDT 2015
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.
> - 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/fdc8b530/attachment.html>
More information about the cfe-commits
mailing list