mirror of
https://github.com/revng/revng
synced 2026-06-21 14:07:57 +00:00
35b0da291a
Add `PostInlineHelpersVerifyPass`, a `ModulePass` derived class that aborts on any `getelementptr` instruction found in any Isolated function. `inline-helpers` is the only pass in the post-isolate chain that could import a GEP into an Isolated function by inlining a helper body that contains one, so the verifier is invoked at the end of `InlineHelpersPass::runOnModule`. In this way, we early catch this invariant on the IR.
35 lines
867 B
C++
35 lines
867 B
C++
//
|
|
// This file is distributed under the MIT License. See LICENSE.md for details.
|
|
//
|
|
|
|
#include "llvm/IR/Function.h"
|
|
#include "llvm/IR/InstIterator.h"
|
|
#include "llvm/IR/Instructions.h"
|
|
#include "llvm/IR/Module.h"
|
|
|
|
#include "revng/Model/FunctionTags.h"
|
|
#include "revng/Support/Assert.h"
|
|
#include "revng/Support/IRHelpers.h"
|
|
|
|
#include "PostInlineHelpersVerifyPass.h"
|
|
|
|
using namespace llvm;
|
|
|
|
bool PostInlineHelpersVerifyPass::runOnModule(Module &M) {
|
|
for (Function &F : M) {
|
|
if (not FunctionTags::Isolated.isTagOf(&F))
|
|
continue;
|
|
|
|
for (Instruction &I : instructions(F))
|
|
if (isa<GetElementPtrInst>(&I))
|
|
revng_abort(("post-inline-helpers-verify: "
|
|
"getelementptr in Isolated function "
|
|
+ F.getName().str())
|
|
.c_str());
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
char PostInlineHelpersVerifyPass::ID;
|