mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-08-15 06:29:05 +00:00
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
This commit is contained in:
@@ -50,24 +50,26 @@ class PassConfigImpl;
|
|||||||
///
|
///
|
||||||
/// AnalysisID is sadly char*, so PointerIntPair won't work.
|
/// AnalysisID is sadly char*, so PointerIntPair won't work.
|
||||||
class IdentifyingPassPtr {
|
class IdentifyingPassPtr {
|
||||||
void *P;
|
union {
|
||||||
|
AnalysisID ID;
|
||||||
|
Pass *P;
|
||||||
|
};
|
||||||
bool IsInstance;
|
bool IsInstance;
|
||||||
public:
|
public:
|
||||||
IdentifyingPassPtr(): P(0), IsInstance(false) {}
|
IdentifyingPassPtr() : P(0), IsInstance(false) {}
|
||||||
IdentifyingPassPtr(AnalysisID IDPtr): P((void*)IDPtr), IsInstance(false) {}
|
IdentifyingPassPtr(AnalysisID IDPtr) : ID(IDPtr), IsInstance(false) {}
|
||||||
IdentifyingPassPtr(Pass *InstancePtr)
|
IdentifyingPassPtr(Pass *InstancePtr) : P(InstancePtr), IsInstance(true) {}
|
||||||
: P((void*)InstancePtr), IsInstance(true) {}
|
|
||||||
|
|
||||||
bool isValid() const { return P; }
|
bool isValid() const { return P; }
|
||||||
bool isInstance() const { return IsInstance; }
|
bool isInstance() const { return IsInstance; }
|
||||||
|
|
||||||
AnalysisID getID() const {
|
AnalysisID getID() const {
|
||||||
assert(!IsInstance && "Not a Pass ID");
|
assert(!IsInstance && "Not a Pass ID");
|
||||||
return (AnalysisID)P;
|
return ID;
|
||||||
}
|
}
|
||||||
Pass *getInstance() const {
|
Pass *getInstance() const {
|
||||||
assert(IsInstance && "Not a Pass Instance");
|
assert(IsInstance && "Not a Pass Instance");
|
||||||
return (Pass *)P;
|
return P;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user