llvm / llvm/circt

Segmentation fault in loop schedule pipeline verifier

Open
#9,369 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Dominant language
C++
Stars
2.2k
Forks
524
Avg merge
3d 2h
Merged PRs (30d)
46

Description

**Test commit**
[417a5112947d9889cad54cb5b2110b37978b86b8](https://github.com/llvm/circt/commit/417a5112947d9889cad54cb5b2110b37978b86b8)

**Description**
The verifier for `loopschedule.pipeline` crashes with a null pointer dereference when a nested `loopschedule.pipeline.stage` operation lacks the mandatory start attribute.

**Steps to reproduce**
- Minimal MLIR program (test.mlir)
```
"builtin.module"() ({
"func.func"() <{function_type = () -> (), sym_name = "missing_start_attr"}> ({
%0 = "arith.constant"() <{value = 0 : index}> : () -> index
%1 = "arith.constant"() <{value = false}> : () -> i1
"loopschedule.pipeline"(%0) <{II = 1 : i64}> ({
^bb0(%arg0: index):
"loopschedule.register"(%1) : (i1) -> ()
}, {
^bb0(%arg1: index):
"loopschedule.pipeline.stage"() ({
"loopschedule.register"() : () -> ()
}) : () -> ()
"loopschedule.terminator"() : () -> ()
}) : (index) -> ()
"func.return"() : () -> ()
}) : () -> ()
}) : () -> ()
```

**Command**
```
circt-opt test.mlir
```

**Output**
```
PLEASE submit a bug report to https://github.com/llvm/circt and include the crash backtrace.
Stack dump:
0. Program arguments: /workdir/builds/circt/bin/circt-opt test.mlir
#0 0x000056068f09f94b backtrace (/workdir/builds/circt/bin/circt-opt+0x6f4e94b)
#1 0x000056068f22f747 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) /workdir/sources/circt/llvm/llvm/lib/Support/Unix/Signals.inc:834:13
#2 0x000056068f22d373 llvm::sys::RunSignalHandlers() /workdir/sources/circt/llvm/llvm/lib/Support/Signals.cpp:105:18
#3 0x000056068f2304b5 SignalHandler(int, siginfo_t*, void*) /workdir/sources/circt/llvm/llvm/lib/Support/Unix/Signals.inc:426:38
#4 0x00007f0029dda520 (/lib/x86_64-linux-gnu/libc.so.6+0x42520)
#5 0x00005606950e1f47 llvm::APInt::APInt(llvm::APInt const&) /workdir/sources/circt/llvm/llvm/include/llvm/ADT/APInt.h:177:44
#6 0x00005606950e1f47 mlir::IntegerAttr::getValue() const /workdir/builds/llvm_for_circt/tools/mlir/include/mlir/IR/BuiltinAttributes.cpp.inc:466:10
#7 0x00005606923e2060 circt::loopschedule::LoopSchedulePipelineStageOp::getStart() /workdir/builds/circt/include/circt/Dialect/LoopSchedule/LoopSchedule.cpp.inc:632:26
#8 0x00005606923e14a1 circt::loopschedule::LoopSchedulePipelineOp::verify() /workdir/sources/circt/lib/Dialect/LoopSchedule/LoopScheduleOps.cpp:170:23
#9 0x000056069240e054 llvm::failed(llvm::LogicalResult) /workdir/sources/circt/llvm/llvm/include/llvm/Support/LogicalResult.h:71:42
#10 0x000056069240e054 mlir::Op::Impl, mlir::OpTrait::VariadicResults, mlir::OpTrait::ZeroSuccessors, mlir::OpTrait::VariadicOperands, mlir::OpTrait::OpInvariants, mlir::BytecodeOpInterface::Trait>::verifyInvariants(mlir::Operation*) /workdir/sources/circt/llvm/mlir/include/mlir/IR/OpDefinition.h:2053:9
#11 0x000056069240c39d llvm::unique_function::operator()(mlir::Operation*) const /workdir/sources/circt/llvm/llvm/include/llvm/ADT/FunctionExtras.h:390:12
#12 0x000056069240c39d mlir::RegisteredOperationName::Model::verifyInvariants(mlir::Operation*) /workdir/sources/circt/llvm/mlir/include/mlir/IR/OperationSupport.h:555:14
#13 0x00005606951bd753 llvm::LogicalResult::failed() const /workdir/sources/circt/llvm/llvm/include/llvm/Support/LogicalResult.h:43:43
#14 0x00005606951bd753 llvm::failed(llvm::LogicalResult) /workdir/sources/circt/llvm/llvm/include/llvm/Support/LogicalResult.h:71:58
#15 0x00005606951bd753 (anonymous namespace)::OperationVerifier::verifyOnEntrance(mlir::Operation&) /workdir/sources/circt/llvm/mlir/lib/IR/Verifier.cpp:175:25
#16 0x00005606951bd753 auto (anonymous namespace)::OperationVerifier::verifyOperation(mlir::Operation&)::$_2::operator()(mlir::Operation*) const /workdir/sources/circt/llvm/mlir/lib/IR/Verifier.cpp:296:45
#17 0x00005606951bd753 auto (anonymous namespace)::OperationVerifier::verifyOperation(mlir::Operation&)::$_1::operator()<(anonymous namespace)::OperationVerifier::verifyOperation(mlir::Operation&)::$_2>((anonymous namespace)::OperationVerifier::verifyOperation(mlir::Operation&)::$_2&&, llvm::PointerUnion) const /workdir/sources/circt/llvm/mlir/lib/IR/Verifier.cpp:276:16
#18 0x00005606951bd753 (anonymous namespace)::OperationVerifier::verifyOperation(mlir::Operation&) /workdir/sources/circt/llvm/mlir/lib/IR/Verifier.cpp:295:16
#19 0x00005606951bd753 (anonymous namespace)::OperationVerifier::verifyOpAndDominance(mlir::Operation&) /workdir/sources/circt/llvm/mlir/lib/IR/Verifier.cpp:81:14
#20 0x00005606951bd901 llvm::LogicalResult::failed() const /workdir/sources/circt/llvm/llvm/include/llvm/Support/LogicalResult.h:43:43
#21 0x00005606951bd901 llvm::failed(llvm::LogicalResult) /workdir/sources/circt/llvm/llvm/include/llvm/Support/LogicalResult.h:71:58
#22 0x00005606951bd901 (anonymous namespace)::OperationVerifier::verifyOnExit(mlir::Operation&)::$_3::operator()(mlir::Operation*) const /workdir/sources/circt/llvm/mlir/lib/IR/Verifier.cpp:225:9
#23 0x00005606951bd901 auto void mlir::parallelForEach(mlir::MLIRContext*, mlir::Operation**, mlir::Operation**, (anonymous namespace)::OperationVerifier::verifyOnExit(mlir::Operation&)::$_3&&)::'lambda'(mlir::Operation**&&)::operator()(mlir::Operation**&&) const /workdir/sources/circt/llvm/mlir/include/mlir/IR/Threading.h:120:12
#24 0x00005606951bd901 llvm::LogicalResult mlir::failableParallelForEach(mlir::MLIRContext*, mlir::Operation**, mlir::Operation**, (anonymous namespace)::OperationVerifier::verifyOnExit(mlir::Operation&)::$_3&&)::'lambda'(mlir::Operation**&&)>(mlir::MLIRContext*, mlir::Operation**, mlir::Operation**, (anonymous namespace)::OperationVerifier::verifyOnExit(mlir::Operation&)::$_3&&) /workdir/sources/circt/llvm/mlir/include/mlir/IR/Threading.h:46:18
#25 0x00005606951bd901 void mlir::parallelForEach(mlir::MLIRContext*, mlir::Operation**, mlir::Operation**, (anonymous namespace)::OperationVerifier::verifyOnExit(mlir::Operation&)::$_3&&) /workdir/sources/circt/llvm/mlir/include/mlir/IR/Threading.h:119:9
#26 0x00005606951bd901 void mlir::parallelForEach&, (anonymous namespace)::OperationVerifier::verifyOnExit(mlir::Operation&)::$_3>(mlir::MLIRContext*, llvm::SmallVector&, (anonymous namespace)::OperationVerifier::verifyOnExit(mlir::Operation&)::$_3&&) /workdir/sources/circt/llvm/mlir/include/mlir/IR/Threading.h:131:3
#27 0x00005606951bd901 (anonymous namespace)::OperationVerifier::verifyOnExit(mlir::Operation&) /workdir/sources/circt/llvm/mlir/lib/IR/Verifier.cpp:224:3
#28 0x00005606951bd901 auto (anonymous namespace)::OperationVerifier::verifyOperation(mlir::Operation&)::$_0::operator()(mlir::Operation*) const /workdir/sources/circt/llvm/mlir/lib/IR/Verifier.cpp:287:53
#29 0x00005606951bd901 auto (anonymous namespace)::OperationVerifier::verifyOperation(mlir::Operation&)::$_1::operator()<(anonymous namespace)::OperationVerifier::verifyOperation(mlir::Operation&)::$_0>((anonymous namespace)::OperationVerifier::verifyOperation(mlir::Operation&)::$_0&&, llvm::PointerUnion) const /workdir/sources/circt/llvm/mlir/lib/IR/Verifier.cpp:276:16
#30 0x00005606951bd901 (anonymous namespace)::OperationVerifier::verifyOperation(mlir::Operation&) /workdir/sources/circt/llvm/mlir/lib/IR/Verifier.cpp:287:15
#31 0x00005606951bd901 (anonymous namespace)::OperationVerifier::verifyOpAndDominance(mlir::Operation&) /workdir/sources/circt/llvm/mlir/lib/IR/Verifier.cpp:81:14
#32 0x00005606951bd901 llvm::LogicalResult::failed() const /workdir/sources/circt/llvm/llvm/include/llvm/Support/LogicalResult.h:43:43
#33 0x00005606951bd901 llvm::failed(llvm::LogicalResult) /workdir/sources/circt/llvm/llvm/include/llvm/Support/LogicalResult.h:71:58
#34 0x00005606951bd901 (anonymous namespace)::OperationVerifier::verifyOnExit(mlir::Operation&)::$_3::operator()(mlir::Operation*) const /workdir/sources/circt/llvm/mlir/lib/IR/Verifier.cpp:225:9
#35 0x00005606951bd901 auto void mlir::parallelForEach(mlir::MLIRContext*, mlir::Operation**, mlir::Operation**, (anonymous namespace)::OperationVerifier::verifyOnExit(mlir::Operation&)::$_3&&)::'lambda'(mlir::Operation**&&)::operator()(mlir::Operation**&&) const /workdir/sources/circt/llvm/mlir/include/mlir/IR/Threading.h:120:12
#36 0x00005606951bd901 llvm::LogicalResult mlir::failableParallelForEach(mlir::MLIRContext*, mlir::Operation**, mlir::Operation**, (anonymous namespace)::OperationVerifier::verifyOnExit(mlir::Operation&)::$_3&&)::'lambda'(mlir::Operation**&&)>(mlir::MLIRContext*, mlir::Operation**, mlir::Operation**, (anonymous namespace)::OperationVerifier::verifyOnExit(mlir::Operation&)::$_3&&) /workdir/sources/circt/llvm/mlir/include/mlir/IR/Threading.h:46:18
#37 0x00005606951bd901 void mlir::parallelForEach(mlir::MLIRContext*, mlir::Operation**, mlir::Operation**, (anonymous namespace)::OperationVerifier::verifyOnExit(mlir::Operation&)::$_3&&) /workdir/sources/circt/llvm/mlir/include/mlir/IR/Threading.h:119:9
#38 0x00005606951bd901 void mlir::parallelForEach&, (anonymous namespace)::OperationVerifier::verifyOnExit(mlir::Operation&)::$_3>(mlir::MLIRContext*, llvm::SmallVector&, (anonymous namespace)::OperationVerifier::verifyOnExit(mlir::Operation&)::$_3&&) /workdir/sources/circt/llvm/mlir/include/mlir/IR/Threading.h:131:3
#39 0x00005606951bd901 (anonymous namespace)::OperationVerifier::verifyOnExit(mlir::Operation&) /workdir/sources/circt/llvm/mlir/lib/IR/Verifier.cpp:224:3
#40 0x00005606951bd901 auto (anonymous namespace)::OperationVerifier::verifyOperation(mlir::Operation&)::$_0::operator()(mlir::Operation*) const /workdir/sources/circt/llvm/mlir/lib/IR/Verifier.cpp:287:53
#41 0x00005606951bd901 auto (anonymous namespace)::OperationVerifier::verifyOperation(mlir::Operation&)::$_1::operator()<(anonymous namespace)::OperationVerifier::verifyOperation(mlir::Operation&)::$_0>((anonymous namespace)::OperationVerifier::verifyOperation(mlir::Operation&)::$_0&&, llvm::PointerUnion) const /workdir/sources/circt/llvm/mlir/lib/IR/Verifier.cpp:276:16
#42 0x00005606951bd901 (anonymous namespace)::OperationVerifier::verifyOperation(mlir::Operation&) /workdir/sources/circt/llvm/mlir/lib/IR/Verifier.cpp:287:15
#43 0x00005606951bd901 (anonymous namespace)::OperationVerifier::verifyOpAndDominance(mlir::Operation&) /workdir/sources/circt/llvm/mlir/lib/IR/Verifier.cpp:81:14
#44 0x00005606951bcf03 mlir::verify(mlir::Operation*, bool) /workdir/sources/circt/llvm/mlir/lib/IR/Verifier.cpp:426:1
#45 0x0000560695c38fa0 llvm::LogicalResult::failed() const /workdir/sources/circt/llvm/llvm/include/llvm/Support/LogicalResult.h:43:43
#46 0x0000560695c38fa0 llvm::failed(llvm::LogicalResult) /workdir/sources/circt/llvm/llvm/include/llvm/Support/LogicalResult.h:71:58
#47 0x0000560695c38fa0 (anonymous namespace)::OperationParser::finalize() /workdir/sources/circt/llvm/mlir/lib/AsmParser/Parser.cpp:931:48
#48 0x0000560695c38fa0 (anonymous namespace)::TopLevelOperationParser::parse(mlir::Block*, mlir::Location) /workdir/sources/circt/llvm/mlir/lib/AsmParser/Parser.cpp:2876:20
#49 0x0000560695c38fa0 mlir::parseAsmSourceFile(llvm::SourceMgr const&, mlir::Block*, mlir::ParserConfig const&, mlir::AsmParserState*, mlir::AsmParserCodeCompleteContext*) /workdir/sources/circt/llvm/mlir/lib/AsmParser/Parser.cpp:2930:41
#50 0x0000560695680fbf mlir::parseSourceFile(std::shared_ptr const&, mlir::Block*, mlir::ParserConfig const&, mlir::LocationAttr*) /workdir/sources/circt/llvm/mlir/lib/Parser/Parser.cpp:65:1
#51 0x000056069567fa4e llvm::LogicalResult::failed() const /workdir/sources/circt/llvm/llvm/include/llvm/Support/LogicalResult.h:43:43
#52 0x000056069567fa4e llvm::failed(llvm::LogicalResult) /workdir/sources/circt/llvm/llvm/include/llvm/Support/LogicalResult.h:71:58
#53 0x000056069567fa4e mlir::OwningOpRef mlir::detail::parseSourceFile const&>(mlir::ParserConfig const&, std::shared_ptr const&) /workdir/sources/circt/llvm/mlir/include/mlir/Parser/Parser.h:158:7
#54 0x000056069567fa4e mlir::OwningOpRef mlir::parseSourceFile(std::shared_ptr const&, mlir::ParserConfig const&) /workdir/sources/circt/llvm/mlir/include/mlir/Parser/Parser.h:188:10
#55 0x000056069567fa4e mlir::parseSourceFileForTool(std::shared_ptr const&, mlir::ParserConfig const&, bool) /workdir/sources/circt/llvm/mlir/include/mlir/Tools/ParseUtilities.h:31:12
#56 0x000056069567e73b mlir::Timer::stop() /workdir/sources/circt/llvm/mlir/include/mlir/Support/Timing.h:218:9
#57 0x000056069567e73b mlir::TimingScope::stop() /workdir/sources/circt/llvm/mlir/include/mlir/Support/Timing.h:301:11
#58 0x000056069567e73b performActions(llvm::raw_ostream&, std::shared_ptr const&, mlir::MLIRContext*, mlir::MlirOptMainConfig const&) /workdir/sources/circt/llvm/mlir/lib/Tools/mlir-opt/MlirOptMain.cpp:523:16
#59 0x000056069567e4ae processBuffer(llvm::raw_ostream&, std::unique_ptr >, llvm::MemoryBufferRef, mlir::MlirOptMainConfig const&, mlir::DialectRegistry&, mlir::SourceMgrDiagnosticVerifierHandler*, llvm::ThreadPoolInterface*) /workdir/sources/circt/llvm/mlir/lib/Tools/mlir-opt/MlirOptMain.cpp:673:12
#60 0x000056069567e4ae mlir::MlirOptMain(llvm::raw_ostream&, std::unique_ptr >, mlir::DialectRegistry&, mlir::MlirOptMainConfig const&)::$_3::operator()(std::unique_ptr >, llvm::MemoryBufferRef, llvm::raw_ostream&) const /workdir/sources/circt/llvm/mlir/lib/Tools/mlir-opt/MlirOptMain.cpp:771:12
#61 0x000056069567e4ae llvm::LogicalResult llvm::function_ref >, llvm::MemoryBufferRef const&, llvm::raw_ostream&)>::callback_fn >, mlir::DialectRegistry&, mlir::MlirOptMainConfig const&)::$_3>(long, std::unique_ptr >, llvm::MemoryBufferRef const&, llvm::raw_ostream&) /workdir/sources/circt/llvm/llvm/include/llvm/ADT/STLFunctionalExtras.h:46:12
#62 0x00005606956a777b llvm::function_ref >, llvm::MemoryBufferRef const&, llvm::raw_ostream&)>::operator()(std::unique_ptr >, llvm::MemoryBufferRef const&, llvm::raw_ostream&) const /workdir/sources/circt/llvm/llvm/include/llvm/ADT/STLFunctionalExtras.h:69:12
#63 0x00005606956a777b mlir::splitAndProcessBuffer(std::unique_ptr >, llvm::function_ref >, llvm::MemoryBufferRef const&, llvm::raw_ostream&)>, llvm::raw_ostream&, llvm::StringRef, llvm::StringRef) /workdir/sources/circt/llvm/mlir/lib/Support/ToolUtilities.cpp:30:12
#64 0x0000560695675d52 mlir::MlirOptMain(llvm::raw_ostream&, std::unique_ptr >, mlir::DialectRegistry&, mlir::MlirOptMainConfig const&) /workdir/sources/circt/llvm/mlir/lib/Tools/mlir-opt/MlirOptMain.cpp:776:26
#65 0x0000560695676089 mlir::MlirOptMain(int, char**, llvm::StringRef, llvm::StringRef, mlir::DialectRegistry&) /workdir/sources/circt/llvm/mlir/lib/Tools/mlir-opt/MlirOptMain.cpp:822:14
#66 0x00005606956762cd mlir::MlirOptMain(int, char**, llvm::StringRef, mlir::DialectRegistry&) /workdir/sources/circt/llvm/mlir/lib/Tools/mlir-opt/MlirOptMain.cpp:838:10
#67 0x000056068f1255f3 llvm::failed(llvm::LogicalResult) /workdir/sources/circt/llvm/llvm/include/llvm/Support/LogicalResult.h:71:42
#68 0x000056068f1255f3 main /workdir/sources/circt/tools/circt-opt/circt-opt.cpp:86:10
#69 0x00007f0029dc1d90 (/lib/x86_64-linux-gnu/libc.so.6+0x29d90)
#70 0x00007f0029dc1e40 __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x29e40)
#71 0x000056068f063e15 _start (/workdir/builds/circt/bin/circt-opt+0x6f12e15)
AddressSanitizer:DEADLYSIGNAL
=================================================================
==108134==ERROR: AddressSanitizer: SEGV on unknown address 0x000000000018 (pc 0x7f0029eb68fd bp 0x000000000000 sp 0x6320000132e8 T0)
==108134==The signal is caused by a READ memory access.
==108134==Hint: address points to the zero page.
#0 0x7f0029eb68fd in syscall (/lib/x86_64-linux-gnu/libc.so.6+0x11e8fd) (BuildId: 4f7b0c955c3d81d7cac1501a2498b69d1d82bfe7)
#1 0x56068f2304df in SignalHandler(int, siginfo_t*, void*) /workdir/sources/circt/llvm/llvm/lib/Support/Unix/Signals.inc:426:7
#2 0x7f0029dda51f (/lib/x86_64-linux-gnu/libc.so.6+0x4251f) (BuildId: 4f7b0c955c3d81d7cac1501a2498b69d1d82bfe7)
#3 0x5606950e1f46 in mlir::detail::StorageUserBase::getImpl() const /workdir/sources/circt/llvm/mlir/include/mlir/IR/StorageUniquerSupport.h:212:68
#4 0x5606950e1f46 in mlir::IntegerAttr::getValue() const /workdir/builds/llvm_for_circt/tools/mlir/include/mlir/IR/BuiltinAttributes.cpp.inc:466:10
#5 0x5606923e205f in circt::loopschedule::LoopSchedulePipelineStageOp::getStart() /workdir/builds/circt/include/circt/Dialect/LoopSchedule/LoopSchedule.cpp.inc:632:15
#6 0x5606923e14a0 in circt::loopschedule::LoopSchedulePipelineOp::verify() /workdir/sources/circt/lib/Dialect/LoopSchedule/LoopScheduleOps.cpp:170:31
#7 0x56069240e053 in mlir::Op::Impl, mlir::OpTrait::VariadicResults, mlir::OpTrait::ZeroSuccessors, mlir::OpTrait::VariadicOperands, mlir::OpTrait::OpInvariants, mlir::BytecodeOpInterface::Trait>::verifyInvariants(mlir::Operation*) /workdir/sources/circt/llvm/mlir/include/mlir/IR/OpDefinition.h:2053:39
#8 0x56069240c39c in llvm::unique_function::operator()(mlir::Operation*) const /workdir/sources/circt/llvm/llvm/include/llvm/ADT/FunctionExtras.h:390:12
#9 0x56069240c39c in mlir::RegisteredOperationName::Model::verifyInvariants(mlir::Operation*) /workdir/sources/circt/llvm/mlir/include/mlir/IR/OperationSupport.h:555:14
#10 0x5606951bd752 in mlir::OperationName::verifyInvariants(mlir::Operation*) const /workdir/sources/circt/llvm/mlir/include/mlir/IR/OperationSupport.h:314:23
#11 0x5606951bd752 in (anonymous namespace)::OperationVerifier::verifyOnEntrance(mlir::Operation&) /workdir/sources/circt/llvm/mlir/lib/IR/Verifier.cpp:175:48
#12 0x5606951bd752 in auto (anonymous namespace)::OperationVerifier::verifyOperation(mlir::Operation&)::$_2::operator()(mlir::Operation*) const /workdir/sources/circt/llvm/mlir/lib/IR/Verifier.cpp:296:45
#13 0x5606951bd752 in auto (anonymous namespace)::OperationVerifier::verifyOperation(mlir::Operation&)::$_1::operator()<(anonymous namespace)::OperationVerifier::verifyOperation(mlir::Operation&)::$_2>((anonymous namespace)::OperationVerifier::verifyOperation(mlir::Operation&)::$_2&&, llvm::PointerUnion) const /workdir/sources/circt/llvm/mlir/lib/IR/Verifier.cpp:276:16
#14 0x5606951bd752 in (anonymous namespace)::OperationVerifier::verifyOperation(mlir::Operation&) /workdir/sources/circt/llvm/mlir/lib/IR/Verifier.cpp:295:16
#15 0x5606951bd752 in (anonymous namespace)::OperationVerifier::verifyOpAndDominance(mlir::Operation&) /workdir/sources/circt/llvm/mlir/lib/IR/Verifier.cpp:81:14
#16 0x5606951bd900 in (anonymous namespace)::OperationVerifier::verifyOnExit(mlir::Operation&)::$_3::operator()(mlir::Operation*) const /workdir/sources/circt/llvm/mlir/lib/IR/Verifier.cpp:225:16
#17 0x5606951bd900 in auto void mlir::parallelForEach(mlir::MLIRContext*, mlir::Operation**, mlir::Operation**, (anonymous namespace)::OperationVerifier::verifyOnExit(mlir::Operation&)::$_3&&)::'lambda'(mlir::Operation**&&)::operator()(mlir::Operation**&&) const /workdir/sources/circt/llvm/mlir/include/mlir/IR/Threading.h:120:12
#18 0x5606951bd900 in llvm::LogicalResult mlir::failableParallelForEach(mlir::MLIRContext*, mlir::Operation**, mlir::Operation**, (anonymous namespace)::OperationVerifier::verifyOnExit(mlir::Operation&)::$_3&&)::'lambda'(mlir::Operation**&&)>(mlir::MLIRContext*, mlir::Operation**, mlir::Operation**, (anonymous namespace)::OperationVerifier::verifyOnExit(mlir::Operation&)::$_3&&) /workdir/sources/circt/llvm/mlir/include/mlir/IR/Threading.h:46:18
#19 0x5606951bd900 in void mlir::parallelForEach(mlir::MLIRContext*, mlir::Operation**, mlir::Operation**, (anonymous namespace)::OperationVerifier::verifyOnExit(mlir::Operation&)::$_3&&) /workdir/sources/circt/llvm/mlir/include/mlir/IR/Threading.h:119:9
#20 0x5606951bd900 in void mlir::parallelForEach&, (anonymous namespace)::OperationVerifier::verifyOnExit(mlir::Operation&)::$_3>(mlir::MLIRContext*, llvm::SmallVector&, (anonymous namespace)::OperationVerifier::verifyOnExit(mlir::Operation&)::$_3&&) /workdir/sources/circt/llvm/mlir/include/mlir/IR/Threading.h:131:3
#21 0x5606951bd900 in (anonymous namespace)::OperationVerifier::verifyOnExit(mlir::Operation&) /workdir/sources/circt/llvm/mlir/lib/IR/Verifier.cpp:224:3
#22 0x5606951bd900 in auto (anonymous namespace)::OperationVerifier::verifyOperation(mlir::Operation&)::$_0::operator()(mlir::Operation*) const /workdir/sources/circt/llvm/mlir/lib/IR/Verifier.cpp:287:53
#23 0x5606951bd900 in auto (anonymous namespace)::OperationVerifier::verifyOperation(mlir::Operation&)::$_1::operator()<(anonymous namespace)::OperationVerifier::verifyOperation(mlir::Operation&)::$_0>((anonymous namespace)::OperationVerifier::verifyOperation(mlir::Operation&)::$_0&&, llvm::PointerUnion) const /workdir/sources/circt/llvm/mlir/lib/IR/Verifier.cpp:276:16
#24 0x5606951bd900 in (anonymous namespace)::OperationVerifier::verifyOperation(mlir::Operation&) /workdir/sources/circt/llvm/mlir/lib/IR/Verifier.cpp:287:15
#25 0x5606951bd900 in (anonymous namespace)::OperationVerifier::verifyOpAndDominance(mlir::Operation&) /workdir/sources/circt/llvm/mlir/lib/IR/Verifier.cpp:81:14
#26 0x5606951bd900 in (anonymous namespace)::OperationVerifier::verifyOnExit(mlir::Operation&)::$_3::operator()(mlir::Operation*) const /workdir/sources/circt/llvm/mlir/lib/IR/Verifier.cpp:225:16
#27 0x5606951bd900 in auto void mlir::parallelForEach(mlir::MLIRContext*, mlir::Operation**, mlir::Operation**, (anonymous namespace)::OperationVerifier::verifyOnExit(mlir::Operation&)::$_3&&)::'lambda'(mlir::Operation**&&)::operator()(mlir::Operation**&&) const /workdir/sources/circt/llvm/mlir/include/mlir/IR/Threading.h:120:12
#28 0x5606951bd900 in llvm::LogicalResult mlir::failableParallelForEach(mlir::MLIRContext*, mlir::Operation**, mlir::Operation**, (anonymous namespace)::OperationVerifier::verifyOnExit(mlir::Operation&)::$_3&&)::'lambda'(mlir::Operation**&&)>(mlir::MLIRContext*, mlir::Operation**, mlir::Operation**, (anonymous namespace)::OperationVerifier::verifyOnExit(mlir::Operation&)::$_3&&) /workdir/sources/circt/llvm/mlir/include/mlir/IR/Threading.h:46:18
#29 0x5606951bd900 in void mlir::parallelForEach(mlir::MLIRContext*, mlir::Operation**, mlir::Operation**, (anonymous namespace)::OperationVerifier::verifyOnExit(mlir::Operation&)::$_3&&) /workdir/sources/circt/llvm/mlir/include/mlir/IR/Threading.h:119:9
#30 0x5606951bd900 in void mlir::parallelForEach&, (anonymous namespace)::OperationVerifier::verifyOnExit(mlir::Operation&)::$_3>(mlir::MLIRContext*, llvm::SmallVector&, (anonymous namespace)::OperationVerifier::verifyOnExit(mlir::Operation&)::$_3&&) /workdir/sources/circt/llvm/mlir/include/mlir/IR/Threading.h:131:3
#31 0x5606951bd900 in (anonymous namespace)::OperationVerifier::verifyOnExit(mlir::Operation&) /workdir/sources/circt/llvm/mlir/lib/IR/Verifier.cpp:224:3
#32 0x5606951bd900 in auto (anonymous namespace)::OperationVerifier::verifyOperation(mlir::Operation&)::$_0::operator()(mlir::Operation*) const /workdir/sources/circt/llvm/mlir/lib/IR/Verifier.cpp:287:53
#33 0x5606951bd900 in auto (anonymous namespace)::OperationVerifier::verifyOperation(mlir::Operation&)::$_1::operator()<(anonymous namespace)::OperationVerifier::verifyOperation(mlir::Operation&)::$_0>((anonymous namespace)::OperationVerifier::verifyOperation(mlir::Operation&)::$_0&&, llvm::PointerUnion) const /workdir/sources/circt/llvm/mlir/lib/IR/Verifier.cpp:276:16
#34 0x5606951bd900 in (anonymous namespace)::OperationVerifier::verifyOperation(mlir::Operation&) /workdir/sources/circt/llvm/mlir/lib/IR/Verifier.cpp:287:15
#35 0x5606951bd900 in (anonymous namespace)::OperationVerifier::verifyOpAndDominance(mlir::Operation&) /workdir/sources/circt/llvm/mlir/lib/IR/Verifier.cpp:81:14
#36 0x5606951bcf02 in mlir::verify(mlir::Operation*, bool) /workdir/sources/circt/llvm/mlir/lib/IR/Verifier.cpp:425:19
#37 0x560695c38f9f in (anonymous namespace)::OperationParser::finalize() /workdir/sources/circt/llvm/mlir/lib/AsmParser/Parser.cpp:931:55
#38 0x560695c38f9f in (anonymous namespace)::TopLevelOperationParser::parse(mlir::Block*, mlir::Location) /workdir/sources/circt/llvm/mlir/lib/AsmParser/Parser.cpp:2876:20
#39 0x560695c38f9f in mlir::parseAsmSourceFile(llvm::SourceMgr const&, mlir::Block*, mlir::ParserConfig const&, mlir::AsmParserState*, mlir::AsmParserCodeCompleteContext*) /workdir/sources/circt/llvm/mlir/lib/AsmParser/Parser.cpp:2930:41
#40 0x560695680fbe in mlir::parseSourceFile(std::shared_ptr const&, mlir::Block*, mlir::ParserConfig const&, mlir::LocationAttr*) /workdir/sources/circt/llvm/mlir/lib/Parser/Parser.cpp:64:10
#41 0x56069567fa4d in mlir::OwningOpRef mlir::detail::parseSourceFile const&>(mlir::ParserConfig const&, std::shared_ptr const&) /workdir/sources/circt/llvm/mlir/include/mlir/Parser/Parser.h:158:14
#42 0x56069567fa4d in mlir::OwningOpRef mlir::parseSourceFile(std::shared_ptr const&, mlir::ParserConfig const&) /workdir/sources/circt/llvm/mlir/include/mlir/Parser/Parser.h:188:10
#43 0x56069567fa4d in mlir::parseSourceFileForTool(std::shared_ptr const&, mlir::ParserConfig const&, bool) /workdir/sources/circt/llvm/mlir/include/mlir/Tools/ParseUtilities.h:31:12
#44 0x56069567e73a in performActions(llvm::raw_ostream&, std::shared_ptr const&, mlir::MLIRContext*, mlir::MlirOptMainConfig const&) /workdir/sources/circt/llvm/mlir/lib/Tools/mlir-opt/MlirOptMain.cpp:521:33
#45 0x56069567e4ad in processBuffer(llvm::raw_ostream&, std::unique_ptr >, llvm::MemoryBufferRef, mlir::MlirOptMainConfig const&, mlir::DialectRegistry&, mlir::SourceMgrDiagnosticVerifierHandler*, llvm::ThreadPoolInterface*) /workdir/sources/circt/llvm/mlir/lib/Tools/mlir-opt/MlirOptMain.cpp:673:12
#46 0x56069567e4ad in mlir::MlirOptMain(llvm::raw_ostream&, std::unique_ptr >, mlir::DialectRegistry&, mlir::MlirOptMainConfig const&)::$_3::operator()(std::unique_ptr >, llvm::MemoryBufferRef, llvm::raw_ostream&) const /workdir/sources/circt/llvm/mlir/lib/Tools/mlir-opt/MlirOptMain.cpp:771:12
#47 0x56069567e4ad in llvm::LogicalResult llvm::function_ref >, llvm::MemoryBufferRef const&, llvm::raw_ostream&)>::callback_fn >, mlir::DialectRegistry&, mlir::MlirOptMainConfig const&)::$_3>(long, std::unique_ptr >, llvm::MemoryBufferRef const&, llvm::raw_ostream&) /workdir/sources/circt/llvm/llvm/include/llvm/ADT/STLFunctionalExtras.h:46:12
#48 0x5606956a777a in llvm::function_ref >, llvm::MemoryBufferRef const&, llvm::raw_ostream&)>::operator()(std::unique_ptr >, llvm::MemoryBufferRef const&, llvm::raw_ostream&) const /workdir/sources/circt/llvm/llvm/include/llvm/ADT/STLFunctionalExtras.h:69:12
#49 0x5606956a777a in mlir::splitAndProcessBuffer(std::unique_ptr >, llvm::function_ref >, llvm::MemoryBufferRef const&, llvm::raw_ostream&)>, llvm::raw_ostream&, llvm::StringRef, llvm::StringRef) /workdir/sources/circt/llvm/mlir/lib/Support/ToolUtilities.cpp:30:12
#50 0x560695675d51 in mlir::MlirOptMain(llvm::raw_ostream&, std::unique_ptr >, mlir::DialectRegistry&, mlir::MlirOptMainConfig const&) /workdir/sources/circt/llvm/mlir/lib/Tools/mlir-opt/MlirOptMain.cpp:776:26
#51 0x560695676088 in mlir::MlirOptMain(int, char**, llvm::StringRef, llvm::StringRef, mlir::DialectRegistry&) /workdir/sources/circt/llvm/mlir/lib/Tools/mlir-opt/MlirOptMain.cpp:822:14
#52 0x5606956762cc in mlir::MlirOptMain(int, char**, llvm::StringRef, mlir::DialectRegistry&) /workdir/sources/circt/llvm/mlir/lib/Tools/mlir-opt/MlirOptMain.cpp:838:10
#53 0x56068f1255f2 in main /workdir/sources/circt/tools/circt-opt/circt-opt.cpp:86:23
#54 0x7f0029dc1d8f (/lib/x86_64-linux-gnu/libc.so.6+0x29d8f) (BuildId: 4f7b0c955c3d81d7cac1501a2498b69d1d82bfe7)
#55 0x7f0029dc1e3f in __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x29e3f) (BuildId: 4f7b0c955c3d81d7cac1501a2498b69d1d82bfe7)
#56 0x56068f063e14 in _start (/workdir/builds/circt/bin/circt-opt+0x6f12e14) (BuildId: d0273fc7523026d0)

AddressSanitizer can not provide additional info.
SUMMARY: AddressSanitizer: SEGV (/lib/x86_64-linux-gnu/libc.so.6+0x11e8fd) (BuildId: 4f7b0c955c3d81d7cac1501a2498b69d1d82bfe7) in syscall
==108134==ABORTING
```

Contributor guide

No contributing guide indexed for this repository

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start in lib/Dialect/LoopSchedule/LoopScheduleOps.cpp at LoopSchedulePipelineOp::verify(), then reproduce the issue with circt-opt test.mlir using the supplied minimal program. Add regression coverage for a pipeline stage without its start attribute; done means verification reports an error instead of dereferencing a null pointer.

Written by the indexing model from the issue text.

Assessment

Tech stack
cpp
Domain
compilers
Issue type
Bug
Difficulty
3/5
Estimated time
1-2 days
Activity status
Stale
Clarity
Clearly specified
Newbie friendliness
45/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.