[NFC] Generically resolve body in FunctionOpInterface verifyBody.

Since the actual implementation class can arbitrarily shadow parts of the FunctionOpInterface exported API, access the body generically instead of via the use of the interface being defined.

Fixes https://github.com/llvm/llvm-project/issues/54807

Differential Revision: https://reviews.llvm.org/D123757
This commit is contained in:
Stella Laurenzo 2022-04-13 20:13:18 -07:00
parent 71d88b4ba8
commit 4f7585195d
1 changed files with 8 additions and 5 deletions

View File

@ -86,8 +86,11 @@ def FunctionOpInterface : OpInterface<"FunctionOpInterface"> {
if ($_op.isExternal())
return success();
ArrayRef<Type> fnInputTypes = $_op.getArgumentTypes();
Block &entryBlock = $_op.front();
// NOTE: This should just be $_op.front() but access generically
// because the interface methods defined here may be shadowed in
// arbitrary ways. https://github.com/llvm/llvm-project/issues/54807
Block &entryBlock = $_op->getRegion(0).front();
unsigned numArguments = fnInputTypes.size();
if (entryBlock.getNumArguments() != numArguments)
return $_op.emitOpError("entry block must have ")
@ -146,7 +149,7 @@ def FunctionOpInterface : OpInterface<"FunctionOpInterface"> {
bodyRegion->push_back(body);
for (Type input : inputTypes)
body->addArgument(input, state.location);
}
}
}];
let extraSharedClassDeclaration = [{
/// Block list iterator types.
@ -157,7 +160,7 @@ def FunctionOpInterface : OpInterface<"FunctionOpInterface"> {
/// Block argument iterator types.
using BlockArgListType = Region::BlockArgListType;
using args_iterator = BlockArgListType::iterator;
//===------------------------------------------------------------------===//
// Body Handling
//===------------------------------------------------------------------===//
@ -204,7 +207,7 @@ def FunctionOpInterface : OpInterface<"FunctionOpInterface"> {
assert(empty() && "function already has an entry block");
Block *entry = new Block();
push_back(entry);
// FIXME: Allow for passing in locations for these arguments instead of using
// the operations location.
ArrayRef<Type> inputTypes = $_op.getArgumentTypes();