8000 Handle deallocations of string which is a `StructInstanceMember` · Issue #7349 · lfortran/lfortran · GitHub
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content
Handle deallocations of string which is a StructInstanceMember #7349
Closed
@jinangshah21

Description

@jinangshah21
program deallocate_SIM
    type, abstract :: toml_value
      character(len=:), allocatable :: key
    end type
    type, extends(toml_value) :: toml_table
        integer :: x
    end type
    type(toml_table) :: temp
    allocate(character(len=3) :: temp%key)
    deallocate(temp%key)
end program

LFortran Error:

lf) jinang_shah@JNSLAP:~/Desktop/lfortran$ lfortran c.f90
lfortran: /home/jinang_shah/conda_root/envs/lf/include/llvm/IR/Instructions.h:939: static llvm::GetElementPtrInst* llvm::GetElementPtrInst::Create(llvm::Type*, llvm::Value*, llvm::ArrayRef<llvm::Value*>, const llvm::Twine&, llvm::Instruction*): Assertion `PointeeType == cast<PointerType>(Ptr->getType()->getScalarType())->getElementType()' failed.
Traceback (most recent call last):
  Binary file "/home/jinang_shah/Desktop/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/jinang_shah/Desktop/lfortran/src/bin/lfortran.cpp", line 2696, in main
    return main_app(argc, argv);
  File "/home/jinang_shah/Desktop/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/jinang_shah/Desktop/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/jinang_shah/Desktop/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/jinang_shah/Desktop/lfortran/src/libasr/codegen/asr_to_llvm.cpp", line 11462, 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/jinang_shah/Desktop/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/jinang_shah/Desktop/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/jinang_shah/Desktop/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/jinang_shah/Desktop/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/jinang_shah/Desktop/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/jinang_shah/Desktop/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/jinang_shah/Desktop/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_t &)x); return; }
  File "/home/jinang_shah/Desktop/lfortran/src/libasr/codegen/asr_to_llvm.cpp", line 3494, in LCompilers::ASRToLLVMVisitor::visit_Program(LCompilers::ASR::Program_t const&)
    this->visit_stmt(*x.m_body[i]);
  File "/home/jinang_shah/Desktop/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/jinang_shah/Desktop/lfortran/src/libasr/../libasr/asr_base_visitor.h", line 59, in void LCompilers::ASR::visit_stmt_t<LCompilers::ASRToLLVMVisitor>(LCompilers::ASR::stmt_t const&, LCompilers::ASRToLLVMVisitor&)
    case stmtType::ExplicitDeallocate: { v.visit_ExplicitDeallocate((const ExplicitDeallocate_t &)x); return; }
  File "/home/jinang_shah/Desktop/lfortran/src/libasr/codegen/asr_to_llvm.cpp", line 1367, in LCompilers::ASRToLLVMVisitor::visit_ExplicitDeallocate(LCompilers::ASR::ExplicitDeallocate_t const&)
    visit_Deallocate(x);
  File "/home/jinang_shah/Desktop/lfortran/src/libasr/codegen/asr_to_llvm.cpp", line 1306, in void LCompilers::ASRToLLVMVisitor::visit_Deallocate<LCompilers::ASR::ExplicitDeallocate_t>(LCompilers::ASR::ExplicitDeallocate_t const&)
    char_ptr = llvm_utils->create_gep2(string_descriptor, tmp, 0);
  File "/home/jinang_shah/Desktop/lfortran/src/libasr/codegen/llvm_utils.cpp", line 1566, in LCompilers::LLVMUtils::create_gep2(llvm::Type*, llvm::Value*, int)
    return LLVMUtils::CreateGEP2(t, ds, idx_vec);
  File "/home/jinang_shah/Desktop/lfortran/src/libasr/codegen/llvm_utils.cpp", line 1755, in LCompilers::LLVMUtils::CreateGEP2(llvm::Type*, llvm::Value*, std::vector<llvm::Value*, std::allocator<llvm::Value*> >&)
    return builder->CreateGEP(t, x, idx);
  File "/home/jinang_shah/conda_root/envs/lf/include/llvm/IR/IRBuilder.h", line 1773, in llvm::IRBuilderBase::CreateGEP(llvm::Type*, llvm::Value*, llvm::ArrayRef<llvm::Value*>, llvm::Twine const&)
    return Insert(GetElementPtrInst::Create(Ty, Ptr, IdxList), Name);
  File "/home/jinang_shah/conda_root/envs/lf/include/llvm/IR/Instructions.h", line 939, in llvm::GetElementPtrInst::Create(llvm::Type*, llvm::Value*, llvm::ArrayRef<llvm::Value*>, llvm::Twine const&, llvm::Instruction*)
    assert(
  File "./assert/./assert/assert.c", line 105, in __assert_fail
  File "./assert/./assert/assert.c", line 96, in <invalid>
  File "./stdlib/./stdlib/abort.c", line 79, in abort
  File "./signal/../sysdeps/posix/raise.c", line 26, in raise
  File "./nptl/./nptl/pthread_kill.c", line 43, in pthread_kill
  Binary file "/lib/x86_64-linux-gnu/libc.so.6", in <invalid>
Abort: Signal SIGABRT (abort) received

Aborted (core dumped)

Metadata

Metadata

Assignees

No one assigned

    Labels

    toml-fCompiling toml-f codebase

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions

      0