forked from OSchip/llvm-project
[lldb] Don't iterate over a std::set<Type*> in SymbolFileDWARF::GetTypes to make it deterministic
Summary: Currently `SymbolFileDWARF::TypeSet` is a typedef to a `std::set<Type *>`. In `SymbolFileDWARF::GetTypes` we iterate over a TypeSet variable when finding types so that logic is non-deterministic as it depends on the actual pointer address values. This patch changes the `TypeSet` to a `llvm::UniqueVector` which always iterates in the order in which we inserted the types into the list. Reviewers: JDevlieghere, aprantl Reviewed By: JDevlieghere Subscribers: mgrang, abidh, lldb-commits Tags: #lldb Differential Revision: https://reviews.llvm.org/D75481
This commit is contained in:
parent
5565820e6e
commit
b6b3fcdcb8
|
@ -324,10 +324,8 @@ void SymbolFileDWARF::GetTypes(const DWARFDIE &die, dw_offset_t min_die_offset,
|
|||
if (add_type) {
|
||||
const bool assert_not_being_parsed = true;
|
||||
Type *type = ResolveTypeUID(die, assert_not_being_parsed);
|
||||
if (type) {
|
||||
if (type_set.find(type) == type_set.end())
|
||||
type_set.insert(type);
|
||||
}
|
||||
if (type)
|
||||
type_set.insert(type);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -12,11 +12,11 @@
|
|||
#include <list>
|
||||
#include <map>
|
||||
#include <mutex>
|
||||
#include <set>
|
||||
#include <unordered_map>
|
||||
#include <vector>
|
||||
|
||||
#include "llvm/ADT/DenseMap.h"
|
||||
#include "llvm/ADT/SetVector.h"
|
||||
#include "llvm/Support/Threading.h"
|
||||
|
||||
#include "lldb/Core/UniqueCStringMap.h"
|
||||
|
@ -439,7 +439,7 @@ protected:
|
|||
|
||||
bool FixupAddress(lldb_private::Address &addr);
|
||||
|
||||
typedef std::set<lldb_private::Type *> TypeSet;
|
||||
typedef llvm::SetVector<lldb_private::Type *> TypeSet;
|
||||
|
||||
void GetTypes(const DWARFDIE &die, dw_offset_t min_die_offset,
|
||||
dw_offset_t max_die_offset, uint32_t type_mask,
|
||||
|
|
Loading…
Reference in New Issue