diff options
author | Richard Smith <richard-llvm@metafoo.co.uk> | 2016-05-11 20:37:46 +0000 |
---|---|---|
committer | Richard Smith <richard-llvm@metafoo.co.uk> | 2016-05-11 20:37:46 +0000 |
commit | c2bebe9acab26b5af209f11b3ee978966feab491 (patch) | |
tree | 3573c6b429a7cf0bf311f648650ce49743c6a741 /clang/lib/Sema/TreeTransform.h | |
parent | 1455de2171e8829f75935f11b254f404417c260c (diff) | |
download | bcm5719-llvm-c2bebe9acab26b5af209f11b3ee978966feab491.tar.gz bcm5719-llvm-c2bebe9acab26b5af209f11b3ee978966feab491.zip |
Preserve the FoundDecl when performing overload resolution for constructors.
This is in preparation for C++ P0136R1, which switches the model for inheriting
constructors over from synthesizing a constructor to finding base class
constructors (via using shadow decls) when looking for derived class
constructors.
llvm-svn: 269231
Diffstat (limited to 'clang/lib/Sema/TreeTransform.h')
-rw-r--r-- | clang/lib/Sema/TreeTransform.h | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/clang/lib/Sema/TreeTransform.h b/clang/lib/Sema/TreeTransform.h index 58cf67ccc81..a2ad14fde01 100644 --- a/clang/lib/Sema/TreeTransform.h +++ b/clang/lib/Sema/TreeTransform.h @@ -2637,6 +2637,7 @@ public: /// Subclasses may override this routine to provide different behavior. ExprResult RebuildCXXConstructExpr(QualType T, SourceLocation Loc, + NamedDecl *Found, CXXConstructorDecl *Constructor, bool IsElidable, MultiExprArg Args, @@ -2651,7 +2652,8 @@ public: ConvertedArgs)) return ExprError(); - return getSema().BuildCXXConstructExpr(Loc, T, Constructor, IsElidable, + return getSema().BuildCXXConstructExpr(Loc, T, Found, Constructor, + IsElidable, ConvertedArgs, HadMultipleCandidates, ListInitialization, @@ -9880,6 +9882,11 @@ TreeTransform<Derived>::TransformCXXConstructExpr(CXXConstructExpr *E) { if (T.isNull()) return ExprError(); + NamedDecl *FoundDecl = cast_or_null<NamedDecl>( + getDerived().TransformDecl(E->getLocStart(), E->getFoundDecl())); + if (!FoundDecl) + return ExprError(); + CXXConstructorDecl *Constructor = cast_or_null<CXXConstructorDecl>( getDerived().TransformDecl(E->getLocStart(), @@ -9895,6 +9902,7 @@ TreeTransform<Derived>::TransformCXXConstructExpr(CXXConstructExpr *E) { if (!getDerived().AlwaysRebuild() && T == E->getType() && + FoundDecl == E->getFoundDecl() && Constructor == E->getConstructor() && !ArgumentChanged) { // Mark the constructor as referenced. @@ -9904,8 +9912,8 @@ TreeTransform<Derived>::TransformCXXConstructExpr(CXXConstructExpr *E) { } return getDerived().RebuildCXXConstructExpr(T, /*FIXME:*/E->getLocStart(), - Constructor, E->isElidable(), - Args, + FoundDecl, Constructor, + E->isElidable(), Args, E->hadMultipleCandidates(), E->isListInitialization(), E->isStdInitListInitialization(), |