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