Update clang to r339409.
Change-Id: I800772d2d838223be1f6b40d490c4591b937fca2
diff --git a/linux-x64/clang/include/llvm/CodeGen/DwarfStringPoolEntry.h b/linux-x64/clang/include/llvm/CodeGen/DwarfStringPoolEntry.h
index e6c0483..8b1a7af 100644
--- a/linux-x64/clang/include/llvm/CodeGen/DwarfStringPoolEntry.h
+++ b/linux-x64/clang/include/llvm/CodeGen/DwarfStringPoolEntry.h
@@ -10,6 +10,7 @@
#ifndef LLVM_CODEGEN_DWARFSTRINGPOOLENTRY_H
#define LLVM_CODEGEN_DWARFSTRINGPOOLENTRY_H
+#include "llvm/ADT/PointerIntPair.h"
#include "llvm/ADT/StringMap.h"
namespace llvm {
@@ -18,34 +19,52 @@
/// Data for a string pool entry.
struct DwarfStringPoolEntry {
+ static constexpr unsigned NotIndexed = -1;
+
MCSymbol *Symbol;
unsigned Offset;
unsigned Index;
+
+ bool isIndexed() const { return Index != NotIndexed; }
};
/// String pool entry reference.
-struct DwarfStringPoolEntryRef {
- const StringMapEntry<DwarfStringPoolEntry> *I = nullptr;
+class DwarfStringPoolEntryRef {
+ PointerIntPair<const StringMapEntry<DwarfStringPoolEntry> *, 1, bool>
+ MapEntryAndIndexed;
+
+ const StringMapEntry<DwarfStringPoolEntry> *getMapEntry() const {
+ return MapEntryAndIndexed.getPointer();
+ }
public:
DwarfStringPoolEntryRef() = default;
- explicit DwarfStringPoolEntryRef(
- const StringMapEntry<DwarfStringPoolEntry> &I)
- : I(&I) {}
+ DwarfStringPoolEntryRef(const StringMapEntry<DwarfStringPoolEntry> &Entry,
+ bool Indexed)
+ : MapEntryAndIndexed(&Entry, Indexed) {}
- explicit operator bool() const { return I; }
+ explicit operator bool() const { return getMapEntry(); }
MCSymbol *getSymbol() const {
- assert(I->second.Symbol && "No symbol available!");
- return I->second.Symbol;
+ assert(getMapEntry()->second.Symbol && "No symbol available!");
+ return getMapEntry()->second.Symbol;
}
- unsigned getOffset() const { return I->second.Offset; }
- unsigned getIndex() const { return I->second.Index; }
- StringRef getString() const { return I->first(); }
+ unsigned getOffset() const { return getMapEntry()->second.Offset; }
+ bool isIndexed() const { return MapEntryAndIndexed.getInt(); }
+ unsigned getIndex() const {
+ assert(isIndexed());
+ assert(getMapEntry()->getValue().isIndexed());
+ return getMapEntry()->second.Index;
+ }
+ StringRef getString() const { return getMapEntry()->first(); }
/// Return the entire string pool entry for convenience.
- DwarfStringPoolEntry getEntry() const { return I->getValue(); }
+ DwarfStringPoolEntry getEntry() const { return getMapEntry()->getValue(); }
- bool operator==(const DwarfStringPoolEntryRef &X) const { return I == X.I; }
- bool operator!=(const DwarfStringPoolEntryRef &X) const { return I != X.I; }
+ bool operator==(const DwarfStringPoolEntryRef &X) const {
+ return getMapEntry() == X.getMapEntry();
+ }
+ bool operator!=(const DwarfStringPoolEntryRef &X) const {
+ return getMapEntry() != X.getMapEntry();
+ }
};
} // end namespace llvm