Skip to content

Commit

Permalink
Auto merge of #111329 - jyn514:metadata-ice, r=bjorn3
Browse files Browse the repository at this point in the history
Load only the crate header for `locator::crate_matches`

Previously, we used the following info to determine whether to load the crate:
1. The METADATA_HEADER, which includes a METADATA_VERSION constant
2. The embedded rustc version
3. Various metadata in the `CrateRoot`, including the SVH

This worked ok most of the time. Unfortunately, when building locally the rustc version is always
the same because `omit-git-hash` is on by default. That meant that we depended only on 1 and 3, and
we are not very good about bumping METADATA_VERSION (it's currently at 7) so in practice we were
only depending on 3. `CrateRoot` is a very large struct and changes somewhat regularly, so this led
to a steady stream of crashes from trying to load it.

Change the logic to add an intermediate step between 2 and 3: introduce a new `CrateHeader` struct
that contains only the minimum info needed to decide whether the crate should be loaded or not. That
avoids having to load all of `CrateRoot`, which in practice means we should crash much less often.

Note that this works because the SVH should be different between any two dependencies, even if the
compiler has changed, because we use `-Zbinary-dep-depinfo` in bootstrap. See
rust-lang/rust#111329 (comment) for more details about how the
original crash happened.
  • Loading branch information
bors committed May 29, 2023
2 parents c4ebd27 + 0330724 commit 11b954e
Showing 0 changed files with 0 additions and 0 deletions.

0 comments on commit 11b954e

Please sign in to comment.