[clang] [SPIR-V] Do not allow AS(2) to convert to generic (PR #175275)
via cfe-commits
cfe-commits at lists.llvm.org
Fri Jan 9 18:07:25 PST 2026
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-clang
Author: Joseph Huber (jhuber6)
<details>
<summary>Changes</summary>
Summary:
The original logic permitted this, while it's not permitted by the
standard.
---
Full diff: https://github.com/llvm/llvm-project/pull/175275.diff
2 Files Affected:
- (modified) clang/lib/Basic/Targets/SPIR.h (+2-1)
- (modified) clang/test/Sema/spirv-address-space.c (+1-2)
``````````diff
diff --git a/clang/lib/Basic/Targets/SPIR.h b/clang/lib/Basic/Targets/SPIR.h
index 8030aa9e10370..fad4c373d4725 100644
--- a/clang/lib/Basic/Targets/SPIR.h
+++ b/clang/lib/Basic/Targets/SPIR.h
@@ -325,7 +325,8 @@ class LLVM_LIBRARY_VISIBILITY BaseSPIRVTargetInfo : public BaseSPIRTargetInfo {
(isTargetAddressSpace(A) &&
toTargetAddressSpace(A) == /*Generic=*/4)) &&
isTargetAddressSpace(B) &&
- toTargetAddressSpace(B) <= /*Generic=*/4);
+ (toTargetAddressSpace(B) <= /*Generic=*/4 &&
+ toTargetAddressSpace(B) != /*Constant=*/2);
}
void getTargetDefines(const LangOptions &Opts,
diff --git a/clang/test/Sema/spirv-address-space.c b/clang/test/Sema/spirv-address-space.c
index 7ec41fd79bd96..fc212577b4841 100644
--- a/clang/test/Sema/spirv-address-space.c
+++ b/clang/test/Sema/spirv-address-space.c
@@ -9,7 +9,7 @@
#define _AS999 __attribute__((address_space(999)))
void *p1(void _AS1 *p) { return p; }
-void *p2(void _AS2 *p) { return p; }
+void *p2(void _AS2 *p) { return p; } // expected-error {{returning '_AS2 void *' from a function with result type 'void *' changes address space of pointer}}
void *p3(void _AS3 *p) { return p; }
void *p4(void _AS4 *p) { return p; }
void *p5(void _AS5 *p) { return p; } // expected-error {{returning '_AS5 void *' from a function with result type 'void *' changes address space of pointer}}
@@ -18,4 +18,3 @@ void *pc(void __attribute__((opencl_local)) *p) { return p; } // expected-error
void _AS1 *r0(void _AS1 *p) { return p; }
void _AS1 *r1(void *p) { return p; } // expected-error {{returning 'void *' from a function with result type '_AS1 void *' changes address space of pointer}}
void _AS1 *r2(void *p) { return (void _AS1 *)p; }
-
``````````
</details>
https://github.com/llvm/llvm-project/pull/175275
More information about the cfe-commits
mailing list