8000 [stdlib:hashmaps] Aliasing through `ASSOCIATE` construct for derived type raises deepcopy Exception · Issue #7371 · lfortran/lfortran · GitHub
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content

[stdlib:hashmaps] Aliasing through ASSOCIATE construct for derived type raises deepcopy Exception #7371

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

Closed
AnshMehta1 opened this issue May 20, 2025 · 0 comments · Fixed by #7426
Labels
stdlib Issues related to compiling fortran-lang/stdlib

Comments

@AnshMehta1
Copy link
Member
AnshMehta1 commented May 20, 2025

MRE :-

module stdlib_hashmaps

    implicit none

    type :: open_map_entry_type
        integer(4) :: hash_val
    end type open_map_entry_type


    type open_map_entry_ptr
        type(open_map_entry_type), pointer :: target => null()
    end type open_map_entry_ptr


    type :: open_hashmap_type
        type(open_map_entry_ptr), allocatable  :: inverse(:)
    end type open_hashmap_type

end module stdlib_hashmaps


program main

    use stdlib_hashmaps

    implicit none

    type(open_hashmap_type)   :: map
    integer(4) :: inv_index = 1

    allocate(map % inverse(1))
    allocate(map % inverse(1) % target)
                                           
    associate(inverse => map % inverse(inv_index))
        if (associated(inverse % target)) then
            print *, "HI"
        end if
    end associate

end program

GFortran Output :-

(lf) lordansh@LordAnsh:~/dev/lfort4/lfortran$ gfortran try.f90 && ./a.out
 HI

LFortran Error :-

(lf) lordansh@LordAnsh:~/dev/lfort4/lfortran$ lfortran try.f90 
Internal Compiler Error: Unhandled exception
Traceback (most recent call last):
  Binary file "/home/lordansh/dev/lfort4/lfortran/src/bin/lfortran", in _start
  File "./csu/../csu/libc-start.c", line 360, in __libc_start_main
  File "./csu/../sysdeps/nptl/libc_start_call_main.h", line 58, in __libc_start_call_main
  File "/home/lordansh/dev/lfort4/lfortran/src/bin/lfortran.cpp", line 2696, in main
    return main_app(argc, argv);
  File "/home/lordansh/dev/lfort4/lfortran/src/bin/lfortran.cpp", line 2624, in main_app(int, char**)
    err = compile_src_to_object_file(arg_file, tmp_o, compiler_options.time_report, false,
  File "/home/lordansh/dev/lfort4/lfortran/src/bin/lfortran.cpp", line 1168, in (anonymous namespace)::compile_src_to_object_file(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, bool, bool, LCompilers::CompilerOptions&, LCompilers::PassManager&, bool)
    res = fe.get_llvm3(*asr, lpm, diagnostics, infile, &time_opt);
  File "/home/lordansh/dev/lfort4/lfortran/src/lfortran/fortran_evaluator.cpp", line 393, in LCompilers::FortranEvaluator::get_llvm3(LCompilers::ASR::TranslationUnit_t&, LCompilers::PassManager&, LCompilers::diag::Diagnostics&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, int*)
    compiler_options, run_fn, "", infile);
  File "/home/lordansh/dev/lfort4/lfortran/src/libasr/codegen/asr_to_llvm.cpp", line 11516, in LCompilers::asr_to_llvm(LCompilers::ASR::TranslationUnit_t&, LCompilers::diag::Diagnostics&, llvm::LLVMContext&, Allocator&, LCompilers::PassManager&, LCompilers::CompilerOptions&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)
    v.visit_asr((ASR::asr_t&)asr);
  File "/home/lordansh/dev/lfort4/lfortran/src/libasr/../libasr/asr_base_visitor.h", line 325, in LCompilers::ASR::BaseVisitor<LCompilers::ASRToLLVMVisitor>::visit_asr(LCompilers::ASR::asr_t const&)
    void visit_asr(const asr_t &b) { visit_asr_t(b, self()); }
  File "/home/lordansh/dev/lfort4/lfortran/src/libasr/../libasr/asr_base_visitor.h", line 301, in void LCompilers::ASR::visit_asr_t<LCompilers::ASRToLLVMVisitor>(LCompilers::ASR::asr_t const&, LCompilers::ASRToLLVMVisitor&)
    case asrType::unit: { v.visit_unit((const unit_t &)x); return; }
  File "/home/lordansh/dev/lfort4/lfortran/src/libasr/../libasr/asr_base_visitor.h", line 326, in LCompilers::ASR::BaseVisitor<LCompilers::ASRToLLVMVisitor>::visit_unit(LCompilers::ASR::unit_t const&)
    void visit_unit(const unit_t &b) { visit_unit_t(b, self()); }
  File "/home/lordansh/dev/lfort4/lfortran/src/libasr/../libasr/asr_base_visitor.h", line 22, in void LCompilers::ASR::visit_unit_t<LCompilers::ASRToLLVMVisitor>(LCompilers::ASR::unit_t const&, LCompilers::ASRToLLVMVisitor&)
    case unitType::TranslationUnit: { v.visit_TranslationUnit((const TranslationUnit_t &)x); return; }
  File "/home/lordansh/dev/lfort4/lfortran/src/libasr/codegen/asr_to_llvm.cpp", line 1014, in LCompilers::ASRToLLVMVisitor::visit_TranslationUnit(LCompilers::ASR::TranslationUnit_t const&)
    visit_symbol(*item.second);
  File "/home/lordansh/dev/lfort4/lfortran/src/libasr/../libasr/asr_base_visitor.h", line 328, in LCompilers::ASR::BaseVisitor<LCompilers::ASRToLLVMVisitor>::visit_symbol(LCompilers::ASR::symbol_t const&)
    void visit_symbol(const symbol_t &b) { visit_symbol_t(b, self()); }
  File "/home/lordansh/dev/lfort4/lfortran/src/libasr/../libasr/asr_base_visitor.h", line 30, in void LCompilers::ASR::visit_symbol_t<LCompilers::ASRToLLVMVisitor>(LCompilers::ASR::symbol_t const&, LCompilers::ASRToLLVMVisitor&)
    case symbolType::Program: { v.visit_Program((const Program
8784
_t &)x); return; }
  File "/home/lordansh/dev/lfort4/lfortran/src/libasr/codegen/asr_to_llvm.cpp", line 3488, in LCompilers::ASRToLLVMVisitor::visit_Program(LCompilers::ASR::Program_t const&)
    this->visit_stmt(*x.m_body[i]);
  File "/home/lordansh/dev/lfort4/lfortran/src/libasr/../libasr/asr_base_visitor.h", line 345, in LCompilers::ASR::BaseVisitor<LCompilers::ASRToLLVMVisitor>::visit_stmt(LCompilers::ASR::stmt_t const&)
    void visit_stmt(const stmt_t &b) { visit_stmt_t(b, self()); }
  File "/home/lordansh/dev/lfort4/lfortran/src/libasr/../libasr/asr_base_visitor.h", line 90, in void LCompilers::ASR::visit_stmt_t<LCompilers::ASRToLLVMVisitor>(LCompilers::ASR::stmt_t const&, LCompilers::ASRToLLVMVisitor&)
    case stmtType::AssociateBlockCall: { v.visit_AssociateBlockCall((const AssociateBlockCall_t &)x); return; }
  File "/home/lordansh/dev/lfort4/lfortran/src/libasr/codegen/asr_to_llvm.cpp", line 6007, in LCompilers::ASRToLLVMVisitor::visit_AssociateBlockCall(LCompilers::ASR::AssociateBlockCall_t const&)
    this->visit_stmt(*(associate_block->m_body[i]));
  File "/home/lordansh/dev/lfort4/lfortran/src/libasr/../libasr/asr_base_visitor.h", line 345, in LCompilers::ASR::BaseVisitor<LCompilers::ASRToLLVMVisitor>::visit_stmt(LCompilers::ASR::stmt_t const&)
    void visit_stmt(const stmt_t &b) { visit_stmt_t(b, self()); }
  File "/home/lordansh/dev/lfort4/lfortran/src/libasr/../libasr/asr_base_visitor.h", line 56, in void LCompilers::ASR::visit_stmt_t<LCompilers::ASRToLLVMVisitor>(LCompilers::ASR::stmt_t const&, LCompilers::ASRToLLVMVisitor&)
    case stmtType::Assignment: { v.visit_Assignment((const Assignment_t &)x); return; }
  File "/home/lordansh/dev/lfort4/lfortran/src/libasr/codegen/asr_to_llvm.cpp", line 5429, in LCompilers::ASRToLLVMVisitor::visit_Assignment(LCompilers::ASR::Assignment_t const&)
    llvm_utils->deepcopy(value_struct, target_struct,
  File "/home/lordansh/dev/lfort4/lfortran/src/libasr/codegen/llvm_utils.cpp", line 2261, in LCompilers::LLVMUtils::deepcopy(llvm::Value*, llvm::Value*, LCompilers::ASR::ttype_t*, llvm::Module*, std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, int, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, int> > >, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, int, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, int> > > > > >&) (.localalias)
    deepcopy(src_member, dest_member,
LCompilersException: LLVMUtils::deepcopy isn't implemented for open_map_entry_type pointer
@AnshMehta1 AnshMehta1 added the stdlib Issues related to compiling fortran-lang/stdlib label May 20, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
stdlib Issues related to compiling fortran-lang/stdlib
Projects
None yet
Development

Successfully merging a pull request may close this issue.

1 participant
0