diff --git a/mlir/lib/IR/Block.cpp b/mlir/lib/IR/Block.cpp --- a/mlir/lib/IR/Block.cpp +++ b/mlir/lib/IR/Block.cpp @@ -346,8 +346,8 @@ SuccessorRange::SuccessorRange() : SuccessorRange(nullptr, 0) {} SuccessorRange::SuccessorRange(Block *block) : SuccessorRange() { - if (!llvm::hasSingleElement(*block->getParent())) { - Operation *term = block->getTerminator(); + if (!block->empty() && !llvm::hasSingleElement(*block->getParent())) { + Operation *term = &block->back(); if ((count = term->getNumSuccessors())) base = term->getBlockOperands().data(); } diff --git a/mlir/test/IR/invalid.mlir b/mlir/test/IR/invalid.mlir --- a/mlir/test/IR/invalid.mlir +++ b/mlir/test/IR/invalid.mlir @@ -176,6 +176,16 @@ %y = constant 1 : i32 // expected-error {{block with no terminator}} } +// ----- + +func @no_terminator() { + br ^bb1 +^bb1: + %x = constant 0 : i32 + %y = constant 1 : i32 // expected-error {{block with no terminator}} +} + + // ----- " // expected-error {{expected}}