diff options
| author | Jacob Pratt <jacob@jhpratt.dev> | 2025-05-29 04:49:40 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-05-29 04:49:40 +0200 |
| commit | 394fde04a85212014faf84044be4e4237c03c603 (patch) | |
| tree | 958b2c4d873d8e1c222faa335420b71bf8059b94 /compiler/rustc_codegen_ssa/src | |
| parent | d3c605a0519b76e114ebd6cd72f93b53a55ad5bf (diff) | |
| parent | f66787a08d57dc1296619b314d2be596085bfeef (diff) | |
| download | rust-394fde04a85212014faf84044be4e4237c03c603.tar.gz rust-394fde04a85212014faf84044be4e4237c03c603.zip | |
Rollup merge of #138139 - xizheyin:issue-137384, r=ChrisDenton
Emit warning while outputs is not exe and prints linkage info cc #137384 ```bash $ rustc +stage1 /dev/null --print native-static-libs --crate-type staticlib --emit metadata warning: skipping link step due to conflict: cannot output linkage information without emitting executable note: consider emitting executable to print link information warning: 1 warning emitted ```
Diffstat (limited to 'compiler/rustc_codegen_ssa/src')
| -rw-r--r-- | compiler/rustc_codegen_ssa/src/back/link.rs | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/compiler/rustc_codegen_ssa/src/back/link.rs b/compiler/rustc_codegen_ssa/src/back/link.rs index c5792da2678..b802284eb32 100644 --- a/compiler/rustc_codegen_ssa/src/back/link.rs +++ b/compiler/rustc_codegen_ssa/src/back/link.rs @@ -68,6 +68,23 @@ pub fn ensure_removed(dcx: DiagCtxtHandle<'_>, path: &Path) { } } +fn check_link_info_print_request(sess: &Session, crate_types: &[CrateType]) { + let print_native_static_libs = + sess.opts.prints.iter().any(|p| p.kind == PrintKind::NativeStaticLibs); + let has_staticlib = crate_types.iter().any(|ct| *ct == CrateType::Staticlib); + if print_native_static_libs { + if !has_staticlib { + sess.dcx() + .warn(format!("cannot output linkage information without staticlib crate-type")); + sess.dcx() + .note(format!("consider `--crate-type staticlib` to print linkage information")); + } else if !sess.opts.output_types.should_link() { + sess.dcx() + .warn(format!("cannot output linkage information when --emit link is not passed")); + } + } +} + /// Performs the linkage portion of the compilation phase. This will generate all /// of the requested outputs for this compilation session. pub fn link_binary( @@ -180,6 +197,8 @@ pub fn link_binary( } } + check_link_info_print_request(sess, &codegen_results.crate_info.crate_types); + // Remove the temporary object file and metadata if we aren't saving temps. sess.time("link_binary_remove_temps", || { // If the user requests that temporaries are saved, don't delete any. |
