diff options
author | Adam Czachorowski <adamcz@google.com> | 2022-03-16 14:27:27 +0100 |
---|---|---|
committer | Adam Czachorowski <adamcz@google.com> | 2022-03-25 15:48:08 +0100 |
commit | 7e459126185f4d5115e6e2166a866aba1369d024 (patch) | |
tree | 5da36b0d45f5cedded04d83942f614b03fa66957 /clang/lib/Sema | |
parent | a81fff8afd06fab8818db521cc79bf933c700e24 (diff) | |
download | llvm-7e459126185f4d5115e6e2166a866aba1369d024.zip llvm-7e459126185f4d5115e6e2166a866aba1369d024.tar.gz llvm-7e459126185f4d5115e6e2166a866aba1369d024.tar.bz2 |
[clang] Do not crash on arrow operator on dependent type.
There seems to be more than one way to get to that state. I included to
example cases in the test, both were noticed recently.
There is room for improvement, for example by creating RecoveryExpr in
place of the bad initializer, but for now let's stop the crashes.
Differential Revision: https://reviews.llvm.org/D121824
Diffstat (limited to 'clang/lib/Sema')
-rw-r--r-- | clang/lib/Sema/TreeTransform.h | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/clang/lib/Sema/TreeTransform.h b/clang/lib/Sema/TreeTransform.h index fb830ef..1ee457b 100644 --- a/clang/lib/Sema/TreeTransform.h +++ b/clang/lib/Sema/TreeTransform.h @@ -14757,6 +14757,10 @@ TreeTransform<Derived>::RebuildCXXOperatorCallExpr(OverloadedOperatorKind Op, return getSema().CreateBuiltinArraySubscriptExpr( First, Callee->getBeginLoc(), Second, OpLoc); } else if (Op == OO_Arrow) { + // It is possible that the type refers to a RecoveryExpr created earlier + // in the tree transformation. + if (First->getType()->isDependentType()) + return ExprError(); // -> is never a builtin operation. return SemaRef.BuildOverloadedArrowExpr(nullptr, First, OpLoc); } else if (Second == nullptr || isPostIncDec) { |