[PATCH] D137392: [clang][Interp] Explicitly handle RVO Pointer

Timm Bäder via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Thu Nov 3 23:50:14 PDT 2022


tbaeder created this revision.
tbaeder added reviewers: aaron.ballman, erichkeane, tahonermann, shafik.
Herald added a project: All.
tbaeder requested review of this revision.
Herald added a project: clang.
Herald added a subscriber: cfe-commits.

  The calling convention is:
  
  [RVO pointer]
  [instance pointer]
  [... args ...]
  
  We handle the instance pointer ourselves, BUT for the RVO pointer, we
  just assumed in visitReturnStmt() that it is on top of the stack. Which
  isn't true if there are other args present (and a this pointer, maybe).
  
  Fix this by recording the RVO pointer explicitly when creating an
  InterpFrame, just like we do with the instance/This pointer.
  
  There is already a "RVOAndParams()" test in test/AST/Inter/records.cpp,
  that was supposed to test this, however, it didn't trigger any
  problematic behavior because the parameter and the return value have the
  same type.


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D137392

Files:
  clang/lib/AST/Interp/ByteCodeStmtGen.cpp
  clang/lib/AST/Interp/Interp.h
  clang/lib/AST/Interp/InterpFrame.cpp
  clang/lib/AST/Interp/InterpFrame.h
  clang/lib/AST/Interp/Opcodes.td
  clang/test/AST/Interp/records.cpp

-------------- next part --------------
A non-text attachment was scrubbed...
Name: D137392.473133.patch
Type: text/x-patch
Size: 3845 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20221104/6dc99239/attachment.bin>


More information about the cfe-commits mailing list