Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Do not call extern_crate on current trait on crate mismatch errors #133585

Open
wants to merge 1 commit into
base: master
Choose a base branch
from

Commits on Nov 28, 2024

  1. Do not call extern_crate on current trait on crate mismatch errors

    When we encounter an error caused by traits/types of different versions of the same crate, filter out the current crate when collecting spans to add to the context so we don't call `extern_crate` on the `DefId` of the current crate, which is meaningless and ICEs.
    
    Produced output with this filter:
    
    ```
    error[E0277]: the trait bound `foo::Struct: Trait` is not satisfied
      --> y.rs:13:19
       |
    13 |     check_trait::<foo::Struct>();
       |                   ^^^^^^^^^^^ the trait `Trait` is not implemented for `foo::Struct`
       |
    note: there are multiple different versions of crate `foo` in the dependency graph
      --> y.rs:7:1
       |
    4  | extern crate foo;
       | ----------------- one version of crate `foo` is used here, as a direct dependency of the current crate
    5  |
    6  | pub struct Struct;
       | ----------------- this type implements the required trait
    7  | pub trait Trait {}
       | ^^^^^^^^^^^^^^^ this is the required trait
       |
      ::: x.rs:4:1
       |
    4  | pub struct Struct;
       | ----------------- this type doesn't implement the required trait
    5  | pub trait Trait {}
       | --------------- this is the found trait
       = note: two types coming from two different versions of the same crate are different types even if they look the same
       = help: you can use `cargo tree` to explore your dependency tree
    note: required by a bound in `check_trait`
      --> y.rs:10:19
       |
    10 | fn check_trait<T: Trait>() {}
       |                   ^^^^^ required by this bound in `check_trait`
    ```
    
    Fix rust-lang#133563.
    estebank committed Nov 28, 2024
    Configuration menu
    Copy the full SHA
    8574f37 View commit details
    Browse the repository at this point in the history