Skip to content

Commit 6f78e62

Browse files
committed
Delegation: fix ICE on recursive delegation
1 parent 06194ca commit 6f78e62

File tree

4 files changed

+29
-5
lines changed

4 files changed

+29
-5
lines changed

compiler/rustc_ast_lowering/src/delegation.rs

+3-1
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,9 @@ impl<'hir> LoweringContext<'_, 'hir> {
6767
return false;
6868
};
6969
if let Some(local_sig_id) = sig_id.as_local() {
70-
self.resolver.delegation_fn_sigs[&local_sig_id].has_self
70+
// The value may be missing due to recursive delegation.
71+
// Error will be emmited later during HIR ty lowering.
72+
self.resolver.delegation_fn_sigs.get(&local_sig_id).map_or(false, |sig| sig.has_self)
7173
} else {
7274
match self.tcx.def_kind(sig_id) {
7375
DefKind::Fn => false,

tests/crashes/124347.rs

-4
This file was deleted.
+12
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
#![feature(fn_delegation)]
2+
#![allow(incomplete_features)]
3+
4+
trait Trait {
5+
reuse Trait::foo { &self.0 }
6+
//~^ ERROR recursive delegation is not supported yet
7+
}
8+
9+
reuse foo;
10+
//~^ ERROR recursive delegation is not supported yet
11+
12+
fn main() {}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
error: recursive delegation is not supported yet
2+
--> $DIR/ice-issue-124347.rs:5:18
3+
|
4+
LL | reuse Trait::foo { &self.0 }
5+
| ^^^ callee defined here
6+
7+
error: recursive delegation is not supported yet
8+
--> $DIR/ice-issue-124347.rs:9:7
9+
|
10+
LL | reuse foo;
11+
| ^^^ callee defined here
12+
13+
error: aborting due to 2 previous errors
14+

0 commit comments

Comments
 (0)