[PATCH] D21567: [OpenCL] Generate struct type for sampler_t and function call for the initializer

Anastasia Stulova via cfe-commits cfe-commits at lists.llvm.org
Tue Jul 19 07:55:48 PDT 2016


Anastasia added inline comments.

================
Comment at: lib/CodeGen/CodeGenModule.cpp:2399
@@ +2398,3 @@
+  // therefore no need to be translated.
+  if (getLangOpts().OpenCL && ASTTy->isSamplerT())
+    return;
----------------
Could we lift this check right to the beginning of the function?

================
Comment at: lib/Sema/SemaInit.cpp:6917-6929
@@ -6915,4 +6916,15 @@
             << SourceType;
-      } else if (Entity.getKind() != InitializedEntity::EK_Variable) {
-        llvm_unreachable("Invalid EntityKind!");
+          break;
+        } else if (const DeclRefExpr *DRE = dyn_cast<DeclRefExpr>(Init)) {
+          auto Var = cast<VarDecl>(DRE->getDecl());
+          if (!Var->hasGlobalStorage()) {
+            CurInit = ImplicitCastExpr::Create(S.Context, Step->Type,
+                                               CK_LValueToRValue, CurInit.get(),
+                                               /*BasePath=*/nullptr, VK_RValue);
+            break;
+          }
+          Init = cast<ImplicitCastExpr>(const_cast<Expr*>(
+            Var->getInit()))->getSubExpr();
+          SourceType = Init->getType();
+        }
       }
----------------
It would be nice to put some comments here summarizing your description!

Btw, I don't think it's covered in testing yet, isn't it?

================
Comment at: lib/Sema/SemaInit.cpp:6918
@@ +6917,3 @@
+          break;
+        } else if (const DeclRefExpr *DRE = dyn_cast<DeclRefExpr>(Init)) {
+          auto Var = cast<VarDecl>(DRE->getDecl());
----------------
I don't get why this level of indirection is added? Should the variable initialization be handled elsewhere?

================
Comment at: lib/Sema/SemaInit.cpp:6922
@@ +6921,3 @@
+            CurInit = ImplicitCastExpr::Create(S.Context, Step->Type,
+                                               CK_LValueToRValue, CurInit.get(),
+                                               /*BasePath=*/nullptr, VK_RValue);
----------------
CurInit.get() can be changed to Init

================
Comment at: test/SemaOpenCL/sampler_t.cl:55
@@ -30,2 +54,2 @@
 
-sampler_t bad(); //expected-error{{declaring function return value of type 'sampler_t' is not allowed}}
+sampler_t bad(void); //expected-error{{declaring function return value of type 'sampler_t' is not allowed}}
----------------
Why was this change required?


https://reviews.llvm.org/D21567





More information about the cfe-commits mailing list