Skip to content

rustc: Fix extern crate being order dependent #29961

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

Merged
merged 1 commit into from
Nov 20, 2015

Conversation

alexcrichton
Copy link
Member

This commit fixes a bug where a crate could fail to compile depending on the
order of extern crate directives at the top of the crate. Specifically, if the
same crate is found at two locations, then if it's loaded first via --extern
it will not emit a duplicate warning, but if it's first loaded transitively
via a dep and then via --extern an error will be emitted.

The loader was tweaked to catch this scenario and coalesce the loading of these
two crates to prevent errors from being emitted.

This commit fixes a bug where a crate could fail to compile depending on the
order of `extern crate` directives at the top of the crate. Specifically, if the
same crate is found at two locations, then if it's loaded first via `--extern`
it will not emit a duplicate warning, but if it's first loaded transitively
via a dep and *then* via `--extern` an error will be emitted.

The loader was tweaked to catch this scenario and coalesce the loading of these
two crates to prevent errors from being emitted.
@rust-highfive
Copy link
Contributor

r? @arielb1

(rust_highfive has picked a reviewer for you, use r? to override)

@alexcrichton
Copy link
Member Author

r? @brson

@rust-highfive rust-highfive assigned brson and unassigned arielb1 Nov 20, 2015
@brson
Copy link
Contributor

brson commented Nov 20, 2015

@bors r+

@bors
Copy link
Collaborator

bors commented Nov 20, 2015

📌 Commit 24311d0 has been approved by brson

bors added a commit that referenced this pull request Nov 20, 2015
This commit fixes a bug where a crate could fail to compile depending on the
order of `extern crate` directives at the top of the crate. Specifically, if the
same crate is found at two locations, then if it's loaded first via `--extern`
it will not emit a duplicate warning, but if it's first loaded transitively
via a dep and *then* via `--extern` an error will be emitted.

The loader was tweaked to catch this scenario and coalesce the loading of these
two crates to prevent errors from being emitted.
@bors
Copy link
Collaborator

bors commented Nov 20, 2015

⌛ Testing commit 24311d0 with merge 731c0ce...

@bors bors merged commit 24311d0 into rust-lang:master Nov 20, 2015
@alexcrichton alexcrichton deleted the order-dependent branch January 21, 2016 01:31
alexcrichton added a commit to alexcrichton/rust that referenced this pull request May 20, 2016
Originally fixed in rust-lang#29961 the bug was unfortunately still present in the face
of crates using `#[macro_use]`. This commit refactors for the two code paths to
share common logic to ensure that they both pick up the same bug fix.

Closes rust-lang#33762
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

5 participants