-
Notifications
You must be signed in to change notification settings - Fork 413
Open
Description
Test commit
417a5112947d9889cad54cb5b2110b37978b86b8
Description
The pass leaks memory when it fails to legalize nested operations (like sv.reg): it allocates systemc.module and systemc.ctor operations but fails to deallocate them when the conversion is aborted due to incorrect/illegal IR.
Steps to reproduce
- Minimal MLIR program (test.mlir)
"builtin.module"() ({
"hw.module"() <{module_type = !hw.modty<>, parameters = [], sym_name = "Bar"}> ({
%0 = "hw.constant"() <{value = false}> : () -> i1
%1 = "sv.reg"(%0) <{name = "reg"}> : (i1) -> !hw.inout<i1>
"hw.output"() : () -> ()
}) : () -> ()
}) : () -> ()
Command
circt-opt --convert-hw-to-systemc test.mlir
Output
test.mlir:4:10: error: failed to legalize operation 'sv.reg'
%1 = "sv.reg"(%0) <{name = "reg"}> : (i1) -> !hw.inout<i1>
^
test.mlir:4:10: note: see current operation: %2 = "sv.reg"(%1) <{name = "reg"}> : (i1) -> !hw.inout<i1>
=================================================================
==108527==ERROR: LeakSanitizer: detected memory leaks
Indirect leak of 88 byte(s) in 1 object(s) allocated from:
#0 0x55b3b1245c5e in malloc (/workdir/builds/circt/bin/circt-opt+0x6f95c5e) (BuildId: d0273fc7523026d0)
#1 0x55b3b72f252a in mlir::Operation::create(mlir::Location, mlir::OperationName, mlir::TypeRange, mlir::ValueRange, mlir::DictionaryAttr, mlir::OpaqueProperties, mlir::BlockRange, unsigned int) /workdir/sources/circt/llvm/mlir/lib/IR/Operation.cpp:114:46
Indirect leak of 72 byte(s) in 1 object(s) allocated from:
#0 0x55b3b1280aad in operator new(unsigned long) (/workdir/builds/circt/bin/circt-opt+0x6fd0aad) (BuildId: d0273fc7523026d0)
#1 0x55b3b62d9d73 in circt::systemc::CtorOp::build(mlir::OpBuilder&, mlir::OperationState&) /workdir/builds/circt/include/circt/Dialect/SystemC/SystemC.cpp.inc:1849:25
#2 0x55b3b629c0c8 in circt::systemc::CtorOp::create(mlir::OpBuilder&, mlir::Location) /workdir/builds/circt/include/circt/Dialect/SystemC/SystemC.cpp.inc:1855:3
#3 0x55b3b629be5c in circt::systemc::SCModuleOp::getOrCreateCtor() /workdir/sources/circt/lib/Dialect/SystemC/SystemCOps.cpp:336:10
#4 0x55b3b69e3243 in (anonymous namespace)::ConvertHWModule::matchAndRewrite(circt::hw::HWModuleOp, circt::hw::HWModuleOpAdaptor, mlir::ConversionPatternRewriter&) const /workdir/sources/circt/lib/Conversion/HWToSystemC/HWToSystemC.cpp:86:18
#5 0x55b3b69d6038 in llvm::LogicalResult mlir::ConversionPattern::dispatchTo1To1<mlir::OpConversionPattern<circt::hw::HWModuleOp>, circt::hw::HWModuleOp>(mlir::OpConversionPattern<circt::hw::HWModuleOp> const&, circt::hw::HWModuleOp, circt::hw::HWModuleOp::GenericAdaptor<llvm::ArrayRef<mlir::ValueRange> >, mlir::ConversionPatternRewriter&) /workdir/sources/circt/llvm/mlir/include/mlir/Transforms/DialectConversion.h:1069:15
#6 0x55b3b69d5b4f in mlir::OpConversionPattern<circt::hw::HWModuleOp>::matchAndRewrite(circt::hw::HWModuleOp, circt::hw::HWModuleOpGenericAdaptor<llvm::ArrayRef<mlir::ValueRange> >, mlir::ConversionPatternRewriter&) const /workdir/sources/circt/llvm/mlir/include/mlir/Transforms/DialectConversion.h:727:12
#7 0x55b3b69d43bf in mlir::OpConversionPattern<circt::hw::HWModuleOp>::matchAndRewrite(mlir::Operation*, llvm::ArrayRef<mlir::ValueRange>, mlir::ConversionPatternRewriter&) const /workdir/sources/circt/llvm/mlir/include/mlir/Transforms/DialectConversion.h:713:12
#8 0x55b3b7e3c195 in mlir::ConversionPattern::matchAndRewrite(mlir::Operation*, mlir::PatternRewriter&) const /workdir/sources/circt/llvm/mlir/lib/Transforms/Utils/DialectConversion.cpp:2434:10
Indirect leak of 72 byte(s) in 1 object(s) allocated from:
#0 0x55b3b1280aad in operator new(unsigned long) (/workdir/builds/circt/bin/circt-opt+0x6fd0aad) (BuildId: d0273fc7523026d0)
#1 0x55b3b6296442 in circt::systemc::SCModuleOp::build(mlir::OpBuilder&, mlir::OperationState&, mlir::StringAttr, mlir::ArrayAttr, llvm::ArrayRef<mlir::Type>, llvm::ArrayRef<mlir::NamedAttribute>) /workdir/sources/circt/lib/Dialect/SystemC/SystemCOps.cpp:249:21
#2 0x55b3b629706a in circt::systemc::SCModuleOp::build(mlir::OpBuilder&, mlir::OperationState&, mlir::StringAttr, llvm::ArrayRef<circt::hw::PortInfo>, llvm::ArrayRef<mlir::NamedAttribute>) /workdir/sources/circt/lib/Dialect/SystemC/SystemCOps.cpp:266:3
#3 0x55b3b6331669 in circt::systemc::SCModuleOp::create(mlir::OpBuilder&, mlir::Location, mlir::StringAttr, llvm::ArrayRef<circt::hw::PortInfo>, llvm::ArrayRef<mlir::NamedAttribute>) /workdir/builds/circt/include/circt/Dialect/SystemC/SystemC.cpp.inc:5747:3
#4 0x55b3b69e2e3b in (anonymous namespace)::ConvertHWModule::matchAndRewrite(circt::hw::HWModuleOp, circt::hw::HWModuleOpAdaptor, mlir::ConversionPatternRewriter&) const /workdir/sources/circt/lib/Conversion/HWToSystemC/HWToSystemC.cpp:61:21
#5 0x55b3b69d6038 in llvm::LogicalResult mlir::ConversionPattern::dispatchTo1To1<mlir::OpConversionPattern<circt::hw::HWModuleOp>, circt::hw::HWModuleOp>(mlir::OpConversionPattern<circt::hw::HWModuleOp> const&, circt::hw::HWModuleOp, circt::hw::HWModuleOp::GenericAdaptor<llvm::ArrayRef<mlir::ValueRange> >, mlir::ConversionPatternRewriter&) /workdir/sources/circt/llvm/mlir/include/mlir/Transforms/DialectConversion.h:1069:15
#6 0x55b3b69d5b4f in mlir::OpConversionPattern<circt::hw::HWModuleOp>::matchAndRewrite(circt::hw::HWModuleOp, circt::hw::HWModuleOpGenericAdaptor<llvm::ArrayRef<mlir::ValueRange> >, mlir::ConversionPatternRewriter&) const /workdir/sources/circt/llvm/mlir/include/mlir/Transforms/DialectConversion.h:727:12
#7 0x55b3b69d43bf in mlir::OpConversionPattern<circt::hw::HWModuleOp>::matchAndRewrite(mlir::Operation*, llvm::ArrayRef<mlir::ValueRange>, mlir::ConversionPatternRewriter&) const /workdir/sources/circt/llvm/mlir/include/mlir/Transforms/DialectConversion.h:713:12
#8 0x55b3b7e3c195 in mlir::ConversionPattern::matchAndRewrite(mlir::Operation*, mlir::PatternRewriter&) const /workdir/sources/circt/llvm/mlir/lib/Transforms/Utils/DialectConversion.cpp:2434:10
SUMMARY: AddressSanitizer: 232 byte(s) leaked in 3 allocation(s).
Metadata
Metadata
Assignees
Labels
No labels