annotate gcc/testsuite/g++.dg/abi/no_unique_address1.C @ 131:84e7813d76e9

gcc-8.2
author mir3636
date Thu, 25 Oct 2018 07:37:49 +0900
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
131
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
1 // { dg-do run { target c++2a } }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
2
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
3 struct B { };
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
4
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
5 struct A
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
6 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
7 [[no_unique_address]] B b;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
8 int i;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
9 };
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
10
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
11 struct C
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
12 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
13 B b;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
14 int i;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
15 };
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
16
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
17 struct D: B { };
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
18
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
19 struct E
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
20 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
21 B b [[no_unique_address]];
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
22 D d [[no_unique_address]];
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
23 };
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
24
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
25 constexpr bool same (void *x, void *y) { return x == y; }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
26
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
27 int main()
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
28 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
29 A a;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
30 if (!same(&a.b, &a.i))
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
31 __builtin_abort();
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
32 C c;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
33 if (same(&c.b, &c.i))
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
34 __builtin_abort();
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
35 E e;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
36 if (same (&e.b, &e.d))
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
37 __builtin_abort();
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
38 }