================
@@ -764,8 +764,26 @@ void SemaCUDA::checkAllowedInitializer(VarDecl *VD) {
   if (VD->isInvalidDecl() || !VD->hasInit() || !VD->hasGlobalStorage() ||
       IsDependentVar(VD))
     return;
+
+  // A function-scope static is a device variable when it is emitted on the
+  // device side, and has the same initialization restrictions.
+  CUDAVariableTarget VT = IdentifyTarget(VD);
+  const FunctionDecl *FD = VD->getDeclContext()->getEnclosingFunction();
+
+  // CVT_Both means the enclosing function is __host__ __device__, so the
+  // variable is emitted on both sides and only the device-side copy is
+  // restricted. Lambdas are implicitly HD and their statics are host 
variables.
----------------
Sirraide wrote:

> Lambdas are implicitly HD and their statics are host variables.

Perhaps I’m missing something here, but how does this work? A `static` variable 
inside the body of a lambda call operator that is invoked on the device side 
should be a `__device__` variable shouldn’t it? How are lambda call operators 
different from regular functions in this respect?

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

Reply via email to