https://github.com/skc7 created https://github.com/llvm/llvm-project/pull/182228

Upstreaming clangIR PR: https://github.com/llvm/clangir/pull/2098

This PR enables AppendingLinkage in CIR_GlobalLinkageKind.

>From 449debf1ddb539e19029098404a90a52a72d9a50 Mon Sep 17 00:00:00 2001
From: skc7 <[email protected]>
Date: Thu, 19 Feb 2026 11:57:59 +0530
Subject: [PATCH] [CIR] Enable AppendingLinkage in GlobalLinkage enum

---
 clang/include/clang/CIR/Dialect/IR/CIROps.td        | 3 +--
 clang/include/clang/CIR/Dialect/IR/CIROpsEnums.h    | 4 ++++
 clang/lib/CIR/Lowering/DirectToLLVM/LowerToLLVM.cpp | 2 ++
 clang/test/CIR/IR/invalid-linkage.cir               | 8 ++++++++
 4 files changed, 15 insertions(+), 2 deletions(-)
 create mode 100644 clang/test/CIR/IR/invalid-linkage.cir

diff --git a/clang/include/clang/CIR/Dialect/IR/CIROps.td 
b/clang/include/clang/CIR/Dialect/IR/CIROps.td
index cf312af194e85..05e3d70aebc9e 100644
--- a/clang/include/clang/CIR/Dialect/IR/CIROps.td
+++ b/clang/include/clang/CIR/Dialect/IR/CIROps.td
@@ -2345,9 +2345,8 @@ def CIR_GlobalLinkageKind : CIR_I32EnumAttr<
     I32EnumAttrCase<"WeakAnyLinkage", 4, "weak">,
     // Same, but only replaced by something equivalent.
     I32EnumAttrCase<"WeakODRLinkage", 5, "weak_odr">,
-    // TODO: should we add something like appending linkage too?
     // Special purpose, only applies to global arrays
-    // I32EnumAttrCase<"AppendingLinkage", 6, "appending">,
+    I32EnumAttrCase<"AppendingLinkage", 6, "appending">,
     // Rename collisions when linking (static functions).
     I32EnumAttrCase<"InternalLinkage", 7, "internal">,
     // Like Internal, but omit from symbol table, prefix it with
diff --git a/clang/include/clang/CIR/Dialect/IR/CIROpsEnums.h 
b/clang/include/clang/CIR/Dialect/IR/CIROpsEnums.h
index dbd030446a6fc..6429ac8d5e93b 100644
--- a/clang/include/clang/CIR/Dialect/IR/CIROpsEnums.h
+++ b/clang/include/clang/CIR/Dialect/IR/CIROpsEnums.h
@@ -57,6 +57,9 @@ static bool isExternalWeakLinkage(GlobalLinkageKind linkage) {
 [[maybe_unused]] static bool isCommonLinkage(GlobalLinkageKind linkage) {
   return linkage == GlobalLinkageKind::CommonLinkage;
 }
+[[maybe_unused]] static bool isAppendingLinkage(GlobalLinkageKind linkage) {
+  return linkage == GlobalLinkageKind::AppendingLinkage;
+}
 [[maybe_unused]] static bool
 isValidDeclarationLinkage(GlobalLinkageKind linkage) {
   return isExternalWeakLinkage(linkage) || isExternalLinkage(linkage);
@@ -79,6 +82,7 @@ isValidDeclarationLinkage(GlobalLinkageKind linkage) {
     // The above three cannot be overridden but can be de-refined.
 
   case GlobalLinkageKind::ExternalLinkage:
+  case GlobalLinkageKind::AppendingLinkage:
   case GlobalLinkageKind::InternalLinkage:
   case GlobalLinkageKind::PrivateLinkage:
     return false;
diff --git a/clang/lib/CIR/Lowering/DirectToLLVM/LowerToLLVM.cpp 
b/clang/lib/CIR/Lowering/DirectToLLVM/LowerToLLVM.cpp
index 2fd80d5e91e86..39ac686b8268e 100644
--- a/clang/lib/CIR/Lowering/DirectToLLVM/LowerToLLVM.cpp
+++ b/clang/lib/CIR/Lowering/DirectToLLVM/LowerToLLVM.cpp
@@ -152,6 +152,8 @@ mlir::LLVM::Linkage convertLinkage(cir::GlobalLinkageKind 
linkage) {
   using LLVM = mlir::LLVM::Linkage;
 
   switch (linkage) {
+  case CIR::AppendingLinkage:
+    return LLVM::Appending;
   case CIR::AvailableExternallyLinkage:
     return LLVM::AvailableExternally;
   case CIR::CommonLinkage:
diff --git a/clang/test/CIR/IR/invalid-linkage.cir 
b/clang/test/CIR/IR/invalid-linkage.cir
new file mode 100644
index 0000000000000..23771b14fcac9
--- /dev/null
+++ b/clang/test/CIR/IR/invalid-linkage.cir
@@ -0,0 +1,8 @@
+// Test that cir.global requires a valid linkage attribute
+// RUN: cir-opt %s -verify-diagnostics
+
+!u32i = !cir.int<u, 32>
+module {
+  // expected-error@+1 {{expected string or keyword containing one of the 
following enum values for attribute 'linkage' [external, available_externally, 
linkonce, linkonce_odr, weak, weak_odr, appending, internal, cir_private, 
extern_weak, common]}}
+  cir.global @a = #cir.const_array<[0 : !u8i, -23 : !u8i, 33 : !u8i] : 
!cir.array<!u32i x 3>>
+}

_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to