diff options
author | Richard Smith <richard-llvm@metafoo.co.uk> | 2016-08-25 00:34:00 +0000 |
---|---|---|
committer | Richard Smith <richard-llvm@metafoo.co.uk> | 2016-08-25 00:34:00 +0000 |
commit | 7195f857860a8482f2841ee45c0d36d606bdd20e (patch) | |
tree | 7160e7e101f4fdea95a3adc09b9f03d178061aca /include/clang/AST/DeclCXX.h | |
parent | b5b9d9e3073e64593e59f48a9dfd6aef676fe7f0 (diff) |
Lazily load the ContextDecl for a lambda's DefinitionData, to fix a
deserialization cycle caused by the ContextDecl recursively importing members
of the lambda's closure type.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@279694 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'include/clang/AST/DeclCXX.h')
-rw-r--r-- | include/clang/AST/DeclCXX.h | 7 |
1 files changed, 2 insertions, 5 deletions
diff --git a/include/clang/AST/DeclCXX.h b/include/clang/AST/DeclCXX.h index 2071c1b0e1..f2b798b5a3 100644 --- a/include/clang/AST/DeclCXX.h +++ b/include/clang/AST/DeclCXX.h @@ -571,7 +571,7 @@ class CXXRecordDecl : public RecordDecl { /// actual DeclContext does not suffice. This is used for lambdas that /// occur within default arguments of function parameters within the class /// or within a data member initializer. - Decl *ContextDecl; + LazyDeclPtr ContextDecl; /// \brief The list of captures, both explicit and implicit, for this /// lambda. @@ -1673,10 +1673,7 @@ public: /// the declaration in which the lambda occurs, e.g., the function parameter /// or the non-static data member. Otherwise, it returns NULL to imply that /// the declaration context suffices. - Decl *getLambdaContextDecl() const { - assert(isLambda() && "Not a lambda closure type!"); - return getLambdaData().ContextDecl; - } + Decl *getLambdaContextDecl() const; /// \brief Set the mangling number and context declaration for a lambda /// class. |