rustdoc: Fix handling of compile errors when running rustdoc --test

* Call `abort_if_errors` so all errors actually stop rustdoc.
* Don't panic with "compiler aborted in rustdoc!", instead just exit to avoid the ugly panic message.
* Use rlib as the crate type when searching for doctests matching what is used for doc generation so `#[no_std]` crates don't create "no global memory allocator" errors.
This commit is contained in:
Oliver Middleton 2020-01-18 23:51:06 +00:00
parent 689fca01c5
commit 17f4cbc303
9 changed files with 69 additions and 3 deletions

View file

@ -43,7 +43,7 @@ pub fn run(options: Options) -> i32 {
let crate_types = if options.proc_macro_crate {
vec![config::CrateType::ProcMacro]
} else {
vec![config::CrateType::Dylib]
vec![config::CrateType::Rlib]
};
let sessopts = config::Options {
@ -117,12 +117,16 @@ pub fn run(options: Options) -> i32 {
intravisit::walk_crate(this, krate);
});
});
compiler.session().abort_if_errors();
let ret: Result<_, ErrorReported> = Ok(collector.tests);
ret
})
})
.expect("compiler aborted in rustdoc!");
});
let tests = match tests {
Ok(tests) => tests,
Err(ErrorReported) => return 1,
};
test_args.insert(0, "rustdoctest".to_string());

View file

@ -0,0 +1,8 @@
// compile-flags:--test
/// ```
/// assert!(true)
/// ```
pub fn f() {}
pub fn f() {}

View file

@ -0,0 +1,14 @@
error[E0428]: the name `f` is defined multiple times
--> $DIR/test-compile-fail1.rs:8:1
|
6 | pub fn f() {}
| ---------- previous definition of the value `f` here
7 |
8 | pub fn f() {}
| ^^^^^^^^^^ `f` redefined here
|
= note: `f` must be defined only once in the value namespace of this module
error: aborting due to previous error
For more information about this error, try `rustc --explain E0428`.

View file

@ -0,0 +1,3 @@
// compile-flags:--test
fail

View file

@ -0,0 +1,8 @@
error: expected one of `!` or `::`, found `<eof>`
--> $DIR/test-compile-fail2.rs:3:1
|
3 | fail
| ^^^^ expected one of `!` or `::`
error: aborting due to previous error

View file

@ -0,0 +1,3 @@
// compile-flags:--test
"fail

View file

@ -0,0 +1,8 @@
error: unterminated double quote string
--> $DIR/test-compile-fail3.rs:3:1
|
3 | "fail
| ^^^^^^
error: aborting due to previous error

View file

@ -0,0 +1,12 @@
// compile-flags:--test
// normalize-stdout-test: "src/test/rustdoc-ui" -> "$$DIR"
// build-pass
#![no_std]
extern crate alloc;
/// ```
/// assert!(true)
/// ```
pub fn f() {}

View file

@ -0,0 +1,6 @@
running 1 test
test $DIR/test-no_std.rs - f (line 9) ... ok
test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out