aboutsummaryrefslogtreecommitdiffstats
path: root/include/llvm/CodeGen/Passes.h
diff options
context:
space:
mode:
authorBenjamin Kramer <benny.kra@googlemail.com>2013-04-10 20:50:44 +0000
committerBenjamin Kramer <benny.kra@googlemail.com>2013-04-10 20:50:44 +0000
commit8f5836510afb0ca19b1b04266407f3e1286d971a (patch)
tree0d61661adefb6647d83f79d16762ba7dcb048c5f /include/llvm/CodeGen/Passes.h
parentbccd635fba72815d1efb619a34cde9122f727f83 (diff)
downloadexternal_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/llvm/CodeGen/Passes.h')
-rw-r--r--include/llvm/CodeGen/Passes.h16
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;
}
};