152
|
1 // PR target/94704
|
|
2 // { dg-do compile }
|
|
3 // { dg-options "-O2 -std=c++14" }
|
|
4 // Test that for all the calls in this testcase the C++17 empty base
|
|
5 // artificial fields and [[no_unique_address]] empty class non-static
|
|
6 // data members are ignored in the decision whether passed arguments
|
|
7 // have a single floating point field.
|
|
8 // { dg-final { scan-assembler-times {(?n)^\s+ld\s+%f0,} 7 } }
|
|
9
|
|
10 struct X { };
|
|
11 struct Y { int : 0; };
|
|
12 struct Z { int : 0; Y y; };
|
|
13 struct U : public X { X q; };
|
|
14 struct A { double a; };
|
|
15 struct B : public X { double a; };
|
|
16 struct C : public Y { double a; };
|
|
17 struct D : public Z { double a; };
|
|
18 struct E : public U { double a; };
|
|
19 struct F { [[no_unique_address]] X x; double a; };
|
|
20 struct G { [[no_unique_address]] Y y; double a; };
|
|
21 struct H { [[no_unique_address]] Z z; double a; };
|
|
22 struct I { [[no_unique_address]] U u; double a; };
|
|
23 struct J { double a; [[no_unique_address]] X x; };
|
|
24 struct K { double a; [[no_unique_address]] Y y; };
|
|
25 struct L { double a; [[no_unique_address]] Z z; };
|
|
26 struct M { double a; [[no_unique_address]] U u; };
|
|
27 #define T(S, s) extern S s; extern void foo##s (S); int bar##s () { foo##s (s); return 0; }
|
|
28 // { dg-message "parameter passing for argument of type 'F' with '\\\[\\\[no_unique_address\\\]\\\]' members changed in GCC 10.1" "" { target *-*-* } .-1 }
|
|
29 // { dg-message "parameter passing for argument of type 'G' with '\\\[\\\[no_unique_address\\\]\\\]' members changed in GCC 10.1" "" { target *-*-* } .-2 }
|
|
30 // { dg-message "parameter passing for argument of type 'J' with '\\\[\\\[no_unique_address\\\]\\\]' members changed in GCC 10.1" "" { target *-*-* } .-3 }
|
|
31 // { dg-message "parameter passing for argument of type 'K' with '\\\[\\\[no_unique_address\\\]\\\]' members changed in GCC 10.1" "" { target *-*-* } .-4 }
|
|
32 T (A, a)
|
|
33 T (B, b)
|
|
34 T (C, c)
|
|
35 T (F, f)
|
|
36 T (G, g)
|
|
37 T (J, j)
|
|
38 T (K, k)
|