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}} +} _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits