Skip to content

Commit 26708aa

Browse files
committed
Don't require --verbose to show linker stdout
1 parent b757663 commit 26708aa

File tree

7 files changed

+28
-29
lines changed

7 files changed

+28
-29
lines changed

Diff for: compiler/rustc_codegen_ssa/src/back/link.rs

+7-4
Original file line numberDiff line numberDiff line change
@@ -1040,6 +1040,11 @@ fn link_natively(
10401040
sess.dcx().abort_if_errors();
10411041
}
10421042

1043+
let stderr = escape_string(&prog.stderr);
1044+
let stdout = escape_string(&prog.stdout);
1045+
info!("linker stderr:\n{}", &stderr);
1046+
info!("linker stdout:\n{}", &stdout);
1047+
10431048
let (level, src) = codegen_results.crate_info.lint_levels.linker_messages;
10441049
let lint = |msg| {
10451050
lint_level(sess, LINKER_MESSAGES, level, src, None, |diag| {
@@ -1049,16 +1054,14 @@ fn link_natively(
10491054

10501055
if !prog.stderr.is_empty() {
10511056
// We already print `warning:` at the start of the diagnostic. Remove it from the linker output if present.
1052-
let stderr = escape_string(&prog.stderr);
1053-
debug!("original stderr: {stderr}");
10541057
let stderr = stderr
10551058
.strip_prefix("warning: ")
10561059
.unwrap_or(&stderr)
10571060
.replace(": warning: ", ": ");
10581061
lint(format!("linker stderr: {stderr}"));
10591062
}
1060-
if !prog.stdout.is_empty() && sess.opts.verbose {
1061-
lint(format!("linker stdout: {}", escape_string(&prog.stdout)))
1063+
if !prog.stdout.is_empty() {
1064+
lint(format!("linker stdout: {}", stdout))
10621065
}
10631066
}
10641067
Err(e) => {

Diff for: compiler/rustc_passes/src/check_attr.rs

+13-4
Original file line numberDiff line numberDiff line change
@@ -2338,11 +2338,20 @@ impl<'tcx> CheckAttrVisitor<'tcx> {
23382338
})
23392339
{
23402340
if hir_id != CRATE_HIR_ID {
2341-
let err = match attr.style {
2342-
ast::AttrStyle::Outer => errors::OuterCrateLevelAttr,
2343-
ast::AttrStyle::Inner => errors::OuterCrateLevelAttr,
2341+
match attr.style {
2342+
ast::AttrStyle::Outer => self.tcx.emit_node_span_lint(
2343+
UNUSED_ATTRIBUTES,
2344+
hir_id,
2345+
attr.span,
2346+
errors::OuterCrateLevelAttr,
2347+
),
2348+
ast::AttrStyle::Inner => self.tcx.emit_node_span_lint(
2349+
UNUSED_ATTRIBUTES,
2350+
hir_id,
2351+
attr.span,
2352+
errors::InnerCrateLevelAttr,
2353+
),
23442354
};
2345-
self.tcx.emit_node_span_lint(UNUSED_ATTRIBUTES, hir_id, attr.span, err);
23462355
return;
23472356
} else {
23482357
let never_needs_link = self

Diff for: tests/run-make/linker-warning/rmake.rs

+1-6
Original file line numberDiff line numberDiff line change
@@ -14,16 +14,11 @@ fn main() {
1414
let warnings = run_rustc().link_arg("run_make_warn").run();
1515
warnings.assert_stderr_contains("warning: linker stderr: bar");
1616

17-
// Make sure it shows stdout, but only when --verbose is passed
17+
// Make sure it shows stdout
1818
run_rustc()
1919
.link_arg("run_make_info")
20-
.verbose()
2120
.run()
2221
.assert_stderr_contains("warning: linker stdout: foo");
23-
run_rustc()
24-
.link_arg("run_make_info")
25-
.run()
26-
.assert_stderr_not_contains("warning: linker stdout: foo");
2722

2823
// Make sure we short-circuit this new path if the linker exits with an error
2924
// (so the diagnostic is less verbose)

Diff for: tests/run-make/rust-lld-by-default-beta-stable/rmake.rs

+3-2
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ use run_make_support::rustc;
1212
fn main() {
1313
// A regular compilation should not use rust-lld by default. We'll check that by asking the
1414
// linker to display its version number with a link-arg.
15-
let output = rustc().verbose().link_arg("-Wl,-v").input("main.rs").run();
15+
let output = rustc().link_arg("-Wl,-v").input("main.rs").run();
1616
assert!(
1717
!find_lld_version_in_logs(output.stderr_utf8()),
1818
"the LLD version string should not be present in the output logs:\n{}",
@@ -21,6 +21,7 @@ fn main() {
2121
}
2222

2323
fn find_lld_version_in_logs(stderr: String) -> bool {
24-
let lld_version_re = Regex::new(r"^LLD [0-9]+\.[0-9]+\.[0-9]+").unwrap();
24+
let lld_version_re =
25+
Regex::new(r"^warning: linker stdout: LLD [0-9]+\.[0-9]+\.[0-9]+").unwrap();
2526
stderr.lines().any(|line| lld_version_re.is_match(line.trim()))
2627
}

Diff for: tests/run-make/rust-lld-by-default-nightly/rmake.rs

+2-3
Original file line numberDiff line numberDiff line change
@@ -12,16 +12,15 @@ use run_make_support::rustc;
1212
fn main() {
1313
// A regular compilation should use rust-lld by default. We'll check that by asking the linker
1414
// to display its version number with a link-arg.
15-
let output = rustc().verbose().link_arg("-Wl,-v").input("main.rs").run();
15+
let output = rustc().link_arg("-Wl,-v").input("main.rs").run();
1616
assert!(
1717
find_lld_version_in_logs(output.stderr_utf8()),
1818
"the LLD version string should be present in the output logs:\n{}",
1919
output.stderr_utf8()
2020
);
2121

2222
// But it can still be disabled by turning the linker feature off.
23-
let output =
24-
rustc().verbose().link_arg("-Wl,-v").arg("-Zlinker-features=-lld").input("main.rs").run();
23+
let output = rustc().link_arg("-Wl,-v").arg("-Zlinker-features=-lld").input("main.rs").run();
2524
assert!(
2625
!find_lld_version_in_logs(output.stderr_utf8()),
2726
"the LLD version string should not be present in the output logs:\n{}",

Diff for: tests/run-make/rust-lld-custom-target/rmake.rs

-2
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@ fn main() {
1515
// Compile to a custom target spec with rust-lld enabled by default. We'll check that by asking
1616
// the linker to display its version number with a link-arg.
1717
let output = rustc()
18-
.verbose()
1918
.crate_type("cdylib")
2019
.target("custom-target.json")
2120
.link_arg("-Wl,-v")
@@ -29,7 +28,6 @@ fn main() {
2928

3029
// But it can also be disabled via linker features.
3130
let output = rustc()
32-
.verbose()
3331
.crate_type("cdylib")
3432
.target("custom-target.json")
3533
.arg("-Zlinker-features=-lld")

Diff for: tests/run-make/rust-lld/rmake.rs

+2-8
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@ fn main() {
1717
.arg("-Zlinker-features=+lld")
1818
.arg("-Clink-self-contained=+linker")
1919
.arg("-Zunstable-options")
20-
.verbose()
2120
.link_arg(linker_version_flag)
2221
.input("main.rs")
2322
.run();
@@ -28,12 +27,8 @@ fn main() {
2827
);
2928

3029
// It should not be used when we explicitly opt-out of lld.
31-
let output = rustc()
32-
.link_arg(linker_version_flag)
33-
.verbose()
34-
.arg("-Zlinker-features=-lld")
35-
.input("main.rs")
36-
.run();
30+
let output =
31+
rustc().link_arg(linker_version_flag).arg("-Zlinker-features=-lld").input("main.rs").run();
3732
assert!(
3833
!find_lld_version_in_logs(output.stderr_utf8()),
3934
"the LLD version string should not be present in the output logs:\n{}",
@@ -44,7 +39,6 @@ fn main() {
4439
// times to rustc.
4540
let output = rustc()
4641
.link_arg(linker_version_flag)
47-
.verbose()
4842
.arg("-Clink-self-contained=+linker")
4943
.arg("-Zunstable-options")
5044
.arg("-Zlinker-features=-lld")

0 commit comments

Comments
 (0)