tbaederr wrote:

In this code:
```c++
namespace ExplicitThisInTemporary {
 struct B { B *p = this; };
  constexpr bool g(B b) { return &b == b.p; }
  static_assert(g({}), "");
}
```

The AST for the `static_assert` expr is:
```
CallExpr 0x52100009ed98 '_Bool'
|-ImplicitCastExpr 0x52100009ed78 '_Bool (*)(B)' <FunctionToPointerDecay>
| `-DeclRefExpr 0x5210000754a0 '_Bool (B)' lvalue Function 0x521000075188 'g' 
'_Bool (B)'
`-InitListExpr 0x52100009edc8 'B':'struct ExplicitThisInTemporary::B'
  `-CXXDefaultInitExpr 0x52100009ee20 'B *' has rewritten init
    `-CXXThisExpr 0x521000075008 'struct ExplicitThisInTemporary::B *' this
```

the `CXXThisExpr` here doesn't point to the current instance pointer of the 
frame (that doesn't even exist), but to the object created by the 
`InitListExpr` surrounding it (`0x52100009edc8`).

https://github.com/llvm/llvm-project/pull/106552
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to