Skip to content

Commit

Permalink
rustdoc: Fix handling of compile errors when running rustdoc --test
Browse files Browse the repository at this point in the history
 * 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.
  • Loading branch information
ollie27 committed Jan 18, 2020
1 parent 689fca0 commit 17f4cbc
Show file tree
Hide file tree
Showing 9 changed files with 69 additions and 3 deletions.
10 changes: 7 additions & 3 deletions src/librustdoc/test.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand Down Expand Up @@ -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());

Expand Down
8 changes: 8 additions & 0 deletions src/test/rustdoc-ui/test-compile-fail1.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
// compile-flags:--test

/// ```
/// assert!(true)
/// ```
pub fn f() {}

pub fn f() {}
14 changes: 14 additions & 0 deletions src/test/rustdoc-ui/test-compile-fail1.stderr
Original file line number Diff line number Diff line change
@@ -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`.
3 changes: 3 additions & 0 deletions src/test/rustdoc-ui/test-compile-fail2.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
// compile-flags:--test

fail
8 changes: 8 additions & 0 deletions src/test/rustdoc-ui/test-compile-fail2.stderr
Original file line number Diff line number Diff line change
@@ -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

3 changes: 3 additions & 0 deletions src/test/rustdoc-ui/test-compile-fail3.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
// compile-flags:--test

"fail
8 changes: 8 additions & 0 deletions src/test/rustdoc-ui/test-compile-fail3.stderr
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
error: unterminated double quote string
--> $DIR/test-compile-fail3.rs:3:1
|
3 | "fail
| ^^^^^^

error: aborting due to previous error

12 changes: 12 additions & 0 deletions src/test/rustdoc-ui/test-no_std.rs
Original file line number Diff line number Diff line change
@@ -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() {}
6 changes: 6 additions & 0 deletions src/test/rustdoc-ui/test-no_std.stdout
Original file line number Diff line number Diff line change
@@ -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

0 comments on commit 17f4cbc

Please sign in to comment.