This repository was archived by the owner on Jan 23, 2023. It is now read-only.
Commit 4f6fe87
authored
Fix issue #11446. (#11455)
This issue was a GC hole that was caused by bad IR produced by
recursivelty promoting a struct with the following form:
```
struct S
{
struct T
{
object o;
};
T t;
}
```
In this case, the recursive promotion logic created a single lclVar to
represent `S.t` and retyped it using the type of `T.o`, but did not
rewrite IR that treated the single lclVar as a struct (e.g. instances of
`lclFld/st.lclFld Vx` where `Vx` referred to the lclVar that represented
`S.t` were not rewritten an `lclVar/st.lclVar Vx`). This IR in
turn confused the incremental liveness used during code generation,
which caused the stack slot holding `o`'s value to die too early.
This change fixes codegen's incremental liveness to handle this case.1 parent ce327d5 commit 4f6fe87
2 files changed
+3
-1
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1228 | 1228 | | |
1229 | 1229 | | |
1230 | 1230 | | |
1231 | | - | |
| 1231 | + | |
1232 | 1232 | | |
1233 | 1233 | | |
1234 | 1234 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1558 | 1558 | | |
1559 | 1559 | | |
1560 | 1560 | | |
| 1561 | + | |
| 1562 | + | |
1561 | 1563 | | |
1562 | 1564 | | |
1563 | 1565 | | |
| |||
0 commit comments