rsmith added inline comments.
================
Comment at: clang/lib/Sema/SemaStmt.cpp:711
+ if (CalleeQualType.isNull()) {
+ // The function callee is invalid and already triggered an error.
+ // Avoid compounding errors.
----------------
haberman wrote:
> rsmith wrote:
> > Even in invalid code we should never see a `CallExpr` whose callee has a
> > null type; if `Sema` can't form an `Expr` that meets the normal expression
> > invariants during error recovery, it doesn't build one at all. I think you
> > can remove this `if`.
> Without this if(), I crash on this test case. What do you think?
>
> ```
> struct TestBadPMF {
> int (TestBadPMF::*pmf)();
> void BadPMF() {
> [[clang::musttail]] return ((*this)->*pmf)(); // expected-error {{left
> hand operand to ->* must be a pointer to class compatible with the right hand
> operand, but is 'TestBadPMF'}}
> }
> };
> ```
>
> Dump of `CalleeExpr` is:
>
> ```
> RecoveryExpr 0x106671e8 '<dependent type>' contains-errors lvalue
> |-ParenExpr 0x10667020 'struct TestBadPMF' lvalue
> | `-UnaryOperator 0x10667008 'struct TestBadPMF' lvalue prefix '*' cannot
> overflow
> | `-CXXThisExpr 0x10666ff8 'struct TestBadPMF *' this
> `-MemberExpr 0x10667050 'int (struct TestBadPMF::*)(void)' lvalue ->pmf
> 0x10666ed0
> `-CXXThisExpr 0x10667040 'struct TestBadPMF *' implicit this
> ```
Ah, right, while the callee will always have a non-null type, that type might
not be a pointer type.
I think what we're missing here is a check for a dependent callee; checking for
a dependent context isn't enough to check for error-dependent constructs.
Probably the simplest thing would be to change the `isDependentContext()`
checks to also check if the return expression `isInstantiationDependent()`.
(That would only help with the error-dependent cases for now, but we'd also
need that extra check in the future if anything like
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p2277r0.html goes
forward, allowing dependent constructs in non-dependent contexts, especially in
combination with
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1306r1.pdf.)
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D99517/new/
https://reviews.llvm.org/D99517
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits