aaronpuchert created this revision. aaronpuchert added reviewers: riccibruno, rsmith. aaronpuchert requested review of this revision. Herald added a project: clang. Herald added a subscriber: cfe-commits.
We were always storing a regular ValueDecl* as decomposition declaration and haven't been using the opportunity to initialize it lazily. Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D99455 Files: clang/include/clang/AST/DeclCXX.h clang/lib/AST/DeclCXX.cpp Index: clang/lib/AST/DeclCXX.cpp =================================================================== --- clang/lib/AST/DeclCXX.cpp +++ clang/lib/AST/DeclCXX.cpp @@ -3177,12 +3177,6 @@ return new (C, ID) BindingDecl(nullptr, SourceLocation(), nullptr); } -ValueDecl *BindingDecl::getDecomposedDecl() const { - ExternalASTSource *Source = - Decomp.isOffset() ? getASTContext().getExternalSource() : nullptr; - return cast_or_null<ValueDecl>(Decomp.get(Source)); -} - VarDecl *BindingDecl::getHoldingVar() const { Expr *B = getBinding(); if (!B) Index: clang/include/clang/AST/DeclCXX.h =================================================================== --- clang/include/clang/AST/DeclCXX.h +++ clang/include/clang/AST/DeclCXX.h @@ -3817,7 +3817,7 @@ /// DecompositionDecl of type 'int (&)[3]'. class BindingDecl : public ValueDecl { /// The declaration that this binding binds to part of. - LazyDeclPtr Decomp; + ValueDecl *Decomp; /// The binding represented by this declaration. References to this /// declaration are effectively equivalent to this expression (except /// that it is only evaluated once at the point of declaration of the @@ -3843,7 +3843,7 @@ /// Get the decomposition declaration that this binding represents a /// decomposition of. - ValueDecl *getDecomposedDecl() const; + ValueDecl *getDecomposedDecl() const { return Decomp; } /// Get the variable (if any) that holds the value of evaluating the binding. /// Only present for user-defined bindings for tuple-like types.
Index: clang/lib/AST/DeclCXX.cpp =================================================================== --- clang/lib/AST/DeclCXX.cpp +++ clang/lib/AST/DeclCXX.cpp @@ -3177,12 +3177,6 @@ return new (C, ID) BindingDecl(nullptr, SourceLocation(), nullptr); } -ValueDecl *BindingDecl::getDecomposedDecl() const { - ExternalASTSource *Source = - Decomp.isOffset() ? getASTContext().getExternalSource() : nullptr; - return cast_or_null<ValueDecl>(Decomp.get(Source)); -} - VarDecl *BindingDecl::getHoldingVar() const { Expr *B = getBinding(); if (!B) Index: clang/include/clang/AST/DeclCXX.h =================================================================== --- clang/include/clang/AST/DeclCXX.h +++ clang/include/clang/AST/DeclCXX.h @@ -3817,7 +3817,7 @@ /// DecompositionDecl of type 'int (&)[3]'. class BindingDecl : public ValueDecl { /// The declaration that this binding binds to part of. - LazyDeclPtr Decomp; + ValueDecl *Decomp; /// The binding represented by this declaration. References to this /// declaration are effectively equivalent to this expression (except /// that it is only evaluated once at the point of declaration of the @@ -3843,7 +3843,7 @@ /// Get the decomposition declaration that this binding represents a /// decomposition of. - ValueDecl *getDecomposedDecl() const; + ValueDecl *getDecomposedDecl() const { return Decomp; } /// Get the variable (if any) that holds the value of evaluating the binding. /// Only present for user-defined bindings for tuple-like types.
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits