diff options
Diffstat (limited to 'test/SemaCXX/has_unique_object_reps_member_ptr.cpp')
-rw-r--r-- | test/SemaCXX/has_unique_object_reps_member_ptr.cpp | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/test/SemaCXX/has_unique_object_reps_member_ptr.cpp b/test/SemaCXX/has_unique_object_reps_member_ptr.cpp new file mode 100644 index 000000000000..b8e27f82ff38 --- /dev/null +++ b/test/SemaCXX/has_unique_object_reps_member_ptr.cpp @@ -0,0 +1,32 @@ +// RUN: %clang_cc1 -triple x86_64-linux-pc -DIS64 -fsyntax-only -verify -std=c++17 %s +// RUN: %clang_cc1 -triple x86_64-windows-pc -DIS64 -fsyntax-only -verify -std=c++17 %s +// RUN: %clang_cc1 -triple i386-linux-pc -fsyntax-only -verify -std=c++17 %s +// RUN: %clang_cc1 -triple i386-windows-pc -DW32 -fsyntax-only -verify -std=c++17 %s +// expected-no-diagnostics + +struct Base {}; +struct A : virtual Base { + virtual void n() {} +}; + +auto p = &A::n; +static_assert(__has_unique_object_representations(decltype(p))); + +struct B { + decltype(p) x; + int b; +#ifdef IS64 + // required on 64 bit to fill out the tail padding. + int c; +#endif +}; +static_assert(__has_unique_object_representations(B)); + +struct C { // has padding on Win32, but nothing else. + decltype(p) x; +}; +#ifdef W32 +static_assert(!__has_unique_object_representations(C)); +#else +static_assert(__has_unique_object_representations(C)); +#endif |