annotate gcc/testsuite/g++.dg/cpp1y/lambda-mangle-1.C @ 111:04ced10e8804

gcc 7
author kono
date Fri, 27 Oct 2017 22:46:09 +0900
parents
children 84e7813d76e9
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
111
kono
parents:
diff changeset
1 // { dg-do compile { target c++14 } }
kono
parents:
diff changeset
2
kono
parents:
diff changeset
3 // PRs 78621
kono
parents:
diff changeset
4
kono
parents:
diff changeset
5 // We erroneously mangled lambda auto parms as-if template parameters (T<n>_),
kono
parents:
diff changeset
6 // rather than auto (Da). Fixed in abi version 11
kono
parents:
diff changeset
7
kono
parents:
diff changeset
8 template<typename T> class X;
kono
parents:
diff changeset
9
kono
parents:
diff changeset
10 template<typename T>
kono
parents:
diff changeset
11 T &&forward (T &v)
kono
parents:
diff changeset
12 {
kono
parents:
diff changeset
13 return static_cast<T &&> (v);
kono
parents:
diff changeset
14 }
kono
parents:
diff changeset
15
kono
parents:
diff changeset
16 template<typename T>
kono
parents:
diff changeset
17 void eat (T &v)
kono
parents:
diff changeset
18 {
kono
parents:
diff changeset
19 }
kono
parents:
diff changeset
20
kono
parents:
diff changeset
21 template<typename S, typename T>
kono
parents:
diff changeset
22 void eat (S &, T &v)
kono
parents:
diff changeset
23 {
kono
parents:
diff changeset
24 }
kono
parents:
diff changeset
25
kono
parents:
diff changeset
26 void Foo ()
kono
parents:
diff changeset
27 {
kono
parents:
diff changeset
28 auto lam = [](auto &) { };
kono
parents:
diff changeset
29 auto lam_1 = [](int &, auto &) { };
kono
parents:
diff changeset
30 auto lam_2 = [](auto &, X<int> &) { };
kono
parents:
diff changeset
31 auto lam_3 = [](auto (*)[5]) { };
kono
parents:
diff changeset
32
kono
parents:
diff changeset
33 forward (lam);
kono
parents:
diff changeset
34 forward (lam_1);
kono
parents:
diff changeset
35 forward (lam_2);
kono
parents:
diff changeset
36 forward (lam_3);
kono
parents:
diff changeset
37
kono
parents:
diff changeset
38 eat (lam);
kono
parents:
diff changeset
39 eat (lam_1);
kono
parents:
diff changeset
40 eat (lam_2);
kono
parents:
diff changeset
41 eat (lam_3);
kono
parents:
diff changeset
42
kono
parents:
diff changeset
43 // The auto lambda should mangle similarly to the non-auto one
kono
parents:
diff changeset
44 auto lambda_1 = [](float *, float *) { };
kono
parents:
diff changeset
45 auto lambda_2 = [](auto *, auto *) { };
kono
parents:
diff changeset
46 auto lambda_3 = [](auto *, auto *) { };
kono
parents:
diff changeset
47
kono
parents:
diff changeset
48 int *i;
kono
parents:
diff changeset
49
kono
parents:
diff changeset
50 eat (i, lambda_1);
kono
parents:
diff changeset
51 eat (i, lambda_2);
kono
parents:
diff changeset
52
kono
parents:
diff changeset
53 // The autos should squangle to the first one.
kono
parents:
diff changeset
54 eat (lambda_2, lambda_3);
kono
parents:
diff changeset
55 }
kono
parents:
diff changeset
56
kono
parents:
diff changeset
57 template<typename X> void Bar ()
kono
parents:
diff changeset
58 {
kono
parents:
diff changeset
59 auto lambda_1 = [](X *, float *, float *) { };
kono
parents:
diff changeset
60 auto lambda_2 = [](X *, auto *, auto *) { };
kono
parents:
diff changeset
61 auto lambda_3 = [](X *, auto *...) {};
kono
parents:
diff changeset
62
kono
parents:
diff changeset
63 int *i;
kono
parents:
diff changeset
64
kono
parents:
diff changeset
65 eat (i, lambda_1);
kono
parents:
diff changeset
66 eat (i, lambda_2);
kono
parents:
diff changeset
67 eat (i, lambda_3);
kono
parents:
diff changeset
68 }
kono
parents:
diff changeset
69
kono
parents:
diff changeset
70 void Baz ()
kono
parents:
diff changeset
71 {
kono
parents:
diff changeset
72 Bar<short> ();
kono
parents:
diff changeset
73 }
kono
parents:
diff changeset
74
kono
parents:
diff changeset
75 // { dg-final { scan-assembler "_Z7forwardIZ3FoovEUlRT_E_EOS0_S1_:" } }
kono
parents:
diff changeset
76 // { dg-final { scan-assembler "_Z7forwardIZ3FoovEUlRiRT_E0_EOS1_S2_:" } }
kono
parents:
diff changeset
77 // { dg-final { scan-assembler "_Z7forwardIZ3FoovEUlRT_R1XIiEE1_EOS0_S1_:" } }
kono
parents:
diff changeset
78 // { dg-final { scan-assembler "_Z7forwardIZ3FoovEUlPA5_T_E2_EOS0_RS0_:" } }
kono
parents:
diff changeset
79 // { dg-final { scan-assembler "_Z3eatIZ3FoovEUlRT_E_EvS1_:" } }
kono
parents:
diff changeset
80 // { dg-final { scan-assembler "_Z3eatIZ3FoovEUlRiRT_E0_EvS2_:" } }
kono
parents:
diff changeset
81 // { dg-final { scan-assembler "_Z3eatIZ3FoovEUlRT_R1XIiEE1_EvS1_:" } }
kono
parents:
diff changeset
82 // { dg-final { scan-assembler "_Z3eatIZ3FoovEUlPA5_T_E2_EvRS0_:" } }
kono
parents:
diff changeset
83 // { dg-final { scan-assembler "_Z3eatIPiZ3FoovEUlPfS1_E3_EvRT_RT0_:" } }
kono
parents:
diff changeset
84 // { dg-final { scan-assembler "_Z3eatIPiZ3FoovEUlPT_PT0_E4_EvRS1_RS3_:" } }
kono
parents:
diff changeset
85 // { dg-final { scan-assembler "_Z3eatIZ3FoovEUlPT_PT0_E4_Z3FoovEUlS1_S3_E5_EvRS0_RS2_:" } }
kono
parents:
diff changeset
86 // { dg-final { scan-assembler "_Z3eatIPiZ3BarIsEvvEUlPsPfS3_E_EvRT_RT0_:" } }
kono
parents:
diff changeset
87 // { dg-final { scan-assembler "_Z3eatIPiZ3BarIsEvvEUlPsPT_PT0_E0_EvRS3_RS5_:" } }
kono
parents:
diff changeset
88 // { dg-final { scan-assembler "_Z3eatIPiZ3BarIsEvvEUlPsPT_zE1_EvRS3_RT0_:" } }