diff --git a/flang/lib/Optimizer/CodeGen/CodeGen.cpp b/flang/lib/Optimizer/CodeGen/CodeGen.cpp index 439cc7a856236..bd87215eeb179 100644 --- a/flang/lib/Optimizer/CodeGen/CodeGen.cpp +++ b/flang/lib/Optimizer/CodeGen/CodeGen.cpp @@ -3575,6 +3575,14 @@ struct UndefOpConversion : public fir::FIROpConversion { llvm::LogicalResult matchAndRewrite(fir::UndefOp undef, OpAdaptor, mlir::ConversionPatternRewriter &rewriter) const override { + if (mlir::isa(undef.getType())) { + // Dummy scoping is used for Fortran analyses like AA. Once it gets to + // pre-codegen rewrite it is erased and a fir.undef is created to + // feed to the fir declare operation. Thus, during codegen, we can + // simply erase is as it is no longer used. + rewriter.eraseOp(undef); + return mlir::success(); + } rewriter.replaceOpWithNewOp( undef, convertType(undef.getType())); return mlir::success();