Skip to content

Update toolchain to nightly-2026-03-08 - #94

Draft
coord-e wants to merge 2 commits into
mainfrom
claude/update-nightly-incremental-9hwgj
Draft

Update toolchain to nightly-2026-03-08#94
coord-e wants to merge 2 commits into
mainfrom
claude/update-nightly-incremental-9hwgj

Conversation

@coord-e

@coord-e coord-e commented May 24, 2026

Copy link
Copy Markdown
Owner

Adapts thrust to breaking MIR and API changes introduced between
nightly-2025-09-08 and nightly-2026-03-08:

  • rust-toolchain.toml: bump channel to nightly-2026-03-08

  • src/main.rs: update for new rustc query/provider API shape
    (mir_borrowck, StripTokens, AllowConstBlockItems, ExitCode return)

  • src/analyze.rs: fix mir_borrowck_skip_formula_fn signature for new
    ErrorGuaranteed / FxIndexMap types

  • src/analyze/basic_block.rs: handle ReifyFnPointer(_) wildcard and
    new Operand::RuntimeChecks variant

  • src/analyze/local_def.rs: handle two new MIR elaboration patterns
    that replace CopyForDeref in 2026-03-08:

    1. Two-stage box deref: _nonnull = copy box.Field(Unique).Field(NonNull)
      followed by _ptr = Transmute(_nonnull) — fixes list_length_const etc.
    2. Closure &mut T capture: _alias = copy (*closure).field with &mut T
      type — fixes closure_mut / closure_mut_0 false negatives
  • src/analyze/basic_block/drop_point.rs: count a copy operand whose type is
    not Copy as an ownership transfer. Runtime MIR passes a closure holding a
    &mut capture as apply::<C>(copy _2) where it used to pass move _2, so
    the closure local stayed live and was dropped at the call site, resolving the
    capture's prophecy against the caller's pre-call value while the call's own
    effect claimed the mutated one. The contradictory environment made every
    subsequent assertion provable — fixes closure_param_weaken_3 and
    closure_mut_capture_pre_post false negatives

  • src/refine/env.rs: fix large_enum_variant (box PlaceType), path_type
    deref, and locate_place loop style for new clippy lints

  • tests/ui/fail/{just_rec,split,fn_poly_param_order,adt_discr,
    extern_spec_take,annot_formula_fn,annot_preds_trait,
    annot_preds_trait_multi,iterators/range}.rs: add //@no-rustfix to
    suppress ui_test rustfix checks that now correctly detect Unsat

https://claude.ai/code/session_01URrtbSTUKNrVKLK2MNLBFc

@coord-e
coord-e marked this pull request as draft May 24, 2026 14:22
@coord-e
coord-e force-pushed the claude/update-nightly-incremental-9hwgj branch 2 times, most recently from abfa2ce to 082f381 Compare August 15, 2026 03:12
claude added 2 commits August 15, 2026 13:25
Adapts thrust to breaking MIR and API changes introduced between
nightly-2025-09-08 and nightly-2026-03-08:

- rust-toolchain.toml: bump channel to nightly-2026-03-08

- src/main.rs: update for new rustc query/provider API shape
  (mir_borrowck, StripTokens, AllowConstBlockItems, ExitCode return)

- src/analyze.rs: fix mir_borrowck_skip_formula_fn signature for new
  ErrorGuaranteed / FxIndexMap types

- src/analyze/basic_block.rs: handle ReifyFnPointer(_) wildcard, and read the
  new Operand::RuntimeChecks off the session's own check settings

- src/analyze/local_def.rs: recognize the deref aliases that replace CopyForDeref
  in 2026-03-08, which `EraseDerefTemps` now rewrites into plain copies:
    1. Two-stage box deref: `_nonnull = copy box.Field(Unique).Field(NonNull)`
       followed by `_ptr = Transmute(_nonnull)` — fixes list_length_const etc.
    2. Closure &mut T capture: `_alias = copy (*closure).field` with &mut T
       type — fixes closure_mut / closure_mut_0 false negatives
  CopyForDeref no longer reaches optimized MIR, so its handling goes away here,
  in `rvalue_type`, and in the `LocalInfo::DerefTemp` marking of
  `reassign_local_mutabilities`

- src/refine/env.rs: fix large_enum_variant (box PlaceType), path_type
  deref, and locate_place loop style for new clippy lints

- tests/ui/fail/{just_rec,split,fn_poly_param_order,adt_discr,
  extern_spec_take,annot_formula_fn,annot_preds_trait,
  annot_preds_trait_multi,iterators/range}.rs: add //@no-rustfix to
  suppress ui_test rustfix checks that now correctly detect Unsat

- thrust-macros: let #[predicate] allow unused variables in what it generates,
  since a predicate names its parameters from its SMT-LIB body. Without this,
  ui_test collects the machine-applicable rename suggestion and then fails
  compiling a .fixed file that `ignore_output_conflict` never writes. The same
  suppression as an #[allow] on fn_poly_annot_singleton and annot_range_loop,
  the two remaining unused bindings among the newly failing tests

https://claude.ai/code/session_01URrtbSTUKNrVKLK2MNLBFc
Runtime MIR reads a local that is dead afterwards with `copy` even when its
type cannot be duplicated: passing a closure that holds a `&mut` capture to a
generic function now yields `apply::<C>(copy _2)` where it used to yield
`move _2`. Only `move` counted as a transfer, so the closure local stayed
live and was dropped at the call site, resolving the capture's prophecy
against the caller's pre-call value while the call's own effect claimed the
mutated one. The contradictory environment made every subsequent assertion
provable, turning closure_param_weaken_3 and closure_mut_capture_pre_post
into false negatives.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016qzTb7avxNn6UmoqQDoC5U
@coord-e
coord-e force-pushed the claude/update-nightly-incremental-9hwgj branch from 082f381 to 74840cf Compare August 15, 2026 13:27
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants