llvm-project/llvm/unittests/DebugInfo
Jonas Devlieghere 3a04bea91a [DebugInfo] Have custom std::reverse_iterator<DWARFDie>
The DWARFDie is a lightweight utility wrapper that stores a pointer to a
compile unit and a debug info entry. Currently, its iterator (used for
walking over its children) stores a DWARFDie and returns a const
reference when dereferencing it.

When the iterator is modified (by incrementing or decrementing it), this
reference becomes invalid. This was happening when calling reverse on
it, because the std::reverse_iterator is keeping a temporary copy of the
iterator (see
https://en.cppreference.com/w/cpp/iterator/reverse_iterator for a good
illustration).

The relevant code in libcxx:

  reference operator*() const {_Iter __tmp = current; return *--__tmp;}

When dereferencing the reverse iterator, we decrement and return a
reference to a DWARFDie stored in the stack frame of this function,
resulting in UB at runtime.

This patch specifies the std::reverse_iterator for DWARFDie to do the
right thing.

Differential revision: https://reviews.llvm.org/D49679

llvm-svn: 338506
2018-08-01 10:24:17 +00:00
..
CodeView [CodeView] Minimal support for S_UNAMESPACE records 2018-07-31 19:15:50 +00:00
DWARF [DebugInfo] Have custom std::reverse_iterator<DWARFDie> 2018-08-01 10:24:17 +00:00
MSF Move some code from PDBFileBuilder to MSFBuilder. 2018-06-27 21:18:15 +00:00
PDB Inline a few CMake variables into their only uses. 2018-05-14 19:23:31 +00:00
CMakeLists.txt [MSF] Move MSF unit tests to their own unittest target. 2017-08-02 22:26:09 +00:00