[PATCH] D134699: [clang][Interp] Implement This pointer passing to methods

Timm Bäder via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Thu Oct 6 08:49:41 PDT 2022


tbaeder added inline comments.


================
Comment at: clang/test/AST/Interp/records.cpp:106
+
+constexpr C RVOAndParams(const C *c) {
+  return C();
----------------
aaron.ballman wrote:
> We're missing a fair amount of test coverage here in terms of calling member functions. Can you add some tests for that, as well as a test where the this pointer is invalid and causes UB? e.g.,
> ```
> struct S {
>   constexpr void member() {}
> };
> 
> constexpr void func(S *s) {
>   s->member(); // Should not be a constant expression
> }
> 
> int main() {
>   func(nullptr);
> }
> ```
I just checked and we indeed don't reject that example. There are already functions to detect such scenarios in `Interp.h/.cpp`. But actually using them seems to require a bigger surgery since `Call`/`CallVoid` are currenly in both `EvalEmitter.cpp` and `Interp.cpp`.

I've written this down but I think for this patch it makes sense to add the failing test case and ignore the failure for now.


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

https://reviews.llvm.org/D134699



More information about the cfe-commits mailing list