[llvm] r179213 - Use a real union for IdentifyingPassPtr.
Benjamin Kramer
benny.kra at googlemail.com
Wed Apr 10 13:50:44 PDT 2013
Author: d0k
Date: Wed Apr 10 15:50:44 2013
New Revision: 179213
URL: http://llvm.org/viewvc/llvm-project?rev=179213&view=rev
Log:
Use a real union for IdentifyingPassPtr.
This avoids a nasty const correctness issue (AnalysisIDs are const, Pass* isn't).
Modified:
llvm/trunk/include/llvm/CodeGen/Passes.h
Modified: llvm/trunk/include/llvm/CodeGen/Passes.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/Passes.h?rev=179213&r1=179212&r2=179213&view=diff
==============================================================================
--- llvm/trunk/include/llvm/CodeGen/Passes.h (original)
+++ llvm/trunk/include/llvm/CodeGen/Passes.h Wed Apr 10 15:50:44 2013
@@ -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;
}
};
More information about the llvm-commits
mailing list