diff options
| author | Matthias Krüger <matthias.krueger@famsik.de> | 2022-12-14 10:31:08 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-12-14 10:31:08 +0100 |
| commit | 01469693de40f8318766904278f3ad21f7a7db75 (patch) | |
| tree | ea64e10aa39f70a47a7559f4c6cf9d45554ede28 /compiler/rustc_codegen_llvm/src | |
| parent | 939880ab7275a779e2a970caa4ca0fa1b7c25b37 (diff) | |
| parent | 5573485354aa618e22564f0fc332378c4ef9373a (diff) | |
| download | rust-01469693de40f8318766904278f3ad21f7a7db75.tar.gz rust-01469693de40f8318766904278f3ad21f7a7db75.zip | |
Rollup merge of #105611 - BoxyUwU:more_granular_placeholderification, r=wesleywiser
fold instead of obliterating args
Fixes #105608
we call `const_eval_resolve` on the following constant:
```
def: playground::{impl#0}::and::{constant#0},
substs: [
ConstKind::Unevaluated {
def: playground::{impl#0}::and::{constant#0},
substs: [
ConstKind::Value(0x0),
_,
]
}
_,
],
```
when expanded out to `ConstKind::Expr` there are no infer vars so we attempt to evaluate it after replacing infer vars with garbage, however the current logic for replacing with garbage replaces _the whole arg containing the infer var_ rather than just the infer var. This means that after garbage replacement has occured we attempt to evaluate:
```
def: playground::{impl#0}::and::{constant#0},
substs: [
PLACEHOLDER,
PLACEHOLDER,
],
```
Which then leads to ctfe being unable to evaluate the const. With this PR we attempt to evaluate:
```
def: playground::{impl#0}::and::{constant#0},
substs: [
ConstKind::Unevaluated {
def: playground::{impl#0}::and::{constant#0},
substs: [
ConstKind::Value(0x0),
PLACEHOLDER,
]
}
PLACEHOLDER,
],
```
which ctfe _can_ handle.
I am not entirely sure why this function is supposed to replace params with placeholders rather than just inference vars :thinking:
Diffstat (limited to 'compiler/rustc_codegen_llvm/src')
0 files changed, 0 insertions, 0 deletions
