summary refs log tree commit diff
path: root/compiler/rustc_middle/src/traits
AgeCommit message (Collapse)AuthorLines
2025-02-13Implement and use BikeshedGuaranteedNoDrop for union/unsafe field validityMichael Goulet-0/+2
2025-02-11Deeply normalize signature in new solverMichael Goulet-0/+3
2025-02-11Make DeeplyNormalize a real type opMichael Goulet-0/+7
2025-02-06Auto merge of #136471 - safinaskar:parallel, r=SparrowLiibors-3/+3
tree-wide: parallel: Fully removed all `Lrc`, replaced with `Arc` tree-wide: parallel: Fully removed all `Lrc`, replaced with `Arc` This is continuation of https://github.com/rust-lang/rust/pull/132282 . I'm pretty sure I did everything right. In particular, I searched all occurrences of `Lrc` in submodules and made sure that they don't need replacement. There are other possibilities, through. We can define `enum Lrc<T> { Rc(Rc<T>), Arc(Arc<T>) }`. Or we can make `Lrc` a union and on every clone we can read from special thread-local variable. Or we can add a generic parameter to `Lrc` and, yes, this parameter will be everywhere across all codebase. So, if you think we should take some alternative approach, then don't merge this PR. But if it is decided to stick with `Arc`, then, please, merge. cc "Parallel Rustc Front-end" ( https://github.com/rust-lang/rust/issues/113349 ) r? SparrowLii `@rustbot` label WG-compiler-parallel
2025-02-06Clean up trivial traversal/lift impl generator macro calls.Nicholas Nethercote-6/+0
We have four macros for generating trivial traversal (fold/visit) and lift impls. - `rustc_ir::TrivialTypeTraversalImpls` - `rustc_middle::TrivialTypeTraversalImpls` - `rustc_middle::TrivialLiftImpls` - `rustc_middle::TrivialTypeTraversalAndLiftImpls` The first two are very similar. The last one just combines the second and third one. The macros themselves are ok, but their use is a mess. This commit does the following. - Removes types that no longer need a lift and/or traversal impl from the macro calls. - Consolidates the macro calls into the smallest number of calls possible, with each one mentioning as many types as possible. - Orders the types within those macro calls alphabetically, and makes the module qualification more consistent. - Eliminates `rustc_middle::mir::type_foldable`, because the macro calls were merged and the manual `TypeFoldable` impls are better placed in `structural_impls.rs`, alongside all the other ones. This makes the code more concise. Moving forward, it also makes it more obvious where new types should be added.
2025-02-04Two minor `use` fixups.Nicholas Nethercote-4/+2
I *think* this addresses what the `FIXME` comments are asking for.
2025-02-03tree-wide: parallel: Fully removed all `Lrc`, replaced with `Arc`Askar Safin-3/+3
2025-01-31Don't export the `Trivial*` macros.Nicholas Nethercote-1/+1
They're only used within the crate.
2025-01-28Properly check that array length is valid type during built-in unsizing in indexMichael Goulet-0/+3
2025-01-21remove support for the #[start] attributeRalf Jung-3/+0
2025-01-06Add derived causes for host effect predicatesMichael Goulet-17/+72
2025-01-02Remove unused fields from RepeatElementCopy obligationTaylor Cramer-4/+4
2024-12-18Re-export more `rustc_span::symbol` things from `rustc_span`.Nicholas Nethercote-3/+2
`rustc_span::symbol` defines some things that are re-exported from `rustc_span`, such as `Symbol` and `sym`. But it doesn't re-export some closely related things such as `Ident` and `kw`. So you can do `use rustc_span::{Symbol, sym}` but you have to do `use rustc_span::symbol::{Ident, kw}`, which is inconsistent for no good reason. This commit re-exports `Ident`, `kw`, and `MacroRulesNormalizedIdent`, and changes many `rustc_span::symbol::` qualifiers in `compiler/` to `rustc_span::`. This is a 200+ net line of code reduction, mostly because many files with two `use rustc_span` items can be reduced to one.
2024-12-13Suggest using deref in patternsuellenberg-2/+21
Fixes #132784
2024-12-11Arbitrary self types v2: use Receiver traitAdrian Taylor-1/+11
In this new version of Arbitrary Self Types, we no longer use the Deref trait exclusively when working out which self types are valid. Instead, we follow a chain of Receiver traits. This enables methods to be called on smart pointer types which fundamentally cannot support Deref (for instance because they are wrappers for pointers that don't follow Rust's aliasing rules). This includes: * Changes to tests appropriately * New tests for: * The basics of the feature * Ensuring lifetime elision works properly * Generic Receivers * A copy of the method subst test enhanced with Receiver This is really the heart of the 'arbitrary self types v2' feature, and is the most critical commit in the current PR. Subsequent commits are focused on: * Detecting "shadowing" problems, where a smart pointer type can hide methods in the pointee. * Diagnostics and cleanup. Naming: in this commit, the "Autoderef" type is modified so that it no longer solely focuses on the "Deref" trait, but can now consider the "Receiver" trait instead. Should it be renamed, to something like "TraitFollower"? This was considered, but rejected, because * even in the Receiver case, it still considers built-in derefs * the name Autoderef is short and snappy.
2024-12-01Adjust HostEffect error spans correctly to point at argsMichael Goulet-0/+4
2024-11-23global old solver cache: use `TypingEnv`lcnr-16/+6
2024-11-23no more Reveal :(lcnr-1/+1
2024-11-08Manually register some bounds for a better spanMichael Goulet-0/+5
2024-10-27Remove ObligationCause::span() methodMichael Goulet-12/+7
2024-10-27Stop using the whole match expr span for an arm's obligation spanMichael Goulet-0/+2
2024-10-23nightly feature tracking: get rid of the per-feature bool fieldsRalf Jung-1/+1
2024-10-20Rip out old effects var handling code from traitsMichael Goulet-6/+1
2024-10-17move `defining_opaque_types` out of `Canonical`lcnr-11/+14
2024-10-17`DropckOutlives` to `rustc_middle`lcnr-0/+8
2024-10-17remove type_op constructorslcnr-25/+1
2024-10-17`ImpliedOutlivesBounds` to `rustc_middle`lcnr-0/+8
2024-10-12Swap PredicateObligation to ThinVecGnomedDev-4/+5
2024-09-25Compiler: Rename "object safe" to "dyn compatible"León Orell Valerian Liehr-49/+55
2024-09-22Reformat using the new identifier sorting from rustfmtMichael Goulet-4/+4
2024-08-08Detect `*` operator on `!Sized` expressionEsteban Küber-1/+1
``` error[E0277]: the size for values of type `str` cannot be known at compilation time --> $DIR/unsized-str-in-return-expr-arg-and-local.rs:15:9 | LL | let x = *""; | ^ doesn't have a size known at compile-time | = help: the trait `Sized` is not implemented for `str` = note: all local variables must have a statically known size = help: unsized locals are gated as an unstable feature help: references are always `Sized`, even if they point to unsized data; consider not dereferencing the expression | LL - let x = *""; LL + let x = ""; | ```
2024-07-29Reformat `use` declarations.Nicholas Nethercote-27/+26
The previous commit updated `rustfmt.toml` appropriately. This commit is the outcome of running `x fmt --all` with the new formatting options.
2024-07-12enable fuzzing of `SearchGraph`lcnr-125/+0
fully move it into `rustc_type_ir` and make it independent of `Interner`.
2024-07-07Get rid of the redundant elaboration in middleMichael Goulet-63/+0
2024-06-27Make queries more explicitMichael Goulet-1/+1
2024-06-21Rename a bunch of thingsMichael Goulet-12/+10
2024-06-18Uplift PredefinedOpaquesDataMichael Goulet-9/+3
2024-06-18Make SearchGraph fully genericMichael Goulet-18/+12
2024-06-16Uplift ExternalConstraintDataMichael Goulet-24/+5
2024-06-16Make ExternalConstraints just carry outlivesMichael Goulet-2/+1
2024-06-16Uplift Reveal to rustc_type_irMichael Goulet-48/+1
2024-06-13Method resolution constrains hidden types instead of rejecting method candidatesOli Scherer-1/+1
2024-06-12Stop passing traitref/traitpredicate by refMichael Goulet-1/+1
2024-06-06Uplift TypeErrorMichael Goulet-7/+0
2024-06-06Make middle not rely on next_trait_solverMichael Goulet-4/+4
2024-06-05Fully implement `ConstArgHasType`Boxy-0/+2
2024-05-24remove proof tree formatter, make em shallowlcnr-3/+3
2024-05-20move global cache lookup into fnlcnr-16/+18
2024-05-18Uplift inspect into rustc_type_irMichael Goulet-516/+14
2024-05-18Uplift GenericArgKind, CanonicalVarValues, QueryInputMichael Goulet-31/+5
and make NestedGoals generic