1 // RUN: %clang_cc1 -triple x86_64-linux-pc -DIS64 -fsyntax-only -verify -std=c++17 %s 2 // RUN: %clang_cc1 -triple x86_64-windows-pc -DIS64 -fsyntax-only -verify -std=c++17 %s 3 // RUN: %clang_cc1 -triple i386-linux-pc -fsyntax-only -verify -std=c++17 %s 4 // RUN: %clang_cc1 -triple i386-windows-pc -DW32 -fsyntax-only -verify -std=c++17 %s 5 // expected-no-diagnostics 6 7 struct Base {}; 8 struct A : virtual Base { nA9 virtual void n() {} 10 }; 11 12 auto p = &A::n; 13 static_assert(__has_unique_object_representations(decltype(p))); 14 15 struct B { 16 decltype(p) x; 17 int b; 18 #ifdef IS64 19 // required on 64 bit to fill out the tail padding. 20 int c; 21 #endif 22 }; 23 static_assert(__has_unique_object_representations(B)); 24 25 struct C { // has padding on Win32, but nothing else. 26 decltype(p) x; 27 }; 28 #ifdef W32 29 static_assert(!__has_unique_object_representations(C)); 30 #else 31 static_assert(__has_unique_object_representations(C)); 32 #endif 33