[PATCH] D135858: [clang][Interp] Support pointer arithmetic in binary operators

Shafik Yaghmour via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Fri Oct 28 11:07:45 PDT 2022


shafik added inline comments.


================
Comment at: clang/lib/AST/Interp/ByteCodeExprGen.cpp:241
+  // Pointer arithmethic special case. This is supported for one of
+  // LHS and RHS being a pointer type and the other being an integer type.
+  if (BO->getType()->isPointerType()) {
----------------
tbaeder wrote:
> shafik wrote:
> > tbaeder wrote:
> > > shafik wrote:
> > > > I am not sure if this is the right place to handle this but there are a bunch of other cases.
> > > > 
> > > > - `nullptr` can have `0` added or subtracted
> > > > - You can only do addition/subtraction from a pointer if the result in within bounds or one after the end
> > > > - You can subtract two pointers if they point to the same object.
> > > > 
> > > > godbolt: https://godbolt.org/z/5YTY93z8M
> > > I will probably move this special case out of the function and into its own.
> > > Thanks for the tests, I think this should all already work except for adding two pointers. I'll update the diff once I checked that out.
> > You will also want to cover this case as well: https://eel.is/c++draft/expr.add#6
> FWIW I've looked at the link but can hardly wrap my head around what the text is talking about, let alone make some contant expression out of it that doesn't run into some sort of other error :(
nvm, I just realized it requires a `reinterpret_cast`


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D135858/new/

https://reviews.llvm.org/D135858



More information about the cfe-commits mailing list