[PATCH] D80317: [SYCL] Prohibit arithmetic operations for incompatible pointers
John McCall via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Wed May 20 23:58:56 PDT 2020
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.
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D80317/new/
https://reviews.llvm.org/D80317
More information about the cfe-commits
mailing list