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

    <tr>
        <th>Summary</th>
        <td>
            [Flang] Assertion `fir::isCharacterProcedureTuple(actual.getType()) && mlir::isa<fir::BoxProcType>(dummyType) && "unsupported dummy procedure mismatch with the actual argument"' failed.
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            mlir,
            flang
      </td>
    </tr>

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

    <tr>
      <th>Reporter</th>
      <td>
          k-arrows
      </td>
    </tr>
</table>

<pre>
    Crash itself is reproducible on Godbolt:
https://godbolt.org/z/EsWdjonnE

Reproducer:
```f90
module m
  contains
    function f(i) result(res)
      character(len=i) :: res
    end function
end

subroutine s()
  use m
 procedure(f), pointer :: p

  contains
    subroutine ss()
 call sss(p)
    end subroutine
    subroutine sss(p)
 procedure(f) :: p
    end subroutine
end
```

The above reproducer is a slight modification of the one in https://github.com/llvm/llvm-project/issues/102733.

Stack dump:
```console
/app/example.f90:3:14: warning: Function result is never defined
      function f(i) result(res)
 ^
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace.
 #0 0x0000000003553d08 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/opt/compiler-explorer/clang-llvmflang-trunk-20240812/bin/flang-new+0x3553d08)
 #1 0x00000000035516ac SignalHandler(int) Signals.cpp:0:0
 #2 0x000078b91b042520 (/lib/x86_64-linux-gnu/libc.so.6+0x42520)
 #3 0x0000000007ddb616 mlir::AsmPrinter::Impl::printDialectType(mlir::Type) (/opt/compiler-explorer/clang-llvmflang-trunk-20240812/bin/flang-new+0x7ddb616)
 #4 0x0000000007ded871 mlir::AsmPrinter::Impl::printTypeImpl(mlir::Type) (/opt/compiler-explorer/clang-llvmflang-trunk-20240812/bin/flang-new+0x7ded871)
 #5 0x0000000007dee31b mlir::AsmPrinter::Impl::printType(mlir::Type) (/opt/compiler-explorer/clang-llvmflang-trunk-20240812/bin/flang-new+0x7dee31b)
 #6 0x0000000007dda324 mlir::OpAsmPrinter::printFunctionalType(mlir::Operation*) (/opt/compiler-explorer/clang-llvmflang-trunk-20240812/bin/flang-new+0x7dda324)
 #7 0x0000000007df00eb (anonymous namespace)::OperationPrinter::printGenericOp(mlir::Operation*, bool) AsmPrinter.cpp:0:0
 #8 0x0000000007df062a (anonymous namespace)::OperationPrinter::printCustomOrGenericOp(mlir::Operation*) AsmPrinter.cpp:0:0
 #9 0x0000000007df0af9 (anonymous namespace)::OperationPrinter::printFullOpWithIndentAndLoc(mlir::Operation*) AsmPrinter.cpp:0:0
#10 0x0000000007df5045 mlir::Operation::print(llvm::raw_ostream&, mlir::AsmState&) (/opt/compiler-explorer/clang-llvmflang-trunk-20240812/bin/flang-new+0x7df5045)
#11 0x0000000007df6b4a mlir::Operation::print(llvm::raw_ostream&, mlir::OpPrintingFlags const&) (/opt/compiler-explorer/clang-llvmflang-trunk-20240812/bin/flang-new+0x7df6b4a)
#12 0x0000000007e5bbc4 mlir::Diagnostic::appendOp(mlir::Operation&, mlir::OpPrintingFlags const&) (/opt/compiler-explorer/clang-llvmflang-trunk-20240812/bin/flang-new+0x7e5bbc4)
#13 0x0000000007ea746d mlir::Operation::emitOpError(llvm::Twine const&) (/opt/compiler-explorer/clang-llvmflang-trunk-20240812/bin/flang-new+0x7ea746d)
#14 0x0000000004e58c99 fir::__mlir_ods_local_type_constraint_FIROps32(mlir::Operation*, mlir::Type, llvm::StringRef, unsigned int) FIROps.cpp:0:0
#15 0x0000000004e5f782 fir::ExtractValueOp::verifyInvariantsImpl() (/opt/compiler-explorer/clang-llvmflang-trunk-20240812/bin/flang-new+0x4e5f782)
#16 0x0000000004dedc43 mlir::Op<fir::ExtractValueOp, mlir::OpTrait::ZeroRegions, mlir::OpTrait::OneResult, mlir::OpTrait::OneTypedResult<mlir::Type>::Impl, mlir::OpTrait::ZeroSuccessors, mlir::OpTrait::OneOperand, mlir::OpTrait::OpInvariants, mlir::BytecodeOpInterface::Trait, mlir::MemoryEffectOpInterface::Trait>::verifyInvariants(mlir::Operation*) (/opt/compiler-explorer/clang-llvmflang-trunk-20240812/bin/flang-new+0x4dedc43)
#17 0x0000000004e0cdb0 mlir::RegisteredOperationName::Model<fir::ExtractValueOp>::verifyInvariants(mlir::Operation*) (/opt/compiler-explorer/clang-llvmflang-trunk-20240812/bin/flang-new+0x4e0cdb0)
#18 0x0000000007ed5372 (anonymous namespace)::OperationVerifier::verifyOnEntrance(mlir::Operation&) (.isra.0) Verifier.cpp:0:0
#19 0x0000000007ed5d25 (anonymous namespace)::OperationVerifier::verifyOperation(mlir::Operation&) Verifier.cpp:0:0
#20 0x0000000007ed7738 std::_Function_handler<void (), llvm::LogicalResult mlir::failableParallelForEach<mlir::Operation**, (anonymous namespace)::OperationVerifier::verifyOnExit(mlir::Operation&)::'lambda'(mlir::Operation*)>(mlir::MLIRContext*, mlir::Operation**, mlir::Operation**, (anonymous namespace)::OperationVerifier::verifyOnExit(mlir::Operation&)::'lambda'(mlir::Operation*)&&)::'lambda'()>::_M_invoke(std::_Any_data const&) Verifier.cpp:0:0
#21 0x000000000698ac2e std::_Function_handler<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> (), std::__future_base::_Task_setter<std::unique_ptr<std::__future_base::_Result<void>, std::__future_base::_Result_base::_Deleter>, std::thread::_Invoker<std::tuple<std::function<void ()>>>, void>>::_M_invoke(std::_Any_data const&) (/opt/compiler-explorer/clang-llvmflang-trunk-20240812/bin/flang-new+0x698ac2e)
#22 0x000000000698b2cb std::__future_base::_State_baseV2::_M_do_set(std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*, bool*) (/opt/compiler-explorer/clang-llvmflang-trunk-20240812/bin/flang-new+0x698b2cb)
#23 0x000078b91b099ee8 (/lib/x86_64-linux-gnu/libc.so.6+0x99ee8)
#24 0x000000000698af41 std::__future_base::_Deferred_state<std::thread::_Invoker<std::tuple<std::function<void ()>>>, void>::_M_complete_async() (/opt/compiler-explorer/clang-llvmflang-trunk-20240812/bin/flang-new+0x698af41)
#25 0x000000000698acbf std::_Function_handler<void (), std::shared_future<void> llvm::ThreadPoolInterface::asyncImpl<void>(std::function<void ()>, llvm::ThreadPoolTaskGroup*)::'lambda'()>::_M_invoke(std::_Any_data const&) (/opt/compiler-explorer/clang-llvmflang-trunk-20240812/bin/flang-new+0x698acbf)
#26 0x0000000007f2fb23 llvm::StdThreadPool::processTasks(llvm::ThreadPoolTaskGroup*) (/opt/compiler-explorer/clang-llvmflang-trunk-20240812/bin/flang-new+0x7f2fb23)
#27 0x0000000007f3064c void* llvm::thread::ThreadProxy<std::tuple<llvm::StdThreadPool::grow(int)::'lambda'()>>(void*) ThreadPool.cpp:0:0
#28 0x000078b91b094ac3 (/lib/x86_64-linux-gnu/libc.so.6+0x94ac3)
#29 0x000078b91b126850 (/lib/x86_64-linux-gnu/libc.so.6+0x126850)
flang-new: error: unable to execute command: Segmentation fault (core dumped)
flang-new: error: flang frontend command failed due to signal (use -v to see invocation)
flang-new version 20.0.0git (https://github.com/llvm/llvm-project.git e2f9c1853349a5dc86ccd0e85e09af245c418aa8)
Target: x86_64-unknown-linux-gnu
Thread model: posix
InstalledDir: /opt/compiler-explorer/clang-llvmflang-trunk-20240812/bin
```

With assertion-enabled flang-new, compiling the above reproducer results in the following assertion failure:
```txt
flang-new: /path_to_llvm_project/llvm-project/flang/lib/Lower/ConvertCall.cpp:1082: hlfir::Entity fixProcedureDummyMismatch(mlir::Location, fir::FirOpBuilder &, hlfir::Entity, mlir::Type): Assertion `fir::isCharacterProcedureTuple(actual.getType()) && mlir::isa<fir::BoxProcType>(dummyType) && "unsupported dummy procedure mismatch with the actual argument"' failed.
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzcWl9z4yj2_TTKCxWXjCxbesiD24nnl6run7s6qemqfXEhuLKZINACSuz99FsgyfqTxN2ZTHpnd2q620JwOedyuFxAxBi-kwBXQfwpiK8vSGX3Sl89XBKt1ZO5yBQ7Xq00MXvErQGRI26QhlIrVlGeCUBKot8Uy5SwQbQMwusgXO6tLY17wusAr3f124nSuwCv_xXg9Y35zv5QUt7U1eu_vzVGQZ_sBPOw_j9Pw7qkUKwSgIr6CSGqpCVcmvYZobyS1HIlUR7ghAc4RRpMJWyAEw0mwGlXFSG6J5pQCzrAiQAZRNe-hQMQLV3DrjJIdrJdl4JkffymyrSqLJeATICTXk-V6RCXWlFglYYAJ7mrg1eoVFxa0G23Zd_qSxT7PQ27okQIZHxhOaDq0HfNXjE1ajaGOsL3mtnOLe3o9fnc7wGRTD3CSUSgnaQIMoLv9hYVivGcU-LHUOXI7p3EAHGJRrLidl9lE6qKAK-FeGz_uSy1-gOoDfCaG1O5MV9PQ7yIokkfyJ0l9AGxqiify40qaZRo-AR4TcoywGs4kKIUMHFijJZREC2nM-ePJ6Illzv3c92Kr9acIybhETRikHMJrK-9nxVqEDfT5Ovnm-XdjfN3wS0iKKt2zolKW2TVO5yDiGSISyoqBt7d1E_3jNAHqwmFSQsERyEKD2H7XxTHEQsT5M17aZijqX981Vxa7-F7Z8HNrlMlTZ62ylgNpAjw3OmfS-vl5ZS8VqUDR1VRcgH6Eg6lUNpN0DUVRO4unaHc_7K6kg-XOMSzMJniAK8zLgO8rl9KeArwp_DQgOy5E0fTEYvpnFB0x3eSiP8jkgkfDhpQdbGZ0NLpJPR_ToZwY2iRZOk0C2c4xmFDQ_AswOtDMt_OZ5eCy-pwuZNV_YJOjJrMPTzfZAAu6oNbMJbNp3NUCK5r7y1N4Z0LzfNtUYr6V-mKrzkRQO39sXRO75rVBR_k4wblgMZsSANYspj-PA0H1xf9Qg4e4oBDPOIA0TR7G4dfit_BG-Cfj6REIjzr4d-UYwYedxvDiHjGYFOC9oE5wMuPVJMDOmCyGDLJwxAy1zuRSh4LVRkkSQGm9LEmHYF9TvE3kKA53ZRn2K1QppRwLDsvvRwFkjG4OSbvALeqjFXFRv8MyB-DS8fgSJ6-A9y6EmJTfud2fysZSLuU7LOifxqhC8bhCGEczmL0krkOxQ_Wk8EUvbPEgn_xYXr1kE96dZymI07zbEb-Kk6b0ruTy91akJ1x-aGxH0zQ4R8QxAOCEGcZ7YeWa052UhnLaf1MyhIke13K_3GKNYMBxeFCDGQxm7PXxxAKbjfljdZKD0by_snl1r-AgMc3IDBYgmcQJzRNUd7i324dl61iZisUJWJrjyVsPVBNuLTb9e23TWkifDZGjle3VS8bvLOay903yF1xJf0-k7XJXm395YgQj4DniwR3wG8OLiu1vxNRwaasyx5B8_x4Kx-J5kRa0-QOH-buBtTA3YPVdsaA0Vk00EsQrV4jMVL_vSbc1g__AK2-wY4rac7U2kj41mweztVxY8SaitFqNHbRTS-NOQ_orqIUjFH6B5i8WiQ7V6nsBm1Y7dPRAlUMXA0LOncLVA3Wtx7U_QKF0sebPAdqX6nfshsr5dfnN400BtpZDBUfUpaFPX5OAMaCBnZC-P-kaPh9UQzEGW39jZjXxAbMh8kTsDha4J_OT353lHiboNQEN_JGWk0kfTV1baPwhBtNJg4Oag29HI_SMUaG4_dh7MCcgXgWFA5HoBaLKEHGsia6t1n8dt_saKPVo-IMNcdFg0D9We04JaIODD3Z5YQLkgn4SjQRAsRa6RtC94PQMRSOXxPeOXoHN7tfd0tdGOCFIEXGSIAX54Ts1N9__eXz7beVkhYO9tkK9gKV_x6ers2rzRpH1Mr4suXyUT246dHJZSmPW0YsGWQq5wU4yHHnaUIohvMCPL2sJP9nBdvSDkq327yylYZtRkwT27a1JusSvEI_XbcuuQYBfv9y09P9WRv3xDxsDVj7PsDNbPPqewfqQWO710BaQ7d-CAdobFUK6BecTquHU98J4aYx3oL8E-L4kBWikVF_hcB4pLMM0-y8S_2Wzxf8jk-8mHLj2ufV88_fQJluQHrHDh-3CjcuHPg4Gh5kpilA8raDTN9kYHM2jg_5bHreTdeQg9bAtsbv2fva_kjtNwJxDnaDsiXmKOlH7h4aZwy8FT-Lpln-puX8VNfsifNh7d4uEPXW-3vvza9KiVGq7JnXx5hd_HpxwoycOkgnOvMumv6mVVW2i_FftzZ9XPjJ8sHADA9Rc5xnOBpsclnHtz3OUW535Mib4VnAa475oDOBGuyAzfAgNY_C-YzWMwEve6z6861BrdXh-NKUO-uKnVZPp7uUs8PvhNbgcA7pDL2cfCSjgDUjNHpjwHJNBr5JBzaneJ7Eb7zNqducjHbDES0R-KOhaIkq6XJqZBWCA9DKAqKqKNw2OVqiO9gVIG19-5kTl48HOKFKg7-qBPYD474U5dqluJK1lpHL5IEhVvl-jb_TcoYrA-jy0ZcBIDf3aJNUjntBj6CNA4XDSTgJd9wDe9ul48S1ApyndJrEUTRLScxoMqeUhZDEEKYkx7OYzqYJId1ack_0Dqwj1_i_kg9SPcneODQ3y04yqKi3w0tUKsMP9atbaazbwbBrnz6j98-11y-4v3O7R8QY0M6Rl-BHm6He1Fyhulsud_669dl1eH0PbBCX_n2uhFBPrvbJrB9QH97HV9f2YF_QR4DXJbH7rVVbR2zb3QKPLoV9q5PgP6sn75KVko-g7YqIdjpOw8SlVmgvumMHabk9opwfvrYfDlxXRXH8wk1BLN0Pti-fT0JbdSd7a6435aeKCwYaNYfCzzp46dTRhRa0PDknmIenRtys2m88TrDufejCCaG2ImKyg_auzi-lad11_9KVG9I_YPmkPMX21AwnzPHsrvd86wDjSpqqLJW2fuoVxbH7pAIVjVfQk9OLl4FHg4jeVS4EBBgHeNHM3MlolC_YVcTSKCUXcDVd4CgO5-lserG_wjOWJ2lE8ylN0yTBYRjNpznNaUhYzqbZBb9qlYyjOJ5NJywiU8bSPEoZsCwMg1kIBeFi4pQxUXp34T8UuJqGOE3iC0EyEMZ_LYSx95DDuQowbqSDg_j6Ql95XWXVzgSzUHBjTWfPciv890Zr3yK-_t8euotKi6t3fbri_P54hf8dAAD__6uclRo">