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

    <tr>
        <th>Summary</th>
        <td>
            Code that uses a libcall marks internal symbol as exported when making object file
        </td>
    </tr>

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

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

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

<pre>
    This is showing up as https://github.com/JuliaLang/julia/pull/57658#issuecomment-2727385403 which is holding up julia being able to compile with LLVM20.

The issue is that a defining a libcall in a module and then having it be used is making the libcall symbol become external
```llvm
source_filename = "text"
target datalayout = "e-m:o-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-apple-macosx10.14.0-macho"

declare i16 @julia_float_to_half(float)

define internal i16 @__truncsfhf2(float %0) {
  %2 = call i16 @julia_float_to_half(float %0)
  ret i16 %2
}

define hidden swiftcc half @julia_fp(float %0) {
  %2 = fptrunc float %0 to half
  ret half %2
}

@llvm.compiler.used = appending global [1 x ptr] [ptr @__truncsfhf2], section "llvm.metadata"
```

```
0000000000000000 T ___truncsfhf2
                 U _julia_float_to_half
0000000000000010 T _julia_fp
usr/lib/julia on  debug-llvm-20 [?] 
❯ llc lala.ll -filetype=obj -o llvm19.o
usr/lib/julia on  debug-llvm-20 [?] 
❯ nm llvm19.o
0000000000000000 t ___truncsfhf2
                 U _julia_float_to_half
0000000000000010 T _julia_fp
```
Not sure if this is an intentional change or not but it's between LLVM 19 and 20
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJy0VU1zozgQ_TXypQuXEB-GAwcyjg9b2b1sdq-uBhpQRkgUErHz77ck24mT2dq57LhSRE3pvX6tbj3QWjloooplDyzbb3B1o1mqocEFVSc3jenequdRWpAW7GhOUg-wzoAWRudmy5KaiQMTh0G6cW22rZmYOPy2KolPqAcmDi9-zcRhXpVi4pDt8qxgIpHWrtSaaSLtIrETu6TIUp7AaZTt6JONRnXXZIECGvIhNorAGWjNNEtFcJJuhKenv38XfMt4zXj9PBIEds_iRnSA0FEvdYCDkk2LSoHUgDCZblUEqDtwI2kY8dXvkg4agtVS5zkm_O5fupHewfZtaoyCxldAQGdHi0bl8-f88qfU68R4bc26tHTspSKNEwFL9sCEcHR2TAjGa4fLQA46dKjwzazutoWiiSW1iWax4yypExEePow_h36Vp-ERyfdFLAqW1LEoor7g15UOr_IbPE-jP_22ex1ukbN6l3ku8mOeRjjPiqIJW2PPMd_G6Zb7aDQXKON1R63ChUDGObCUh4Yde2XQHZ05jqh6JooQM1HeIL3UBFJfzu4GPR7dsurW9mMvbhhgIuNMlMB2D4zX4GMRNF46-dOkN4IAXshdICIL6nf7T4JG2XWkwZ5k79oWPM0d-_xzTf0cKoCPbX5eg5xb-gvpl_wsDUOzvU72sg3z5xlxnkmHyzAo06AClj3EcIbZLSzb-2h2yw-Hl-2Z-AaWWieN9t0M7BM59MN2bd1tXK8S7kL-5QfPcPzE74v58vsLjv_Wha9kcSB7P1Fer3Zh4qBkc_ML8IofH1khWM2ho2YdIi8_EtyXy5JDKJzX7FGwcs_qAyjVgkKFW6Ug8vfNvc3Ekr1pXiAy4NFxuTX_UzY93TP-cFbu153VfY_-MA7s6u9dD-5q0qjDndK-66igHVEPBGYBbRw0qwPpmNhZaMidiHTwTojL4IGCb7oq6cqkxA1V8S4VKedlwTdj1fXU8zbvmzwvEMsCs7hMY8Qk5hnfFf1GVoKLjCdxGedxLvg2a4WIs6xMBcc-48hSThNKtQ1zaJZhE1y6ihPBs2yjsCFlw3dICE2ni4f7Mc32m6UK_WjWwfprIq2zHzROOkXVN9PRxe5XS_bO6CdcvtsPn7laN1qg82wWRx2cvPVfXd40L9Q68AO0WRdV_cdXLlj85V80L8bjmDgE2ZaJw7Wu10r8EwAA__8Zfz08">