https://github.com/jhuber6 updated 
https://github.com/llvm/llvm-project/pull/175275

>From 9c7baadfe06cd80938516505a4289151024e81c5 Mon Sep 17 00:00:00 2001
From: Joseph Huber <[email protected]>
Date: Fri, 9 Jan 2026 20:05:32 -0600
Subject: [PATCH 1/2] [SPIR-V] Do not allow AS(2) to convert to generic

Summary:
The original logic permitted this, while it's not permitted by the
standard.
---
 clang/lib/Basic/Targets/SPIR.h        | 3 ++-
 clang/test/Sema/spirv-address-space.c | 3 +--
 2 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/clang/lib/Basic/Targets/SPIR.h b/clang/lib/Basic/Targets/SPIR.h
index 8030aa9e10370..3dd57257ebee5 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; }
-

>From 156616b7a2c0478754a66fa3f91fc258536cfae7 Mon Sep 17 00:00:00 2001
From: Joseph Huber <[email protected]>
Date: Mon, 12 Jan 2026 08:20:03 -0600
Subject: [PATCH 2/2] Update clang/lib/Basic/Targets/SPIR.h

Co-authored-by: Dmitry Sidorov <[email protected]>
---
 clang/lib/Basic/Targets/SPIR.h | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/clang/lib/Basic/Targets/SPIR.h b/clang/lib/Basic/Targets/SPIR.h
index 3dd57257ebee5..ea992b0e01dbe 100644
--- a/clang/lib/Basic/Targets/SPIR.h
+++ b/clang/lib/Basic/Targets/SPIR.h
@@ -320,7 +320,7 @@ class LLVM_LIBRARY_VISIBILITY BaseSPIRVTargetInfo : public 
BaseSPIRTargetInfo {
 
   virtual bool isAddressSpaceSupersetOf(LangAS A, LangAS B) const override {
     // The generic space AS(4) is a superset of all the other address
-    // spaces used by the backend target.
+    // spaces used by the backend target except constant address space.
     return A == B || ((A == LangAS::Default ||
                        (isTargetAddressSpace(A) &&
                         toTargetAddressSpace(A) == /*Generic=*/4)) &&

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

Reply via email to