summary refs log tree commit diff
path: root/compiler/rustc_middle/src/traits
AgeCommit message (Collapse)AuthorLines
2022-08-02Auto merge of #92268 - jswrenn:transmute, r=oli-obkbors-0/+4
Initial implementation of transmutability trait. *T'was the night before Christmas and all through the codebase, not a miri was stirring — no hint of `unsafe`!* This PR provides an initial, **incomplete** implementation of *[MCP 411: Lang Item for Transmutability](https://github.com/rust-lang/compiler-team/issues/411)*. The `core::mem::BikeshedIntrinsicFrom` trait provided by this PR is implemented on-the-fly by the compiler for types `Src` and `Dst` when the bits of all possible values of type `Src` are safely reinterpretable as a value of type `Dst`. What this PR provides is: - [x] [support for transmutations involving primitives](https://github.com/jswrenn/rust/tree/transmute/src/test/ui/transmutability/primitives) - [x] [support for transmutations involving arrays](https://github.com/jswrenn/rust/tree/transmute/src/test/ui/transmutability/arrays) - [x] [support for transmutations involving structs](https://github.com/jswrenn/rust/tree/transmute/src/test/ui/transmutability/structs) - [x] [support for transmutations involving enums](https://github.com/jswrenn/rust/tree/transmute/src/test/ui/transmutability/enums) - [x] [support for transmutations involving unions](https://github.com/jswrenn/rust/tree/transmute/src/test/ui/transmutability/unions) - [x] [support for weaker validity checks](https://github.com/jswrenn/rust/blob/transmute/src/test/ui/transmutability/unions/should_permit_intersecting_if_validity_is_assumed.rs) (i.e., `Assume::VALIDITY`) - [x] visibility checking What isn't yet implemented: - [ ] transmutability options passed using the `Assume` struct - [ ] [support for references](https://github.com/jswrenn/rust/blob/transmute/src/test/ui/transmutability/references.rs) - [ ] smarter error messages These features will be implemented in future PRs.
2022-08-01Store associated item defaultness in impl_defaultness.Camille GILLOT-1/+1
2022-07-29remove some manual hash stable implslcnr-25/+1
2022-07-27Initial (incomplete) implementation of transmutability trait.Jack Wrenn-0/+4
This initial implementation handles transmutations between types with specified layouts, except when references are involved. Co-authored-by: Igor null <m1el.2027@gmail.com>
2022-07-24Combine redundant obligation cause codesMichael Goulet-10/+2
2022-07-21And for patterns tooMichael Goulet-2/+5
2022-07-21Do if-expression obligation stuff less eagerlyMichael Goulet-8/+9
2022-07-20Remove unused StableMap and StableSet types from rustc_data_structuresMichael Woerister-1/+1
2022-07-16Rollup merge of #99290 - compiler-errors:revert-98794, r=lcnrMatthias Krüger-9/+1
Revert "Highlight conflicting param-env candidates" This reverts #98794, commit 08135254dcf22be0d5661ea8f75e703b29a83514. Seems to have caused an incremental compilation bug. The root cause of the incr comp bug is somewhat unrelated but is triggered by this PR, so I don't feel comfortable with having this PR in the codebase until it can be investigated further. Fixes #99233.
2022-07-15Propagate Expectation around binop typeck code to construct more precise ↵Will Crichton-1/+2
trait obligations for binops.
2022-07-15Revert "Highlight conflicting param-env candidates"Michael Goulet-9/+1
This reverts commit 08135254dcf22be0d5661ea8f75e703b29a83514.
2022-07-15remove tcx from ObligationCauseCode::spanMichael Goulet-1/+1
2022-07-15Remove some more usages of guess_head_spanMichael Goulet-6/+1
2022-07-12Move abstract const to rustc_middle::tykadmin-1/+1
2022-07-08Auto merge of #98614 - oli-obk:take_unsound_opaque_types, r=wesleywiserbors-4/+14
don't succeed `evaluate_obligation` query if new opaque types were registered fixes #98608 fixes #98604 The root cause of all this is that in type flag computation we entirely ignore nongeneric things like struct fields and the signature of function items. So if a flag had to be set for a struct if it is set for a field, that will only happen if the field is generic, as only the generic parameters are checked. I now believe we cannot use type flags to handle opaque types. They seem like the wrong tool for this. Instead, this PR replaces the previous logic by adding a new variant of `EvaluatedToOk`: `EvaluatedToOkModuloOpaqueTypes`, which says that there were some opaque types that got hidden types bound, but that binding may not have been legal (because we don't know if the opaque type was in its defining scope or not).
2022-07-08Highlight conflicting param-env candidatesMichael Goulet-1/+9
2022-07-07not knowing about opaque types is worse than not knowing about regions, make ↵Oli Scherer-2/+2
sure we don't accidentally mark something as ok-modulo-regions if there are opaque types involved
2022-07-06Update TypeVisitor pathsAlan Egerton-1/+1
2022-07-05impl TypeVisitable in type traversal macrosAlan Egerton-2/+2
2022-07-05Add #[derive(TypeVisitable)]Alan Egerton-22/+38
2022-06-30Make `evaluate_obligation` not succeed unconditionally if it registered new ↵Oli Scherer-4/+14
hidden types for opaque types
2022-06-28Fix trait object reborrow suggestionMichael Goulet-1/+1
2022-06-27Rollup merge of #98506 - compiler-errors:object-safety-suggestions, r=oli-obkMatthias Krüger-38/+29
Fix span issues in object safety suggestions Fixes #98500
2022-06-27Rollup merge of #97780 - compiler-errors:field-wfcheck-before-sized, r=jackh726Matthias Krüger-1/+1
Check ADT field is well-formed before checking it is sized Fixes #96810. There is one diagnostics regression, in [`src/test/ui/generic-associated-types/bugs/issue-80626.stderr`](https://github.com/rust-lang/rust/pull/97780/files#diff-53795946378e78a0af23a10277c628ff79091c18090fdc385801ee70c1ba6963). I am not super concerned about it, since it's GAT related. We _could_ fix it, possibly by using the `FieldSized` obligation cause code instead of `BuiltinDerivedObligation`. But that would require changing `Sized` trait confirmation and the `adt_sized_constraint` query.
2022-06-25Fix span issues in object safety suggestionsMichael Goulet-38/+29
2022-06-21Point at return expression for RPIT-related errorMichael Goulet-0/+3
2022-06-14implement valtrees as the type-system representation for constant valuesb-naber-2/+1
2022-06-13remove unnecessary `to_string` and `String::new`Takayuki Maeda-2/+2
2022-06-05Do wfcheck on ADT field before Sized checkMichael Goulet-1/+1
2022-05-22Lifetime variance fixes for rustcMichael Goulet-5/+7
2022-05-18Rollup merge of #95979 - lcnr:coherence-docs, r=compiler-errorsDylan DPC-0/+3
update coherence docs, fix generator + opaque type ICE the world is confusing, this makes it slightly less so
2022-05-17Auto merge of #96892 - oli-obk:🐌_obligation_cause_code_🐌, r=estebankbors-35/+75
Clean up derived obligation creation r? `@estebank` working on fixing the perf regression from https://github.com/rust-lang/rust/pull/91030#issuecomment-1083360210
2022-05-16Force inline InternedObligationCauseCode creationOli Scherer-4/+4
2022-05-13Avoid invoking the full `eq` infrastructure when all we want is to check a ↵Oli Scherer-1/+3
discriminant
2022-05-12Give the inliner some hintsOli Scherer-0/+2
2022-05-11Gracefully fail to resolve associated items instead of `delay_span_bug`.Camille GILLOT-0/+18
2022-05-10Use InternedObligationCauseCode everywhereOli Scherer-28/+20
2022-05-10Make `FunctionArgumentObligation` also use the "no allocation for misc" trickOli Scherer-6/+16
2022-05-10Don't allocate misc obligation parents of derived obligationsOli Scherer-6/+7
2022-05-10Make the derived obligation cause parent privateOli Scherer-1/+9
2022-05-10Add a helper function for a common piece of codeOli Scherer-13/+15
2022-05-10Remove `clone_code` methodOli Scherer-7/+0
2022-05-10Remove another use of clone_codeOli Scherer-1/+1
2022-05-10Move an extension trait method onto the type directly and reuse itOli Scherer-0/+24
2022-05-10Remove some unnecessary clonesOli Scherer-4/+10
2022-05-10update coherence docs, fix opaque type + generator icelcnr-0/+3
2022-05-02fix most compiler/ doctestsElliot Roberts-3/+5
2022-04-04Auto merge of #95031 - compiler-errors:param-env-cache, r=Aaron1011bors-3/+10
Do not use `ParamEnv::and` when building a cache key from a param-env and trait eval candidate Do not use `ParamEnv::and` to cache a param-env with a selection/evaluation candidate. This is because if the param-env is `RevealAll` mode, and the candidate looks global (i.e. it has erased regions, which can show up when we normalize a projection type under a binder<sup>1</sup>), then when we use `ParamEnv::and` to pair the candidate and the param-env for use as a cache key, we will throw away the param-env's caller bounds, and we'll end up caching a candidate that we inferred from the param-env with a empty param-env, which may cause cache-hit later when we have an empty param-env, and possibly mess with normalization like we see in the referenced issue during codegen. Not sure how to trigger this with a more structured test, but changing `check-pass` to `build-pass` triggers the case that https://github.com/rust-lang/rust/issues/94903 detected. <sup>1.</sup> That is, we will replace the late-bound region with a placeholder, which gets canonicalized and turned into an infererence variable, which gets erased during region freshening right before we cache the result. Sorry, it's quite a few steps. Fixes #94903 r? `@Aaron1011` (or reassign as you see fit)
2022-04-01update commentlcnr-2/+1
2022-04-01convert more `DefId`s to `LocalDefId`lcnr-3/+3