xref: /llvm-project/clang/test/SemaCXX/has_unique_object_reps_no_unique_addr.cpp (revision ad59735f9d150ebd10d4752a4468795c39f02c5d)
1 // RUN: %clang_cc1 -triple x86_64-unknown-unknown -fsyntax-only -verify -std=c++2a %s
2 //  expected-no-diagnostics
3 
4 struct Empty {};
5 
6 struct A {
7   [[no_unique_address]] Empty e;
8   char x;
9 };
10 
11 static_assert(__has_unique_object_representations(A));
12 
13 struct B {
14   char x;
15   [[no_unique_address]] Empty e;
16 };
17 
18 static_assert(__has_unique_object_representations(B));
19 
20 struct C {
21   char x;
22   [[no_unique_address]] Empty e1;
23   [[no_unique_address]] Empty e2;
24 };
25 
26 static_assert(!__has_unique_object_representations(C));
27 
28 namespace TailPaddingReuse {
29 struct A {
30 private:
31   int a;
32 
33 public:
34   char b;
35 };
36 
37 struct B {
38   [[no_unique_address]] A a;
39   char c[3];
40 };
41 } // namespace TailPaddingReuse
42 static_assert(__has_unique_object_representations(TailPaddingReuse::B));
43