diff --git a/flang/lib/Optimizer/CodeGen/CodeGen.cpp b/flang/lib/Optimizer/CodeGen/CodeGen.cpp index f14c0a612a890..5346dda6b8d4a 100644 --- a/flang/lib/Optimizer/CodeGen/CodeGen.cpp +++ b/flang/lib/Optimizer/CodeGen/CodeGen.cpp @@ -839,6 +839,18 @@ struct GenTypeDescOpConversion : public FIROpConversion { } }; +/// Convert `fir.end` +struct FirEndOpConversion : public FIROpConversion { + using FIROpConversion::FIROpConversion; + + mlir::LogicalResult + matchAndRewrite(fir::FirEndOp firEnd, OpAdaptor, + mlir::ConversionPatternRewriter &rewriter) const override { + return rewriter.notifyMatchFailure( + firEnd, "fir.end codegen is not implemented yet"); + } +}; + /// Lower `fir.has_value` operation to `llvm.return` operation. struct HasValueOpConversion : public FIROpConversion { using FIROpConversion::FIROpConversion; @@ -2108,9 +2120,9 @@ class FIRToLLVMLowering : public fir::FIRToLLVMLoweringBase { CmpcOpConversion, ConstcOpConversion, ConvertOpConversion, DispatchOpConversion, DispatchTableOpConversion, DTEntryOpConversion, DivcOpConversion, EmboxOpConversion, EmboxCharOpConversion, - EmboxProcOpConversion, ExtractValueOpConversion, HasValueOpConversion, - GenTypeDescOpConversion, GlobalLenOpConversion, GlobalOpConversion, - InsertOnRangeOpConversion, InsertValueOpConversion, + EmboxProcOpConversion, ExtractValueOpConversion, FirEndOpConversion, + HasValueOpConversion, GenTypeDescOpConversion, GlobalLenOpConversion, + GlobalOpConversion, InsertOnRangeOpConversion, InsertValueOpConversion, IsPresentOpConversion, LoadOpConversion, NegcOpConversion, MulcOpConversion, SelectCaseOpConversion, SelectOpConversion, SelectRankOpConversion, SelectTypeOpConversion, ShapeOpConversion, diff --git a/flang/test/Fir/convert-to-llvm-invalid.fir b/flang/test/Fir/convert-to-llvm-invalid.fir index 3c657d3f3a017..0b6a39f1b6cd6 100644 --- a/flang/test/Fir/convert-to-llvm-invalid.fir +++ b/flang/test/Fir/convert-to-llvm-invalid.fir @@ -173,3 +173,10 @@ func @emboxproc_test() { // Test that `fir.unboxproc` and `fir.boxproc_host` also fails to be legalized. // At the moment these cannot be tested since the `fir.boxproc` type does not have a conversion. + +// ----- + +// Test `fir.end` conversion failure. Not implemented yet. + +// expected-error@+1{{failed to legalize operation 'fir.end'}} +"fir.end"() : () -> ()