From 4160337c8553e1083b12632eed7a94e51d57ea91 Mon Sep 17 00:00:00 2001
From: David Mo <david.mo1@huawei.com>
Date: Fri, 1 Sep 2023 10:53:50 -0700
Subject: [PATCH] Tests crash from inappropriate use of common linkage

Normally, variables with common linkage must be zero-initialized. In Rust,
common linkage variables that are not zero-initialized causes a crash in the
compiler backend.

This commit adds a test case to confirm this behavior, which will inform us if
it changes in the future.
---
 .../linkage-attr/common-linkage-non-zero-init.rs   | 14 ++++++++++++++
 .../common-linkage-non-zero-init.stderr            |  3 +++
 2 files changed, 17 insertions(+)
 create mode 100644 tests/ui/linkage-attr/common-linkage-non-zero-init.rs
 create mode 100644 tests/ui/linkage-attr/common-linkage-non-zero-init.stderr

diff --git a/tests/ui/linkage-attr/common-linkage-non-zero-init.rs b/tests/ui/linkage-attr/common-linkage-non-zero-init.rs
new file mode 100644
index 0000000000000..ce8d9848e4250
--- /dev/null
+++ b/tests/ui/linkage-attr/common-linkage-non-zero-init.rs
@@ -0,0 +1,14 @@
+// build-fail
+// failure-status: 101
+// known-bug: #109681
+
+// This test verifies that we continue to hit the LLVM error for common linkage with non-zero
+// initializers, since it generates invalid LLVM IR.
+// Linkages are internal features marked as perma-unstable, so we don't need to fix the issue
+// for now.
+#![crate_type="lib"]
+#![feature(linkage)]
+
+#[linkage = "common"]
+#[no_mangle]
+pub static TEST: bool = true;
diff --git a/tests/ui/linkage-attr/common-linkage-non-zero-init.stderr b/tests/ui/linkage-attr/common-linkage-non-zero-init.stderr
new file mode 100644
index 0000000000000..667bb3ec130ed
--- /dev/null
+++ b/tests/ui/linkage-attr/common-linkage-non-zero-init.stderr
@@ -0,0 +1,3 @@
+'common' global must have a zero initializer!
+ptr @TEST
+LLVM ERROR: Broken module found, compilation aborted!