[clang] 6717476 - [AST][RecoveryExpr] Fix the missing type when rebuilding RecoveryExpr in TreeTransform.
Haojian Wu via cfe-commits
cfe-commits at lists.llvm.org
Fri Aug 7 02:15:36 PDT 2020
Author: Haojian Wu
Date: 2020-08-07T11:15:19+02:00
New Revision: 67174765db527ed1911f33109a34026f3913601d
URL: https://github.com/llvm/llvm-project/commit/67174765db527ed1911f33109a34026f3913601d
DIFF: https://github.com/llvm/llvm-project/commit/67174765db527ed1911f33109a34026f3913601d.diff
LOG: [AST][RecoveryExpr] Fix the missing type when rebuilding RecoveryExpr in TreeTransform.
Differential Revision: https://reviews.llvm.org/D85423
Added:
clang/test/SemaTemplate/recovery-tree-transform-crash.cpp
Modified:
clang/lib/Sema/TreeTransform.h
Removed:
################################################################################
diff --git a/clang/lib/Sema/TreeTransform.h b/clang/lib/Sema/TreeTransform.h
index 29d263de6e88..d23b441cad1b 100644
--- a/clang/lib/Sema/TreeTransform.h
+++ b/clang/lib/Sema/TreeTransform.h
@@ -3618,8 +3618,8 @@ class TreeTransform {
}
ExprResult RebuildRecoveryExpr(SourceLocation BeginLoc, SourceLocation EndLoc,
- ArrayRef<Expr *> SubExprs) {
- return getSema().CreateRecoveryExpr(BeginLoc, EndLoc, SubExprs);
+ ArrayRef<Expr *> SubExprs, QualType Type) {
+ return getSema().CreateRecoveryExpr(BeginLoc, EndLoc, SubExprs, Type);
}
private:
@@ -10209,7 +10209,7 @@ ExprResult TreeTransform<Derived>::TransformRecoveryExpr(RecoveryExpr *E) {
if (!getDerived().AlwaysRebuild() && !Changed)
return E;
return getDerived().RebuildRecoveryExpr(E->getBeginLoc(), E->getEndLoc(),
- Children);
+ Children, E->getType());
}
template<typename Derived>
diff --git a/clang/test/SemaTemplate/recovery-tree-transform-crash.cpp b/clang/test/SemaTemplate/recovery-tree-transform-crash.cpp
new file mode 100644
index 000000000000..9776aeb9b331
--- /dev/null
+++ b/clang/test/SemaTemplate/recovery-tree-transform-crash.cpp
@@ -0,0 +1,14 @@
+// RUN: %clang_cc1 -verify -frecovery-ast -frecovery-ast-type %s
+
+template <class T> struct Ptr { T *operator->() const; };
+
+struct ABC {
+ void run();
+};
+
+Ptr<ABC> call(int); // expected-note {{candidate function not viable}}
+
+void test() {
+ call()->run(undef); // expected-error {{no matching function for call to 'call'}} \
+ expected-error {{use of undeclared identifier}}
+}
More information about the cfe-commits
mailing list