// LLVM's profiling instrumentation adds a few symbols that are used by the profiler runtime. // Since these show up as globals in the LLVM IR, the compiler generates dllimport-related // __imp_ stubs for them. This can lead to linker errors because the instrumentation // symbols have weak linkage or are in a comdat section, but the __imp_ stubs aren't. // Since profiler-related symbols were excluded from stub-generation in #59812, this has // been fixed, and this test checks that the llvm profile symbol appear, but without the // anomalous __imp_ stubs. // See https://github.com/rust-lang/rust/pull/59812 use run_make_support::{cwd, rfs, rustc}; fn main() { rustc() .input("test.rs") .emit("llvm-ir") .opt() .codegen_units(1) .profile_generate(cwd()) .arg("-Zno-profiler-runtime") .run(); let out = rfs::read_to_string("test.ll"); // We expect symbols starting with "__llvm_profile_". assert!(out.contains("__llvm_profile_")); // We do NOT expect the "__imp_" version of these symbols. assert!(!out.contains("__imp___llvm_profile_")); // 64 bit assert!(!out.contains("__imp____llvm_profile_")); // 32 bit }