diff options
author | Benjamin Kramer <benny.kra@googlemail.com> | 2013-04-10 20:50:44 +0000 |
---|---|---|
committer | Benjamin Kramer <benny.kra@googlemail.com> | 2013-04-10 20:50:44 +0000 |
commit | 8f5836510afb0ca19b1b04266407f3e1286d971a (patch) | |
tree | 0d61661adefb6647d83f79d16762ba7dcb048c5f /include | |
parent | bccd635fba72815d1efb619a34cde9122f727f83 (diff) | |
download | external_llvm-8f5836510afb0ca19b1b04266407f3e1286d971a.zip external_llvm-8f5836510afb0ca19b1b04266407f3e1286d971a.tar.gz external_llvm-8f5836510afb0ca19b1b04266407f3e1286d971a.tar.bz2 |
Use a real union for IdentifyingPassPtr.
This avoids a nasty const correctness issue (AnalysisIDs are const, Pass* isn't).
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@179213 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'include')
-rw-r--r-- | include/llvm/CodeGen/Passes.h | 16 |
1 files changed, 9 insertions, 7 deletions
diff --git a/include/llvm/CodeGen/Passes.h b/include/llvm/CodeGen/Passes.h index 7b0aa8f..b02f63e 100644 --- a/include/llvm/CodeGen/Passes.h +++ b/include/llvm/CodeGen/Passes.h @@ -50,24 +50,26 @@ class PassConfigImpl; /// /// AnalysisID is sadly char*, so PointerIntPair won't work. class IdentifyingPassPtr { - void *P; + union { + AnalysisID ID; + Pass *P; + }; bool IsInstance; public: - IdentifyingPassPtr(): P(0), IsInstance(false) {} - IdentifyingPassPtr(AnalysisID IDPtr): P((void*)IDPtr), IsInstance(false) {} - IdentifyingPassPtr(Pass *InstancePtr) - : P((void*)InstancePtr), IsInstance(true) {} + IdentifyingPassPtr() : P(0), IsInstance(false) {} + IdentifyingPassPtr(AnalysisID IDPtr) : ID(IDPtr), IsInstance(false) {} + IdentifyingPassPtr(Pass *InstancePtr) : P(InstancePtr), IsInstance(true) {} bool isValid() const { return P; } bool isInstance() const { return IsInstance; } AnalysisID getID() const { assert(!IsInstance && "Not a Pass ID"); - return (AnalysisID)P; + return ID; } Pass *getInstance() const { assert(IsInstance && "Not a Pass Instance"); - return (Pass *)P; + return P; } }; |