diff options
| author | Wesley Wiser <wesleywiser@microsoft.com> | 2021-08-20 16:25:39 -0400 |
|---|---|---|
| committer | Michael Woerister <michaelwoerister@posteo> | 2021-08-30 11:51:27 +0200 |
| commit | 846c372f86dfad597797ee73665f330fc557c63f (patch) | |
| tree | c677dfa15c8136df5f6b4eac93a756ada23e184e /compiler/rustc_codegen_ssa/src/back | |
| parent | 522f9757f6b9665b9452dea95fc42ebb604a05fe (diff) | |
| download | rust-846c372f86dfad597797ee73665f330fc557c63f.tar.gz rust-846c372f86dfad597797ee73665f330fc557c63f.zip | |
Don't allow both the `+bundle` and `+whole-archive` modifiers for rlibs
Diffstat (limited to 'compiler/rustc_codegen_ssa/src/back')
| -rw-r--r-- | compiler/rustc_codegen_ssa/src/back/link.rs | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/compiler/rustc_codegen_ssa/src/back/link.rs b/compiler/rustc_codegen_ssa/src/back/link.rs index 2e4cef39cfe..173b91e7903 100644 --- a/compiler/rustc_codegen_ssa/src/back/link.rs +++ b/compiler/rustc_codegen_ssa/src/back/link.rs @@ -255,6 +255,19 @@ fn link_rlib<'a, B: ArchiveBuilder<'a>>( // metadata of the rlib we're generating somehow. for lib in codegen_results.crate_info.used_libraries.iter() { match lib.kind { + NativeLibKind::Static { bundle: None | Some(true), whole_archive: Some(true) } + if flavor == RlibFlavor::Normal => + { + // Don't allow mixing +bundle with +whole_archive since an rlib may contain + // multiple native libs, some of which are +whole-archive and some of which are + // -whole-archive and it isn't clear how we can currently handle such a + // situation correctly. + // See https://github.com/rust-lang/rust/issues/88085#issuecomment-901050897 + sess.err( + "the linking modifiers `+bundle` and `+whole-archive` are not compatible \ + with each other when generating rlibs", + ); + } NativeLibKind::Static { bundle: None | Some(true), .. } => {} NativeLibKind::Static { bundle: Some(false), .. } | NativeLibKind::Dylib { .. } @@ -1223,6 +1236,7 @@ pub fn archive_search_paths(sess: &Session) -> Vec<PathBuf> { sess.target_filesearch(PathKind::Native).search_path_dirs() } +#[derive(PartialEq)] enum RlibFlavor { Normal, StaticlibBase, |
