diff options
| author | bors <bors@rust-lang.org> | 2020-04-29 13:59:22 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2020-04-29 13:59:22 +0000 |
| commit | 36d13cb01ba6a0a9b7c13ca2b9461a111cb3e395 (patch) | |
| tree | c575e226d1ccd83b833151e1dd3cd8e5e18d3d43 /library/std/src/sys/unix/stack_overflow.rs | |
| parent | e91aebc1a3835b9b420da0c021e211175a724b8d (diff) | |
| parent | e4c650c00dfdf2581c54688a6ff98ebe006c80b1 (diff) | |
| download | rust-36d13cb01ba6a0a9b7c13ca2b9461a111cb3e395.tar.gz rust-36d13cb01ba6a0a9b7c13ca2b9461a111cb3e395.zip | |
Auto merge of #67343 - ecstatic-morse:qualif-structural-match, r=pnkfelix
Const qualification for `StructuralEq` Furthers #62411. Resolves #62614. The goal of this PR is to implement the logic in #67088 on the MIR instead of the HIR. It uses the `Qualif` trait to track `StructuralPartialEq`/`StructuralEq` in the final value of a `const`. Then, if we encounter a constant during HAIR lowering whose value may not be structurally matchable, we emit the `indirect_structural_match` lint. This PR contains all the tests present in #67088 and emits the proper warnings for the corner cases. This PR does not handle #65466, which would require that we be [more aggressive](https://github.com/rust-lang/rust/blob/42abbd8878d3b67238f3611b0587c704ba94f39c/src/librustc_mir_build/hair/pattern/const_to_pat.rs#L126-L130) when checking matched types for `PartialEq`. I think that should be done separately. Because this works on MIR and uses dataflow, this PR should accept more cases than #67088. Notably, the qualifs in the final value of a const are encoded cross-crate, so matching on a constant whose value is defined in another crate to be `Option::<TyWithCustomEqImpl>::None` should work. Additionally, if a `const` has branching/looping, we will only emit the warning if any possible control flow path could result in a type with a custom `PartialEq` impl ending up as the final value of a `const`. I'm not sure how #67088 handled this. AFAIK, it's not settled that these are the semantics we actually want: it's just how the `Qualif` framework happens to work. If the cross-crate part is undesirable, it would be quite easy to change the result of `mir_const_qualif().custom_eq` to `true` before encoding it in the crate metadata. This way, other crates would have to assume that all publicly exported constants may not be safe for matching. r? @pnkfelix cc @eddyb
Diffstat (limited to 'library/std/src/sys/unix/stack_overflow.rs')
0 files changed, 0 insertions, 0 deletions
