[clang] [clang][HIP] Do not treat address of managed variable as a constant expression (PR #217047)

Mariya Podchishchaeva via cfe-commits cfe-commits at lists.llvm.org
Thu Aug 20 06:21:44 PDT 2026


================
@@ -161,6 +161,26 @@ __device__ __host__ int load4() {
   return ex;
 }
 
+namespace gh198079 {
+__managed__ int x = 0;
+struct S {
+    int *p;
+};
+__attribute__((device)) void f() {
+  S s{&x};
+}
+// DEV-LABEL: define {{.*}}@{{.*}}gh198079{{.*}}f{{.*}}()
+// DEV: %p = getelementptr inbounds nuw %"struct.gh198079::S", ptr %s.ascast, i32 0, i32 0
+// DEV: %ld.managed = load ptr addrspace(1), ptr addrspace(1) @_ZN8gh1980791xE, align 4
+// DEV: %0 = addrspacecast ptr addrspace(1) %ld.managed to ptr
+// DEV: store ptr %0, ptr %p, align 8
+int *hostglob = &x;
+
----------------
Fznamznon wrote:

> Could we use ConstEvaluatedExprVisitor instead of DynamicRecursiveASTVisitor?

Yes, done in 38cfab2b7156d0da72cc747e4755132d66e506be , thanks.

> it is important to document it in clang/docs/HIPSupport.md. The documentation should say that Clang diagnoses some direct uses but does not follow function calls, constructors, destructors, function pointers, or definitions in other translation units. 

Added documentation in 38cfab2b7156d0da72cc747e4755132d66e506be 

https://github.com/llvm/llvm-project/pull/217047


More information about the cfe-commits mailing list