[clang] [CIR] Reject unlowered language address spaces on CIR globals (PR #223660)
via cfe-commits
cfe-commits at lists.llvm.org
Tue Sep 15 04:30:46 PDT 2026
llvmorg-github-actions[bot] wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-clang
Author: Akimasa Watanuki (Men-cotton)
<details>
<summary>Changes</summary>
Diagnose a `LangAddressSpaceAttr` on `cir.global` before selecting the LLVM global address space. This keeps standalone global attributes from bypassing pointer conversion and silently falling back to address space zero.
Assisted-by: Codex / GPT-5.6 Sol
---
Full diff: https://github.com/llvm/llvm-project/pull/223660.diff
2 Files Affected:
- (modified) clang/lib/CIR/Lowering/DirectToLLVM/LowerToLLVM.cpp (+4)
- (added) clang/test/CIR/Lowering/unlowered-address-spaces.cir (+9)
``````````diff
diff --git a/clang/lib/CIR/Lowering/DirectToLLVM/LowerToLLVM.cpp b/clang/lib/CIR/Lowering/DirectToLLVM/LowerToLLVM.cpp
index 81a1bb2576f0a..e725b18f3ff81 100644
--- a/clang/lib/CIR/Lowering/DirectToLLVM/LowerToLLVM.cpp
+++ b/clang/lib/CIR/Lowering/DirectToLLVM/LowerToLLVM.cpp
@@ -3000,6 +3000,10 @@ CIRToLLVMGlobalOpLowering::matchAndRewriteRegionInitializedGlobal(
mlir::LogicalResult CIRToLLVMGlobalOpLowering::matchAndRewrite(
cir::GlobalOp op, OpAdaptor adaptor,
mlir::ConversionPatternRewriter &rewriter) const {
+ if (mlir::isa_and_present<cir::LangAddressSpaceAttr>(op.getAddrSpaceAttr()))
+ return op.emitError()
+ << "cannot lower a global with a language address space";
+
// If this global requires non-trivial initialization or destruction,
// that needs to be moved to runtime handlers during LoweringPrepare.
if (!op.getCtorRegion().empty() || !op.getDtorRegion().empty())
diff --git a/clang/test/CIR/Lowering/unlowered-address-spaces.cir b/clang/test/CIR/Lowering/unlowered-address-spaces.cir
new file mode 100644
index 0000000000000..0faf18e5d0067
--- /dev/null
+++ b/clang/test/CIR/Lowering/unlowered-address-spaces.cir
@@ -0,0 +1,9 @@
+// RUN: cir-opt %s --split-input-file --cir-to-llvm -verify-diagnostics
+
+!s32i = !cir.int<s, 32>
+
+module attributes {cir.triple = "spirv64-unknown-unknown"} {
+ // expected-error @below {{cannot lower a global with a language address space}}
+ // expected-error @below {{failed to legalize operation 'cir.global'}}
+ cir.global external lang_address_space(offload_global) @global = #cir.int<1> : !s32i
+}
``````````
</details>
https://github.com/llvm/llvm-project/pull/223660
More information about the cfe-commits
mailing list