Skip to content

Commit 730d86f

Browse files
authored
Rollup merge of rust-lang#88782 - asquared31415:issue-79559, r=cjgillot
Fix ICE when `start` lang item has wrong generics In my previous pr rust-lang#87875 I missed the requirements on the `start` lang item due to its relative difficulty to test and opting for more conservative estimates. This fixes that by updating the requirement to be exactly one generic type. The `start` lang item should have exactly one generic type for the return type of the `main` fn ptr passed to it. I believe having zero would previously *sometimes* compile (often with the use of `fn() -> ()` as the fn ptr but it was likely UB to call if the return type of `main` was not `()` as far as I know) however it also sometimes would not for various errors including ICEs and LLVM errors depending on exact situations. Having more than 1 generic has always failed with an ICE because only the one generic type is expected and provided. Fixes rust-lang#79559, fixes rust-lang#73584, fixes rust-lang#83117 (all duplicates) Relevant to rust-lang#9307 r? ````@cjgillot````
2 parents 23d5457 + 87ba8d2 commit 730d86f

File tree

2 files changed

+4
-3
lines changed

2 files changed

+4
-3
lines changed

tests/ui/def_id_nocore.rs

+3-2
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,12 @@ pub trait Copy {}
1515
pub unsafe trait Freeze {}
1616

1717
#[lang = "start"]
18-
#[start]
19-
fn start(_argc: isize, _argv: *const *const u8) -> isize {
18+
fn start<T>(_main: fn() -> T, _argc: isize, _argv: *const *const u8) -> isize {
2019
0
2120
}
2221

22+
fn main() {}
23+
2324
struct A;
2425

2526
impl A {

tests/ui/def_id_nocore.stderr

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
error: methods called `as_*` usually take `self` by reference or `self` by mutable reference
2-
--> $DIR/def_id_nocore.rs:26:19
2+
--> $DIR/def_id_nocore.rs:27:19
33
|
44
LL | pub fn as_ref(self) -> &'static str {
55
| ^^^^

0 commit comments

Comments
 (0)