This repository was archived by the owner on May 28, 2025. It is now read-only.
forked from rust-lang/rust
-
Notifications
You must be signed in to change notification settings - Fork 6
Commit 08d46c5
authored
Unrolled build for rust-lang#133607
Rollup merge of rust-lang#133607 - WaffleLapkin:tail-call-checks, r=compiler-errors
implement checks for tail calls
Quoting the [RFC draft](https://github.com/phi-go/rfcs/blob/guaranteed-tco/text/0000-explicit-tail-calls.md):
> The argument to become is a function (or method) call, that exactly matches the function signature and calling convention of the callee. The intent is to ensure a matching ABI. Note that lifetimes may differ as long as they pass borrow checking, see [below](https://github.com/phi-go/rfcs/blob/guaranteed-tco/text/0000-explicit-tail-calls.md#return-type-coercion) for specifics on the return type.
> Tail calling closures and tail calling from closures is not allowed. This is due to the high implementation effort, see below, this restriction can be lifted by a future RFC.
> Invocations of operators were considered as valid targets but were rejected on grounds of being too error-prone. In any case, these can still be called as methods.
> Tail calling [variadic functions](https://doc.rust-lang.org/beta/unstable-book/language-features/c-variadic.html) and tail calling from variadic functions is not allowed. As support for variadic function is stabilized on a per target level, support for tail-calls regarding variadic functions would need to follow a similar approach. To avoid this complexity and to minimize implementation effort for backends, this interaction is currently not allowed but support can be added with a future RFC.
-----
The checks are implemented as a query, similarly to `check_unsafety`.
The code is cherry-picked straight out of rust-lang#112657 which was written more than a year ago, so I expect we might need to change some things ^^"File tree
30 files changed
+859
-12
lines changed- compiler
- rustc_middle/src/query
- rustc_mir_build/src
- build
- tests/ui/explicit-tail-calls
30 files changed
+859
-12
lines changedOriginal file line number | Diff line number | Diff line change | |
---|---|---|---|
| |||
916 | 916 |
| |
917 | 917 |
| |
918 | 918 |
| |
919 | + | ||
920 | + | ||
921 | + | ||
922 | + | ||
923 | + | ||
924 | + | ||
919 | 925 |
| |
920 | 926 |
| |
921 | 927 |
| |
|
Original file line number | Diff line number | Diff line change | |
---|---|---|---|
| |||
50 | 50 |
| |
51 | 51 |
| |
52 | 52 |
| |
53 | + | ||
54 | + | ||
55 | + | ||
56 | + | ||
53 | 57 |
| |
54 | 58 |
| |
55 | 59 |
| |
|
0 commit comments