Rollup merge of #100599 - MatthewPeterKelly:add-E0523-description-and-test, r=compiler-errors,GuillaumeGomez
Add compiler error E0523 long description and test This PR is one step towards addressing: https://github.com/rust-lang/rust/issues/61137.
This commit is contained in:
commit
6d225bb080
@ -286,6 +286,7 @@ E0519: include_str!("./error_codes/E0519.md"),
|
||||
E0520: include_str!("./error_codes/E0520.md"),
|
||||
E0521: include_str!("./error_codes/E0521.md"),
|
||||
E0522: include_str!("./error_codes/E0522.md"),
|
||||
E0523: include_str!("./error_codes/E0523.md"),
|
||||
E0524: include_str!("./error_codes/E0524.md"),
|
||||
E0525: include_str!("./error_codes/E0525.md"),
|
||||
E0527: include_str!("./error_codes/E0527.md"),
|
||||
@ -622,7 +623,6 @@ E0793: include_str!("./error_codes/E0793.md"),
|
||||
// E0488, // lifetime of variable does not enclose its declaration
|
||||
// E0489, // type/lifetime parameter not in scope here
|
||||
// E0490, // removed: unreachable
|
||||
E0523, // two dependencies have same (crate-name, disambiguator) but different SVH
|
||||
// E0526, // shuffle indices are not constant
|
||||
// E0540, // multiple rustc_deprecated attributes
|
||||
// E0548, // replaced with a generic attribute input check
|
||||
|
@ -1,6 +1,21 @@
|
||||
The compiler found multiple library files with the requested crate name.
|
||||
|
||||
```compile_fail
|
||||
// aux-build:crateresolve-1.rs
|
||||
// aux-build:crateresolve-2.rs
|
||||
// aux-build:crateresolve-3.rs
|
||||
|
||||
extern crate crateresolve;
|
||||
//~^ ERROR multiple candidates for `rlib` dependency `crateresolve` found
|
||||
|
||||
fn main() {}
|
||||
```
|
||||
|
||||
This error can occur in several different cases -- for example, when using
|
||||
`extern crate` or passing `--extern` options without crate paths. It can also be
|
||||
caused by caching issues with the build directory, in which case `cargo clean`
|
||||
may help.
|
||||
|
||||
In the above example, there are three different library files, all of which
|
||||
define the same crate name. Without providing a full path, there is no way for
|
||||
the compiler to know which crate it should use.
|
||||
|
25
compiler/rustc_error_codes/src/error_codes/E0523.md
Normal file
25
compiler/rustc_error_codes/src/error_codes/E0523.md
Normal file
@ -0,0 +1,25 @@
|
||||
#### Note: this error code is no longer emitted by the compiler.
|
||||
|
||||
The compiler found multiple library files with the requested crate name.
|
||||
|
||||
```compile_fail
|
||||
// aux-build:crateresolve-1.rs
|
||||
// aux-build:crateresolve-2.rs
|
||||
// aux-build:crateresolve-3.rs
|
||||
|
||||
extern crate crateresolve;
|
||||
//~^ ERROR multiple candidates for `rlib` dependency `crateresolve` found
|
||||
|
||||
fn main() {}
|
||||
```
|
||||
|
||||
This error can occur in several different cases -- for example, when using
|
||||
`extern crate` or passing `--extern` options without crate paths. It can also be
|
||||
caused by caching issues with the build directory, in which case `cargo clean`
|
||||
may help.
|
||||
|
||||
In the above example, there are three different library files, all of which
|
||||
define the same crate name. Without providing a full path, there is no way for
|
||||
the compiler to know which crate it should use.
|
||||
|
||||
*Note that E0523 has been merged into E0464.*
|
@ -356,7 +356,12 @@ impl<'a> CrateLoader<'a> {
|
||||
for (_, other) in self.cstore.iter_crate_data() {
|
||||
// Same stable crate id but different SVH
|
||||
if other.stable_crate_id() == root.stable_crate_id() && other.hash() != root.hash() {
|
||||
return Err(CrateError::SymbolConflictsOthers(root.name()));
|
||||
bug!(
|
||||
"Previously returned E0523 here. \
|
||||
See https://github.com/rust-lang/rust/pull/100599 for additional discussion.\
|
||||
root.name() = {}.",
|
||||
root.name()
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -511,14 +511,6 @@ pub struct SymbolConflictsCurrent {
|
||||
pub crate_name: Symbol,
|
||||
}
|
||||
|
||||
#[derive(Diagnostic)]
|
||||
#[diag(metadata_symbol_conflicts_others, code = "E0523")]
|
||||
pub struct SymbolConflictsOthers {
|
||||
#[primary_span]
|
||||
pub span: Span,
|
||||
pub crate_name: Symbol,
|
||||
}
|
||||
|
||||
#[derive(Diagnostic)]
|
||||
#[diag(metadata_stable_crate_id_collision)]
|
||||
pub struct StableCrateIdCollision {
|
||||
|
@ -945,7 +945,6 @@ pub(crate) enum CrateError {
|
||||
ExternLocationNotFile(Symbol, PathBuf),
|
||||
MultipleCandidates(Symbol, CrateFlavor, Vec<PathBuf>),
|
||||
SymbolConflictsCurrent(Symbol),
|
||||
SymbolConflictsOthers(Symbol),
|
||||
StableCrateIdCollision(Symbol, Symbol),
|
||||
DlOpen(String),
|
||||
DlSym(String),
|
||||
@ -989,9 +988,6 @@ impl CrateError {
|
||||
CrateError::SymbolConflictsCurrent(root_name) => {
|
||||
sess.emit_err(errors::SymbolConflictsCurrent { span, crate_name: root_name });
|
||||
}
|
||||
CrateError::SymbolConflictsOthers(root_name) => {
|
||||
sess.emit_err(errors::SymbolConflictsOthers { span, crate_name: root_name });
|
||||
}
|
||||
CrateError::StableCrateIdCollision(crate_name0, crate_name1) => {
|
||||
sess.emit_err(errors::StableCrateIdCollision { span, crate_name0, crate_name1 });
|
||||
}
|
||||
|
@ -31,7 +31,7 @@ const IGNORE_DOCTEST_CHECK: &[&str] = &["E0464", "E0570", "E0601", "E0602", "E06
|
||||
|
||||
// Error codes that don't yet have a UI test. This list will eventually be removed.
|
||||
const IGNORE_UI_TEST_CHECK: &[&str] =
|
||||
&["E0461", "E0465", "E0476", "E0514", "E0523", "E0554", "E0640", "E0717", "E0729"];
|
||||
&["E0461", "E0465", "E0476", "E0514", "E0554", "E0640", "E0717", "E0729"];
|
||||
|
||||
macro_rules! verbose_print {
|
||||
($verbose:expr, $($fmt:tt)*) => {
|
||||
|
14
tests/ui/error-codes/E0523.rs
Normal file
14
tests/ui/error-codes/E0523.rs
Normal file
@ -0,0 +1,14 @@
|
||||
// aux-build:crateresolve1-1.rs
|
||||
// aux-build:crateresolve1-2.rs
|
||||
// aux-build:crateresolve1-3.rs
|
||||
|
||||
// normalize-stderr-test: "\.nll/" -> "/"
|
||||
// normalize-stderr-test: "\\\?\\" -> ""
|
||||
// normalize-stderr-test: "(lib)?crateresolve1-([123])\.[a-z]+" -> "libcrateresolve1-$2.somelib"
|
||||
|
||||
// NOTE: This test is duplicated from `tests/ui/crate-loading/crateresolve1.rs`.
|
||||
|
||||
extern crate crateresolve1;
|
||||
//~^ ERROR multiple candidates for `rlib` dependency `crateresolve1` found
|
||||
|
||||
fn main() {}
|
13
tests/ui/error-codes/E0523.stderr
Normal file
13
tests/ui/error-codes/E0523.stderr
Normal file
@ -0,0 +1,13 @@
|
||||
error[E0464]: multiple candidates for `rlib` dependency `crateresolve1` found
|
||||
--> $DIR/E0523.rs:11:1
|
||||
|
|
||||
LL | extern crate crateresolve1;
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
= note: candidate #1: $TEST_BUILD_DIR/error-codes/E0523/auxiliary/libcrateresolve1-1.somelib
|
||||
= note: candidate #2: $TEST_BUILD_DIR/error-codes/E0523/auxiliary/libcrateresolve1-2.somelib
|
||||
= note: candidate #3: $TEST_BUILD_DIR/error-codes/E0523/auxiliary/libcrateresolve1-3.somelib
|
||||
|
||||
error: aborting due to previous error
|
||||
|
||||
For more information about this error, try `rustc --explain E0464`.
|
Loading…
x
Reference in New Issue
Block a user