Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Teach lz.caseint to use std.constant i64 instead of the special lz.make_i64 : !lz.value #6

Open
bollu opened this issue Dec 2, 2020 · 0 comments

Comments

@bollu
Copy link
Owner

bollu commented Dec 2, 2020

No description provided.

bollu added a commit that referenced this issue Jan 6, 2021
… a case somewhere.

==20217==ERROR: AddressSanitizer: SEGV on unknown address 0x00007a00001a (pc 0x7f7e1f6d9147 bp 0x000000000000 sp 0x7fffa7093fc0 T0)
==20217==The signal is caused by a WRITE memory access.
    #0 0x7f7e1f6d9147 in mlir::IROperand<mlir::OpOperand, mlir::detail::OpaqueValue>::insertIntoCurrent() /home/bollu/work/mlir/llvm-project/mlir/include/mlir/IR/UseDefLists.h:203
    #1 0x7f7e1f6d9147 in mlir::IROperand<mlir::OpOperand, mlir::detail::OpaqueValue>::IROperand(mlir::Operation*, mlir::detail::OpaqueValue) /home/bollu/work/mlir/llvm-project/mlir/include/mlir/IR/UseDefLists.h:117
    #2 0x7f7e1f6d9147 in mlir::OpOperand::OpOperand(mlir::Operation*, mlir::detail::OpaqueValue) /home/bollu/work/mlir/llvm-project/mlir/include/mlir/IR/UseDefLists.h:268
    #3 0x7f7e1f6d9147 in mlir::detail::OperandStorage::OperandStorage(mlir::Operation*, mlir::ValueRange) /home/bollu/work/mlir/llvm-project/mlir/lib/IR/OperationSupport.cpp:232
    #4 0x7f7e1f6cd689 in mlir::Operation::create(mlir::Location, mlir::OperationName, mlir::TypeRange, mlir::ValueRange, mlir::DictionaryAttr, mlir::BlockRange, unsigned int) /home/bollu/work/mlir/llvm-project/mlir/lib/IR/Operation.cpp:157
    #5 0x7f7e1f6cd800 in mlir::Operation::create(mlir::Location, mlir::OperationName, mlir::TypeRange, mlir::ValueRange, mlir::DictionaryAttr, mlir::BlockRange, mlir::RegionRange) /home/bollu/work/mlir/llvm-project/mlir/lib/IR/Operation.cpp:97
    #6 0x7f7e1f6cdb46 in mlir::Operation::create(mlir::OperationState const&) /home/bollu/work/mlir/llvm-project/mlir/lib/IR/Operation.cpp:87
    #7 0x7f7e1f65b59b in mlir::OpBuilder::createOperation(mlir::OperationState const&) /home/bollu/work/mlir/llvm-project/mlir/lib/IR/Builders.cpp:394
    #8 0x7f7e1f9a088f in parseCustomOperation /home/bollu/work/mlir/llvm-project/mlir/lib/Parser/Parser.cpp:1680
    #9 0x7f7e1f9a088f in (anonymous namespace)::OperationParser::parseOperation() /home/bollu/work/mlir/llvm-project/mlir/lib/Parser/Parser.cpp:693
    #10 0x7f7e1f9a299c in (anonymous namespace)::OperationParser::parseBlockBody(mlir::Block*) /home/bollu/work/mlir/llvm-project/mlir/lib/Parser/Parser.cpp:1868
    #11 0x7f7e1f9a3509 in parseBlock /home/bollu/work/mlir/llvm-project/mlir/lib/Parser/Parser.cpp:1835
    #12 0x7f7e1f9a3509 in (anonymous namespace)::OperationParser::parseRegion(mlir::Region&, llvm::ArrayRef<std::pair<(anonymous namespace)::OperationParser::SSAUseInfo, mlir::Type> >, bool) /home/bollu/work/mlir/llvm-project/mlir/lib/Parser/Parser.cpp:1781
    #13 0x7f7e1f9a3696 in (anonymous namespace)::CustomOpAsmParser::parseRegion(mlir::Region&, llvm::ArrayRef<mlir::OpAsmParser::OperandType>, llvm::ArrayRef<mlir::Type>, bool) /home/bollu/work/mlir/llvm-project/mlir/lib/Parser/Parser.cpp:1453
    #14 0x7f7e1f9a3a5e in (anonymous namespace)::CustomOpAsmParser::parseOptionalRegion(mlir::Region&, llvm::ArrayRef<mlir::OpAsmParser::OperandType>, llvm::ArrayRef<mlir::Type>, bool) /home/bollu/work/mlir/llvm-project/mlir/lib/Parser/Parser.cpp:1465
    #15 0x7f7e1f6b8e01 in mlir::impl::parseFunctionLikeOp(mlir::OpAsmParser&, mlir::OperationState&, bool, llvm::function_ref<mlir::Type (mlir::Builder&, llvm::ArrayRef<mlir::Type>, llvm::ArrayRef<mlir::Type>, mlir::impl::VariadicFlag, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&)>) /home/bollu/work/mlir/llvm-project/mlir/lib/IR/FunctionImplementation.cpp:213
    #16 0x7f7e1f66db56 in parseFuncOp /home/bollu/work/mlir/llvm-project/mlir/lib/IR/BuiltinDialect.cpp:120
    #17 0x7f7e1f66db56 in mlir::FuncOp::parse(mlir::OpAsmParser&, mlir::OperationState&) /home/bollu/work/mlir/llvm-project/build/tools/mlir/include/mlir/IR/BuiltinOps.cpp.inc:209
    #18 0x7f7e1f9a02e0 in parseOperation /home/bollu/work/mlir/llvm-project/mlir/lib/Parser/Parser.cpp:895
    #19 0x7f7e1f9a02e0 in parseCustomOperation /home/bollu/work/mlir/llvm-project/mlir/lib/Parser/Parser.cpp:1672
    #20 0x7f7e1f9a02e0 in (anonymous namespace)::OperationParser::parseOperation() /home/bollu/work/mlir/llvm-project/mlir/lib/Parser/Parser.cpp:693
    #21 0x7f7e1f9a170e in parse /home/bollu/work/mlir/llvm-project/mlir/lib/Parser/Parser.cpp:2041
    #22 0x7f7e1f9a170e in mlir::parseSourceFile(llvm::SourceMgr const&, mlir::Block*, mlir::MLIRContext*, mlir::LocationAttr*) /home/bollu/work/mlir/llvm-project/mlir/lib/Parser/Parser.cpp:2098
    #23 0x7f7e2a100dda in mlir::OwningOpRef<mlir::ModuleOp> mlir::parseSourceFile<mlir::ModuleOp>(llvm::SourceMgr const&, mlir::MLIRContext*) /home/bollu/work/mlir/llvm-project/mlir/include/mlir/Parser.h:132
    #24 0x7f7e2a100dda in mlir::parseSourceFile(llvm::SourceMgr const&, mlir::MLIRContext*) /home/bollu/work/mlir/llvm-project/mlir/include/mlir/Parser.h:201
    #25 0x7f7e2a100dda in performActions(llvm::raw_ostream&, bool, bool, llvm::SourceMgr&, mlir::MLIRContext*, mlir::PassPipelineCLParser const&) (.constprop.144) /home/bollu/work/mlir/llvm-project/mlir/lib/Support/MlirOptMain.cpp:55
    #26 0x7f7e2a101fbe in processBuffer(llvm::raw_ostream&, std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer> >, bool, bool, bool, bool, mlir::PassPipelineCLParser const&, mlir::DialectRegistry&) /home/bollu/work/mlir/llvm-project/mlir/lib/Support/MlirOptMain.cpp:110
    #27 0x7f7e2a102135 in mlir::MlirOptMain(llvm::raw_ostream&, std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer> >, mlir::PassPipelineCLParser const&, mlir::DialectRegistry&, bool, bool, bool, bool, bool) /home/bollu/work/mlir/llvm-project/mlir/lib/Support/MlirOptMain.cpp:148
    #28 0x7f7e2a103a0e in mlir::MlirOptMain(int, char**, llvm::StringRef, mlir::DialectRegistry&, bool) /home/bollu/work/mlir/llvm-project/mlir/lib/Support/MlirOptMain.cpp:251
    #29 0x4e9fc1 in main /home/bollu/work/mlir/lz/build/../hask-opt/hask-opt.cpp:100:17
    #30 0x7f7e198cdbf6 in __libc_start_main /build/glibc-S7xCS9/glibc-2.27/csu/../csu/libc-start.c:310
    #31 0x43f5a9 in _start (/home/bollu/work/mlir/lz/build/bin/hask-opt+0x43f5a9)

AddressSanitizer can not provide additional info.
SUMMARY: AddressSanitizer: SEGV /home/bollu/work/mlir/llvm-project/mlir/include/mlir/IR/UseDefLists.h:203 in mlir::IROperand<mlir::OpOperand, mlir::detail::OpaqueValue>::insertIntoCurrent()
==20217==ABORTING
bollu added a commit that referenced this issue Mar 19, 2021
For some reason, it now crashes when trying to verify dominance (?!) I
don't change regions at all.

vvvvv:module:vvvvv
module  {
  func private @Panic(!lz.value, !lz.value, !lz.value) -> !lz.value
  func private @UInt32_dot_decEq(!lz.value, !lz.value) -> !lz.value
  func private @UInt32_dot_add(!lz.value, !lz.value) -> !lz.value
  func private @"UInt32_dot_sub    "(!lz.value, !lz.value) -> !lz.value
  func private @UInt32_dot_ofNat(!lz.value) -> !lz.value
  func private @UInt32_dot_toNat(!lz.value) -> !lz.value
  func private @Nat_dot_add(!lz.value, !lz.value) -> !lz.value
  func private @Nat_dot_sub(!lz.value, !lz.value) -> !lz.value
  func private @Nat_dot_mul(!lz.value, !lz.value) -> !lz.value
  func private @Nat_dot_max(!lz.value, !lz.value) -> !lz.value
  func private @instInhabitedNat() -> !lz.value
  func private @Nat_dot_repr(!lz.value) -> !lz.value
  func private @Nat_dot_decLt(!lz.value, !lz.value) -> !lz.value
  func private @Nat_dot_decLe(!lz.value, !lz.value) -> !lz.value
  func private @Nat_dot_pow(!lz.value, !lz.value) -> !lz.value
  func private @Nat_dot_decEq(!lz.value, !lz.value) -> !lz.value
  func private @String_dot_instInhabitedString() -> !lz.value
  func private @String_dot_toNat_bang_(!lz.value) -> !lz.value
  func private @String_dot_append(!lz.value, !lz.value) -> !lz.value
  func private @Array_dot_empty_dot__closed_1() -> !lz.value
  func private @Array_dot_set_bang_(!lz.value, !lz.value, !lz.value, !lz.value) -> !lz.value
  func private @Array_dot_get_bang_(!lz.value, !lz.value, !lz.value, !lz.value) -> !lz.value
  func private @Array_dot_push(!lz.value, !lz.value, !lz.value) -> !lz.value
  func private @Array_dot_size(!lz.value, !lz.value) -> !lz.value
  func private @Array_dot_get(!lz.value, !lz.value, !lz.value) -> !lz.value
  func private @List_dot_head_bang__dot__rarg_dot__closed_3() -> !lz.value
  func private @IO_dot_println_dot__at_dot_Lean_dot_instEval_dot__spec_1(!lz.value, !lz.value) -> !lz.value
  func private @String_dot_push(!lz.value, !lz.value) -> !lz.value
  func private @IO_dot_print_dot__at_dot_IO_dot_println_dot__spec_1(!lz.value, !lz.value) -> !lz.value
  func private @term__star___dot__closed_3() -> !lz.value
  func private @Lean_dot_Parser_dot_Syntax_dot_addPrec_dot__closed_11() -> !lz.value
  func private @Task_dot_get(!lz.value, !lz.value) -> !lz.value
  func private @Task_dot_spawn(!lz.value, !lz.value, !lz.value) -> !lz.value
  func private @Task_dot_Priority_dot_default() -> !lz.value
  func @ackermann_dot_match_1_dot__rarg(%arg0: !lz.thunk<!lz.value>, %arg1: !lz.thunk<!lz.value>, %arg2: !lz.thunk<!lz.value>, %arg3: !lz.thunk<!lz.value>, %arg4: !lz.thunk<!lz.value>) -> !lz.value {
    %0 = "lz.int"() {value = 0 : i64} : () -> !lz.value
    %1 = "lz.force"(%arg0) : (!lz.thunk<!lz.value>) -> !lz.value
    %2 = call @Nat_dot_decEq(%1, %0) : (!lz.value, !lz.value) -> !lz.value
    %3 = "lz.tagget"(%2) : (!lz.value) -> i64
    %4 = "lz.case"(%3) ( {
      %5 = "lz.int"() {value = 1 : i64} : () -> !lz.value
      %6 = "lz.force"(%arg0) : (!lz.thunk<!lz.value>) -> !lz.value
      %7 = call @Nat_dot_sub(%6, %5) : (!lz.value, !lz.value) -> !lz.value
      %8 = "lz.force"(%arg1) : (!lz.thunk<!lz.value>) -> !lz.value
      %9 = call @Nat_dot_decEq(%8, %0) : (!lz.value, !lz.value) -> !lz.value
      %10 = "lz.tagget"(%9) : (!lz.value) -> i64
      %11 = "lz.case"(%10) ( {
        %12 = "lz.force"(%arg1) : (!lz.thunk<!lz.value>) -> !lz.value
        %13 = call @Nat_dot_sub(%12, %5) : (!lz.value, !lz.value) -> !lz.value
        %14 = "lz.force"(%arg4) : (!lz.thunk<!lz.value>) -> !lz.value
        %15 = "lz.apEager"(%14, %7, %13) : (!lz.value, !lz.value, !lz.value) -> !lz.value
        lz.return %15 : !lz.value
      },  {
        %12 = "lz.force"(%arg3) : (!lz.thunk<!lz.value>) -> !lz.value
        %13 = "lz.apEager"(%12, %7) : (!lz.value, !lz.value) -> !lz.value
        lz.return %13 : !lz.value
      },  {
        %12 = "lz.force"(%arg1) : (!lz.thunk<!lz.value>) -> !lz.value
        %13 = "lz.force"(%arg2) : (!lz.thunk<!lz.value>) -> !lz.value
        %14 = "lz.apEager"(%13, %12) : (!lz.value, !lz.value) -> !lz.value
        lz.return %14 : !lz.value
      }) {alt0 = @"0", alt1 = @"1", alt2 = @"2"} : (i64) -> !lz.value
      lz.return %11 : !lz.value
    }) {alt0 = @"0"} : (i64) -> !lz.value
    lz.return %4 : !lz.value
  }
  func @ackermann_dot_match_1(%arg0: !lz.thunk<!lz.value>) -> !lz.value {
    %0 = "lz.pap"() {value = @ackermann_dot_match_1_dot__rarg} : () -> !lz.value
    lz.return %0 : !lz.value
  }
  func @ackermann(%arg0: !lz.thunk<!lz.value>, %arg1: !lz.thunk<!lz.value>) -> !lz.value {
    %0 = "lz.int"() {value = 0 : i64} : () -> !lz.value
    %1 = "lz.force"(%arg0) : (!lz.thunk<!lz.value>) -> !lz.value
    %2 = call @Nat_dot_decEq(%1, %0) : (!lz.value, !lz.value) -> !lz.value
    %3 = "lz.tagget"(%2) : (!lz.value) -> i64
    %4 = "lz.case"(%3) ( {
      %5 = "lz.int"() {value = 1 : i64} : () -> !lz.value
      %6 = "lz.force"(%arg0) : (!lz.thunk<!lz.value>) -> !lz.value
      %7 = call @Nat_dot_sub(%6, %5) : (!lz.value, !lz.value) -> !lz.value
      %8 = "lz.force"(%arg1) : (!lz.thunk<!lz.value>) -> !lz.value
      %9 = call @Nat_dot_decEq(%8, %0) : (!lz.value, !lz.value) -> !lz.value
      %10 = "lz.tagget"(%9) : (!lz.value) -> i64
      %11 = "lz.case"(%10) ( {
        %12 = "lz.force"(%arg1) : (!lz.thunk<!lz.value>) -> !lz.value
        %13 = call @Nat_dot_sub(%12, %5) : (!lz.value, !lz.value) -> !lz.value
        %14 = call @Nat_dot_add(%7, %5) : (!lz.value, !lz.value) -> !lz.value
        %f = constant @ackermann : (!lz.thunk<!lz.value>, !lz.thunk<!lz.value>) -> !lz.value
        %15 = "lz.ap"(%f, %14, %13) : ((!lz.thunk<!lz.value>, !lz.thunk<!lz.value>) -> !lz.value, !lz.value, !lz.value) -> !lz.thunk<!lz.value>
        %16 = "lz.force"(%15) : (!lz.thunk<!lz.value>) -> !lz.value
        %f_0 = constant @ackermann : (!lz.thunk<!lz.value>, !lz.thunk<!lz.value>) -> !lz.value
        %17 = "lz.ap"(%f_0, %7, %16) : ((!lz.thunk<!lz.value>, !lz.thunk<!lz.value>) -> !lz.value, !lz.value, !lz.value) -> !lz.thunk<!lz.value>
        %18 = "lz.force"(%17) : (!lz.thunk<!lz.value>) -> !lz.value
        lz.return %18 : !lz.value
      },  {
        %f = constant @ackermann : (!lz.thunk<!lz.value>, !lz.thunk<!lz.value>) -> !lz.value
        %12 = "lz.ap"(%f, %7, %5) : ((!lz.thunk<!lz.value>, !lz.thunk<!lz.value>) -> !lz.value, !lz.value, !lz.value) -> !lz.thunk<!lz.value>
        %13 = "lz.force"(%12) : (!lz.thunk<!lz.value>) -> !lz.value
        lz.return %13 : !lz.value
      },  {
        %12 = "lz.int"() {value = 1 : i64} : () -> !lz.value
        %13 = "lz.force"(%arg1) : (!lz.thunk<!lz.value>) -> !lz.value
        %14 = call @Nat_dot_add(%13, %12) : (!lz.value, !lz.value) -> !lz.value
        lz.return %14 : !lz.value
      }) {alt0 = @"0", alt1 = @"1", alt2 = @"2"} : (i64) -> !lz.value
      lz.return %11 : !lz.value
    }) {alt0 = @"0"} : (i64) -> !lz.value
    lz.return %4 : !lz.value
  }
  func @k_dot_match_1_dot__rarg(%arg0: !lz.thunk<!lz.value>, %arg1: !lz.thunk<!lz.value>, %arg2: !lz.thunk<!lz.value>) -> !lz.value {
    %0 = "lz.force"(%arg0) : (!lz.thunk<!lz.value>) -> !lz.value
    %1 = "lz.force"(%arg1) : (!lz.thunk<!lz.value>) -> !lz.value
    %2 = "lz.force"(%arg2) : (!lz.thunk<!lz.value>) -> !lz.value
    %3 = "lz.apEager"(%2, %0, %1) : (!lz.value, !lz.value, !lz.value) -> !lz.value
    lz.return %3 : !lz.value
  }
  func @k_dot_match_1(%arg0: !lz.thunk<!lz.value>, %arg1: !lz.thunk<!lz.value>, %arg2: !lz.thunk<!lz.value>) -> !lz.value {
    %0 = "lz.pap"() {value = @k_dot_match_1_dot__rarg} : () -> !lz.value
    lz.return %0 : !lz.value
  }
  func @k_dot__rarg(%arg0: !lz.thunk<!lz.value>, %arg1: !lz.thunk<!lz.value>) -> !lz.value {
    %0 = "lz.force"(%arg0) : (!lz.thunk<!lz.value>) -> !lz.value
    lz.return %0 : !lz.value
  }
  func @k(%arg0: !lz.thunk<!lz.value>, %arg1: !lz.thunk<!lz.value>) -> !lz.value {
    %0 = "lz.pap"() {value = @k_dot__rarg} : () -> !lz.value
    lz.return %0 : !lz.value
  }
  func @s_dot_match_1_dot__rarg(%arg0: !lz.thunk<!lz.value>, %arg1: !lz.thunk<!lz.value>, %arg2: !lz.thunk<!lz.value>, %arg3: !lz.thunk<!lz.value>) -> !lz.value {
    %0 = "lz.force"(%arg0) : (!lz.thunk<!lz.value>) -> !lz.value
    %1 = "lz.force"(%arg1) : (!lz.thunk<!lz.value>) -> !lz.value
    %2 = "lz.force"(%arg2) : (!lz.thunk<!lz.value>) -> !lz.value
    %3 = "lz.force"(%arg3) : (!lz.thunk<!lz.value>) -> !lz.value
    %4 = "lz.apEager"(%3, %0, %1, %2) : (!lz.value, !lz.value, !lz.value, !lz.value) -> !lz.value
    lz.return %4 : !lz.value
  }
  func @s_dot_match_1(%arg0: !lz.thunk<!lz.value>, %arg1: !lz.thunk<!lz.value>, %arg2: !lz.thunk<!lz.value>, %arg3: !lz.thunk<!lz.value>) -> !lz.value {
    %0 = "lz.pap"() {value = @s_dot_match_1_dot__rarg} : () -> !lz.value
    lz.return %0 : !lz.value
  }
  func @s_dot__rarg(%arg0: !lz.thunk<!lz.value>, %arg1: !lz.thunk<!lz.value>, %arg2: !lz.thunk<!lz.value>) -> !lz.value {
    %0 = "lz.force"(%arg1) : (!lz.thunk<!lz.value>) -> !lz.value
    %1 = "lz.force"(%arg2) : (!lz.thunk<!lz.value>) -> !lz.value
    %2 = "lz.apEager"(%0, %1) : (!lz.value, !lz.value) -> !lz.value
    %3 = "lz.force"(%arg0) : (!lz.thunk<!lz.value>) -> !lz.value
    %4 = "lz.force"(%arg2) : (!lz.thunk<!lz.value>) -> !lz.value
    %5 = "lz.apEager"(%3, %4, %2) : (!lz.value, !lz.value, !lz.value) -> !lz.value
    lz.return %5 : !lz.value
  }
  func @s(%arg0: !lz.thunk<!lz.value>, %arg1: !lz.thunk<!lz.value>, %arg2: !lz.thunk<!lz.value>) -> !lz.value {
    %0 = "lz.pap"() {value = @s_dot__rarg} : () -> !lz.value
    lz.return %0 : !lz.value
  }
  func @foo_dot_match_1_dot__rarg(%arg0: !lz.thunk<!lz.value>, %arg1: !lz.thunk<!lz.value>, %arg2: !lz.thunk<!lz.value>) -> !lz.value {
    %0 = "lz.force"(%arg0) : (!lz.thunk<!lz.value>) -> !lz.value
    %1 = "lz.force"(%arg1) : (!lz.thunk<!lz.value>) -> !lz.value
    %2 = "lz.force"(%arg2) : (!lz.thunk<!lz.value>) -> !lz.value
    %3 = "lz.apEager"(%2, %0, %1) : (!lz.value, !lz.value, !lz.value) -> !lz.value
    lz.return %3 : !lz.value
  }
  func @foo_dot_match_1(%arg0: !lz.thunk<!lz.value>) -> !lz.value {
    %0 = "lz.pap"() {value = @foo_dot_match_1_dot__rarg} : () -> !lz.value
    lz.return %0 : !lz.value
  }
  func @foo_dot__closed_1() -> !lz.value {
    %0 = "lz.pap"() {value = @k_dot__rarg} : () -> !lz.value
    lz.return %0 : !lz.value
  }
  func @foo_dot__closed_2() -> !lz.value {
    %f = constant @foo_dot__closed_1 : () -> !lz.value
    %0 = "lz.ap"(%f) : (() -> !lz.value) -> !lz.thunk<!lz.value>
    %1 = "lz.force"(%0) : (!lz.thunk<!lz.value>) -> !lz.value
    %2 = "lz.pap"(%1) {value = @s_dot__rarg} : (!lz.value) -> !lz.value
    lz.return %2 : !lz.value
  }
  func @foo(%arg0: !lz.thunk<!lz.value>, %arg1: !lz.thunk<!lz.value>) -> !lz.value {
    %f = constant @foo_dot__closed_1 : () -> !lz.value
    %0 = "lz.ap"(%f) : (() -> !lz.value) -> !lz.thunk<!lz.value>
    %f_0 = constant @foo_dot__closed_2 : () -> !lz.value
    %1 = "lz.ap"(%f_0) : (() -> !lz.value) -> !lz.thunk<!lz.value>
    %2 = "lz.force"(%0) : (!lz.thunk<!lz.value>) -> !lz.value
    %3 = "lz.force"(%1) : (!lz.thunk<!lz.value>) -> !lz.value
    %f_1 = constant @s_dot__rarg : (!lz.thunk<!lz.value>, !lz.thunk<!lz.value>, !lz.thunk<!lz.value>) -> !lz.value
    %4 = "lz.ap"(%f_1, <<UNKNOWN SSA VALUE>>, %3, %2) : ((!lz.thunk<!lz.value>, !lz.thunk<!lz.value>, !lz.thunk<!lz.value>) -> !lz.value, !lz.value, !lz.value, !lz.value) -> !lz.thunk<!lz.value>
    %5 = "lz.force"(%arg0) : (!lz.thunk<!lz.value>) -> !lz.value
    %6 = "lz.force"(%arg1) : (!lz.thunk<!lz.value>) -> !lz.value
    %7 = "lz.force"(%4) : (!lz.thunk<!lz.value>) -> !lz.value
    %8 = "lz.apEager"(%7, %5, %6) : (!lz.value, !lz.value, !lz.value) -> !lz.value
    lz.return %8 : !lz.value
  }
  func @IO_dot_println_dot__at_dot_main_dot__spec_1(%arg0: !lz.thunk<!lz.value>, %arg1: !lz.thunk<!lz.value>) -> !lz.value {
    %0 = "lz.force"(%arg0) : (!lz.thunk<!lz.value>) -> !lz.value
    %1 = call @Nat_dot_repr(%0) : (!lz.value) -> !lz.value
    %2 = "lz.int"() {value = 10 : i64} : () -> !lz.value
    %3 = call @String_dot_push(%1, %2) : (!lz.value, !lz.value) -> !lz.value
    %4 = "lz.force"(%arg1) : (!lz.thunk<!lz.value>) -> !lz.value
    %5 = call @IO_dot_print_dot__at_dot_IO_dot_println_dot__spec_1(%3, %4) : (!lz.value, !lz.value) -> !lz.value
    lz.return %5 : !lz.value
  }
  func @main_dot__closed_1() -> !lz.value {
    %0 = "lz.int"() {value = 4 : i64} : () -> !lz.value
    %1 = "lz.int"() {value = 1 : i64} : () -> !lz.value
    %f = constant @ackermann : (!lz.thunk<!lz.value>, !lz.thunk<!lz.value>) -> !lz.value
    %2 = "lz.ap"(%f, %0, %1) : ((!lz.thunk<!lz.value>, !lz.thunk<!lz.value>) -> !lz.value, !lz.value, !lz.value) -> !lz.thunk<!lz.value>
    %3 = "lz.force"(%2) : (!lz.thunk<!lz.value>) -> !lz.value
    lz.return %3 : !lz.value
  }
  func @main_dot__closed_2() -> !lz.value {
    %0 = "lz.int"() {value = 3 : i64} : () -> !lz.value
    %f = constant @ackermann : (!lz.thunk<!lz.value>, !lz.thunk<!lz.value>) -> !lz.value
    %1 = "lz.ap"(%f, %0, %0) : ((!lz.thunk<!lz.value>, !lz.thunk<!lz.value>) -> !lz.value, !lz.value, !lz.value) -> !lz.thunk<!lz.value>
    %2 = "lz.force"(%1) : (!lz.thunk<!lz.value>) -> !lz.value
    lz.return %2 : !lz.value
  }
  func @main_dot__closed_3() -> !lz.value {
    %f = constant @main_dot__closed_2 : () -> !lz.value
    %0 = "lz.ap"(%f) : (() -> !lz.value) -> !lz.thunk<!lz.value>
    %f_0 = constant @main_dot__closed_1 : () -> !lz.value
    %1 = "lz.ap"(%f_0) : (() -> !lz.value) -> !lz.thunk<!lz.value>
    %2 = "lz.force"(%0) : (!lz.thunk<!lz.value>) -> !lz.value
    %3 = "lz.force"(%1) : (!lz.thunk<!lz.value>) -> !lz.value
    %f_1 = constant @foo : (!lz.thunk<!lz.value>, !lz.thunk<!lz.value>) -> !lz.value
    %4 = "lz.ap"(%f_1, %2, %3) : ((!lz.thunk<!lz.value>, !lz.thunk<!lz.value>) -> !lz.value, !lz.value, !lz.value) -> !lz.thunk<!lz.value>
    %5 = "lz.force"(%4) : (!lz.thunk<!lz.value>) -> !lz.value
    lz.return %5 : !lz.value
  }
  func @_lean_main(%arg0: !lz.thunk<!lz.value>, %arg1: !lz.thunk<!lz.value>) -> !lz.value {
    %f = constant @main_dot__closed_3 : () -> !lz.value
    %0 = "lz.ap"(%f) : (() -> !lz.value) -> !lz.thunk<!lz.value>
    %1 = "lz.force"(%arg1) : (!lz.thunk<!lz.value>) -> !lz.value
    %2 = "lz.force"(%0) : (!lz.thunk<!lz.value>) -> !lz.value
    %f_0 = constant @IO_dot_println_dot__at_dot_main_dot__spec_1 : (!lz.thunk<!lz.value>, !lz.thunk<!lz.value>) -> !lz.value
    %3 = "lz.ap"(%f_0, %2, %1) : ((!lz.thunk<!lz.value>, !lz.thunk<!lz.value>) -> !lz.value, !lz.value, !lz.value) -> !lz.thunk<!lz.value>
    %4 = "lz.force"(%3) : (!lz.thunk<!lz.value>) -> !lz.value
    lz.return %4 : !lz.value
  }
}

^^^^^^
PLEASE submit a bug report to https://bugs.llvm.org/ and include the crash backtrace.
Stack dump:
0.      Program arguments: hask-opt ackermann.mlir --lz-lazify
 #0 0x00007fd25a9eea3e __interceptor_backtrace.part.0 /build/gcc/src/gcc/libsanitizer/sanitizer_common/sanitizer_common_interceptors.inc:4101:28
 #1 0x00007fd25602d51d llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/home/bollu/work/llvm-project/build/./lib/libLLVMSupport.so.13git+0x1b551d)
 #2 0x00007fd25602b134 llvm::sys::RunSignalHandlers() (/home/bollu/work/llvm-project/build/./lib/libLLVMSupport.so.13git+0x1b3134)
 #3 0x00007fd25602b2a3 SignalHandler(int) Signals.cpp:0:0
 #4 0x00007fd25a722960 __restore_rt sigaction.c:0:0
 #5 0x00007fd258057fd0 mlir::Region::getParentOp() (/home/bollu/work/llvm-project/build/./lib/libMLIRIR.so.13git+0xf1fd0)
 #6 0x00007fd258058029 mlir::Region::getRegionNumber() (/home/bollu/work/llvm-project/build/./lib/libMLIRIR.so.13git+0xf2029)
 #7 0x00007fd25800da61 mlir::DominanceInfo::properlyDominates(mlir::Value, mlir::Operation*) const (/home/bollu/work/llvm-project/build/./lib/libMLIRIR.so.13git+0xa7a61)
 #8 0x00007fd2580689fb (anonymous namespace)::OperationVerifier::verifyDominance(mlir::Region&) Verifier.cpp:0:0
 #9 0x00007fd2580688c4 (anonymous namespace)::OperationVerifier::verifyDominance(mlir::Region&) Verifier.cpp:0:0
AddressSanitizer:DEADLYSIGNAL
=================================================================
==10556==ERROR: AddressSanitizer: SEGV on unknown address 0x000000000010 (pc 0x7fd258057fd0 bp 0x608000004eb0 sp 0x7fffbdce2318 T0)
==10556==The signal is caused by a READ memory access.
==10556==Hint: address points to the zero page.
    #0 0x7fd258057fd0 in mlir::Region::getParentOp() (/home/bollu/work/llvm-project/build/./lib/libMLIRIR.so.13git+0xf1fd0)
    #1 0x7fd258058028 in mlir::Region::getRegionNumber() (/home/bollu/work/llvm-project/build/./lib/libMLIRIR.so.13git+0xf2028)
    #2 0x7fd25800da60 in mlir::DominanceInfo::properlyDominates(mlir::Value, mlir::Operation*) const (/home/bollu/work/llvm-project/build/./lib/libMLIRIR.so.13git+0xa7a60)
    #3 0x7fd2580689fa in (anonymous namespace)::OperationVerifier::verifyDominance(mlir::Region&) (/home/bollu/work/llvm-project/build/./lib/libMLIRIR.so.13git+0x1029fa)
    #4 0x7fd2580688c3 in (anonymous namespace)::OperationVerifier::verifyDominance(mlir::Region&) (/home/bollu/work/llvm-project/build/./lib/libMLIRIR.so.13git+0x1028c3)
    #5 0x7fd25806bba7 in mlir::verify(mlir::Operation*) (/home/bollu/work/llvm-project/build/./lib/libMLIRIR.so.13git+0x105ba7)
    #6 0x7fd2588c57e9 in mlir::detail::OpToOpPassAdaptor::run(mlir::Pass*, mlir::Operation*, mlir::AnalysisManager, bool, unsigned int) (/home/bollu/work/llvm-project/build/./lib/libMLIRPass.so.13git+0x167e9)
    #7 0x7fd2588c5a6f in mlir::detail::OpToOpPassAdaptor::runPipeline(llvm::iterator_range<llvm::pointee_iterator<std::unique_ptr<mlir::Pass, std::default_delete<mlir::Pass> >*, mlir::Pass> >, mlir::Operation*, mlir::AnalysisManager, bool, unsigned int, mlir::PassInstrumentor*, mlir::PassInstrumentation::PipelineParentInfo const*) (/home/bollu/work/llvm-project/build/./lib/libMLIRPass.so.13git+0x16a6f)
    #8 0x7fd2588c8af6 in mlir::PassManager::run(mlir::Operation*) (/home/bollu/work/llvm-project/build/./lib/libMLIRPass.so.13git+0x19af6)
    #9 0x7fd25a17706a in performActions(llvm::raw_ostream&, bool, bool, llvm::SourceMgr&, mlir::MLIRContext*, mlir::PassPipelineCLParser const&) [clone .constprop.0] (/home/bollu/work/llvm-project/build/./lib/libMLIROptLib.so.13git+0x506a)
    #10 0x7fd25a177b87 in processBuffer(llvm::raw_ostream&, std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer> >, bool, bool, bool, bool, mlir::PassPipelineCLParser const&, mlir::DialectRegistry&) (/home/bollu/work/llvm-project/build/./lib/libMLIROptLib.so.13git+0x5b87)
    #11 0x7fd25a177ea5 in mlir::MlirOptMain(llvm::raw_ostream&, std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer> >, mlir::PassPipelineCLParser const&, mlir::DialectRegistry&, bool, bool, bool, bool, bool) (/home/bollu/work/llvm-project/build/./lib/libMLIROptLib.so.13git+0x5ea5)
    #12 0x7fd25a179841 in mlir::MlirOptMain(int, char**, llvm::StringRef, mlir::DialectRegistry&, bool) (/home/bollu/work/llvm-project/build/./lib/libMLIROptLib.so.13git+0x7841)
    #13 0x562e9a9c3be7 in main (/home/bollu/work/lz/build/bin/hask-opt+0x8eabe7)
    #14 0x7fd255026b24 in __libc_start_main (/usr/lib/libc.so.6+0x27b24)
    #15 0x562e9a9a322d in _start (/home/bollu/work/lz/build/bin/hask-opt+0x8ca22d)

AddressSanitizer can not provide additional info.
SUMMARY: AddressSanitizer: SEGV (/home/bollu/work/llvm-project/build/./lib/libMLIRIR.so.13git+0xf1fd0) in mlir::Region::getParentOp()
==10556==ABORTING
bollu added a commit that referenced this issue May 28, 2021
/home/bollu/work/lz/test/lambdapure/compile$ lean render.lean 2>&1 | hask-opt | hask-opt --lean-lower
hask-opt: /home/bollu/work/llvm-project/llvm/include/llvm/ADT/ilist_iterator.h:138: llvm::ilist_iterator<OptionsT, IsReverse, IsConst>::reference llvm::ilist_iterator<OptionsT, IsReverse, IsConst>::operator*() const [with OptionsT = llvm::ilist_detail::node_options<mlir::Block, true, false, void>; bool IsReverse = false; bool IsConst = false; llvm::ilist_iterator<OptionsT, IsReverse, IsConst>::reference = mlir::Block&]: Assertion `!NodePtr->isKnownSentinel()' failed.
PLEASE submit a bug report to https://bugs.llvm.org/ and include the crash backtrace.
Stack dump:
0.      Program arguments: hask-opt --lean-lower --ptr-lower
 #0 0x00007f47402f2a3e __interceptor_backtrace.part.0 /build/gcc/src/gcc/libsanitizer/sanitizer_common/sanitizer_common_interceptors.inc:4101:28
 #1 0x00007f473b7f961d llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/home/bollu/work/llvm-project/build/./lib/libLLVMSupport.so.13git+0x1b761d)
 #2 0x00007f473b7f7234 llvm::sys::RunSignalHandlers() (/home/bollu/work/llvm-project/build/./lib/libLLVMSupport.so.13git+0x1b5234)
 #3 0x00007f473b7f73a3 SignalHandler(int) Signals.cpp:0:0
 #4 0x00007f4740026960 __restore_rt sigaction.c:0:0
 #5 0x00007f473a807ef5 raise (/usr/lib/libc.so.6+0x3cef5)
 #6 0x00007f473a7f1862 abort (/usr/lib/libc.so.6+0x26862)
 #7 0x00007f473a7f1747 _nl_load_domain.cold loadmsgcat.c:0:0
 #8 0x00007f473a800646 (/usr/lib/libc.so.6+0x35646)
 #9 0x000055565b556e81 llvm::ilist_iterator<llvm::ilist_detail::node_options<mlir::Block, true, false, void>, false, false>::operator*() const (/home/bollu/work/lz/build/bin/hask-opt+0xa0ae81)
+ c++ -D LEAN_MULTI_THREAD -I/home/bollu/work/lean4/build/stage1/include exe.o /home/bollu/work/lz/lean-linking-incantations/lean-shell.o /home/bollu/work/lz/lean-linking-incantations/lib-includes/library.o -no-pie -Wl,--start-group -lleancpp -lInit -lStd -lLean -Wl,--end-group -L/home/bollu/work/lean4/build/stage1/lib/lean -lgmp -ldl -pthread -Wno-unused-command-line-argument -o exe.out
/usr/bin/ld: /home/bollu/work/lz/lean-linking-incantations/lean-shell.o: in function `main':
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant