Skip to content

Commit b5dad3a

Browse files
authored
Rollup merge of #40542 - abonander:issue_40535, r=jseyfried
Correctly get source for metatdata-only crate type Closes #40535 However, I'm not sure how to approach writing a regression test since I'm still working on a reduced test case from the code that caused the ICE in the first place. It's not enough to have an unknown `extern crate` in a metadata crate, it depends on a few extra arguments but I'm not sure which yet. Also replaced the `unwrap()` with a more informative `expect()`. r? @jseyfried
2 parents cc98dfc + 8a6ef50 commit b5dad3a

File tree

5 files changed

+51
-1
lines changed

5 files changed

+51
-1
lines changed

src/librustc_metadata/creader.rs

+2-1
Original file line numberDiff line numberDiff line change
@@ -236,7 +236,8 @@ impl<'a> CrateLoader<'a> {
236236
// path (this is a top-level dependency) as we don't want to
237237
// implicitly load anything inside the dependency lookup path.
238238
let prev_kind = source.dylib.as_ref().or(source.rlib.as_ref())
239-
.unwrap().1;
239+
.or(source.rmeta.as_ref())
240+
.expect("No sources for crate").1;
240241
if ret.is_none() && (prev_kind == kind || prev_kind == PathKind::All) {
241242
ret = Some(cnum);
242243
}
+11
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
# The ICE occurred in the following situation:
2+
# * `foo` declares `extern crate bar, baz`, depends only on `bar` (forgetting `baz` in `Cargo.toml`)
3+
# * `bar` declares and depends on `extern crate baz`
4+
# * All crates built in metadata-only mode (`cargo check`)
5+
all:
6+
# cc https://github.com/rust-lang/rust/issues/40623
7+
$(RUSTC) baz.rs --emit=metadata --out-dir=$(TMPDIR)
8+
$(RUSTC) bar.rs --emit=metadata --extern baz=$(TMPDIR)/libbaz.rmeta --out-dir=$(TMPDIR)
9+
$(RUSTC) foo.rs --emit=metadata --extern bar=$(TMPDIR)/libbar.rmeta --out-dir=$(TMPDIR) 2>&1 | \
10+
grep -vq "unexpectedly panicked"
11+
# ^ Succeeds if it doesn't find the ICE message

src/test/run-make/issue-40535/bar.rs

+13
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
// Copyright 2017 The Rust Project Developers. See the COPYRIGHT
2+
// file at the top-level directory of this distribution and at
3+
// http://rust-lang.org/COPYRIGHT.
4+
//
5+
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
6+
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
7+
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
8+
// option. This file may not be copied, modified, or distributed
9+
// except according to those terms.
10+
11+
#![crate_type = "lib"]
12+
13+
extern crate baz;

src/test/run-make/issue-40535/baz.rs

+11
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
// Copyright 2017 The Rust Project Developers. See the COPYRIGHT
2+
// file at the top-level directory of this distribution and at
3+
// http://rust-lang.org/COPYRIGHT.
4+
//
5+
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
6+
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
7+
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
8+
// option. This file may not be copied, modified, or distributed
9+
// except according to those terms.
10+
11+
#![crate_type = "lib"]

src/test/run-make/issue-40535/foo.rs

+14
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
// Copyright 2017 The Rust Project Developers. See the COPYRIGHT
2+
// file at the top-level directory of this distribution and at
3+
// http://rust-lang.org/COPYRIGHT.
4+
//
5+
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
6+
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
7+
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
8+
// option. This file may not be copied, modified, or distributed
9+
// except according to those terms.
10+
11+
#![crate_type = "lib"]
12+
13+
extern crate bar;
14+
extern crate baz;

0 commit comments

Comments
 (0)