swift
31e4465c - [DebugInfo] Merge fragments from SIL with fragments created in IRGen (#66448)

Commit
2 years ago
[DebugInfo] Merge fragments from SIL with fragments created in IRGen (#66448) SIL variables can be split by SILSROA into separate allocations, each having op_fragment expressions in debug_value (VarInfo.DIExpr). These allocations can be further split by IRGen (multiple values in Storage argument). These "nested" fragments refer to the same DI variable, so it is important to merge them for the LLVM IR DI expression. The compiler used to ignore fragment expressions from SIL when IRGen fragments were also present. This led to incorrect DI info generation, and for some cases even triggered assertions in LLVM X86 CodeGen: DwarfExpression.cpp:679: void llvm::DwarfExpression::addFragmentOffset(const llvm::DIExpression *): Assertion `FragmentOffset >= OffsetInBits && "overlapping or duplicate fragments"' failed. The patch fixes issue #64642. The LIT test is a reduced reproducer from that issue.
Author
Parents
Loading