[clang] [Clang] Implement diagnostics for why `std::is_standard_layout` is false (PR #144161)

Samarth Narang via cfe-commits cfe-commits at lists.llvm.org
Thu Jun 19 02:29:41 PDT 2025


================
@@ -488,3 +488,83 @@ static_assert(__is_trivially_copyable(S12));
 // expected-note at -1 {{'S12' is not trivially copyable}} \
 // expected-note@#tc-S12 {{'S12' defined here}}
 }
+
+namespace standard_layout_tests {
+struct WithVirtual { // #sl-Virtual
+    virtual void foo();
+};
+static_assert(__is_standard_layout(WithVirtual));
+// expected-error at -1 {{static assertion failed due to requirement '__is_standard_layout(standard_layout_tests::WithVirtual)'}} \
+// expected-note at -1 {{'WithVirtual' is not standard-layout}} \
+// expected-note at -1 {{because it has virtual functions}} \
+// expected-note@#sl-Virtual {{'WithVirtual' defined here}}
+
+struct MixedAccess { // #sl-Mixed
+public:
+    int a;
+private:
+    int b;
+};
+static_assert(__is_standard_layout(MixedAccess));
+// expected-error at -1 {{static assertion failed due to requirement '__is_standard_layout(standard_layout_tests::MixedAccess)'}} \
+// expected-note at -1 {{'MixedAccess' is not standard-layout}} \
+// expected-note at -1 {{because it has mixed access specifiers}} \
+// expected-note@#sl-Mixed {{'MixedAccess' defined here}}
----------------
snarang181 wrote:

Added these diagnostics.

https://github.com/llvm/llvm-project/pull/144161


More information about the cfe-commits mailing list