hokein created this revision. hokein added a reviewer: sammccall. Herald added a project: clang. hokein requested review of this revision.
Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D85423 Files: clang/lib/Sema/TreeTransform.h clang/test/SemaTemplate/recovery-tree-transform-crash.cpp Index: clang/test/SemaTemplate/recovery-tree-transform-crash.cpp =================================================================== --- /dev/null +++ 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}} +} Index: clang/lib/Sema/TreeTransform.h =================================================================== --- clang/lib/Sema/TreeTransform.h +++ clang/lib/Sema/TreeTransform.h @@ -3616,8 +3616,8 @@ } 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: @@ -10207,7 +10207,7 @@ if (!getDerived().AlwaysRebuild() && !Changed) return E; return getDerived().RebuildRecoveryExpr(E->getBeginLoc(), E->getEndLoc(), - Children); + Children, E->getType()); } template<typename Derived>
Index: clang/test/SemaTemplate/recovery-tree-transform-crash.cpp =================================================================== --- /dev/null +++ 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}} +} Index: clang/lib/Sema/TreeTransform.h =================================================================== --- clang/lib/Sema/TreeTransform.h +++ clang/lib/Sema/TreeTransform.h @@ -3616,8 +3616,8 @@ } 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: @@ -10207,7 +10207,7 @@ if (!getDerived().AlwaysRebuild() && !Changed) return E; return getDerived().RebuildRecoveryExpr(E->getBeginLoc(), E->getEndLoc(), - Children); + Children, E->getType()); } template<typename Derived>
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits