yaxunl marked 8 inline comments as done.

================
Comment at: lib/Sema/SemaChecking.cpp:480
@@ +479,3 @@
+      .getQualifiers().getAddressSpace() == LangAS::opencl_constant) {
+    S.Diag(Call->getLocStart(), diag::err_opencl_builtin_to_addr_invalid_arg)
+        << Call->getArg(0) << Call->getDirectCallee() << 
Call->getSourceRange();
----------------
Anastasia wrote:
> I just think you should simply set the function return type in line 487 based 
> on the passed argument type (RT variable declared in line 477).
> 
> The situation I would like us to avoid here is:
> 
>   int *gptr = ..;
>   local char *lptr = to_local(gptr);
> 
> So basically by calling to_local here, we allow conversion of not only an 
> address space but also an underlaying type silently. 
> 
> Could we add a test to make sure it's not happening.
> 
> Similarly, in C such situations trigger a warning:
>   int *ptr1 = ...;
>   char *ptr2 = ptr1; //expected-warning{{incompatible pointer types 
> initializing 'char *' with an expression of type 'int *'}}
I added the above test. The current implementation is able to diagnose it.

Your suggested approach also works, so I will remove dynamic generation of 
to_addr declarations since it seems to be an overkill.

================
Comment at: test/SemaOpenCL/to_addr_builtin.cl:25
@@ +24,3 @@
+  glob = to_global(con);
+#if __OPENCL_C_VERSION__ < CL_VERSION_2_0
+  // expected-error@-2{{'to_global' needs OpenCL version 2.0 or above}}
----------------
pxli168 wrote:
> yaxunl wrote:
> > pxli168 wrote:
> > > But in Spec OpenCL V2.0 s6.13.9 the description for to_global is:
> > > 
> > > > Returns a pointer that points to a region in the global address space 
> > > > if to_global can cast ptr to the global address space. Otherwise it 
> > > > returns NULL.
> > > 
> > I think this is only for valid call expression. For constant pointer, it is 
> > an invalid call expression due to s6.5.5, so an error of invalid argument 
> > should be emitted.
> > 
> > If we allow passing constant pointer to this function, we violates s6.5.5.
> >A pointer that points to the constant address space cannot be cast or 
> >implicitly converted to the generic address space.
>  
> So if we can not cast, we maybe should return NULL?
> @Anastasia What do you think about this?
> 
> 
What the function returns is implemented by builtin library and Clang does not 
care about that. Clang only does syntax checking, type checking, etc. Since 
this is still a function, it is subject to all these rules. Unless we want to 
exempt this function from the type-checking rules. However I don't think the 
spec implies that.


http://reviews.llvm.org/D19932



_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to