Skip to content

Commit

Permalink
Fix mode generated in maybe_lib
Browse files Browse the repository at this point in the history
The new `mode` for the library dependency is dependent on the library target
rather than the target which is the reason for the dependency on the library!

Closes rust-lang/rust#50640
  • Loading branch information
alexcrichton committed May 11, 2018
1 parent 349f4a2 commit cfeb768
Show file tree
Hide file tree
Showing 2 changed files with 47 additions and 1 deletion.
2 changes: 1 addition & 1 deletion src/cargo/core/compiler/context/unit_dependencies.rs
Original file line number Diff line number Diff line change
Expand Up @@ -307,8 +307,8 @@ fn maybe_lib<'a>(
bcx: &BuildContext,
profile_for: ProfileFor,
) -> Option<(Unit<'a>, ProfileFor)> {
let mode = check_or_build_mode(&unit.mode, unit.target);
unit.pkg.targets().iter().find(|t| t.linkable()).map(|t| {
let mode = check_or_build_mode(&unit.mode, t);
let unit = new_unit(bcx, unit.pkg, t, profile_for, unit.kind.for_target(t), mode);
(unit, profile_for)
})
Expand Down
46 changes: 46 additions & 0 deletions tests/testsuite/check.rs
Original file line number Diff line number Diff line change
Expand Up @@ -897,3 +897,49 @@ fn check_artifacts() {
0
);
}

#[test]
fn proc_macro() {
let p = project("foo")
.file(
"Cargo.toml",
r#"
[package]
name = "demo"
version = "0.0.1"
[lib]
proc-macro = true
"#,
)
.file(
"src/lib.rs",
r#"
extern crate proc_macro;
use proc_macro::TokenStream;
#[proc_macro_derive(Foo)]
pub fn demo(_input: TokenStream) -> TokenStream {
"".parse().unwrap()
}
"#,
)
.file(
"src/main.rs",
r#"
#[macro_use]
extern crate demo;
#[derive(Foo)]
struct A;
fn main() {}
"#,
)
.build();
assert_that(
p.cargo("check").arg("-v").env("RUST_LOG", "cargo=trace"),
execs().with_status(0),
);
}

0 comments on commit cfeb768

Please sign in to comment.