diff options
| -rw-r--r-- | clang/include/clang/AST/ExprCXX.h | 7 | ||||
| -rw-r--r-- | clang/include/clang/Sema/Sema.h | 11 | ||||
| -rw-r--r-- | clang/lib/AST/ASTImporter.cpp | 7 | ||||
| -rw-r--r-- | clang/lib/AST/ExprCXX.cpp | 16 | ||||
| -rw-r--r-- | clang/lib/CodeGen/CGObjC.cpp | 1 | ||||
| -rw-r--r-- | clang/lib/Sema/SemaDeclCXX.cpp | 21 | ||||
| -rw-r--r-- | clang/lib/Sema/SemaInit.cpp | 2 | ||||
| -rw-r--r-- | clang/lib/Sema/TreeTransform.h | 11 | 
8 files changed, 38 insertions, 38 deletions
diff --git a/clang/include/clang/AST/ExprCXX.h b/clang/include/clang/AST/ExprCXX.h index 41b6758bdc7..700cc485718 100644 --- a/clang/include/clang/AST/ExprCXX.h +++ b/clang/include/clang/AST/ExprCXX.h @@ -1187,7 +1187,7 @@ private:  protected:    CXXConstructExpr(const ASTContext &C, StmtClass SC, QualType T,                     SourceLocation Loc, -                   NamedDecl *Found, CXXConstructorDecl *Ctor, +                   CXXConstructorDecl *Ctor,                     bool Elidable,                     ArrayRef<Expr *> Args,                     bool HadMultipleCandidates, @@ -1211,7 +1211,6 @@ public:    static CXXConstructExpr *Create(const ASTContext &C, QualType T,                                    SourceLocation Loc, -                                  NamedDecl *Found,                                    CXXConstructorDecl *Ctor,                                    bool Elidable,                                    ArrayRef<Expr *> Args, @@ -1222,9 +1221,6 @@ public:                                    ConstructionKind ConstructKind,                                    SourceRange ParenOrBraceRange); -  /// \brief Get the declaration that was found by name lookup. -  NamedDecl *getFoundDecl() const; -    /// \brief Get the constructor that this expression will (ultimately) call.    CXXConstructorDecl *getConstructor() const { return Constructor; } @@ -1393,7 +1389,6 @@ class CXXTemporaryObjectExpr : public CXXConstructExpr {  public:    CXXTemporaryObjectExpr(const ASTContext &C, -                         NamedDecl *Found,                           CXXConstructorDecl *Cons,                           TypeSourceInfo *Type,                           ArrayRef<Expr *> Args, diff --git a/clang/include/clang/Sema/Sema.h b/clang/include/clang/Sema/Sema.h index 62f37fda52d..9583dd5b268 100644 --- a/clang/include/clang/Sema/Sema.h +++ b/clang/include/clang/Sema/Sema.h @@ -4283,6 +4283,17 @@ public:                          bool RequiresZeroInit, unsigned ConstructKind,                          SourceRange ParenRange); +  /// Build a CXXConstructExpr whose constructor has already been resolved if +  /// it denotes an inherited constructor. +  ExprResult +  BuildCXXConstructExpr(SourceLocation ConstructLoc, QualType DeclInitType, +                        CXXConstructorDecl *Constructor, bool Elidable, +                        MultiExprArg Exprs, +                        bool HadMultipleCandidates, bool IsListInitialization, +                        bool IsStdInitListInitialization, +                        bool RequiresZeroInit, unsigned ConstructKind, +                        SourceRange ParenRange); +    // FIXME: Can we remove this and have the above BuildCXXConstructExpr check if    // the constructor can be elidable?    ExprResult diff --git a/clang/lib/AST/ASTImporter.cpp b/clang/lib/AST/ASTImporter.cpp index 60f001009ac..05f96fd4328 100644 --- a/clang/lib/AST/ASTImporter.cpp +++ b/clang/lib/AST/ASTImporter.cpp @@ -5796,11 +5796,6 @@ Expr *ASTNodeImporter::VisitCXXConstructExpr(CXXConstructExpr *E) {    if (T.isNull())      return nullptr; -  NamedDecl *ToFound = -    dyn_cast_or_null<NamedDecl>(Importer.Import(E->getFoundDecl())); -  if (!ToFound) -    return nullptr; -    CXXConstructorDecl *ToCCD =      dyn_cast_or_null<CXXConstructorDecl>(Importer.Import(E->getConstructor()));    if (!ToCCD) @@ -5813,7 +5808,7 @@ Expr *ASTNodeImporter::VisitCXXConstructExpr(CXXConstructExpr *E) {    return CXXConstructExpr::Create(Importer.getToContext(), T,                                    Importer.Import(E->getLocation()), -                                  ToFound, ToCCD, E->isElidable(), +                                  ToCCD, E->isElidable(),                                    ToArgs, E->hadMultipleCandidates(),                                    E->isListInitialization(),                                    E->isStdInitListInitialization(), diff --git a/clang/lib/AST/ExprCXX.cpp b/clang/lib/AST/ExprCXX.cpp index dbfe58c8b3d..09401b704e2 100644 --- a/clang/lib/AST/ExprCXX.cpp +++ b/clang/lib/AST/ExprCXX.cpp @@ -432,12 +432,6 @@ SourceLocation CXXConstructExpr::getLocEnd() const {    return End;  } -NamedDecl *CXXConstructExpr::getFoundDecl() const { -  if (auto *Template = Constructor->getPrimaryTemplate()) -    return Template; -  return Constructor; -} -  SourceRange CXXOperatorCallExpr::getSourceRangeImpl() const {    OverloadedOperatorKind Kind = getOperator();    if (Kind == OO_PlusPlus || Kind == OO_MinusMinus) { @@ -723,7 +717,6 @@ CXXBindTemporaryExpr *CXXBindTemporaryExpr::Create(const ASTContext &C,  }  CXXTemporaryObjectExpr::CXXTemporaryObjectExpr(const ASTContext &C, -                                               NamedDecl *Found,                                                 CXXConstructorDecl *Cons,                                                 TypeSourceInfo *Type,                                                 ArrayRef<Expr*> Args, @@ -735,7 +728,7 @@ CXXTemporaryObjectExpr::CXXTemporaryObjectExpr(const ASTContext &C,    : CXXConstructExpr(C, CXXTemporaryObjectExprClass,                        Type->getType().getNonReferenceType(),                        Type->getTypeLoc().getBeginLoc(), -                     Found, Cons, false, Args, +                     Cons, false, Args,                       HadMultipleCandidates,                       ListInitialization,                       StdInitListInitialization, @@ -757,7 +750,6 @@ SourceLocation CXXTemporaryObjectExpr::getLocEnd() const {  CXXConstructExpr *CXXConstructExpr::Create(const ASTContext &C, QualType T,                                             SourceLocation Loc, -                                           NamedDecl *Found,                                             CXXConstructorDecl *Ctor,                                             bool Elidable,                                             ArrayRef<Expr*> Args, @@ -768,7 +760,7 @@ CXXConstructExpr *CXXConstructExpr::Create(const ASTContext &C, QualType T,                                             ConstructionKind ConstructKind,                                             SourceRange ParenOrBraceRange) {    return new (C) CXXConstructExpr(C, CXXConstructExprClass, T, Loc, -                                  Found, Ctor, Elidable, Args, +                                  Ctor, Elidable, Args,                                    HadMultipleCandidates, ListInitialization,                                    StdInitListInitialization,                                    ZeroInitialization, ConstructKind, @@ -777,7 +769,7 @@ CXXConstructExpr *CXXConstructExpr::Create(const ASTContext &C, QualType T,  CXXConstructExpr::CXXConstructExpr(const ASTContext &C, StmtClass SC,                                     QualType T, SourceLocation Loc, -                                   NamedDecl *Found, CXXConstructorDecl *Ctor, +                                   CXXConstructorDecl *Ctor,                                     bool Elidable,                                     ArrayRef<Expr*> Args,                                     bool HadMultipleCandidates, @@ -798,8 +790,6 @@ CXXConstructExpr::CXXConstructExpr(const ASTContext &C, StmtClass SC,      ZeroInitialization(ZeroInitialization),      ConstructKind(ConstructKind), Args(nullptr)  { -  assert(declaresSameEntity(Found, Ctor) || -         declaresSameEntity(Found, Ctor->getPrimaryTemplate()));    if (NumArgs) {      this->Args = new (C) Stmt*[Args.size()]; diff --git a/clang/lib/CodeGen/CGObjC.cpp b/clang/lib/CodeGen/CGObjC.cpp index 5aa549b8a96..db894ce6747 100644 --- a/clang/lib/CodeGen/CGObjC.cpp +++ b/clang/lib/CodeGen/CGObjC.cpp @@ -3312,7 +3312,6 @@ CodeGenFunction::GenerateObjCAtomicGetterCopyHelperFunction(    CXXConstructExpr *TheCXXConstructExpr =      CXXConstructExpr::Create(C, Ty, SourceLocation(), -                             CXXConstExpr->getFoundDecl(),                               CXXConstExpr->getConstructor(),                               CXXConstExpr->isElidable(),                               ConstructorArgs, diff --git a/clang/lib/Sema/SemaDeclCXX.cpp b/clang/lib/Sema/SemaDeclCXX.cpp index 1ab3fb2ab86..36d0f345319 100644 --- a/clang/lib/Sema/SemaDeclCXX.cpp +++ b/clang/lib/Sema/SemaDeclCXX.cpp @@ -11495,11 +11495,28 @@ Sema::BuildCXXConstructExpr(SourceLocation ConstructLoc, QualType DeclInitType,                                 ConstructKind, ParenRange);  } +ExprResult +Sema::BuildCXXConstructExpr(SourceLocation ConstructLoc, QualType DeclInitType, +                            NamedDecl *FoundDecl, +                            CXXConstructorDecl *Constructor, +                            bool Elidable, +                            MultiExprArg ExprArgs, +                            bool HadMultipleCandidates, +                            bool IsListInitialization, +                            bool IsStdInitListInitialization, +                            bool RequiresZeroInit, +                            unsigned ConstructKind, +                            SourceRange ParenRange) { +  return BuildCXXConstructExpr( +      ConstructLoc, DeclInitType, Constructor, Elidable, ExprArgs, +      HadMultipleCandidates, IsListInitialization, IsStdInitListInitialization, +      RequiresZeroInit, ConstructKind, ParenRange); +} +  /// BuildCXXConstructExpr - Creates a complete call to a constructor,  /// including handling of its default argument expressions.  ExprResult  Sema::BuildCXXConstructExpr(SourceLocation ConstructLoc, QualType DeclInitType, -                            NamedDecl *FoundDecl,                              CXXConstructorDecl *Constructor,                              bool Elidable,                              MultiExprArg ExprArgs, @@ -11511,7 +11528,7 @@ Sema::BuildCXXConstructExpr(SourceLocation ConstructLoc, QualType DeclInitType,                              SourceRange ParenRange) {    MarkFunctionReferenced(ConstructLoc, Constructor);    return CXXConstructExpr::Create( -      Context, DeclInitType, ConstructLoc, FoundDecl, Constructor, Elidable, +      Context, DeclInitType, ConstructLoc, Constructor, Elidable,        ExprArgs, HadMultipleCandidates, IsListInitialization,        IsStdInitListInitialization, RequiresZeroInit,        static_cast<CXXConstructExpr::ConstructionKind>(ConstructKind), diff --git a/clang/lib/Sema/SemaInit.cpp b/clang/lib/Sema/SemaInit.cpp index c162007349c..a35069d5646 100644 --- a/clang/lib/Sema/SemaInit.cpp +++ b/clang/lib/Sema/SemaInit.cpp @@ -5742,7 +5742,7 @@ PerformConstructorInitialization(Sema &S,        : Kind.getParenRange();      CurInit = new (S.Context) CXXTemporaryObjectExpr( -        S.Context, Step.Function.FoundDecl, Constructor, TSInfo, +        S.Context, Constructor, TSInfo,          ConstructorArgs, ParenOrBraceRange, HadMultipleCandidates,          IsListInitialization, IsStdInitListInitialization,          ConstructorInitRequiresZeroInit); diff --git a/clang/lib/Sema/TreeTransform.h b/clang/lib/Sema/TreeTransform.h index 38c4fd69f6a..bba90191019 100644 --- a/clang/lib/Sema/TreeTransform.h +++ b/clang/lib/Sema/TreeTransform.h @@ -2660,7 +2660,6 @@ public:    /// Subclasses may override this routine to provide different behavior.    ExprResult RebuildCXXConstructExpr(QualType T,                                       SourceLocation Loc, -                                     NamedDecl *Found,                                       CXXConstructorDecl *Constructor,                                       bool IsElidable,                                       MultiExprArg Args, @@ -2675,7 +2674,7 @@ public:                                            ConvertedArgs))        return ExprError(); -    return getSema().BuildCXXConstructExpr(Loc, T, Found, Constructor, +    return getSema().BuildCXXConstructExpr(Loc, T, Constructor,                                             IsElidable,                                             ConvertedArgs,                                             HadMultipleCandidates, @@ -9944,11 +9943,6 @@ 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(), @@ -9964,7 +9958,6 @@ TreeTransform<Derived>::TransformCXXConstructExpr(CXXConstructExpr *E) {    if (!getDerived().AlwaysRebuild() &&        T == E->getType() && -      FoundDecl == E->getFoundDecl() &&        Constructor == E->getConstructor() &&        !ArgumentChanged) {      // Mark the constructor as referenced. @@ -9974,7 +9967,7 @@ TreeTransform<Derived>::TransformCXXConstructExpr(CXXConstructExpr *E) {    }    return getDerived().RebuildCXXConstructExpr(T, /*FIXME:*/E->getLocStart(), -                                              FoundDecl, Constructor, +                                              Constructor,                                                E->isElidable(), Args,                                                E->hadMultipleCandidates(),                                                E->isListInitialization(),  | 

