/// getAnalysisUsage function.
///
template<typename AnalysisType>
/// getAnalysisUsage function.
///
template<typename AnalysisType>
- AnalysisType &getAnalysis() {
+ AnalysisType &getAnalysis() const {
assert(Resolver && "Pass has not been inserted into a PassManager object!");
const PassInfo *PI = getClassPassInfo<AnalysisType>();
assert(PI && "getAnalysis for unregistered pass!");
assert(Resolver && "Pass has not been inserted into a PassManager object!");
const PassInfo *PI = getClassPassInfo<AnalysisType>();
assert(PI && "getAnalysis for unregistered pass!");
}
template<typename AnalysisType>
}
template<typename AnalysisType>
- AnalysisType &getAnalysisID(const PassInfo *PI) {
+ AnalysisType &getAnalysisID(const PassInfo *PI) const {
assert(Resolver && "Pass has not been inserted into a PassManager object!");
assert(PI && "getAnalysis for unregistered pass!");
assert(Resolver && "Pass has not been inserted into a PassManager object!");
assert(PI && "getAnalysis for unregistered pass!");
- return *(AnalysisType*)Resolver->getAnalysis(PI);
+ return *dynamic_cast<AnalysisType*>(Resolver->getAnalysis(PI));
}
/// getAnalysisToUpdate<AnalysisType>() - This function is used by subclasses
}
/// getAnalysisToUpdate<AnalysisType>() - This function is used by subclasses
/// provide the capability to update an analysis that exists.
///
template<typename AnalysisType>
/// provide the capability to update an analysis that exists.
///
template<typename AnalysisType>
- AnalysisType *getAnalysisToUpdate() {
+ AnalysisType *getAnalysisToUpdate() const {
assert(Resolver && "Pass not resident in a PassManager object!");
const PassInfo *PI = getClassPassInfo<AnalysisType>();
if (PI == 0) return 0;
assert(Resolver && "Pass not resident in a PassManager object!");
const PassInfo *PI = getClassPassInfo<AnalysisType>();
if (PI == 0) return 0;
- return (AnalysisType*)Resolver->getAnalysisToUpdate(PI);
+ return dynamic_cast<AnalysisType*>(Resolver->getAnalysisToUpdate(PI));
struct AnalysisResolver {
virtual Pass *getAnalysisOrNullUp(AnalysisID ID) const = 0;
virtual Pass *getAnalysisOrNullDown(AnalysisID ID) const = 0;
struct AnalysisResolver {
virtual Pass *getAnalysisOrNullUp(AnalysisID ID) const = 0;
virtual Pass *getAnalysisOrNullDown(AnalysisID ID) const = 0;
- Pass *getAnalysis(AnalysisID ID) {
+ Pass *getAnalysis(AnalysisID ID) const {
Pass *Result = getAnalysisOrNullUp(ID);
assert(Result && "Pass has an incorrect analysis uses set!");
return Result;
}
// getAnalysisToUpdate - Return an analysis result or null if it doesn't exist
Pass *Result = getAnalysisOrNullUp(ID);
assert(Result && "Pass has an incorrect analysis uses set!");
return Result;
}
// getAnalysisToUpdate - Return an analysis result or null if it doesn't exist
- Pass *getAnalysisToUpdate(AnalysisID ID) {
+ Pass *getAnalysisToUpdate(AnalysisID ID) const {
return getAnalysisOrNullUp(ID);
}
return getAnalysisOrNullUp(ID);
}