| The current crate is indistinguishable from one of its dependencies, in terms | |
| of metadata. | |
| Example of erroneous code: | |
| `a.rs` | |
| ```ignore (cannot-link-with-other-tests) | |
| #![crate_name = "a"] | |
| #![crate_type = "lib"] | |
| pub fn foo() {} | |
| ``` | |
| `b.rs` | |
| ```ignore (cannot-link-with-other-tests) | |
| #![crate_name = "a"] | |
| #![crate_type = "lib"] | |
| // error: the current crate is indistinguishable from one of its dependencies: | |
| // it has the same crate-name `a` and was compiled with the same | |
| // `-C metadata` arguments. This will result in symbol conflicts between | |
| // the two. | |
| extern crate a; | |
| pub fn foo() {} | |
| fn bar() { | |
| a::foo(); // is this calling the local crate or the dependency? | |
| } | |
| ``` | |
| The above example compiles two crates with exactly the same name and | |
| `crate_type` (plus any other metadata). This causes an error because it becomes | |
| impossible for the compiler to distinguish between symbols (`pub` item names). | |
| This error can be fixed by: | |
| * Using [Cargo](../cargo/index.html), the Rust package manager, automatically | |
| fixing this issue. | |
| * Recompiling the crate with different metadata (different name/ | |
| `crate_type`). |