aboutsummaryrefslogtreecommitdiff
path: root/clang/lib/Sema
diff options
context:
space:
mode:
authorAdam Czachorowski <adamcz@google.com>2022-03-16 14:27:27 +0100
committerAdam Czachorowski <adamcz@google.com>2022-03-25 15:48:08 +0100
commit7e459126185f4d5115e6e2166a866aba1369d024 (patch)
tree5da36b0d45f5cedded04d83942f614b03fa66957 /clang/lib/Sema
parenta81fff8afd06fab8818db521cc79bf933c700e24 (diff)
downloadllvm-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.h4
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) {