llvm-project/clang/lib/Serialization
Volodymyr Sapsai 8a5943f569 [Modules] Fix creating fake definition data for lambdas.
During reading C++ definition data for lambda we can access
CXXRecordDecl representing lambda before we finished reading the
definition data. This can happen by reading a captured variable which is
VarDecl, then reading its decl context which is CXXMethodDecl `operator()`,
then trying to merge redeclarable methods and accessing
enclosing CXXRecordDecl. The call stack looks roughly like

    VisitCXXRecordDecl
      ReadCXXRecordDefinition
        VisitVarDecl
          VisitCXXMethodDecl
            mergeRedeclarable
              getPrimaryContextForMerging

If we add fake definition data at this point, later we'll hit the assertion

    Assertion failed: (!DD.IsLambda && !MergeDD.IsLambda && "faked up lambda definition?"), function MergeDefinitionData, file clang/lib/Serialization/ASTReaderDecl.cpp, line 1675.

The fix is to assign definition data before reading it. Fixes PR32556.

rdar://problem/37461072

Reviewers: rsmith, bruno

Reviewed By: rsmith

Subscribers: cfe-commits, jkorous-apple, aprantl

Differential Revision: https://reviews.llvm.org/D43494

llvm-svn: 328153
2018-03-21 21:28:54 +00:00
..
ASTCommon.cpp Re-land: "[Support] Replace HashString with djbHash." 2018-02-26 15:16:42 +00:00
ASTCommon.h Generalize "static data member instantiated" notification to cover variable templates too. 2017-12-05 01:31:47 +00:00
ASTReader.cpp Adding nocf_check attribute for cf-protection fine tuning 2018-03-17 13:31:35 +00:00
ASTReaderDecl.cpp [Modules] Fix creating fake definition data for lambdas. 2018-03-21 21:28:54 +00:00
ASTReaderInternals.h [Serialization] Fix some Clang-tidy modernize and Include What You Use warnings; other minor fixes (NFC). 2017-11-11 00:08:50 +00:00
ASTReaderStmt.cpp [CodeGen] Ignore OpaqueValueExprs that are unique references to their 2018-03-20 01:47:58 +00:00
ASTWriter.cpp [ObjC] Allow declaring __weak pointer fields in C structs in ARC. 2018-03-19 17:38:40 +00:00
ASTWriterDecl.cpp [ObjC] Allow declaring __weak pointer fields in C structs in ARC. 2018-03-19 17:38:40 +00:00
ASTWriterStmt.cpp [CodeGen] Ignore OpaqueValueExprs that are unique references to their 2018-03-20 01:47:58 +00:00
CMakeLists.txt Introduce module file extensions to piggy-back data onto module files. 2015-11-03 18:33:07 +00:00
GeneratePCH.cpp Apply clang-tidy's performance-unnecessary-value-param to parts of clang. 2017-03-21 21:35:04 +00:00
GlobalModuleIndex.cpp Re-land: "[Support] Replace HashString with djbHash." 2018-02-26 15:16:42 +00:00
Module.cpp Modules: Simplify the ModuleFile constructor; likely NFC 2017-01-29 00:39:09 +00:00
ModuleFileExtension.cpp [NFC] Header cleanup 2016-07-18 19:02:11 +00:00
ModuleManager.cpp [Serialization] Fix some Clang-tidy modernize and Include What You Use warnings; other minor fixes (NFC). 2017-11-11 00:08:50 +00:00
MultiOnDiskHashTable.h [Serialization] Fix some Clang-tidy modernize and Include What You Use warnings; other minor fixes (NFC). 2017-11-02 21:45:30 +00:00