Skip to content
  • Alexandre Ganea's avatar
    [CodeView] Fix cycles in debug info when merging Types with global hashes · 120366ed
    Alexandre Ganea authored
    When type streams with forward references were merged using GHashes, cycles 
    were introduced in the debug info. This was caused by 
    GlobalTypeTableBuilder::insertRecordAs() not inserting the record on the second
    pass, thus yielding an empty ArrayRef at that record slot. Later on, upon PDB 
    emission, TpiStreamBuilder::commit() would skip that empty record, thus 
    offseting all indices that came after in the stream. 
    
    This solution comes in two steps: 
    
    1. Fix the hash calculation, by doing a multiple-step resolution, iff there are
    forward references in the input stream.
    2. Fix merge by resolving with multiple passes, therefore moving records with
    forward references at the end of the stream. 
    
    This patch also adds support for llvm-readoj --codeview-ghash.
    Finally, fix dumpCodeViewMergedTypes() which previously could reference deleted
    memory. 
    
    Fixes PR40221 
    
    Differential Revision: https://reviews.llvm.org/D57790 
    
    llvm-svn: 353412
    120366ed
Loading