<div dir="ltr"><br><div class="gmail_extra"><br><div class="gmail_quote">On Mon, Sep 14, 2015 at 6:03 PM, Richard Smith <span dir="ltr"><<a href="mailto:richard@metafoo.co.uk" target="_blank">richard@metafoo.co.uk</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div dir="ltr"><div class="gmail_extra"><div class="gmail_quote"><div><div class="h5">On Mon, Sep 14, 2015 at 6:00 PM, David Majnemer via cfe-commits <span dir="ltr"><<a href="mailto:cfe-commits@lists.llvm.org" target="_blank">cfe-commits@lists.llvm.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">Author: majnemer<br>
Date: Mon Sep 14 20:00:55 2015<br>
New Revision: 247651<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=247651&view=rev" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project?rev=247651&view=rev</a><br>
Log:<br>
[MS ABI] Overwide bool bitfields should be permitted<br>
<br>
Overwide bool bitfields have eight bits of storage size, make sure we<br>
take the padding into account when determining whether or not they are<br>
problematic.<br>
<br>
Modified:<br>
    cfe/trunk/lib/Sema/SemaDecl.cpp<br>
    cfe/trunk/test/SemaCXX/ms_wide_bitfield.cpp<br>
<br>
Modified: cfe/trunk/lib/Sema/SemaDecl.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaDecl.cpp?rev=247651&r1=247650&r2=247651&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaDecl.cpp?rev=247651&r1=247650&r2=247651&view=diff</a><br>
==============================================================================<br>
--- cfe/trunk/lib/Sema/SemaDecl.cpp (original)<br>
+++ cfe/trunk/lib/Sema/SemaDecl.cpp Mon Sep 14 20:00:55 2015<br>
@@ -12626,11 +12626,14 @@ ExprResult Sema::VerifyBitField(SourceLo<br>
   }<br>
<br>
   if (!FieldTy->isDependentType()) {<br>
-    uint64_t TypeWidth = Context.getIntWidth(FieldTy);<br>
+    bool UseMSBitfieldSemantics =<br>
+        IsMsStruct || Context.getTargetInfo().getCXXABI().isMicrosoft();<br>
+    bool UseStorageSize = getLangOpts().CPlusPlus && UseMSBitfieldSemantics;<br>
+    uint64_t TypeWidth = UseStorageSize ? Context.getTypeSize(FieldTy)<br>
+                                        : Context.getIntWidth(FieldTy);<br>
     if (Value.ugt(TypeWidth)) {<br></blockquote><div><br></div></div></div><div>It looks like you've lost the warning on >1-bit bit-fields in C++ mode, for the MS record layout case.</div></div></div></div></blockquote><div><br></div><div>Thanks, restored in r247659.</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div dir="ltr"><div class="gmail_extra"><div class="gmail_quote"><div><div class="h5"><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
-      if (!getLangOpts().CPlusPlus || IsMsStruct ||<br>
-          Context.getTargetInfo().getCXXABI().isMicrosoft()) {<br>
-        if (FieldName)<br>
+      if (!getLangOpts().CPlusPlus || UseMSBitfieldSemantics) {<br>
+        if (FieldName)<br>
           return Diag(FieldLoc, diag::err_bitfield_width_exceeds_type_width)<br>
             << FieldName << (unsigned)Value.getZExtValue()<br>
             << (unsigned)TypeWidth;<br>
<br>
Modified: cfe/trunk/test/SemaCXX/ms_wide_bitfield.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaCXX/ms_wide_bitfield.cpp?rev=247651&r1=247650&r2=247651&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaCXX/ms_wide_bitfield.cpp?rev=247651&r1=247650&r2=247651&view=diff</a><br>
==============================================================================<br>
--- cfe/trunk/test/SemaCXX/ms_wide_bitfield.cpp (original)<br>
+++ cfe/trunk/test/SemaCXX/ms_wide_bitfield.cpp Mon Sep 14 20:00:55 2015<br>
@@ -3,8 +3,8 @@<br>
 struct A {<br>
   char a : 9; // expected-error{{width of bit-field 'a' (9 bits) exceeds width of its type (8 bits)}}<br>
   int b : 33; // expected-error{{width of bit-field 'b' (33 bits) exceeds width of its type (32 bits)}}<br>
-  bool c : 9; // expected-error{{width of bit-field 'c' (9 bits) exceeds width of its type (1 bit)}}<br>
-  bool d : 3; // expected-error{{width of bit-field 'd' (3 bits) exceeds width of its type (1 bit)}}<br>
+  bool c : 9; // expected-error{{width of bit-field 'c' (9 bits) exceeds width of its type (8 bits)}}<br>
+  bool d : 3;<br>
 };<br>
<br>
 int a[sizeof(A) == 1 ? 1 : -1];<br>
<br>
<br>
_______________________________________________<br>
cfe-commits mailing list<br>
<a href="mailto:cfe-commits@lists.llvm.org" target="_blank">cfe-commits@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits</a><br>
</blockquote></div></div></div><br></div></div>
</blockquote></div><br></div></div>