tbaeder added inline comments.

================
Comment at: clang/lib/AST/Interp/Context.cpp:54
+  assert(Stk.empty());
+  return true;
 }
----------------
The additional asserts I inserted here could be in another patch. However, I 
added them because I ran into a peculiar problem: when creating a `Pointer`, it 
calls `Pointee->addPointer(this)`. It will only remove itself from the pointee 
again in its destructor. //But// the destructor is not (necessarily) being 
called at all because the `Pointer` is constructed in the stack (or otherwise 
placement-new'ed into a larger memory region).


================
Comment at: clang/lib/AST/Interp/Interp.h:832
+    _B->invokeCtor();
+
+    memcpy(_B->data(), Pointee->data(), Desc->getAllocSize());
----------------
Note here that both the block and the descriptor are leaked. They are usually 
allocated in `Program`, which uses its own allocator for them. I'm not 100% 
sure what to do about this, since the blocks have different lifetimes depending 
on if they are for global or local variables (or parameters).
 Short of introducing a `Program::managesBlock(Block* B)` that just does a 
linear search for the blocks.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D133753

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

Reply via email to