diff options
Diffstat (limited to 'test/SemaCXX/ms_struct.cpp')
-rw-r--r-- | test/SemaCXX/ms_struct.cpp | 26 |
1 files changed, 23 insertions, 3 deletions
diff --git a/test/SemaCXX/ms_struct.cpp b/test/SemaCXX/ms_struct.cpp index 37fa9a7..2832b56 100644 --- a/test/SemaCXX/ms_struct.cpp +++ b/test/SemaCXX/ms_struct.cpp @@ -1,5 +1,6 @@ -// RUN: %clang_cc1 -fsyntax-only -verify -triple i686-apple-darwin9 -std=c++11 %s -// expected-no-diagnostics +// RUN: %clang_cc1 -fsyntax-only -Wno-error=incompatible-ms-struct -verify -triple i686-apple-darwin9 -std=c++11 %s +// RUN: %clang_cc1 -fsyntax-only -Wno-error=incompatible-ms-struct -verify -triple armv7-apple-darwin9 -std=c++11 %s +// RUN: %clang_cc1 -fsyntax-only -DTEST_FOR_ERROR -verify -triple armv7-apple-darwin9 -std=c++11 %s #pragma ms_struct on @@ -9,10 +10,29 @@ struct A { }; struct B : public A { +#ifdef TEST_FOR_ERROR + // expected-error@-2 {{ms_struct may not produce MSVC-compatible layouts for classes with base classes or virtual functions}} +#else + // expected-warning@-4 {{ms_struct may not produce MSVC-compatible layouts for classes with base classes or virtual functions}} +#endif unsigned long c:16; int d; B(); }; static_assert(__builtin_offsetof(B, d) == 12, - "We can't allocate the bitfield into the padding under ms_struct");
\ No newline at end of file + "We can't allocate the bitfield into the padding under ms_struct"); + +// rdar://16178895 +struct C { +#ifdef TEST_FOR_ERROR + // expected-error@-2 {{ms_struct may not produce MSVC-compatible layouts for classes with base classes or virtual functions}} +#else + // expected-warning@-4 {{ms_struct may not produce MSVC-compatible layouts for classes with base classes or virtual functions}} +#endif + virtual void foo(); + long long n; +}; + +static_assert(__builtin_offsetof(C, n) == 8, + "long long field in ms_struct should be 8-byte aligned"); |