Skip to content

Commit

Permalink
Auto merge of rust-lang#105457 - GuillaumeGomez:prevent-auto-blanket-…
Browse files Browse the repository at this point in the history
…impl-retrieval, r=notriddle

rustdoc: Prevent auto/blanket impl retrieval if there were compiler errors

Fixes rust-lang#105404.

I'm not sure happy about this fix but since it's how passes work (ie, even if there are errors, it runs all passes), I think it's fine as is.

Just as a sidenote: I also gave a try to prevent running all passes in case there were compiler errors but then a lot of rustdoc tests were failing so I went for this fix instead.

r? `@notriddle`
  • Loading branch information
bors committed Dec 11, 2022
2 parents e1c9121 + 183a770 commit b3ddfeb
Show file tree
Hide file tree
Showing 3 changed files with 45 additions and 0 deletions.
6 changes: 6 additions & 0 deletions src/librustdoc/passes/collect_trait_impls.rs
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,12 @@ pub(crate) const COLLECT_TRAIT_IMPLS: Pass = Pass {
};

pub(crate) fn collect_trait_impls(mut krate: Crate, cx: &mut DocContext<'_>) -> Crate {
// We need to check if there are errors before running this pass because it would crash when
// we try to get auto and blanket implementations.
if cx.tcx.sess.diagnostic().has_errors_or_lint_errors().is_some() {
return krate;
}

let synth_impls = cx.sess().time("collect_synthetic_impls", || {
let mut synth = SyntheticImplCollector { cx, impls: Vec::new() };
synth.visit_crate(&krate);
Expand Down
13 changes: 13 additions & 0 deletions src/test/rustdoc-ui/unable-fulfill-trait.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
// This test ensures that it's not crashing rustdoc.

pub struct Foo<'a, 'b, T> {
field1: dyn Bar<'a, 'b,>,
//~^ ERROR
//~^^ ERROR
}

pub trait Bar<'x, 's, U>
where U: 'x,
Self:'x,
Self:'s
{}
26 changes: 26 additions & 0 deletions src/test/rustdoc-ui/unable-fulfill-trait.stderr
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
error[E0107]: this trait takes 1 generic argument but 0 generic arguments were supplied
--> $DIR/unable-fulfill-trait.rs:4:17
|
LL | field1: dyn Bar<'a, 'b,>,
| ^^^ expected 1 generic argument
|
note: trait defined here, with 1 generic parameter: `U`
--> $DIR/unable-fulfill-trait.rs:9:11
|
LL | pub trait Bar<'x, 's, U>
| ^^^ -
help: add missing generic argument
|
LL | field1: dyn Bar<'a, 'b, U,>,
| +++

error[E0227]: ambiguous lifetime bound, explicit lifetime bound required
--> $DIR/unable-fulfill-trait.rs:4:13
|
LL | field1: dyn Bar<'a, 'b,>,
| ^^^^^^^^^^^^^^^^

error: aborting due to 2 previous errors

Some errors have detailed explanations: E0107, E0227.
For more information about an error, try `rustc --explain E0107`.

0 comments on commit b3ddfeb

Please sign in to comment.