@@ -289,7 +289,7 @@ static void addMeasureOp(mlir::OpBuilder& builder,
289289 const llvm::SmallVector<mlir::Value>& qubits,
290290 const BitIndexVec& bitMap) {
291291 const auto & measureOp =
292- static_cast <const qc::NonUnitaryOperation&>(operation);
292+ dynamic_cast <const qc::NonUnitaryOperation&>(operation);
293293 const auto & targets = measureOp.getTargets ();
294294 const auto & classics = measureOp.getClassics ();
295295 for (std::size_t i = 0 ; i < targets.size (); ++i) {
@@ -343,7 +343,7 @@ addBlockOps(mlir::OpBuilder& builder, const qc::Operation* operationInBlock,
343343 const BitIndexVec& bitMap) {
344344 if (operationInBlock->isCompoundOperation ()) {
345345 for (const auto & operation :
346- static_cast <const qc::CompoundOperation&>(*operationInBlock)) {
346+ dynamic_cast <const qc::CompoundOperation&>(*operationInBlock)) {
347347 if (addOperation (builder, *operation, qubits, bitMap).failed ()) {
348348 return llvm::failure ();
349349 }
@@ -422,7 +422,7 @@ addIfElseOp(mlir::OpBuilder& builder, const qc::Operation& op,
422422 const llvm::SmallVector<mlir::Value>& qubits,
423423 const BitIndexVec& bitMap) {
424424 const auto loc = builder.getUnknownLoc ();
425- const auto & ifElse = static_cast <const qc::IfElseOperation&>(op);
425+ const auto & ifElse = dynamic_cast <const qc::IfElseOperation&>(op);
426426
427427 const auto * thenOp = ifElse.getThenOp ();
428428 // Canonicalization should have removed empty then blocks
0 commit comments