diff options
Diffstat (limited to 'contrib/llvm/tools/clang/lib/CodeGen/CGCleanup.h')
-rw-r--r-- | contrib/llvm/tools/clang/lib/CodeGen/CGCleanup.h | 23 |
1 files changed, 16 insertions, 7 deletions
diff --git a/contrib/llvm/tools/clang/lib/CodeGen/CGCleanup.h b/contrib/llvm/tools/clang/lib/CodeGen/CGCleanup.h index 1bd6bba..1d4606f 100644 --- a/contrib/llvm/tools/clang/lib/CodeGen/CGCleanup.h +++ b/contrib/llvm/tools/clang/lib/CodeGen/CGCleanup.h @@ -96,7 +96,7 @@ public: enum Kind { Cleanup, Catch, Terminate, Filter }; EHScope(Kind kind, EHScopeStack::stable_iterator enclosingEHScope) - : CachedLandingPad(0), CachedEHDispatchBlock(0), + : CachedLandingPad(nullptr), CachedEHDispatchBlock(nullptr), EnclosingEHScope(enclosingEHScope) { CommonBits.Kind = kind; } @@ -145,12 +145,12 @@ public: struct Handler { /// A type info value, or null (C++ null, not an LLVM null pointer) /// for a catch-all. - llvm::Value *Type; + llvm::Constant *Type; /// The catch handler for this type. llvm::BasicBlock *Block; - bool isCatchAll() const { return Type == 0; } + bool isCatchAll() const { return Type == nullptr; } }; private: @@ -180,10 +180,10 @@ public: } void setCatchAllHandler(unsigned I, llvm::BasicBlock *Block) { - setHandler(I, /*catchall*/ 0, Block); + setHandler(I, /*catchall*/ nullptr, Block); } - void setHandler(unsigned I, llvm::Value *Type, llvm::BasicBlock *Block) { + void setHandler(unsigned I, llvm::Constant *Type, llvm::BasicBlock *Block) { assert(I < getNumHandlers()); getHandlers()[I].Type = Type; getHandlers()[I].Block = Block; @@ -194,6 +194,15 @@ public: return getHandlers()[I]; } + // Clear all handler blocks. + // FIXME: it's better to always call clearHandlerBlocks in DTOR and have a + // 'takeHandler' or some such function which removes ownership from the + // EHCatchScope object if the handlers should live longer than EHCatchScope. + void clearHandlerBlocks() { + for (unsigned I = 0, N = getNumHandlers(); I != N; ++I) + delete getHandler(I).Block; + } + typedef const Handler *iterator; iterator begin() const { return getHandlers(); } iterator end() const { return getHandlers() + getNumHandlers(); } @@ -259,7 +268,7 @@ public: EHScopeStack::stable_iterator enclosingNormal, EHScopeStack::stable_iterator enclosingEH) : EHScope(EHScope::Cleanup, enclosingEH), EnclosingNormal(enclosingNormal), - NormalBlock(0), ActiveFlag(0), ExtInfo(0) { + NormalBlock(nullptr), ActiveFlag(nullptr), ExtInfo(nullptr) { CleanupBits.IsNormalCleanup = isNormal; CleanupBits.IsEHCleanup = isEH; CleanupBits.IsActive = isActive; @@ -446,7 +455,7 @@ class EHScopeStack::iterator { explicit iterator(char *Ptr) : Ptr(Ptr) {} public: - iterator() : Ptr(0) {} + iterator() : Ptr(nullptr) {} EHScope *get() const { return reinterpret_cast<EHScope*>(Ptr); |