os-rust/compiler
Esteban Küber 16bf7223ea Add more info on type/trait mismatches for different crate versions
When encountering a type or trait mismatch for two types coming from two different crates with the same name, detect if it is either mixing two types/traits from the same crate on different versions:

```
error[E0308]: mismatched types
  --> replaced
   |
LL |     do_something_type(Type);
   |     ----------------- ^^^^ expected `dependency::Type`, found `dep_2_reexport::Type`
   |     |
   |     arguments to this function are incorrect
   |
note: two different versions of crate `dependency` are being used; two types coming from two different versions of the same crate are different types even if they look the same
  --> replaced
   |
LL | pub struct Type(pub i32);
   | ^^^^^^^^^^^^^^^ this is the expected type `dependency::Type`
   |
  ::: replaced
   |
LL | pub struct Type;
   | ^^^^^^^^^^^^^^^ this is the found type `dep_2_reexport::Type`
   |
  ::: replaced
   |
LL | extern crate dep_2_reexport;
   | ---------------------------- one version of crate `dependency` is used here, as a dependency of crate `foo`
LL | extern crate dependency;
   | ------------------------ one version of crate `dependency` is used here, as a direct dependency of the current crate
   = help: you can use `cargo tree` to explore your dependency tree
note: function defined here
  --> replaced
   |
LL | pub fn do_something_type(_: Type) {}
   |        ^^^^^^^^^^^^^^^^^

error[E0308]: mismatched types
  --> replaced
   |
LL |     do_something_trait(Box::new(Type) as Box<dyn Trait2>);
   |     ------------------ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected trait `dependency::Trait2`, found trait `dep_2_reexport::Trait2`
   |     |
   |     arguments to this function are incorrect
   |
note: two different versions of crate `dependency` are being used; two types coming from two different versions of the same crate are different types even if they look the same
  --> replaced
   |
LL | pub trait Trait2 {}
   | ^^^^^^^^^^^^^^^^ this is the expected trait `dependency::Trait2`
   |
  ::: replaced
   |
LL | pub trait Trait2 {}
   | ^^^^^^^^^^^^^^^^ this is the found trait `dep_2_reexport::Trait2`
   |
  ::: replaced
   |
LL | extern crate dep_2_reexport;
   | ---------------------------- one version of crate `dependency` is used here, as a dependency of crate `foo`
LL | extern crate dependency;
   | ------------------------ one version of crate `dependency` is used here, as a direct dependency of the current crate
   = help: you can use `cargo tree` to explore your dependency tree
note: function defined here
  --> replaced
   |
LL | pub fn do_something_trait(_: Box<dyn Trait2>) {}
   |        ^^^^^^^^^^^^^^^^^^
```

or if it is different crates that were renamed to the same name:

```
error[E0308]: mismatched types
  --> $DIR/type-mismatch-same-crate-name.rs:21:20
   |
LL |         a::try_foo(foo2);
   |         ---------- ^^^^ expected `main:🅰️:Foo`, found a different `main:🅰️:Foo`
   |         |
   |         arguments to this function are incorrect
   |
note: two types coming from two different crates are different types even if they look the same
  --> $DIR/auxiliary/crate_a2.rs:1:1
   |
LL | pub struct Foo;
   | ^^^^^^^^^^^^^^ this is the found type `crate_a2::Foo`
   |
  ::: $DIR/auxiliary/crate_a1.rs:1:1
   |
LL | pub struct Foo;
   | ^^^^^^^^^^^^^^ this is the expected type `crate_a1::Foo`
   |
  ::: $DIR/type-mismatch-same-crate-name.rs:13:17
   |
LL |     let foo2 = {extern crate crate_a2 as a; a::Foo};
   |                 --------------------------- one type comes from crate `crate_a2` is used here, which is renamed locally to `a`
...
LL |         extern crate crate_a1 as a;
   |         --------------------------- one type comes from crate `crate_a1` is used here, which is renamed locally to `a`
note: function defined here
  --> $DIR/auxiliary/crate_a1.rs:10:8
   |
LL | pub fn try_foo(x: Foo){}
   |        ^^^^^^^

error[E0308]: mismatched types
  --> $DIR/type-mismatch-same-crate-name.rs:27:20
   |
LL |         a::try_bar(bar2);
   |         ---------- ^^^^ expected trait `main:🅰️:Bar`, found a different trait `main:🅰️:Bar`
   |         |
   |         arguments to this function are incorrect
   |
note: two types coming from two different crates are different types even if they look the same
  --> $DIR/auxiliary/crate_a2.rs:3:1
   |
LL | pub trait Bar {}
   | ^^^^^^^^^^^^^ this is the found trait `crate_a2::Bar`
   |
  ::: $DIR/auxiliary/crate_a1.rs:3:1
   |
LL | pub trait Bar {}
   | ^^^^^^^^^^^^^ this is the expected trait `crate_a1::Bar`
   |
  ::: $DIR/type-mismatch-same-crate-name.rs:13:17
   |
LL |     let foo2 = {extern crate crate_a2 as a; a::Foo};
   |                 --------------------------- one trait comes from crate `crate_a2` is used here, which is renamed locally to `a`
...
LL |         extern crate crate_a1 as a;
   |         --------------------------- one trait comes from crate `crate_a1` is used here, which is renamed locally to `a`
note: function defined here
  --> $DIR/auxiliary/crate_a1.rs:11:8
   |
LL | pub fn try_bar(x: Box<Bar>){}
   |        ^^^^^^^
```

This new output unifies the E0308 errors detail with the pre-existing E0277 errors, and better differentiates the "`extern crate` renamed" and "same crate, different versions" cases.
2024-12-07 18:18:08 +00:00
..
rustc switch jemalloc-sys back to tikv-jemalloc-sys, and update to 0.6.0 2024-12-03 08:56:33 +00:00
rustc_abi fix safe-transmute handling of enums 2024-12-01 18:28:04 +01:00
rustc_arena move strict provenance lints to new feature gate, remove old feature gates 2024-10-21 15:22:17 +01:00
rustc_ast Fix suggestion when shorthand self has erroneous type 2024-12-04 19:52:53 +00:00
rustc_ast_ir Add sugar for &pin (const|mut) types 2024-10-07 11:15:04 -07:00
rustc_ast_lowering Rollup merge of #133779 - BoxyUwU:array_const_arg_infer_hir_id, r=compiler-errors 2024-12-03 17:27:10 +01:00
rustc_ast_passes Rollup merge of #133847 - nnethercote:rm-Z-show-span, r=compiler-errors 2024-12-04 18:23:42 +01:00
rustc_ast_pretty Rollup merge of #133746 - oli-obk:push-xwyrylxmrtvq, r=jieyouxu 2024-12-02 23:08:58 +01:00
rustc_attr ensure that all publicly reachable const fn have const stability info 2024-11-10 10:16:26 +01:00
rustc_baked_icu_data Delete the cfg(not(parallel)) serial compiler 2024-11-12 13:38:58 +00:00
rustc_borrowck Rollup merge of #133798 - lcnr:nested-bodies-opaques, r=compiler-errors 2024-12-04 05:42:08 +01:00
rustc_builtin_macros make CoercePointee errors translatable 2024-12-04 20:34:48 +08:00
rustc_codegen_cranelift Merge commit '57845a397ec15e4e6a561ed2c4bfa3dcf49144fb' into sync_cg_clif-2024-12-06 2024-12-06 12:10:30 +00:00
rustc_codegen_gcc Rollup merge of #130777 - azhogin:azhogin/reg-struct-return, r=workingjubilee 2024-12-06 09:27:38 +01:00
rustc_codegen_llvm Rollup merge of #127565 - esp-rs:xtensa-vaargs, r=workingjubilee 2024-12-05 05:50:50 -05:00
rustc_codegen_ssa Rollup merge of #133041 - madsmtm:print-deployment-target-env-var, r=davidtwco 2024-12-03 07:48:31 +01:00
rustc_const_eval Rollup merge of #133211 - Strophox:miri-correct-state-update-ffi, r=RalfJung 2024-12-06 09:27:39 +01:00
rustc_data_structures Assert that obligations are empty before deeply normalizing 2024-12-02 22:51:18 +00:00
rustc_driver Use tidy to sort crate attributes for all compiler crates. 2024-06-12 15:49:10 +10:00
rustc_driver_impl Rollup merge of #133847 - nnethercote:rm-Z-show-span, r=compiler-errors 2024-12-04 18:23:42 +01:00
rustc_error_codes Rollup merge of #133726 - joshtriplett:breakpoint, r=oli-obk 2024-12-03 21:55:27 +01:00
rustc_error_messages Delete the cfg(not(parallel)) serial compiler 2024-11-12 13:38:58 +00:00
rustc_errors Eliminate magic numbers from expression precedence 2024-11-30 17:53:40 -08:00
rustc_expand Change AttrArgs::Eq into a struct variant 2024-12-02 10:28:58 +00:00
rustc_feature Auto merge of #133818 - matthiaskrgr:rollup-iav1wq7, r=matthiaskrgr 2024-12-04 00:47:09 +00:00
rustc_fluent_macro use tracked_path in rustc_fluent_macro 2024-10-19 22:32:38 +08:00
rustc_fs_util Couple of changes to make it easier to compile rustc for wasm 2024-09-26 19:51:14 +00:00
rustc_graphviz Reformat using the new identifier sorting from rustfmt 2024-09-22 19:11:29 -04:00
rustc_hir Rollup merge of #133603 - dtolnay:precedence, r=lcnr 2024-12-02 17:36:03 +01:00
rustc_hir_analysis Avoid fetching the anon const hir node that is already available 2024-12-05 09:02:16 +00:00
rustc_hir_pretty Rollup merge of #133603 - dtolnay:precedence, r=lcnr 2024-12-02 17:36:03 +01:00
rustc_hir_typeck Auto merge of #133559 - compiler-errors:structurally-resolve-adjust-for-branch, r=lcnr 2024-12-06 04:55:35 +00:00
rustc_incremental Move some code from Compiler::enter to GlobalCtxt::finish 2024-11-09 17:55:39 +00:00
rustc_index Remove HybridBitSet. 2024-11-29 17:23:34 +11:00
rustc_index_macros Auto merge of #130867 - michirakara:steps_between, r=dtolnay 2024-11-22 10:54:22 +00:00
rustc_infer Assert that obligations are empty before deeply normalizing 2024-12-02 22:51:18 +00:00
rustc_interface Rollup merge of #130777 - azhogin:azhogin/reg-struct-return, r=workingjubilee 2024-12-06 09:27:38 +01:00
rustc_lexer Revert "Reject raw lifetime followed by \' as well" 2024-12-01 05:22:16 +00:00
rustc_lint Rollup merge of #118833 - Urgau:lint_function_pointer_comparisons, r=cjgillot 2024-12-05 07:29:53 +01:00
rustc_lint_defs Rollup merge of #133535 - RalfJung:forbidden_lint_groups-future-compat, r=davidtwco 2024-12-02 23:08:53 +01:00
rustc_llvm Respect verify-llvm-ir option in the backend 2024-11-26 15:26:03 +01:00
rustc_log Reformat using the new identifier sorting from rustfmt 2024-09-22 19:11:29 -04:00
rustc_macros give a better error for tuple structs in derive(Diagnostic) 2024-10-27 21:23:28 -04:00
rustc_metadata Remove some noisy tracing 2024-12-04 09:54:20 +00:00
rustc_middle Rollup merge of #133211 - Strophox:miri-correct-state-update-ffi, r=RalfJung 2024-12-06 09:27:39 +01:00
rustc_mir_build Rollup merge of #133607 - WaffleLapkin:tail-call-checks, r=compiler-errors 2024-12-05 23:47:10 +01:00
rustc_mir_dataflow Simplify ResultsHandle. 2024-12-02 16:19:17 +11:00
rustc_mir_transform fn_sig_for_fn_abi should return a ty::FnSig, no need for a binder 2024-12-04 21:23:36 +00:00
rustc_monomorphize Share inline(never) generics across crates 2024-11-28 13:43:05 -05:00
rustc_next_trait_solver support revealing defined opaque post borrowck 2024-11-28 10:40:58 +01:00
rustc_parse Fix suggestion when shorthand self has erroneous type 2024-12-04 19:52:53 +00:00
rustc_parse_format Remove 'apostrophes' from rustc_parse_format 2024-10-14 23:22:51 +02:00
rustc_passes Auto merge of #133321 - compiler-errors:const-checker, r=wesleywiser 2024-12-03 04:39:48 +00:00
rustc_pattern_analysis no more Reveal :( 2024-11-23 13:52:54 +01:00
rustc_privacy Simplify some places that deal with generic parameter defaults 2024-11-11 21:29:18 +01:00
rustc_query_impl Rollup merge of #132410 - bjorn3:yet_another_driver_refactor_round, r=cjgillot 2024-11-27 22:23:24 +01:00
rustc_query_system Make sure to record deps from cached task in new solver on first run 2024-12-04 16:15:44 +00:00
rustc_resolve Rollup merge of #133545 - clubby789:symbol-intern-lit, r=jieyouxu 2024-12-03 17:27:06 +01:00
rustc_sanitizers use TypingEnv when no infcx is available 2024-11-18 10:38:56 +01:00
rustc_serialize Fix explicit_iter_loop in rustc_serialize 2024-10-16 15:44:16 +02:00
rustc_session Rollup merge of #130777 - azhogin:azhogin/reg-struct-return, r=workingjubilee 2024-12-06 09:27:38 +01:00
rustc_smir Rollup merge of #132410 - bjorn3:yet_another_driver_refactor_round, r=cjgillot 2024-11-27 22:23:24 +01:00
rustc_span Rollup merge of #133545 - clubby789:symbol-intern-lit, r=jieyouxu 2024-12-03 17:27:06 +01:00
rustc_symbol_mangling additional TypingEnv cleanups 2024-11-19 21:36:23 +01:00
rustc_target Rollup merge of #130777 - azhogin:azhogin/reg-struct-return, r=workingjubilee 2024-12-06 09:27:38 +01:00
rustc_trait_selection Add more info on type/trait mismatches for different crate versions 2024-12-07 18:18:08 +00:00
rustc_traits Delay a bug when encountering an impl with unconstrained generics in codegen_select 2024-11-23 05:27:45 +00:00
rustc_transmute fix safe-transmute handling of enums 2024-12-01 18:28:04 +01:00
rustc_ty_utils Only allow PassMode::Direct for aggregates on wasm when using the C ABI 2024-12-06 08:26:33 +00:00
rustc_type_ir Make sure to record deps from cached task in new solver on first run 2024-12-04 16:15:44 +00:00
rustc_type_ir_macros do not relate Abi and Safety 2024-10-22 23:13:04 +02:00
stable_mir Rollup merge of #132161 - celinval:smir-fix-indent, r=compiler-errors 2024-11-08 18:51:28 +11:00