Skip to content

minimum might cause crash on 1.7 and master (observed on both Windows x86_64 and macOS x86_64) #43731

Description

@N5N3

Found this when working on #43604. Could be fixed by some code change, but crash might means deeper bug, so I open this Issue:

julia> versioninfo()
Julia Version 1.8.0-DEV.1090
Commit d16f4806e9 (2021-12-01 10:54 UTC)
Platform Info:
  OS: Windows (x86_64-w64-mingw32)
  CPU: Intel(R) Core(TM) i5-9600KF CPU @ 3.70GHz
  WORD_SIZE: 64
  LIBM: libopenlibm
  LLVM: libLLVM-12.0.1 (ORCJIT, skylake)

julia> a = collect(1.0:4);

julia> f(x) = x < 3 ? missing : x;

julia> minimum(f, a; dims = 1)
<unknown>:0: error: starting new .cfi frame before finishing the previous one
<unknown>:0: error: this directive must appear between .cfi_startproc and .cfi_endproc directives
<unknown>:0: error: starting new .cfi frame before finishing the previous one
<unknown>:0: error: this directive must appear between .cfi_startproc and .cfi_endproc directives

Please submit a bug report with steps to reproduce this fault, and any error messages that follow (in their entirety). Thanks.
Exception: EXCEPTION_ACCESS_VIOLATION at 0x0 -- unknown function (ip: 0000000000000000)
in expression starting at none:0
unknown function (ip: 0000000000000000)
Allocations: 865948 (Pool: 865603; Big: 345); GC: 1

Activity

  1. added
    bugIndicates an unexpected problem or unintended behavior
    on Jan 10, 2022
  2. DilumAluthge commented on Jan 10, 2022

    @DilumAluthge
    Member

    I am able to reproduce this crash with Julia 1.7.1 (official binaries) on macOS x86_64. Here is the full log, which includes the contents of the LLVM module that was printed to stdout.

    Click to expand:
    dilum@localhost:~/Downloads$ julia
                   _
       _       _ _(_)_     |  Documentation: https://docs.julialang.org
      (_)     | (_) (_)    |
       _ _   _| |_  __ _   |  Type "?" for help, "]?" for Pkg help.
      | | | | | | |/ _` |  |
      | | |_| | | | (_| |  |  Version 1.7.1 (2021-12-22)
     _/ |\__'_|_|_|\__'_|  |  Official https://julialang.org/ release
    |__/                   |
    
    julia> versioninfo()
    Julia Version 1.7.1
    Commit ac5cc99908 (2021-12-22 19:35 UTC)
    Platform Info:
      OS: macOS (x86_64-apple-darwin19.5.0)
      CPU: Intel(R) Core(TM) i5-4278U CPU @ 2.60GHz
      WORD_SIZE: 64
      LIBM: libopenlibm
      LLVM: libLLVM-12.0.1 (ORCJIT, haswell)
    Environment:
      ASDF_JULIA_VERSION = 1.7.1
      JULIA_CUDA_VERBOSE = true
      JULIA_PKG_SERVER =
    
    julia> a = collect(1.0:4);
    
    julia> f(x) = x < 3 ? missing : x;
    
    julia> minimum(f, a; dims = 1)
    <unknown>:0: error: starting new .cfi frame before finishing the previous one
    <unknown>:0: error: this directive must appear between .cfi_startproc and .cfi_endproc directives
    <unknown>:0: error: starting new .cfi frame before finishing the previous one
    <unknown>:0: error: this directive must appear between .cfi_startproc and .cfi_endproc directives
    ; ModuleID = 'NamedTuple'
    source_filename = "NamedTuple"
    target datalayout = "e-m:o-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
    target triple = "x86_64-apple-darwin20.6.0"
    
    define { {} addrspace(10)* } @julia_NamedTuple_146({} addrspace(10)* nonnull readonly %0, { {} addrspace(10)* } addrspace(11)* nocapture nonnull readonly align 8 dereferenceable(8) %1) #0 !dbg !5 {
    top:
      %2 = bitcast { {} addrspace(10)* } addrspace(11)* %1 to {} addrspace(10)* addrspace(11)*, !dbg !7
      %3 = load atomic {} addrspace(10)*, {} addrspace(10)* addrspace(11)* %2 unordered, align 8, !dbg !7, !tbaa !10, !nonnull !4, !dereferenceable !14, !align !15
      %4 = insertvalue { {} addrspace(10)* } zeroinitializer, {} addrspace(10)* %3, 0, !dbg !7
      ret { {} addrspace(10)* } %4, !dbg !9
    }
    
    define nonnull {} addrspace(10)* @jfptr_NamedTuple_147({} addrspace(10)* %0, {} addrspace(10)** %1, i32 %2) #1 {
    top:
      %gcframe6 = alloca [3 x {} addrspace(10)*], align 16
      %gcframe6.sub7 = bitcast [3 x {} addrspace(10)*]* %gcframe6 to {} addrspace(10)**
      %3 = bitcast [3 x {} addrspace(10)*]* %gcframe6 to i8*
      call void @llvm.memset.p0i8.i32(i8* nonnull align 16 dereferenceable(24) %3, i8 0, i32 24, i1 false), !tbaa !16
      %4 = call {}*** inttoptr (i64 140733738038445 to {}*** (i64)*)(i64 261) #6
      %5 = bitcast [3 x {} addrspace(10)*]* %gcframe6 to i64*
      store i64 4, i64* %5, align 16, !tbaa !16
      %6 = load {}**, {}*** %4, align 8
      %7 = getelementptr inbounds [3 x {} addrspace(10)*], [3 x {} addrspace(10)*]* %gcframe6, i64 0, i64 1
      %8 = bitcast {} addrspace(10)** %7 to {}***
      store {}** %6, {}*** %8, align 8, !tbaa !16
      %9 = bitcast {}*** %4 to {} addrspace(10)***
      store {} addrspace(10)** %gcframe6.sub7, {} addrspace(10)*** %9, align 8
      %10 = bitcast {} addrspace(10)** %1 to { {} addrspace(10)* } addrspace(10)**
      %11 = load { {} addrspace(10)* } addrspace(10)*, { {} addrspace(10)* } addrspace(10)** %10, align 8, !nonnull !4, !dereferenceable !18, !align !18
      %12 = addrspacecast { {} addrspace(10)* } addrspace(10)* %11 to { {} addrspace(10)* } addrspace(11)*
      %13 = getelementptr inbounds [3 x {} addrspace(10)*], [3 x {} addrspace(10)*]* %gcframe6, i64 0, i64 2
      %14 = bitcast {} addrspace(10)** %13 to { {} addrspace(10)* } addrspace(10)**
      store { {} addrspace(10)* } addrspace(10)* %11, { {} addrspace(10)* } addrspace(10)** %14, align 16
      %15 = call { {} addrspace(10)* } @julia_NamedTuple_146({} addrspace(10)* readonly %0, { {} addrspace(10)* } addrspace(11)* nocapture readonly %12) #0
      %ptls_field2 = getelementptr inbounds {}**, {}*** %4, i64 2305843009213693954
      %16 = bitcast {}*** %ptls_field2 to i8**
      %ptls_load34 = load i8*, i8** %16, align 8, !tbaa !16
      %17 = extractvalue { {} addrspace(10)* } %15, 0
      store {} addrspace(10)* %17, {} addrspace(10)** %13, align 16
      %18 = call noalias nonnull {} addrspace(10)* @jl_gc_pool_alloc(i8* %ptls_load34, i32 1392, i32 16) #2
      %19 = bitcast {} addrspace(10)* %18 to i64 addrspace(10)*
      %20 = getelementptr inbounds i64, i64 addrspace(10)* %19, i64 -1
      store atomic i64 4610180208, i64 addrspace(10)* %20 unordered, align 8, !tbaa !19
      %21 = bitcast {} addrspace(10)* %18 to {} addrspace(10)* addrspace(10)*
      store {} addrspace(10)* %17, {} addrspace(10)* addrspace(10)* %21, align 8, !tbaa !22
      %22 = load {} addrspace(10)*, {} addrspace(10)** %7, align 8, !tbaa !16
      %23 = bitcast {}*** %4 to {} addrspace(10)**
      store {} addrspace(10)* %22, {} addrspace(10)** %23, align 8, !tbaa !16
      ret {} addrspace(10)* %18
    }
    
    ; Function Attrs: allocsize(1)
    declare noalias nonnull {} addrspace(10)* @julia.gc_alloc_obj(i8*, i64, {} addrspace(10)*) #2
    
    ; Function Attrs: argmemonly nofree nosync nounwind willreturn
    declare void @llvm.lifetime.start.p0i8(i64 immarg, i8* nocapture) #3
    
    ; Function Attrs: argmemonly nofree nosync nounwind willreturn
    declare void @llvm.lifetime.end.p0i8(i64 immarg, i8* nocapture) #3
    
    ; Function Attrs: inaccessiblemem_or_argmemonly
    declare void @jl_gc_queue_root({} addrspace(10)*) #4
    
    ; Function Attrs: allocsize(1)
    declare noalias nonnull {} addrspace(10)* @jl_gc_pool_alloc(i8*, i32, i32) #2
    
    ; Function Attrs: allocsize(1)
    declare noalias nonnull {} addrspace(10)* @jl_gc_big_alloc(i8*, i64) #2
    
    declare noalias nonnull {} addrspace(10)** @julia.new_gc_frame(i32)
    
    declare void @julia.push_gc_frame({} addrspace(10)**, i32)
    
    declare {} addrspace(10)** @julia.get_gc_frame_slot({} addrspace(10)**, i32)
    
    declare void @julia.pop_gc_frame({} addrspace(10)**)
    
    ; Function Attrs: allocsize(1)
    declare noalias nonnull {} addrspace(10)* @julia.gc_alloc_bytes(i8*, i64) #2
    
    ; Function Attrs: argmemonly nofree nosync nounwind willreturn writeonly
    declare void @llvm.memset.p0i8.i32(i8* nocapture writeonly, i8, i32, i1 immarg) #5
    
    attributes #0 = { "probe-stack"="inline-asm" }
    attributes #1 = { "probe-stack"="inline-asm" "thunk" }
    attributes #2 = { allocsize(1) }
    attributes #3 = { argmemonly nofree nosync nounwind willreturn }
    attributes #4 = { inaccessiblemem_or_argmemonly }
    attributes #5 = { argmemonly nofree nosync nounwind willreturn writeonly }
    attributes #6 = { nounwind readnone }
    
    !llvm.module.flags = !{!0, !1}
    !llvm.dbg.cu = !{!2}
    
    !0 = !{i32 2, !"Dwarf Version", i32 4}
    !1 = !{i32 2, !"Debug Info Version", i32 3}
    !2 = distinct !DICompileUnit(language: DW_LANG_Julia, file: !3, producer: "julia", isOptimized: true, runtimeVersion: 0, emissionKind: FullDebug, enums: !4, nameTableKind: GNU)
    !3 = !DIFile(filename: "boot.jl", directory: ".")
    !4 = !{}
    !5 = distinct !DISubprogram(name: "NamedTuple", linkageName: "julia_NamedTuple_146", scope: null, file: !3, line: 601, type: !6, scopeLine: 601, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !2, retainedNodes: !4)
    !6 = !DISubroutineType(types: !4)
    !7 = !DILocation(line: 605, scope: !8, inlinedAt: !9)
    !8 = distinct !DISubprogram(name: "NamedTuple;", linkageName: "NamedTuple", scope: !3, file: !3, type: !6, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !2, retainedNodes: !4)
    !9 = !DILocation(line: 601, scope: !5)
    !10 = !{!11, !11, i64 0}
    !11 = !{!"jtbaa_const", !12, i64 0}
    !12 = !{!"jtbaa", !13, i64 0}
    !13 = !{!"jtbaa"}
    !14 = !{i64 40}
    !15 = !{i64 16}
    !16 = !{!17, !17, i64 0}
    !17 = !{!"jtbaa_gcframe", !12, i64 0}
    !18 = !{i64 8}
    !19 = !{!20, !20, i64 0}
    !20 = !{!"jtbaa_tag", !21, i64 0}
    !21 = !{!"jtbaa_data", !12, i64 0}
    !22 = !{!23, !23, i64 0}
    !23 = !{!"jtbaa_immut", !24, i64 0}
    !24 = !{!"jtbaa_value", !21, i64 0}
    LLVM ERROR: FATAL: Unable to compile LLVM Module: 'truncated or malformed object (section contents at offset 1272 with a size of 168, overlaps section contents at offset 1272 with a size of 183)
    '
    The module's content was printed above. Please file a bug report
    
    signal (6): Abort trap: 6
    in expression starting at none:0
    __pthread_kill at /usr/lib/system/libsystem_kernel.dylib (unknown line)
    Allocations: 4048490 (Pool: 4046809; Big: 1681); GC: 5
    Abort trap: 6
    
  3. changed the title [-]`minimum` might cause crash on 1.7 and master (Win64)[/-] [+]`minimum` might cause crash on 1.7 and master (observed on both Windows x86_64 and macOS x86_64)[/+] on Jan 10, 2022
  4. vtjnash commented on Jan 11, 2022

    @vtjnash
    SponsorMember

    The secondary failure here is a stackoverflow somewhere inside LLVM, which is why LLVM gets into a bad state and aborts when we try to print the source of the failure:

    #0  0x00007ffff23e50b2 in llvm::SmallVectorImpl<llvm::TargetInstrInfo::RegSubRegPair>::operator=(llvm::SmallVectorImpl<llvm::TargetInstrInfo::RegSubRegPair> const&)
        () from /data/vtjnash/julia/usr/bin/../lib/libLLVM-13jl.so
    #1  0x00007ffff23e5306 in getNewSource(llvm::MachineRegisterInfo*, llvm::TargetInstrInfo const*, llvm::TargetInstrInfo::RegSubRegPair, llvm::SmallDenseMap<llvm::TargetInstrInfo::RegSubRegPair, (anonymous namespace)::ValueTrackerResult, 4u, llvm::DenseMapInfo<llvm::TargetInstrInfo::RegSubRegPair>, llvm::detail::DenseMapPair<llvm::TargetInstrInfo::RegSubRegPair, (anonymous namespace)::ValueTrackerResult> > const&, bool) () from /data/vtjnash/julia/usr/bin/../lib/libLLVM-13jl.so
    #2  0x00007ffff23e539f in getNewSource(llvm::MachineRegisterInfo*, llvm::TargetInstrInfo const*, llvm::TargetInstrInfo::RegSubRegPair, llvm::SmallDenseMap<llvm::TargetInstrInfo::RegSubRegPair, (anonymous namespace)::ValueTrackerResult, 4u, llvm::DenseMapInfo<llvm::TargetInstrInfo::RegSubRegPair>, llvm::detail::DenseMapPair<llvm::TargetInstrInfo::RegSubRegPair, (anonymous namespace)::ValueTrackerResult> > const&, bool) () from /data/vtjnash/julia/usr/bin/../lib/libLLVM-13jl.so
    #3  0x00007ffff23e539f in getNewSource(llvm::MachineRegisterInfo*, llvm::TargetInstrInfo const*, llvm::TargetInstrInfo::RegSubRegPair, llvm::SmallDenseMap<llvm::TargetInstrInfo::RegSubRegPair, (anonymous namespace)::ValueTrackerResult, 4u, llvm::DenseMapInfo<llvm::TargetInstrInfo::RegSubRegPair>, llvm::detail::DenseMapPair<llvm::TargetInstrInfo::RegSubRegPair, (anonymous namespace)::ValueTrackerResult> > const&, bool) () from /data/vtjnash/julia/usr/bin/../lib/libLLVM-13jl.so
    #4  0x00007ffff23e539f in getNewSource(llvm::MachineRegisterInfo*, llvm::TargetInstrInfo const*, llvm::TargetInstrInfo::RegSubRegPair, llvm::SmallDenseMap<llvm::TargetInstrInfo::RegSubRegPair, (anonymous namespace)::ValueTrackerResult, 4u, llvm::DenseMapInfo<llvm::TargetInstrInfo::RegSubRegPair>, llvm::detail::DenseMapPair<llvm::TargetInstrInfo::RegSubRegPair, (anonymous namespace)::ValueTrackerResult> > const&, bool) () from /data/vtjnash/julia/usr/bin/../lib/libLLVM-13jl.so
    #5  0x00007ffff23e539f in getNewSource(llvm::MachineRegisterInfo*, llvm::TargetInstrInfo const*, llvm::TargetInstrInfo::RegSubRegPair, llvm::SmallDenseMap<llvm::TargetInstrInfo::RegSubRegPair, (anonymous namespace)::ValueTrackerResult, 4u, llvm::DenseMapInfo<llvm::TargetInstrInfo::RegSubRegPair>, llvm::detail::DenseMapPair<llvm::TargetInstrInfo::RegSubRegPair, (anonymous namespace)::ValueTrackerResult> > const&, bool) () from /data/vtjnash/julia/usr/bin/../lib/libLLVM-13jl.so
    #6  0x00007ffff23e539f in getNewSource(llvm::MachineRegisterInfo*, llvm::TargetInstrInfo const*, llvm::TargetInstrInfo::RegSubRegPair, llvm::SmallDenseMap<llvm::TargetInstrInfo::RegSubRegPair, (anonymous namespace)::ValueTrackerResult, 4u, llvm::DenseMapInfo<llvm::TargetInstrInfo::RegSubRegPair>, llvm::detail::DenseMapPair<llvm::TargetInstrInfo::RegSubRegPair, (anonymous namespace)::ValueTrackerResult> > const&, bool) () from /data/vtjnash/julia/usr/bin/../lib/libLLVM-13jl.so
    #7  0x00007ffff23e539f in getNewSource(llvm::MachineRegisterInfo*, llvm::TargetInstrInfo const*, llvm::TargetInstrInfo::RegSubRegPair, llvm::SmallDenseMap<llvm::TargetInstrInfo::RegSubRegPair, (anonymous namespace)::ValueTrackerResult, 4u, llvm::DenseMapInfo<llvm::TargetInstrInfo::RegSubRegPair>, llvm::detail::DenseMapPair<llvm::TargetInstrInfo::RegSubRegPair, (anonymous namespace)::ValueTrackerResult> > const&, bool) () from /data/vtjnash/julia/usr/bin/../lib/libLLVM-13jl.so
    #8  0x00007ffff23e539f in getNewSource(llvm::MachineRegisterInfo*, llvm::TargetInstrInfo const*, llvm::TargetInstrInfo::RegSubRegPair, llvm::SmallDenseMap<llvm::TargetInstrInfo::RegSubRegPair, (anonymous namespace)::ValueTrackerResult, 4u, llvm::DenseMapInfo<llvm::TargetInstrInfo::RegSubRegPair>, llvm::detail::DenseMapPair<llvm::TargetInstrInfo::RegSubRegPair, (anonymous namespace)::ValueTrackerResult> > const&, bool) () from /data/vtjnash/julia/usr/bin/../lib/libLLVM-13jl.so
    #9  0x00007ffff23e539f in getNewSource(llvm::MachineRegisterInfo*, llvm::TargetInstrInfo const*, llvm::TargetInstrInfo::RegSubRegPair, llvm::SmallDenseMap<llvm::TargetInstrInfo::RegSubRegPair, (anonymous namespace)::ValueTrackerResult, 4u, llvm::DenseMapInfo<llvm::TargetInstrInfo::RegSubRegPair>, llvm::detail::DenseMapPair<llvm::TargetInstrInfo::RegSubRegPair, (anonymous namespace)::ValueTrackerResult> > const&, bool) () from /data/vtjnash/julia/usr/bin/../lib/libLLVM-13jl.so
    ...
    #32675 0x00007ffff23e539f in getNewSource(llvm::MachineRegisterInfo*, llvm::TargetInstrInfo const*, llvm::TargetInstrInfo::RegSubRegPair, llvm::SmallDenseMap<llvm::TargetInstrInfo::RegSubRegPair, (anonymous namespace)::ValueTrackerResult, 4u, llvm::DenseMapInfo<llvm::TargetInstrInfo::RegSubRegPair>, llvm::detail::DenseMapPair<llvm::TargetInstrInfo::RegSubRegPair, (anonymous namespace)::ValueTrackerResult> > const&, bool) () from /data/vtjnash/julia/usr/bin/../lib/libLLVM-13jl.so
    #32676 0x00007ffff23e87dc in (anonymous namespace)::PeepholeOptimizer::runOnMachineFunction(llvm::MachineFunction&) [clone .part.265] ()
       from /data/vtjnash/julia/usr/bin/../lib/libLLVM-13jl.so
    #32677 0x00007ffff22ca566 in llvm::MachineFunctionPass::runOnFunction(llvm::Function&) () from /data/vtjnash/julia/usr/bin/../lib/libLLVM-13jl.so
    --Type <RET> for more, q to quit, c to continue without paging--
    #32678 0x00007ffff1feb7c8 in llvm::FPPassManager::runOnFunction(llvm::Function&) () from /data/vtjnash/julia/usr/bin/../lib/libLLVM-13jl.so
    #32679 0x00007ffff1febae9 in llvm::FPPassManager::runOnModule(llvm::Module&) () from /data/vtjnash/julia/usr/bin/../lib/libLLVM-13jl.so
    #32680 0x00007ffff1fec8e0 in llvm::legacy::PassManagerImpl::run(llvm::Module&) () from /data/vtjnash/julia/usr/bin/../lib/libLLVM-13jl.so
    #32681 0x00007ffff6e8b895 in JuliaOJIT::CompilerT::operator() (this=0x5555557409b0, M=...) at /data/vtjnash/julia/src/jitlayers.cpp:571
    #32682 0x00007ffff3d5aecb in llvm::orc::IRCompileLayer::emit(std::unique_ptr<llvm::orc::MaterializationResponsibility, std::default_delete<llvm::orc::MaterializationResponsibility> >, llvm::orc::ThreadSafeModule) () from /data/vtjnash/julia/usr/bin/../lib/libLLVM-13jl.so
    #32683 0x00007ffff3d6890c in llvm::orc::BasicIRLayerMaterializationUnit::materialize(std::unique_ptr<llvm::orc::MaterializationResponsibility, std::default_delete<llvm::orc::MaterializationResponsibility> >) () from /data/vtjnash/julia/usr/bin/../lib/libLLVM-13jl.so
    #32684 0x00007ffff3d208db in llvm::orc::MaterializationTask::run() () from /data/vtjnash/julia/usr/bin/../lib/libLLVM-13jl.so
    #32685 0x00007ffff3d0234d in void llvm::detail::UniqueFunctionBase<void, std::unique_ptr<llvm::orc::Task, std::default_delete<llvm::orc::Task> > >::CallImpl<void (*)(std::unique_ptr<llvm::orc::Task, std::default_delete<llvm::orc::Task> >)>(void*, std::unique_ptr<llvm::orc::Task, std::default_delete<llvm::orc::Task> >&) ()
       from /data/vtjnash/julia/usr/bin/../lib/libLLVM-13jl.so
    #32686 0x00007ffff3d040e2 in llvm::orc::ExecutionSession::dispatchTask(std::unique_ptr<llvm::orc::Task, std::default_delete<llvm::orc::Task> >) ()
       from /data/vtjnash/julia/usr/bin/../lib/libLLVM-13jl.so
    #32687 0x00007ffff3d1eb1c in llvm::orc::ExecutionSession::dispatchOutstandingMUs() () from /data/vtjnash/julia/usr/bin/../lib/libLLVM-13jl.so
    #32688 0x00007ffff3d281ab in llvm::orc::ExecutionSession::OL_completeLookup(std::unique_ptr<llvm::orc::InProgressLookupState, std::default_delete<llvm::orc::InProgressLookupState> >, std::shared_ptr<llvm::orc::AsynchronousSymbolQuery>, std::function<void (llvm::DenseMap<llvm::orc::JITDylib*, llvm::DenseSet<llvm::orc::SymbolStringPtr, llvm::DenseMapInfo<llvm::orc::SymbolStringPtr> >, llvm::DenseMapInfo<llvm::orc::JITDylib*>, llvm::detail::DenseMapPair<llvm::orc::JITDylib*, llvm::DenseSet<llvm::orc::SymbolStringPtr, llvm::DenseMapInfo<llvm::orc::SymbolStringPtr> > > > const&)>) () from /data/vtjnash/julia/usr/bin/../lib/libLLVM-13jl.so
    #32689 0x00007ffff3d28e4d in llvm::orc::InProgressFullLookupState::complete(std::unique_ptr<llvm::orc::InProgressLookupState, std::default_delete<llvm::orc::InProgressLookupState> >) () from /data/vtjnash/julia/usr/bin/../lib/libLLVM-13jl.so
    #32690 0x00007ffff3d12283 in llvm::orc::ExecutionSession::OL_applyQueryPhase1(std::unique_ptr<llvm::orc::InProgressLookupState, std::default_delete<llvm::orc::InProgressLookupState> >, llvm::Error) () from /data/vtjnash/julia/usr/bin/../lib/libLLVM-13jl.so
    #32691 0x00007ffff3d1efee in llvm::orc::ExecutionSession::lookup(llvm::orc::LookupKind, std::vector<std::pair<llvm::orc::JITDylib*, llvm::orc::JITDylibLookupFlags>, std::allocator<std::pair<llvm::orc::JITDylib*, llvm::orc::JITDylibLookupFlags> > > const&, llvm::orc::SymbolLookupSet, llvm::orc::SymbolState, llvm::unique_function<void (llvm::Expected<llvm::DenseMap<llvm::orc::SymbolStringPtr, llvm::JITEvaluatedSymbol, llvm::DenseMapInfo<llvm::orc::SymbolStringPtr>, llvm::detail::DenseMapPair<llvm::orc::SymbolStringPtr, llvm::JITEvaluatedSymbol> > >)>, std::function<void (llvm::DenseMap<llvm::orc::JITDylib*, llvm::DenseSet<llvm::orc::SymbolStringPtr, llvm::DenseMapInfo<llvm::orc::SymbolStringPtr> >, llvm::DenseMapInfo<llvm::orc::JITDylib*>, llvm::detail::DenseMapPair<llvm::orc::JITDylib*, llvm::DenseSet<llvm::orc::SymbolStringPtr, llvm::DenseMapInfo<llvm::orc::SymbolStringPtr> > > > const&)>) () from /data/vtjnash/julia/usr/bin/../lib/libLLVM-13jl.so
    #32692 0x00007ffff3d1f2b2 in llvm::orc::ExecutionSession::lookup(std::vector<std::pair<llvm::orc::JITDylib*, llvm::orc::JITDylibLookupFlags>, std::allocator<std::pair<llvm::orc::JITDylib*, llvm::orc::JITDylibLookupFlags> > > const&, llvm::orc::SymbolLookupSet const&, llvm::orc::LookupKind, llvm::orc::SymbolState, std::function<void (llvm::DenseMap<llvm::orc::JITDylib*, llvm::DenseSet<llvm::orc::SymbolStringPtr, llvm::DenseMapInfo<llvm::orc::SymbolStringPtr> >, llvm::DenseMapInfo<llvm::orc::JITDylib*>, llvm::detail::DenseMapPair<llvm::orc::JITDylib*, llvm::DenseSet<llvm::orc::SymbolStringPtr, llvm::DenseMapInfo<llvm::orc::SymbolStringPtr> > > > const&)>)
        () from /data/vtjnash/julia/usr/bin/../lib/libLLVM-13jl.so
    #32693 0x00007ffff3d1f732 in llvm::orc::ExecutionSession::lookup(std::vector<std::pair<llvm::orc::JITDylib*, llvm::orc::JITDylibLookupFlags>, std::allocator<std::pair<llvm::orc::JITDylib*, llvm::orc::JITDylibLookupFlags> > > const&, llvm::orc::SymbolStringPtr, llvm::orc::SymbolState) ()
       from /data/vtjnash/julia/usr/bin/../lib/libLLVM-13jl.so
    #32694 0x00007ffff3d1fa03 in llvm::orc::ExecutionSession::lookup(llvm::ArrayRef<llvm::orc::JITDylib*>, llvm::orc::SymbolStringPtr, llvm::orc::SymbolState) ()
       from /data/vtjnash/julia/usr/bin/../lib/libLLVM-13jl.so
    #32695 0x00007ffff3d1fc2f in llvm::orc::ExecutionSession::lookup(llvm::ArrayRef<llvm::orc::JITDylib*>, llvm::StringRef, llvm::orc::SymbolState) ()
       from /data/vtjnash/julia/usr/bin/../lib/libLLVM-13jl.so
    ...
    
  5. vtjnash commented on Jan 11, 2022

    @vtjnash
    SponsorMember

    and also, fwiw, the expected result of this call (from -O0) is:

    ERROR: MethodError: Union{}(::Int64) is ambiguous. Candidates:
      (::Type{T})(x::Number) where T<:AbstractChar in Base at char.jl:48
      Union{}(a...) in Core at boot.jl:261
      (::Type{T})(itr) where T<:Tuple in Base at tuple.jl:317
    Possible fix, define
      Union{}(::Number)
    Stacktrace:
     [1] typemax(#unused#::Type{Union{}})
       @ Dates /data/vtjnash/julia1/usr/share/julia/stdlib/v1.8/Dates/src/periods.jl:56
     [2] reducedim_init(f::Function, op::typeof(min), A::Vector{Float64}, region::Int64)
       @ Base ./reducedim.jl:159
     [3] _mapreduce_dim(f::Function, op::Function, #unused#::Base._InitialValue, A::Vector{Float64}, dims::Int64)
       @ Base ./reducedim.jl:336
     [4] #mapreduce#741
       @ ./reducedim.jl:322 [inlined]
     [5] #_minimum#783
       @ ./reducedim.jl:916 [inlined]
     [6] _minimum
       @ ./reducedim.jl:916 [inlined]
     [7] #minimum#761
       @ ./reducedim.jl:890 [inlined]
     [8] top-level scope
       @ REPL[3]:1
    
  6. vtjnash commented on Jan 11, 2022

    @vtjnash
    SponsorMember

    code_llvm(Base.mapreduce_impl, (typeof(f),typeof(min),Vector{Float64},Int64,Int64)) + repeated bugpoint --run-llc results in:

    ; ModuleID = 'bugpoint-reduced-simplified.bc'
    source_filename = "mapreduce_impl"
    target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
    target triple = "x86_64-unknown-linux-gnu"
    
    define void @julia_mapreduce_impl_48() #0 {
    top:
      %0 = load double, double addrspace(13)* undef, align 8
      %1 = fcmp uge double %0, 3.000000e+00
      %2 = bitcast double %0 to i64
      %tindex_phi1 = select i1 %1, i8 2, i8 1
      %.sroa.0487.1 = select i1 %1, i64 %2, i64 undef
      switch i8 undef, label %L146 [
        i8 1, label %L381
        i8 2, label %L142
      ]
    
    L142:                                             ; preds = %top
      %3 = icmp eq i8 %tindex_phi1, 2
      %spec.select1235 = select i1 %3, i64 %.sroa.0487.1, i64 undef
      br label %L168
    
    L146:                                             ; preds = %top
      unreachable
    
    L168:                                             ; preds = %L216, %L142
      %.sroa.0426.0 = phi i64 [ %spec.select1235, %L142 ], [ %7, %L216 ]
      %4 = bitcast i64 %.sroa.0426.0 to double
      br label %L216
    
    L216:                                             ; preds = %L168
      %5 = fcmp ord double %4, 0.000000e+00
      %6 = select i1 %5, double undef, double %4
      %7 = bitcast double %6 to i64
      br label %L168
    
    L381:                                             ; preds = %top
      ret void
    }
    
    attributes #0 = { "probe-stack"="inline-asm" }
    
    !llvm.module.flags = !{!0}
    
    !0 = !{i32 2, !"Debug Info Version", i32 3}

    Which results in the same crash for many LLVM versions.

  7. mbauman commented on Aug 29, 2024

    @mbauman
    SponsorMember

    The error on nightly is now:

    julia> a = collect(1.0:4);
    
    julia> f(x) = x < 3 ? missing : x;
    
    julia> minimum(f, a; dims = 1)
    ERROR: ArgumentError: cannot construct a value of type Union{} for return result

    And — even better — this, too is fixed by #55318.

  8. added
    foldsum, maximum, reduce, foldl, etc.
    and removed
    external dependenciesInvolves LLVM, OpenBLAS, or other linked libraries
    on Feb 5, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugIndicates an unexpected problem or unintended behaviorfoldsum, maximum, reduce, foldl, etc.

    Type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions