[clang] Don't emit warn_cxx_ms_struct when MSBitfields is enabled globally
authorMartin Storsjö <martin@martin.st>
Sat, 13 Jun 2020 19:29:52 +0000 (22:29 +0300)
committerMartin Storsjö <martin@martin.st>
Wed, 17 Jun 2020 06:37:07 +0000 (09:37 +0300)
commit7b3fe969927731c69ba4d8a428442e1e191f49b5
tree885fe4924d6e83d3e1f3a457d66921040921d3fd
parentbeeed368b60252178f66ab117d8a96ecdc35f60e
[clang] Don't emit warn_cxx_ms_struct when MSBitfields is enabled globally

This diagnostic (which defaults to an error, added in
95833f33bda6c92e746e0b0007b69c2c30bfc693) was intended to clearly
point out cases where the C++ ABI won't match the Microsoft C++ ABI,
for cases when this is enabled via a pragma over a region of code.

The MSVC compatible struct layout feature can also be enabled via a
compiler option (-mms-bitfields). If enabled that way, one essentially
can't compile any C++ code unless also building with
-Wno-incompatible-ms-struct (which GCC doesn't support, and projects
developed with GCC aren't setting).

For the MinGW target, it's expected that the C++ ABI won't match
the MSVC one, if this option is used for getting the struct
layout to match MSVC.

Differential Revision: https://reviews.llvm.org/D81794
clang/lib/Sema/SemaDeclCXX.cpp
clang/test/SemaCXX/ms_struct.cpp