<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/58849>58849</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            [flang] Bug with functions that return "type(c_ptr)"
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            new issue
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          psteinfeld
      </td>
    </tr>
</table>

<pre>
    Here's a test program:
```
module test_c_func_mod
  use iso_c_binding
  implicit none
contains
  subroutine subr(cfunc)
    interface
      type(c_ptr) function cfunc() bind(c)
        import
      end function
    end interface
    print *, c_associated(cfunc())
  end subroutine

  type(c_ptr) function returns_null() bind(c,name='')
    returns_null = c_null_ptr
  end function
end module

program test_c_func
  use test_c_func_mod
  call subr(returns_null)
end program
```

When I compile this program with GNU's Fortran compiler and execute the result, it prints out "F".  This follows the behavior specified in 18.2.3.2, paragraph 5, case (i).  But when I compile it with flang-new and execute the result, it prints out "T".

I also tried this test after building a compiler with https://reviews.llvm.org/D137548.  In this case, the compiler crashes in lowering code and produces the following output:
```
error: loc("./bug.f90":21:3): 'llvm.mlir.addressof' op the type must be a pointer to the type of the referenced function
error: Lowering to LLVM IR failed
flang-new: /local/home/psteinfeld/main/px/llvm/lib/IR/Instructions.cpp:622: void llvm::CallInst::init(llvm::FunctionType*, llvm::Value*, llvm::ArrayRef<llvm::Value*>, llvm::ArrayRef<llvm::OperandBundleDefT<llvm::Value*> >, const llvm::Twine&): Assertion `(Args.size() == FTy->getNumParams() || (FTy->isVarArg() && Args.size() > FTy->getNumParams())) && "Calling a function with bad signature!"' failed.
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace.
Stack dump:
0.      Program arguments: /local/home/psteinfeld/main/px/build/bin/flang-new -fc1 -triple x86_64-unknown-linux-gnu -emit-obj -mrelocation-model pic -pic-level 2 -pic-is-pie -o /tmp/bug-154a92.o -x f95-cpp-input bug.f90
 #0 0x0000556fa49bb900 PrintStackTraceSignalHandler(void*) Signals.cpp:0:0
 #1 0x0000556fa49b90d4 SignalHandler(int) Signals.cpp:0:0
 #2 0x00001481fc953c20 __restore_rt sigaction.c:0:0
 #3 0x00001481fb14237f raise (/lib64/libc.so.6+0x3737f)
 #4 0x00001481fb12cdb5 abort (/lib64/libc.so.6+0x21db5)
 #5 0x00001481fb12cc89 _nl_load_domain.cold.0 loadmsgcat.c:0:0
 #6 0x00001481fb13aa76 .annobin___GI___assert_fail.end assert.c:0:0
 #7 0x0000556fa87f2e97 (/local/home/psteinfeld/main/px/build/bin/flang-new+0x57e0e97)
 #8 0x0000556fa457b7f3 llvm::IRBuilderBase::CreateCall(llvm::FunctionType*, llvm::Value*, llvm::ArrayRef<llvm::Value*>, llvm::Twine const&, llvm::MDNode*) (/local/home/psteinfeld/main/px/build/bin/flang-new+0x15697f3)
 #9 0x0000556fa696d633 convertOperationImpl(mlir::Operation&, llvm::IRBuilderBase&, mlir::LLVM::ModuleTranslation&) LLVMToLLVMIRTranslation.cpp:0:0
#10 0x0000556fa6ac9033 mlir::LLVM::ModuleTranslation::convertOperation(mlir::Operation&, llvm::IRBuilderBase&) (/local/home/psteinfeld/main/px/build/bin/flang-new+0x3ab7033)
#11 0x0000556fa6ad287c mlir::LLVM::ModuleTranslation::convertBlock(mlir::Block&, bool, llvm::IRBuilderBase&) (/local/home/psteinfeld/main/px/build/bin/flang-new+0x3ac087c)
#12 0x0000556fa6ad51e8 mlir::LLVM::ModuleTranslation::convertOneFunction(mlir::LLVM::LLVMFuncOp) (/local/home/psteinfeld/main/px/build/bin/flang-new+0x3ac31e8)
#13 0x0000556fa6ad5e03 mlir::LLVM::ModuleTranslation::convertFunctions() (/local/home/psteinfeld/main/px/build/bin/flang-new+0x3ac3e03)
#14 0x0000556fa6ad7b15 mlir::translateModuleToLLVMIR(mlir::Operation*, llvm::LLVMContext&, llvm::StringRef) (/local/home/psteinfeld/main/px/build/bin/flang-new+0x3ac5b15)
#15 0x0000556fa4ffd4f9 Fortran::frontend::CodeGenAction::generateLLVMIR() (/local/home/psteinfeld/main/px/build/bin/flang-new+0x1feb4f9)
#16 0x0000556fa50c5f50 Fortran::frontend::CodeGenAction::executeAction() (/local/home/psteinfeld/main/px/build/bin/flang-new+0x20b3f50)
#17 0x0000556fa49e3c8d Fortran::frontend::FrontendAction::execute() (/local/home/psteinfeld/main/px/build/bin/flang-new+0x19d1c8d)
#18 0x0000556fa49d0b83 Fortran::frontend::CompilerInstance::executeAction(Fortran::frontend::FrontendAction&) (/local/home/psteinfeld/main/px/build/bin/flang-new+0x19beb83)
#19 0x0000556fa49e9305 Fortran::frontend::executeCompilerInvocation(Fortran::frontend::CompilerInstance*) (/local/home/psteinfeld/main/px/build/bin/flang-new+0x19d7305)
#20 0x0000556fa4530ff8 fc1_main(llvm::ArrayRef<char const*>, char const*) (/local/home/psteinfeld/main/px/build/bin/flang-new+0x151eff8)
#21 0x0000556fa4491d21 main (/local/home/psteinfeld/main/px/build/bin/flang-new+0x147fd21)
#22 0x00001481fb12e493 __libc_start_main (/lib64/libc.so.6+0x23493)
#23 0x0000556fa452ec2e _start (/local/home/psteinfeld/main/px/build/bin/flang-new+0x151cc2e)
flang-new: error: unable to execute command: Aborted (core dumped)
flang-new: error: flang frontend command failed due to signal (use -v to see invocation)
flang-new version 16.0.0 (https://github.com/llvm/llvm-project.git 47d8c7b4b7d5d05e9ae9f12ae2dd73751dc9b9d4)
Target: x86_64-unknown-linux-gnu
Thread model: posix
InstalledDir: /local/home/psteinfeld/main/px/build/bin
flang-new: note: diagnostic msg: 
********************

PLEASE ATTACH THE FOLLOWING FILES TO THE BUG REPORT:
Preprocessed source(s) and associated run script(s) are located at:
flang-new: note: diagnostic msg: /tmp/bug-584519
flang-new: note: diagnostic msg: /tmp/bug-584519.sh
flang-new: note: diagnostic msg: 

********************
```

@PeixinQiao, can you please take a look at this?


</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJy9Wdly27gS_Rr5BSUW9-XBD_KiRFWe2NfRzDyqQBCUMKEAFkDazv366QZJiZTtTOJRTUqhLCyNc3oD0MxV8f3yM9d85ieGUNJw05Baq62m-1mwmLk3M3cxi93-Y3_uVdFW3A7dsE3ZSraBpq6PkNZwIoyCnlzIQsjt0CH2dSWYaIhUkneNTMmGCmmGIabNtWobIbn9c-anDMXP_GwYAWJkw3VJGT82EdJ8rzmO3tQNzMoIzmqEkqSfn2Ij4sFBE3FW5L5Wuhm3cVkcZBzbsfWN5WsNjWTmL2b-NWEbaoxigja8OOLH9UfLoqAj117Jfd-7VDRvWi3NRrZV9YrRtaR7PgtuwIz2M2I4nkdgCEDEP638EZ4pXWzp7DxG1zvG2PRjs7_jEYzCwr09pySy42KDz73lcN3zzx2XZEWY2tcC3W8nzDCLPItmRz59-d168RKMqakcRmpCQT5_4axtcBoHjZi2atBaoumsZwiYAkzoL-G_Q8gahZeqqtSzsVNyvqNPQmlias5EKTh6AvFSx3cCx0dRNdUUsNQ7Elk_oKAQICyAJQi8AvHPUwKwtoVdVlRu55I__wrONeIca2dFaGUUaTRCs7qxoUxLcFeSt6LCUIQAPyjFrr1rmtpgnCPxpeZPgj8bp6qe9o7SW2i68YIkClNgsJKdWCSGkBDgQRjT1Oy4QZ2AyrjGtZgquKUERipaxjtFdkrFfmBSt817SYZrrTR0grwufoCuv8zbrVNmLvyCLt-DR4BeBMPA8hb2vhLaoUUBujOqhFaiarswxhXZt6CTHGCRWtlIJo069qqyV3sJCVEy_iooBkx3A0eYfXf3x29k9UhKCproff5g0g7ZEjhQcPflTkGQ-svaNFzIklcQvMs9JEBse8FxwAC_RA7P1SM-pGl0azEYh9U1CIwtefKkREHsBNBgsLiGIMPB3S8hBfhNeuxe9kTWNrvYTHXs_INW7evWhdb0-yMvZ8H1G0OD258YfV9zCMTiqpVFxW94uX5PFunlwYYABjoOWT9jfvTj3sgLY7i2yRD9xE8XemscI_7P-3yICRAS3HL9fQ4Ct7z50u4fIC73ZhiQXMMH47IfI8wfVC_Q1bt-XComr-Xevi-0-wxTwTXRFF2wHXK3DbacQtYXW0khBYJkD70Y_LNznD6YH-5uF19vMVvuIeYpRO4W_BG3J_S1abhuQWibOxCEI9eBrzkE3F-cgQMshTEtB5xLG4hCsqotutxiIxYgsW-QKxnvl__aQAMp2n19iEsXurKHPs9SvW33HPLQLzq2TUD4bZuOGW9eMo_MIWnVkBBf0ngTh_NWfpPqWc5Bh-3LfCtbMuegjLnK_yLzvea4Jip1DlsMr0gtGJnDY17xJ_jpdz-EgS9O5gpRNkDH5o65F4U08x1F5i-kzKI5RNRcSEhDZMgs3Z418wOXuC8u_IuiuKRhlueZ65IHTMJWSWvU2le0ZvWZonvj7oYxaeMoI13XELOu_X-Q7Z3IztwiJKfCYKV_FOT3grww9UqWRQHzXbLZQPJrlOYb8BpwOGp90GGvpwfj6bkX-kFSEk1Ft3V1mSgOu2_mGOWAi1-5L0EC445nDBAUTgX5rMgjQnN02x8J8j0YNxEUnQpiaUY2stpUihabQqFTgcdXheMSbNqbLXjDW9ziqaSA0iQmDpVSgRNuNptPK3hQm1A2GIIOnkK632-JS8YmS5PS51kycPt3QWA1ESXcBYkTXaQTL4mSPCmDUW5cPV6hQK6vcEfuNgHN4dyJ-ee_Tf42TXfJ26bBcd9vN18gTvuoOJ_CvCjOQB8ThWVjhcVZXMTg4YDqCWxqtyJUwgquIQADzwmjTcpu8qfQpxrueo_zcOPvKdqDMmQEaaqjpMweDdYKn6vHUe_rUMaUMMk3MWWZC-B_bjXbfMrzwxzPaaWA5gnwOFgJiXpTooWfJuwDRK8A37cJyb7FEsyVqv5boswFHhOi_gnRyOPpRywq-RDAE7rH-fgXDrmvz04qAMwTUsEpKe5-xE0HRoeD2VlBA6YJ6PAEdJJ70Qh004PkPeY-ZN-LoJNUiYOvFVwmXl4nv68NXhMwj56bYwQUJhyjyW5RlkVYZsNVuANTakQpi36vgKz8icsFO9pmyyWS5Af6Z07ZJc8B1AR1PEYduSwqI_cXUfc35sUQIecF7bt5AJgmoJPp8Y0HLC1-BHrZ_3oD9fmVnBUewJngnR4kssLN0-DHSu6u9XifpHAPflvPP0_43MnWy3IOFCYcsxObZIEb_Yhjz-ZI9am_VvyY2SvVnP1ckxUJQB9z86dXkShwyzIlcHPadELTN49tbEf1cCQbTmzTtjOfxzwOsCa4p9ecMPMKaEKB51w3TMoC79Kjdf2TSwQPswBuRXj32IDZ4MA_BvH2zSSAOROhwdQIPmc-J52486qRgeDDypNK0qH-1EqaYwlUHcqFTO331DopWeC1ixcIisEl0N7mefEPEm0rGXx9ENfXJkCEXcwWLyoUjNXe-ZNt45yIUfCcrkJgtzdYAvFix4VLG0z-tSqGAwNImBQpS_IwT4qocCOeUZ6Vnk-5X0C4JJFXMLhFF-Fh_TXVW47FsHerCv24HVyZbKmbVzi6Vka89BVVDPEK6N_YM8BHyx2vlS5VgymVFIJupTKNgOOv2dolem_7F59RSbivJS3W68X1Z7L-fEuW93d393-uvnwiy9Xd7VeyvrfNV79_Io-3D_eP69lQ9XnQHPTPONyHC2JUqzHVpQZzBu3uyf07DqJbSQzTom4OA8DpbJEGeumxwPuzOhjXa6I0jLy3HPeX5jtm9xEznMsYb73MmIXuAxcvQv5PUNW9L5Dku2pJXXF8c9DQb1ilrpT6Bjq0lfdZsBxLuOCXXhwnaZAlQXhRXAZFFmT0ohFNxS9n0ZXlOotuyFW77V80DGduEAcyu1cxWLA8eeUELRetri4_Xm2M0jTMLnaXWeKXvh_DsS9KC5azpIg9gJwkSRSzMKYXFc15ZRAuLIrZworAwmh0cyEufdf3Pc9NvDhMo9BJeZwncZG4PPHTMuSgRL7H0s3wwuJCX1pIYHoDnZUwzfFtxgU4LSQwbrWD8mnb7JS-PEbxhV390qL_GxGt36w">