Segmentation fault in loop schedule pipeline verifier
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
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- 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