Auto merge of #88368 - jyn514:metadata-error, r=petrochenkov
Improve error when an .rlib can't be parsed
This usually describes either an error in the compiler itself or some
sort of IO error. Either way, we should report it to the user rather
than just saying "crate not found".
This only gives an error if the crate couldn't be loaded at all - if the
compiler finds another .rlib or .rmeta file which was valid, it will
continue to compile the crate.
Example output:
```
error[E0785]: found invalid metadata files for crate `foo`
--> bar.rs:3:24
|
3 | println!("{}", foo::FOO_11_49[0]);
| ^^^
|
= warning: failed to parse rlib '/home/joshua/test-rustdoc/libfoo.rlib': Invalid archive extended name offset
```
cc `@ehuss`
This commit is contained in:
commit
5fa94f3c57
9 changed files with 118 additions and 16 deletions
|
|
@ -3,4 +3,4 @@
|
|||
all:
|
||||
touch $(TMPDIR)/lib.rmeta
|
||||
$(AR) crus $(TMPDIR)/libfoo-ffffffff-1.0.rlib $(TMPDIR)/lib.rmeta
|
||||
$(RUSTC) foo.rs 2>&1 | $(CGREP) "can't find crate for"
|
||||
$(RUSTC) foo.rs 2>&1 | $(CGREP) "found invalid metadata"
|
||||
|
|
|
|||
7
src/test/run-make/invalid-so/Makefile
Normal file
7
src/test/run-make/invalid-so/Makefile
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
include ../../run-make-fulldeps/tools.mk
|
||||
|
||||
DYLIB_NAME := $(shell echo | $(RUSTC) --crate-name foo --crate-type dylib --print file-names -)
|
||||
|
||||
all:
|
||||
echo >> $(TMPDIR)/$(DYLIB_NAME)
|
||||
$(RUSTC) --crate-type lib --extern foo=$(TMPDIR)/$(DYLIB_NAME) bar.rs 2>&1 | $(CGREP) 'invalid metadata files for crate `foo`'
|
||||
1
src/test/run-make/invalid-so/bar.rs
Normal file
1
src/test/run-make/invalid-so/bar.rs
Normal file
|
|
@ -0,0 +1 @@
|
|||
extern crate foo;
|
||||
0
src/test/ui/crate-loading/auxiliary/libfoo.rlib
Normal file
0
src/test/ui/crate-loading/auxiliary/libfoo.rlib
Normal file
8
src/test/ui/crate-loading/invalid-rlib.rs
Normal file
8
src/test/ui/crate-loading/invalid-rlib.rs
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
// compile-flags: --crate-type lib --extern foo={{src-base}}/crate-loading/auxiliary/libfoo.rlib
|
||||
// normalize-stderr-test: "failed to mmap file '.*auxiliary/libfoo.rlib':.*" -> "failed to mmap file 'auxiliary/libfoo.rlib'"
|
||||
// don't emit warn logging, it's basically the same as the errors and it's annoying to normalize
|
||||
// rustc-env:RUSTC_LOG=error
|
||||
// edition:2018
|
||||
#![no_std]
|
||||
use ::foo; //~ ERROR invalid metadata files for crate `foo`
|
||||
//~| NOTE failed to mmap file
|
||||
11
src/test/ui/crate-loading/invalid-rlib.stderr
Normal file
11
src/test/ui/crate-loading/invalid-rlib.stderr
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
error[E0786]: found invalid metadata files for crate `foo`
|
||||
--> $DIR/invalid-rlib.rs:7:7
|
||||
|
|
||||
LL | use ::foo;
|
||||
| ^^^
|
||||
|
|
||||
= note: failed to mmap file 'auxiliary/libfoo.rlib'
|
||||
|
||||
error: aborting due to previous error
|
||||
|
||||
For more information about this error, try `rustc --explain E0786`.
|
||||
Loading…
Add table
Add a link
Reference in a new issue