rjmccall added inline comments.

Comment at: clang/lib/Sema/SemaExpr.cpp:10090
   // if both are pointers check if operation is valid wrt address spaces
-  if (S.getLangOpts().OpenCL && isLHSPointer && isRHSPointer) {
+  if ((S.getLangOpts().OpenCL || S.getLangOpts().SYCLIsDevice) &&
+      isLHSPointer && isRHSPointer) {
Anastasia wrote:
> bader wrote:
> > Alternative approach would be to remove `S.getLangOpts().OpenCL` to enable 
> > this check for all modes.
> > 
> > @Anastasia, do you know if it's safe to do?
> If I look at embedded C (ISO/IEC TR 18037) s5.3 rules that we are following 
> largely in Clang I believe this is a universal rule!
> Especially looking at the followong statement:
> > Clause 6.5.6 - Additive operators, add another constraint paragraph: 
> > For subtraction, if the two operands are pointers into different address 
> > spaces, the address spaces must overlap. 
> So I think that it should apply to at least OpenCL, C and C++.  I am 
> surprised though that this has not been fixed yet.
> I am CCing @rjmccall and @jeroen.dobbelaere in case they have any more 
> insights on this.
Yes, I agree, this should apply in all modes.

You should able to restructure the `isAddressSpaceOverlapping` function so that 
it can work directly on the address spaces of  `LHSPointeeTy` and 
`RHSPointeeTy`; the code will be both cleaner and faster.

  rG LLVM Github Monorepo



cfe-commits mailing list

Reply via email to