From 3b2cfa574699d3d92c1114837e347dd7ee248fcb Mon Sep 17 00:00:00 2001 From: Josh Stone Date: Sat, 20 Nov 2021 16:29:15 -0800 Subject: Add another test variant of issue-91050 Co-authored-by: Simonas Kazlauskas --- src/test/ui/issues/issue-91050-1.rs | 34 ++++++++++++++++++++++++++++++++++ src/test/ui/issues/issue-91050-2.rs | 24 ++++++++++++++++++++++++ src/test/ui/issues/issue-91050.rs | 34 ---------------------------------- 3 files changed, 58 insertions(+), 34 deletions(-) create mode 100644 src/test/ui/issues/issue-91050-1.rs create mode 100644 src/test/ui/issues/issue-91050-2.rs delete mode 100644 src/test/ui/issues/issue-91050.rs (limited to 'src') diff --git a/src/test/ui/issues/issue-91050-1.rs b/src/test/ui/issues/issue-91050-1.rs new file mode 100644 index 00000000000..403a41462ef --- /dev/null +++ b/src/test/ui/issues/issue-91050-1.rs @@ -0,0 +1,34 @@ +// build-pass +// compile-flags: --crate-type=rlib --emit=llvm-ir -Cno-prepopulate-passes + +// This test declares globals by the same name with different types, which +// caused problems because Module::getOrInsertGlobal would return a Constant* +// bitcast instead of a GlobalVariable* that could access linkage/visibility. +// In alt builds with LLVM assertions this would fail: +// +// rustc: /checkout/src/llvm-project/llvm/include/llvm/Support/Casting.h:269: +// typename cast_retty::ret_type llvm::cast(Y *) [X = llvm::GlobalValue, Y = llvm::Value]: +// Assertion `isa(Val) && "cast() argument of incompatible type!"' failed. +// +// In regular builds, the bad cast was UB, like "Invalid LLVMRustVisibility value!" + +pub mod before { + #[no_mangle] + pub static GLOBAL1: [u8; 1] = [1]; +} + +pub mod inner { + extern "C" { + pub static GLOBAL1: u8; + pub static GLOBAL2: u8; + } + + pub fn call() { + drop(unsafe { (GLOBAL1, GLOBAL2) }); + } +} + +pub mod after { + #[no_mangle] + pub static GLOBAL2: [u8; 1] = [2]; +} diff --git a/src/test/ui/issues/issue-91050-2.rs b/src/test/ui/issues/issue-91050-2.rs new file mode 100644 index 00000000000..2ff954d15ca --- /dev/null +++ b/src/test/ui/issues/issue-91050-2.rs @@ -0,0 +1,24 @@ +// build-pass +// compile-flags: --crate-type=rlib --emit=llvm-ir -Cno-prepopulate-passes + +// This is a variant of issue-91050-1.rs -- see there for an explanation. + +pub mod before { + extern "C" { + pub static GLOBAL1: [u8; 1]; + } + + pub unsafe fn do_something_with_array() -> u8 { + GLOBAL1[0] + } +} + +pub mod inner { + extern "C" { + pub static GLOBAL1: u8; + } + + pub unsafe fn call() -> u8 { + GLOBAL1 + 42 + } +} diff --git a/src/test/ui/issues/issue-91050.rs b/src/test/ui/issues/issue-91050.rs deleted file mode 100644 index 50763d30931..00000000000 --- a/src/test/ui/issues/issue-91050.rs +++ /dev/null @@ -1,34 +0,0 @@ -// build-pass -// compile-flags: --crate-type lib -Ccodegen-units=1 - -// This test declares globals by the same name with different types, which -// caused problems because Module::getOrInsertGlobal would return a Constant* -// bitcast instead of a GlobalVariable* that could access linkage/visibility. -// In alt builds with LLVM assertions this would fail: -// -// rustc: /checkout/src/llvm-project/llvm/include/llvm/Support/Casting.h:269: -// typename cast_retty::ret_type llvm::cast(Y *) [X = llvm::GlobalValue, Y = llvm::Value]: -// Assertion `isa(Val) && "cast() argument of incompatible type!"' failed. -// -// In regular builds, the bad cast was UB, like "Invalid LLVMRustVisibility value!" - -pub mod before { - #[no_mangle] - pub static GLOBAL1: [u8; 1] = [1]; -} - -pub mod inner { - extern "C" { - pub static GLOBAL1: u8; - pub static GLOBAL2: u8; - } - - pub fn call() { - drop(unsafe { (GLOBAL1, GLOBAL2) }); - } -} - -pub mod after { - #[no_mangle] - pub static GLOBAL2: [u8; 1] = [2]; -} -- cgit 1.4.1-3-g733a5