Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

rustdoc panics with Unable to resolve external crate #72381

Closed
cipriancraciun opened this issue May 20, 2020 · 6 comments · Fixed by #80372
Closed

rustdoc panics with Unable to resolve external crate #72381

cipriancraciun opened this issue May 20, 2020 · 6 comments · Fixed by #80372
Assignees
Labels
A-resolve Area: Name resolution C-bug Category: This is a bug. E-easy Call for participation: Easy difficulty. Experience needed to fix: Not much. Good first issue. E-mentor Call for participation: This issue has a mentor. Use #t-compiler/help on Zulip for discussion. I-ICE Issue: The compiler panicked, giving an Internal Compilation Error (ICE) ❄️ T-rustdoc Relevant to the rustdoc team, which will review and decide on the PR/issue.

Comments

@cipriancraciun
Copy link

I'm running rustdoc via cargo doc on a small project with multiple crates via the workspaces feature, and I get the following error (I've sanitized the paths, project name and dependencies):

Documenting <project> v0.0.0 (/.../sources/...)
thread 'rustc' panicked at 'Unable to resolve external crate <dependency>', src/librustdoc/core.rs:354:33
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
error: Could not document `<project>`.

It always fails with random external dependencies or crates that are part of the workspace. It does succeed however for a crate without any dependencies.

I've tried with Rust 1.43.0 and 1.43.1, on openSUSE Tumbleweed Linux, both from the distributions repository (1.43.0) and rustup (1.43.1). I've also tried with latest nightly with the same outcome.

rustc --version --verbose:

rustc 1.43.1 (8d69840ab 2020-05-04)
binary: rustc
commit-hash: 8d69840ab92ea7f4d323420088dd8c9775f180cd
commit-date: 2020-05-04
host: x86_64-unknown-linux-gnu
release: 1.43.1
LLVM version: 9.0
Backtrace

~~~~ 0: 0x7fec4d588e84 - backtrace::backtrace::libunwind::trace::h5d52ba5f20882f09 at /cargo/registry/src/git.luolix.top-1ecc6299db9ec823/backtrace-0.3.44/src/backtrace/libunwind.rs:86 1: 0x7fec4d588e84 - backtrace::backtrace::trace_unsynchronized::hceee092869668a74 at /cargo/registry/src/git.luolix.top-1ecc6299db9ec823/backtrace-0.3.44/src/backtrace/mod.rs:66 2: 0x7fec4d588e84 - std::sys_common::backtrace::_print_fmt::ha312c2904605e4d5 at src/libstd/sys_common/backtrace.rs:78 3: 0x7fec4d588e84 - ::fmt::h5b9981092140b727 at src/libstd/sys_common/backtrace.rs:59 4: 0x7fec4d5c187c - core::fmt::write::h5f6d7d8de88b4173 at src/libcore/fmt/mod.rs:1063 5: 0x7fec4d57aba3 - std::io::Write::write_fmt::h893169117de3cc15 at src/libstd/io/mod.rs:1426 6: 0x7fec4d58dcb5 - std::sys_common::backtrace::_print::h8ab61d4120f7a335 at src/libstd/sys_common/backtrace.rs:62 7: 0x7fec4d58dcb5 - std::sys_common::backtrace::print::h8aae19fbb153bf2a at src/libstd/sys_common/backtrace.rs:49 8: 0x7fec4d58dcb5 - std::panicking::default_hook::{{closure}}::h1ee5b7d8b6f83429 at src/libstd/panicking.rs:204 9: 0x7fec4d58da02 - std::panicking::default_hook::hd6c32c13403f9210 at src/libstd/panicking.rs:224 10: 0x7fec4d58e312 - std::panicking::rust_panic_with_hook::h1f2449d529a25f22 at src/libstd/panicking.rs:470 11: 0x7fec4d58defb - rust_begin_unwind at src/libstd/panicking.rs:378 12: 0x7fec4d58de6b - std::panicking::begin_panic_fmt::h7c14cf40a8be97ee at src/libstd/panicking.rs:332 13: 0x563d34526ef8 - rustdoc::core::run_core::{{closure}}::{{closure}}::{{closure}}::{{closure}}::h5a5fec5e0f5685ac 14: 0x563d3450aada - rustc_interface::passes::BoxedResolver::access::{{closure}}::h9b9e71b1599a62a5 15: 0x7fec4e0049ec - rustc_interface::passes::configure_and_expand::{{closure}}::h91f469c3c3c046cf 16: 0x563d3450a3a6 - rustc_interface::passes::BoxedResolver::access::h7380bf3af1b357ea 17: 0x563d345fbb3b - rustc_interface::interface::run_compiler_in_existing_thread_pool::hbfb381d6a6b1c5d8 18: 0x563d345a606c - rustdoc::core::run_core::h3e13637dfb5154dd 19: 0x563d3440f2d0 - as core::ops::function::FnOnce<()>>::call_once::ha269444829893481 20: 0x563d3444a57b - std::panicking::try::do_call::h3fc76fb3531c3219 21: 0x7fec4d59f6b7 - __rust_maybe_catch_panic at src/libpanic_unwind/lib.rs:86 22: 0x563d3441034b - rustc_driver::catch_fatal_errors::h7a280b9cdf28f352 23: 0x563d343db6fd - rustdoc::main_options::h42dedd41a78b0329 24: 0x563d34446a57 - scoped_tls::ScopedKey::set::ha6b8c3cc8b8d950f 25: 0x563d3459f9e4 - rustc_ast::attr::with_globals::he8fa93d7ebdc5344 26: 0x563d343ab492 - std::sys_common::backtrace::__rust_begin_short_backtrace::h291078985b95d359 27: 0x7fec4d59f6b7 - __rust_maybe_catch_panic at src/libpanic_unwind/lib.rs:86 28: 0x563d3444cca6 - core::ops::function::FnOnce::call_once{{vtable.shim}}::hc250b6ab2be39f01 29: 0x7fec4d56a64f - as core::ops::function::FnOnce>::call_once::h36e46972b1b7f7b7 at /rustc/8d69840ab92ea7f4d323420088dd8c9775f180cd/src/liballoc/boxed.rs:1017 30: 0x7fec4d59dfbd - as core::ops::function::FnOnce>::call_once::hdde89c32ce6999de at /rustc/8d69840ab92ea7f4d323420088dd8c9775f180cd/src/liballoc/boxed.rs:1017 31: 0x7fec4d59dfbd - std::sys_common::thread::start_thread::h5ae3fdd4dad03dd5 at src/libstd/sys_common/thread.rs:13 32: 0x7fec4d59dfbd - std::sys::unix::thread::Thread::new::thread_start::h76b2403b2434c4c0 at src/libstd/sys/unix/thread.rs:80 33: 0x7fec4d4deefa - start_thread 34: 0x7fec4d3f33bf - __GI___clone 35: 0x0 - ~~~~

@cipriancraciun cipriancraciun added the C-bug Category: This is a bug. label May 20, 2020
@jonas-schievink jonas-schievink added I-ICE Issue: The compiler panicked, giving an Internal Compilation Error (ICE) ❄️ T-rustdoc Relevant to the rustdoc team, which will review and decide on the PR/issue. labels May 20, 2020
@cipriancraciun
Copy link
Author

I've tried to create a minimal example that would trigger the issue but failed to do so...

Perhaps one of my dependencies generates the issue? (However in my workspace I also have one crate that depends only on another internal one (which itself has no further dependencies) and it still fails.)

I'm willing to experiment if someone gives me some pointers!

@JohnTitor JohnTitor added the E-needs-mcve Call for participation: This issue has a repro, but needs a Minimal Complete and Verifiable Example label May 20, 2020
@cipriancraciun
Copy link
Author

cipriancraciun commented May 22, 2020

OK, I've found the issue:

  • create two libraries lib-1 and lib-2, with nothing more than an edition 2018 Cargo.toml and an empty lib.rs as their code;
  • make them part of the same workspace;
  • make lib-2 depend on lib-1;
  • add a #![ no_implicit_prelude ] in lib-2 (the library that depends on lib-1);

At the following link there is a simple project that rebuilds all of the above:

cargo build succeeds, meanwhile cargo doc fails with the aforementioned error.


It appears that by just adding use ::lib_1 (after the no implicit import prelude) is enough to make the documentation build.

A second solution would be to add extern crate lib_1; after the no import prelude annotation.

@jyn514
Copy link
Member

jyn514 commented Aug 25, 2020

Possibly related to #68427.

@jyn514 jyn514 removed the E-needs-mcve Call for participation: This issue has a repro, but needs a Minimal Complete and Verifiable Example label Nov 4, 2020
@aDotInTheVoid
Copy link
Member

Bisection

Regression in nightly-2019-11-15

  commit[0] 2019-11-13UTC: Auto merge of #66170 - ecstatic-morse:hir-const-check, r=Centril,oli-obk
  commit[1] 2019-11-13UTC: Auto merge of #66211 - kinnison:kinnison/fix-66159, r=GuillaumeGomez
  commit[2] 2019-11-14UTC: Auto merge of #66233 - cjgillot:constkind, r=oli-obk
  commit[3] 2019-11-14UTC: Auto merge of #66403 - JohnTitor:rollup-7obuivl, r=JohnTitor
  commit[4] 2019-11-14UTC: Auto merge of #66378 - rkruppe:revert-pr-65134, r=pnkfelix
  commit[5] 2019-11-14UTC: Auto merge of #66314 - GuillaumeGomez:move-error-codes, r=Centril

Most likely caused by #66211

Full bisection
$ cargo bisect-rustc  --script=./script.sh -v --preserve --start=2019-05-01
installing nightly-2019-05-01
testing...
RESULT: nightly-2019-05-01, ===> No

installing nightly-2020-11-28
cargo for x86_64-unknown-linux-gnu: 5.25 MB / 5.25 MB [=================================================================================================================] 100.00 % 10.61 MB/s testing...
RESULT: nightly-2020-11-28, ===> Yes

installing nightly-2020-02-13
cargo for x86_64-unknown-linux-gnu: 5.03 MB / 5.03 MB [==================================================================================================================] 100.00 % 2.68 MB/s testing...
RESULT: nightly-2020-02-13, ===> Yes

installing nightly-2019-09-22
cargo for x86_64-unknown-linux-gnu: 4.68 MB / 4.68 MB [==================================================================================================================] 100.00 % 3.97 MB/s testing...
RESULT: nightly-2019-09-22, ===> No

installing nightly-2019-12-03
cargo for x86_64-unknown-linux-gnu: 4.70 MB / 4.70 MB [==================================================================================================================] 100.00 % 3.33 MB/s testing...
RESULT: nightly-2019-12-03, ===> Yes

installing nightly-2019-10-28
cargo for x86_64-unknown-linux-gnu: 4.69 MB / 4.69 MB [==================================================================================================================] 100.00 % 3.81 MB/s testing...
RESULT: nightly-2019-10-28, ===> No

installing nightly-2019-11-15
cargo for x86_64-unknown-linux-gnu: 4.70 MB / 4.70 MB [==================================================================================================================] 100.00 % 2.33 MB/s testing...
RESULT: nightly-2019-11-15, ===> Yes

installing nightly-2019-11-06
cargo for x86_64-unknown-linux-gnu: 4.70 MB / 4.70 MB [==================================================================================================================] 100.00 % 4.07 MB/s testing...
RESULT: nightly-2019-11-06, ===> No

installing nightly-2019-11-10
cargo for x86_64-unknown-linux-gnu: 4.70 MB / 4.70 MB [==================================================================================================================] 100.00 % 3.94 MB/s testing...
RESULT: nightly-2019-11-10, ===> No

installing nightly-2019-11-12
cargo for x86_64-unknown-linux-gnu: 4.70 MB / 4.70 MB [==================================================================================================================] 100.00 % 4.01 MB/s testing...
RESULT: nightly-2019-11-12, ===> No

installing nightly-2019-11-13
cargo for x86_64-unknown-linux-gnu: 4.70 MB / 4.70 MB [==================================================================================================================] 100.00 % 3.98 MB/s testing...
RESULT: nightly-2019-11-13, ===> No

installing nightly-2019-11-14
cargo for x86_64-unknown-linux-gnu: 4.70 MB / 4.70 MB [==================================================================================================================] 100.00 % 4.02 MB/s testing...
RESULT: nightly-2019-11-14, ===> No

searched toolchains nightly-2019-05-01 through nightly-2020-11-28


********************************************************************************
Regression in nightly-2019-11-15
********************************************************************************

fetching https://static.rust-lang.org/dist/2019-11-14/channel-rust-nightly-git-commit-hash.txt
nightly manifest 2019-11-14: 40 B / 40 B [=============================================================================================================================] 100.00 % 490.60 KB/s converted 2019-11-14 to ded5ee0013f6126f885baf5e072c20ba8b86ee6a
fetching https://static.rust-lang.org/dist/2019-11-15/channel-rust-nightly-git-commit-hash.txt
nightly manifest 2019-11-15: 40 B / 40 B [=============================================================================================================================] 100.00 % 490.24 KB/s converted 2019-11-15 to 82cf3a4486bc882207a09bf0d9e2dea4632781aa
looking for regression commit between 2019-11-14 and 2019-11-15
cloning rust repository
fetching (via local git) commits from ded5ee0013f6126f885baf5e072c20ba8b86ee6a to 82cf3a4486bc882207a09bf0d9e2dea4632781aa
opening existing repository at "rust.git"
refreshing repository
looking up first commit
looking up second commit
checking that commits are by bors and thus have ci artifacts...
finding bors merge commits
found 6 bors merge commits in the specified range
  commit[0] 2019-11-13UTC: Auto merge of #66170 - ecstatic-morse:hir-const-check, r=Centril,oli-obk
  commit[1] 2019-11-13UTC: Auto merge of #66211 - kinnison:kinnison/fix-66159, r=GuillaumeGomez
  commit[2] 2019-11-14UTC: Auto merge of #66233 - cjgillot:constkind, r=oli-obk
  commit[3] 2019-11-14UTC: Auto merge of #66403 - JohnTitor:rollup-7obuivl, r=JohnTitor
  commit[4] 2019-11-14UTC: Auto merge of #66378 - rkruppe:revert-pr-65134, r=pnkfelix
  commit[5] 2019-11-14UTC: Auto merge of #66314 - GuillaumeGomez:move-error-codes, r=Centril
ERROR: no commits between ded5ee0013f6126f885baf5e072c20ba8b86ee6a and 82cf3a4486bc882207a09bf0d9e2dea4632781aa within last 167 days

This also means you can't document librustdoc.

Backtrace
./x.py doc src/librustdoc 
Updating only changed submodules
Submodules updated in 1.04 seconds
    Finished dev [unoptimized + debuginfo] target(s) in 14.93s
Documenting stage0 rustdoc (x86_64-unknown-linux-gnu)
Documenting stage0 compiler (x86_64-unknown-linux-gnu)
Building stage0 std artifacts (x86_64-unknown-linux-gnu -> x86_64-unknown-linux-gnu)
    Finished release [optimized] target(s) in 1.03s
Copying stage0 std from stage0 (x86_64-unknown-linux-gnu -> x86_64-unknown-linux-gnu / x86_64-unknown-linux-gnu)
Building stage0 compiler artifacts (x86_64-unknown-linux-gnu -> x86_64-unknown-linux-gnu)
    Finished release [optimized] target(s) in 6.04s
Copying stage0 rustc from stage0 (x86_64-unknown-linux-gnu -> x86_64-unknown-linux-gnu / x86_64-unknown-linux-gnu)
 Documenting coverage_test_macros v0.0.0 (/home/nixon/upstreams/rust/rust/compiler/rustc_mir/src/transform/coverage/test_macros)
    Checking measureme v9.0.0
    Checking tracing v0.1.19
    Checking sha-1 v0.9.1
    Checking sha2 v0.9.1
    Checking md-5 v0.9.1
    Checking chrono v0.4.15
    Checking synstructure v0.12.4
thread 'rustc' panicked at 'Unable to resolve external crate proc_macro2', src/librustdoc/core.rs:457:37
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace

error: internal compiler error: unexpected panic

error: Unrecognized option: 'crate-version'

error: could not document `coverage_test_macros`

Caused by:
  process didn't exit successfully: `/home/nixon/upstreams/rust/rust/build/bootstrap/debug/rustdoc --edition=2018 --crate-type proc-macro --crate-name coverage_test_macros compiler/rustc_mir/src/transform/coverage/test_macros/src/lib.rs -o /home/nixon/upstreams/rust/rust/build/x86_64-unknown-linux-gnu/stage0-rustc/doc --error-format=json --json=diagnostic-rendered-ansi -L dependency=/home/nixon/upstreams/rust/rust/build/x86_64-unknown-linux-gnu/stage0-rustc/release/deps --extern proc_macro2=/home/nixon/upstreams/rust/rust/build/x86_64-unknown-linux-gnu/stage0-rustc/release/deps/libproc_macro2-f29f2674397b203b.rmeta --extern proc_macro --crate-version 0.0.0` (exit code: 1)
warning: build failed, waiting for other jobs to finish...
error: build failed


command did not execute successfully: "/home/nixon/upstreams/rust/rust/build/x86_64-unknown-linux-gnu/stage0/bin/cargo" "doc" "--target" "x86_64-unknown-linux-gnu" "-Zbinary-dep-depinfo" "-j" "8" "--release" "--features" " llvm" "--manifest-path" "/home/nixon/upstreams/rust/rust/compiler/rustc/Cargo.toml" "--no-deps" "-p" "rustc_hir" "-p" "rustc_data_structures" "-p" "rustc_fs_util" "-p" "rustc_codegen_llvm" "-p" "rustc_codegen_ssa" "-p" "rustc_expand" "-p" "rustc_plugin_impl" "-p" "rustc_trait_selection" "-p" "rustc_llvm" "-p" "rustc_apfloat" "-p" "rustc_feature" "-p" "rustc_lint_defs" "-p" "rustc_driver" "-p" "rustc_privacy" "-p" "rustc_mir_build" "-p" "rustc_incremental" "-p" "rustc_ast_pretty" "-p" "rustc_infer" "-p" "rustc_passes" "-p" "rustc_ty_utils" "-p" "rustc_lexer" "-p" "rustc_graphviz" "-p" "rustc_error_codes" "-p" "rustc_metadata" "-p" "rustc_typeck" "-p" "rustc_index" "-p" "rustc_ast" "-p" "rustc_query_system" "-p" "rustc_builtin_macros" "-p" "rustc_lint" "-p" "rustc_span" "-p" "rustc_parse_format" "-p" "rustc_interface" "-p" "rustc_traits" "-p" "rustc_serialize" "-p" "rustc_ast_passes" "-p" "rustc_save_analysis" "-p" "rustc_macros" "-p" "rustc_middle" "-p" "rustc_resolve" "-p" "rustc_mir" "-p" "coverage_test_macros" "-p" "rustc_target" "-p" "rustc_hir_pretty" "-p" "rustc_parse" "-p" "rustc_symbol_mangling" "-p" "rustc_session" "-p" "rustc_arena" "-p" "rustc_errors" "-p" "rustc_ast_lowering" "-p" "rustc_attr"
expected success, got: exit code: 101


failed to run: /home/nixon/upstreams/rust/rust/build/bootstrap/debug/bootstrap doc src/librustdoc
Build completed unsuccessfully in 0:00:51

@jyn514
Copy link
Member

jyn514 commented Nov 28, 2020

@aDotInTheVoid the cause is already known: #68427 (comment). But I don't know why you say librustdoc can't be documented, it's right here on the site: https://doc.rust-lang.org/nightly/nightly-rustc/rustdoc/. Make sure you're passing --stage 1, it's stage 0 by default.

@jyn514
Copy link
Member

jyn514 commented Dec 15, 2020

@Nadrieril oh look, I knew I'd seen this bug before, apparently I just forgot.

The fix for this is to turn the panic! into a warn!.

@jyn514 jyn514 added E-easy Call for participation: Easy difficulty. Experience needed to fix: Not much. Good first issue. E-mentor Call for participation: This issue has a mentor. Use #t-compiler/help on Zulip for discussion. A-resolve Area: Name resolution labels Dec 15, 2020
@jyn514 jyn514 self-assigned this Dec 25, 2020
@bors bors closed this as completed in 901b9a2 Jan 8, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
A-resolve Area: Name resolution C-bug Category: This is a bug. E-easy Call for participation: Easy difficulty. Experience needed to fix: Not much. Good first issue. E-mentor Call for participation: This issue has a mentor. Use #t-compiler/help on Zulip for discussion. I-ICE Issue: The compiler panicked, giving an Internal Compilation Error (ICE) ❄️ T-rustdoc Relevant to the rustdoc team, which will review and decide on the PR/issue.
Projects
None yet
Development

Successfully merging a pull request may close this issue.

5 participants