forked from rust-lang/rust
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Rollup merge of rust-lang#105793 - lukas-code:circular-deps, r=Mark-S…
…imulacrum Add note for mismatched types because of circular dependencies If you have crate A with a dependency on crate B, and crate B with a dev-dependency on A, then you might see "mismatched types" errors on types that seem to be equal. This PR adds a note that explains that the types are different, because crate B is compiled twice, one time with `cfg(test)` and one time without. I haven't found a good way to create circular dependencies in UI tests, so I abused the incremental tests instead. As a bonus, incremental tests support "cpass" now. related to rust-lang#22750
- Loading branch information
Showing
4 changed files
with
96 additions
and
22 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,10 @@ | ||
// edition: 2021 | ||
// compile-flags: --crate-type lib --extern circular_dependencies={{build-base}}/circular-dependencies/libcircular_dependencies.rmeta --emit dep-info,metadata | ||
|
||
use circular_dependencies::Foo; | ||
|
||
pub fn consume_foo(_: Foo) {} | ||
|
||
pub fn produce_foo() -> Foo { | ||
Foo | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,37 @@ | ||
// ignore-tidy-linelength | ||
// revisions: cpass1 cfail2 | ||
// edition: 2021 | ||
// [cpass1] compile-flags: --crate-type lib --emit dep-info,metadata | ||
// [cfail2] aux-build: circular-dependencies-aux.rs | ||
// [cfail2] compile-flags: --test --extern aux={{build-base}}/circular-dependencies/auxiliary/libcircular_dependencies_aux.rmeta -L dependency={{build-base}}/circular-dependencies | ||
|
||
pub struct Foo; | ||
//[cfail2]~^ NOTE `Foo` is defined in the current crate | ||
//[cfail2]~| NOTE `Foo` is defined in the current crate | ||
//[cfail2]~| NOTE `circular_dependencies::Foo` is defined in crate `circular_dependencies` | ||
//[cfail2]~| NOTE `circular_dependencies::Foo` is defined in crate `circular_dependencies` | ||
|
||
pub fn consume_foo(_: Foo) {} | ||
//[cfail2]~^ NOTE function defined here | ||
|
||
pub fn produce_foo() -> Foo { | ||
Foo | ||
} | ||
|
||
#[test] | ||
fn test() { | ||
aux::consume_foo(produce_foo()); | ||
//[cfail2]~^ ERROR mismatched types [E0308] | ||
//[cfail2]~| NOTE expected `circular_dependencies::Foo`, found `Foo` | ||
//[cfail2]~| NOTE arguments to this function are incorrect | ||
//[cfail2]~| NOTE `Foo` and `circular_dependencies::Foo` have similar names, but are actually distinct types | ||
//[cfail2]~| NOTE the crate `circular_dependencies` is compiled multiple times, possibly with different configurations | ||
//[cfail2]~| NOTE function defined here | ||
|
||
consume_foo(aux::produce_foo()); | ||
//[cfail2]~^ ERROR mismatched types [E0308] | ||
//[cfail2]~| NOTE expected `Foo`, found `circular_dependencies::Foo` | ||
//[cfail2]~| NOTE arguments to this function are incorrect | ||
//[cfail2]~| NOTE `circular_dependencies::Foo` and `Foo` have similar names, but are actually distinct types | ||
//[cfail2]~| NOTE the crate `circular_dependencies` is compiled multiple times, possibly with different configurations | ||
} |