Skip to content

Commit cde47ea

Browse files
committed
test: add case for UFCS arguments
1 parent 280c96a commit cde47ea

5 files changed

+152
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
print_res: (x: i32) -> i32 = {
2+
std::cout << x;
3+
if (x == 9) { std::cout << '\n'; }
4+
return x;
5+
}
6+
t: type = {
7+
f: (inout this) -> i32 = print_res(0);
8+
f: (inout this, x) -> i32 = print_res(1);
9+
f: <T> (inout this) -> i32 = print_res(2);
10+
f: <T>(inout this, x) -> i32 = print_res(3);
11+
f: <T, U>(inout this, x, y) -> i32 = print_res(4);
12+
}
13+
f: (o: t) -> i32 = print_res(5);
14+
f: (o: t, x) -> i32 = print_res(6);
15+
f: <T> (o: t) -> i32 = print_res(7);
16+
f: <T> (o: t, x) -> i32 = print_res(8);
17+
f: <T, U> (o: t, x, y) -> i32 = print_res(9);
18+
m: t = ();
19+
n: const t = ();
20+
a: <T, U> _ == n;
21+
_: i32 = m.f();
22+
_: i32 = m.f(0);
23+
_: i32 = m.f<t>();
24+
_: i32 = m.f<t>(0);
25+
_: i32 = m.f<t, t>(0, 0);
26+
_: i32 = n.f();
27+
_: i32 = n.f(0);
28+
_: i32 = n.f<t>();
29+
_: i32 = n.f<t>(0);
30+
_: i32 = n.f<t, t>(0, 0);
31+
_: i32 = a<t, t>.f<t, t>(0, 0);
32+
main: () = {
33+
_: i32 = m.f();
34+
_: i32 = m.f(0);
35+
_: i32 = m.f<t>();
36+
_: i32 = m.f<t>(0);
37+
_: i32 = m.f<t, t>(0, 0);
38+
_: i32 = n.f();
39+
_: i32 = n.f(0);
40+
_: i32 = n.f<t>();
41+
_: i32 = n.f<t>(0);
42+
_: i32 = n.f<t, t>(0, 0);
43+
_: i32 = a<t, t>.f<t, t>(0, 0);
44+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
0123456789
2+
9
3+
0123456789
4+
9

regression-tests/test-results/gcc-13/pure2-bugfix-for-ufcs-arguments.cpp.output

Whitespace-only changes.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,102 @@
1+
2+
#define CPP2_USE_MODULES Yes
3+
4+
//=== Cpp2 type declarations ====================================================
5+
6+
7+
#include "cpp2util.h"
8+
9+
10+
#line 6 "pure2-bugfix-for-ufcs-arguments.cpp2"
11+
class t;
12+
13+
14+
//=== Cpp2 type definitions and function declarations ===========================
15+
16+
#line 1 "pure2-bugfix-for-ufcs-arguments.cpp2"
17+
[[nodiscard]] auto print_res(cpp2::in<cpp2::i32> x) -> cpp2::i32;
18+
19+
20+
#line 6 "pure2-bugfix-for-ufcs-arguments.cpp2"
21+
class t {
22+
public: [[nodiscard]] auto f() -> cpp2::i32;
23+
public: [[nodiscard]] auto f(auto const& x) -> cpp2::i32;
24+
public: template<typename T> [[nodiscard]] auto f() -> cpp2::i32;
25+
public: template<typename T> [[nodiscard]] auto f(auto const& x) -> cpp2::i32;
26+
public: template<typename T, typename U> [[nodiscard]] auto f(auto const& x, auto const& y) -> cpp2::i32;
27+
28+
public: t() = default;
29+
public: t(t const&) = delete; /* No 'that' constructor, suppress copy */
30+
public: auto operator=(t const&) -> void = delete;
31+
#line 12 "pure2-bugfix-for-ufcs-arguments.cpp2"
32+
};
33+
[[nodiscard]] auto f(cpp2::in<t> o) -> cpp2::i32;
34+
[[nodiscard]] auto f(cpp2::in<t> o, auto const& x) -> cpp2::i32;
35+
template<typename T> [[nodiscard]] auto f(cpp2::in<t> o) -> cpp2::i32;
36+
template<typename T> [[nodiscard]] auto f(cpp2::in<t> o, auto const& x) -> cpp2::i32;
37+
template<typename T, typename U> [[nodiscard]] auto f(cpp2::in<t> o, auto const& x, auto const& y) -> cpp2::i32;
38+
extern t m;
39+
extern t const n;
40+
template<typename T, typename U> auto const& a = n;
41+
extern cpp2::i32 auto_21_1;
42+
extern cpp2::i32 auto_22_1;
43+
extern cpp2::i32 auto_23_1;
44+
extern cpp2::i32 auto_24_1;
45+
extern cpp2::i32 auto_25_1;
46+
extern cpp2::i32 auto_26_1;
47+
extern cpp2::i32 auto_27_1;
48+
extern cpp2::i32 auto_28_1;
49+
extern cpp2::i32 auto_29_1;
50+
extern cpp2::i32 auto_30_1;
51+
extern cpp2::i32 auto_31_1;
52+
auto main() -> int;
53+
54+
55+
//=== Cpp2 function definitions =================================================
56+
57+
#line 1 "pure2-bugfix-for-ufcs-arguments.cpp2"
58+
[[nodiscard]] auto print_res(cpp2::in<cpp2::i32> x) -> cpp2::i32{
59+
std::cout << x;
60+
if ((x==9)) {std::cout << '\n'; }
61+
return x;
62+
}
63+
64+
[[nodiscard]] auto t::f() -> cpp2::i32 { return print_res(0); }
65+
[[nodiscard]] auto t::f(auto const& x) -> cpp2::i32 { return print_res(1); }
66+
template<typename T> [[nodiscard]] auto t::f() -> cpp2::i32 { return print_res(2); }
67+
template<typename T> [[nodiscard]] auto t::f(auto const& x) -> cpp2::i32 { return print_res(3); }
68+
template<typename T, typename U> [[nodiscard]] auto t::f(auto const& x, auto const& y) -> cpp2::i32 { return print_res(4); }
69+
70+
[[nodiscard]] auto f(cpp2::in<t> o) -> cpp2::i32 { return print_res(5); }
71+
[[nodiscard]] auto f(cpp2::in<t> o, auto const& x) -> cpp2::i32 { return print_res(6); }
72+
template<typename T> [[nodiscard]] auto f(cpp2::in<t> o) -> cpp2::i32 { return print_res(7); }
73+
template<typename T> [[nodiscard]] auto f(cpp2::in<t> o, auto const& x) -> cpp2::i32 { return print_res(8); }
74+
template<typename T, typename U> [[nodiscard]] auto f(cpp2::in<t> o, auto const& x, auto const& y) -> cpp2::i32 { return print_res(9); }
75+
t m {};
76+
t const n {};
77+
78+
cpp2::i32 auto_21_1 {CPP2_UFCS(,,(f),(m),())};
79+
cpp2::i32 auto_22_1 {CPP2_UFCS(,,(f),(m),(,), 0)};
80+
cpp2::i32 auto_23_1 {CPP2_UFCS(,template,(f<t>),(m),())};
81+
cpp2::i32 auto_24_1 {CPP2_UFCS(,template,(f<t>),(m),(,), 0)};
82+
cpp2::i32 auto_25_1 {CPP2_UFCS(,template,(f<t,t>),(m),(,), 0, 0)};
83+
cpp2::i32 auto_26_1 {CPP2_UFCS(,,(f),(n),())};
84+
cpp2::i32 auto_27_1 {CPP2_UFCS(,,(f),(n),(,), 0)};
85+
cpp2::i32 auto_28_1 {CPP2_UFCS(,template,(f<t>),(n),())};
86+
cpp2::i32 auto_29_1 {CPP2_UFCS(,template,(f<t>),(n),(,), 0)};
87+
cpp2::i32 auto_30_1 {CPP2_UFCS(,template,(f<t,t>),(n),(,), 0, 0)};
88+
cpp2::i32 auto_31_1 {CPP2_UFCS(,template,(f<t,t>),(a<t,t>),(,), 0, 0)};
89+
auto main() -> int{
90+
cpp2::i32 auto_33_3 {CPP2_UFCS(&,,(f),(m),())};
91+
cpp2::i32 auto_34_3 {CPP2_UFCS(&,,(f),(m),(,), 0)};
92+
cpp2::i32 auto_35_3 {CPP2_UFCS(&,template,(f<t>),(m),())};
93+
cpp2::i32 auto_36_3 {CPP2_UFCS(&,template,(f<t>),(m),(,), 0)};
94+
cpp2::i32 auto_37_3 {CPP2_UFCS(&,template,(f<t,t>),(m),(,), 0, 0)};
95+
cpp2::i32 auto_38_3 {CPP2_UFCS(&,,(f),(n),())};
96+
cpp2::i32 auto_39_3 {CPP2_UFCS(&,,(f),(n),(,), 0)};
97+
cpp2::i32 auto_40_3 {CPP2_UFCS(&,template,(f<t>),(n),())};
98+
cpp2::i32 auto_41_3 {CPP2_UFCS(&,template,(f<t>),(n),(,), 0)};
99+
cpp2::i32 auto_42_3 {CPP2_UFCS(&,template,(f<t,t>),(n),(,), 0, 0)};
100+
cpp2::i32 auto_43_3 {CPP2_UFCS(&,template,(f<t,t>),(a<t,t>),(,), 0, 0)};
101+
}
102+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
pure2-bugfix-for-ufcs-arguments.cpp2... ok (all Cpp2, passes safety checks)
2+

0 commit comments

Comments
 (0)