Skip to content

rustc: Fix mixing crates with different share_generics#64324

Merged
bors merged 3 commits intorust-lang:masterfrom
alexcrichton:share-generics-again
Sep 25, 2019
Merged

rustc: Fix mixing crates with different share_generics#64324
bors merged 3 commits intorust-lang:masterfrom
alexcrichton:share-generics-again

Conversation

@alexcrichton
Copy link
Member

@alexcrichton alexcrichton commented Sep 9, 2019

This commit addresses #64319 by removing the dylib crate type from the
list of crate type that exports generic symbols. The bug in #64319
arises because a dylib crate type was trying to export a symbol in an
uptream crate but it miscalculated the symbol name of the uptream
symbol. This isn't really necessary, though, since dylib crates aren't
that heavily used, so we can just conservatively say that the dylib
crate type never exports generic symbols, forcibly removing them from
the exported symbol lists if were to otherwise find them.

The fix here happens in two places:

  • First is in the local_crate_exports_generics method, indicating that
    it's now false for the Dylib crate type. Only rlibs actually
    export generics at this point.

  • Next is when we load exported symbols from upstream crate. If, for our
    compilation session, the crate may be included from a dynamic library,
    then its generic symbols are removed. When the crate was linked into a
    dynamic library its symbols weren't exported, so we can't consider
    them a candidate to link against.

Overally this should avoid situations where we incorrectly calculate the
upstream symbol names in the face of differnet share_generics options,
ultimately...

Closes #64319

Loading
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Symbol names may not correctly account for optimization level differences between crates

8 participants