blob: 5c9463b6e39263afa529221c7ef9b5055a9ed36a [file]
// ignore-tidy-linelength
//! Tests that deployment target linker warnings are shown as `linker-info`, not `linker-messages`
//! See <https://github.com/rust-lang/rust/issues/156714>
//@ only-macos
use run_make_support::external_deps::c_cxx_compiler::cc;
use run_make_support::external_deps::llvm::llvm_ar;
use run_make_support::{diff, rustc};
fn main() {
let ld64_obj = r"ld: warning: object file \(.*\) was built for newer .+ version \(\d+\.\d+\) than being linked \(\d+\.\d+\)";
let ld_prime_obj = r"ld: warning: object file \(.*\) was built for newer '.+' version \(\d+\.\d+\) than being linked \(\d+\.\d+\)";
let ld64_dylib = r"ld: warning: dylib \(.*\) was built for newer .+ version \(\d+\.\d+\) than being linked \(\d+\.\d+\)";
let ld_prime_dylib = r"ld: warning: building for [^ ,]+, but linking with dylib '[^']*' which was built for newer version [0-9.]+";
// Test 1: static archive (object file mismatch)
cc().arg("-c").arg("-mmacosx-version-min=15.5").output("foo.o").input("foo.c").run();
llvm_ar().obj_to_ar().output_input("libfoo.a", "foo.o").run();
let warnings = rustc()
.arg("-lstatic=foo")
.link_arg("-mmacosx-version-min=11.2")
.input("main.rs")
.crate_type("bin")
.run()
.stderr_utf8();
diff()
.expected_file("warnings.txt")
.actual_text("(rustc -W linker-info)", &warnings)
.normalize(ld64_obj, "NORMALIZED_OBJECT_DEPLOYMENT_MISMATCH_LINKER_WARNING")
.normalize(ld_prime_obj, "NORMALIZED_OBJECT_DEPLOYMENT_MISMATCH_LINKER_WARNING")
.run();
// Test 2: shared library (dylib mismatch)
cc().arg("-shared")
.arg("-mmacosx-version-min=15.5")
.output("libbar.dylib")
.input("foo.c")
.run();
let dylib_warnings = rustc()
.arg("-lbar")
.link_arg("-mmacosx-version-min=11.2")
.input("main_dylib.rs")
.crate_type("bin")
.run()
.stderr_utf8();
diff()
.expected_file("dylib_warnings.txt")
.actual_text("(rustc -W linker-info dylib)", &dylib_warnings)
.normalize(ld64_dylib, "NORMALIZED_DYLIB_DEPLOYMENT_MISMATCH_LINKER_WARNING")
.normalize(ld_prime_dylib, "NORMALIZED_DYLIB_DEPLOYMENT_MISMATCH_LINKER_WARNING")
.run();
}