1. 30 3月, 2022 1 次提交
    • C
      Remember mutability in `DefKind::Static`. · 21a554ca
      Camille GILLOT 提交于
      This allows to compute the `BodyOwnerKind` from `DefKind` only, and
      removes a direct dependency of some MIR queries onto HIR.
      
      As a side effect, it also simplifies metadata, since we don't need 4
      flavours of `EntryKind::*Static` any more.
      21a554ca
  2. 15 3月, 2022 1 次提交
    • T
      Stabilize ADX target feature · 78567df5
      Tony Arcieri 提交于
      This is a continuation of #60109, which noted that while the ADX
      intrinsics were stabilized, the corresponding target feature never was.
      
      This PR follows the same general structure and stabilizes the ADX target
      feature.
      78567df5
  3. 14 3月, 2022 1 次提交
  4. 11 3月, 2022 1 次提交
    • N
      Improve `AdtDef` interning. · ca5525d5
      Nicholas Nethercote 提交于
      This commit makes `AdtDef` use `Interned`. Much the commit is tedious
      changes to introduce getter functions. The interesting changes are in
      `compiler/rustc_middle/src/ty/adt.rs`.
      ca5525d5
  5. 02 3月, 2022 1 次提交
  6. 26 2月, 2022 1 次提交
  7. 25 2月, 2022 2 次提交
  8. 23 2月, 2022 1 次提交
  9. 22 2月, 2022 2 次提交
  10. 20 2月, 2022 1 次提交
  11. 18 2月, 2022 1 次提交
  12. 16 2月, 2022 1 次提交
  13. 15 2月, 2022 3 次提交
    • N
      Overhaul `Const`. · a95fb8b1
      Nicholas Nethercote 提交于
      Specifically, rename the `Const` struct as `ConstS` and re-introduce `Const` as
      this:
      ```
      pub struct Const<'tcx>(&'tcx Interned<ConstS>);
      ```
      This now matches `Ty` and `Predicate` more closely, including using
      pointer-based `eq` and `hash`.
      
      Notable changes:
      - `mk_const` now takes a `ConstS`.
      - `Const` was copy, despite being 48 bytes. Now `ConstS` is not, so need a
        we need separate arena for it, because we can't use the `Dropless` one any
        more.
      - Many `&'tcx Const<'tcx>`/`&Const<'tcx>` to `Const<'tcx>` changes
      - Many `ct.ty` to `ct.ty()` and `ct.val` to `ct.val()` changes.
      - Lots of tedious sigil fiddling.
      a95fb8b1
    • N
      Overhaul `RegionKind` and `Region`. · 7024dc52
      Nicholas Nethercote 提交于
      Specifically, change `Region` from this:
      ```
      pub type Region<'tcx> = &'tcx RegionKind;
      ```
      to this:
      ```
      pub struct Region<'tcx>(&'tcx Interned<RegionKind>);
      ```
      
      This now matches `Ty` and `Predicate` more closely.
      
      Things to note
      - Regions have always been interned, but we haven't been using pointer-based
        `Eq` and `Hash`. This is now happening.
      - I chose to impl `Deref` for `Region` because it makes pattern matching a lot
        nicer, and `Region` can be viewed as just a smart wrapper for `RegionKind`.
      - Various methods are moved from `RegionKind` to `Region`.
      - There is a lot of tedious sigil changes.
      - A couple of types like `HighlightBuilder`, `RegionHighlightMode` now have a
        `'tcx` lifetime because they hold a `Ty<'tcx>`, so they can call `mk_region`.
      - A couple of test outputs change slightly, I'm not sure why, but the new
        outputs are a little better.
      7024dc52
    • N
      Overhaul `TyS` and `Ty`. · e9a0c429
      Nicholas Nethercote 提交于
      Specifically, change `Ty` from this:
      ```
      pub type Ty<'tcx> = &'tcx TyS<'tcx>;
      ```
      to this
      ```
      pub struct Ty<'tcx>(Interned<'tcx, TyS<'tcx>>);
      ```
      There are two benefits to this.
      - It's now a first class type, so we can define methods on it. This
        means we can move a lot of methods away from `TyS`, leaving `TyS` as a
        barely-used type, which is appropriate given that it's not meant to
        be used directly.
      - The uniqueness requirement is now explicit, via the `Interned` type.
        E.g. the pointer-based `Eq` and `Hash` comes from `Interned`, rather
        than via `TyS`, which wasn't obvious at all.
      
      Much of this commit is boring churn. The interesting changes are in
      these files:
      - compiler/rustc_middle/src/arena.rs
      - compiler/rustc_middle/src/mir/visit.rs
      - compiler/rustc_middle/src/ty/context.rs
      - compiler/rustc_middle/src/ty/mod.rs
      
      Specifically:
      - Most mentions of `TyS` are removed. It's very much a dumb struct now;
        `Ty` has all the smarts.
      - `TyS` now has `crate` visibility instead of `pub`.
      - `TyS::make_for_test` is removed in favour of the static `BOOL_TY`,
        which just works better with the new structure.
      - The `Eq`/`Ord`/`Hash` impls are removed from `TyS`. `Interned`s impls
        of `Eq`/`Hash` now suffice. `Ord` is now partly on `Interned`
        (pointer-based, for the `Equal` case) and partly on `TyS`
        (contents-based, for the other cases).
      - There are many tedious sigil adjustments, i.e. adding or removing `*`
        or `&`. They seem to be unavoidable.
      e9a0c429
  14. 12 2月, 2022 1 次提交
  15. 10 2月, 2022 1 次提交
  16. 09 2月, 2022 1 次提交
  17. 07 2月, 2022 1 次提交
  18. 29 1月, 2022 1 次提交
  19. 18 1月, 2022 4 次提交
  20. 17 1月, 2022 1 次提交
  21. 16 1月, 2022 2 次提交
  22. 15 1月, 2022 3 次提交
  23. 14 1月, 2022 1 次提交
  24. 11 1月, 2022 1 次提交
    • A
      Store a `Symbol` instead of an `Ident` in `VariantDef`/`FieldDef` · 450ef861
      Aaron Hill 提交于
      The field is also renamed from `ident` to `name. In most cases,
      we don't actually need the `Span`. A new `ident` method is added
      to `VariantDef` and `FieldDef`, which constructs the full `Ident`
      using `tcx.def_ident_span()`. This method is used in the cases
      where we actually need an `Ident`.
      
      This makes incremental compilation properly track changes
      to the `Span`, without all of the invalidations caused by storing
      a `Span` directly via an `Ident`.
      450ef861
  25. 10 1月, 2022 1 次提交
  26. 09 1月, 2022 2 次提交
  27. 08 1月, 2022 1 次提交
  28. 26 12月, 2021 1 次提交
  29. 23 12月, 2021 1 次提交