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

    <tr>
        <th>Summary</th>
        <td>
            [LLVM 17.0.0 RC4][OpenMP][AMDGPU offload] Stack protector makes the linker crash 
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
      </td>
    </tr>

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

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

<pre>
    When invoking LLVM 17.0.0 RC4 with OpenMP/AMDGPU offload **and** the stack protector being active, the linker fails with:
```
Assertion `(i >= FTy->getNumParams() || FTy->getParamType(i) == Args[i]->getType()) && "Calling a function with a bad signature!"' failed.
```
Command line and full stack dump :
```
$ /usr/lib/llvm/17/bin/clang --rocm-device-lib-path=/usr/lib/amdgcn/bitcode -fopenmp -fopenmp-targets=amdgcn-amd-amdhsa -x c openmp_offload.c

clang-linker-wrapper: /var/tmp/portage/sys-devel/llvm-17.0.0_rc4/work/llvm/lib/IR/Instructions.cpp:652: void llvm::CallInst::init(llvm::FunctionType*, llvm::Value*, llvm::ArrayRef<llvm::Value*>, llvm::ArrayRef<llvm::OperandBundleDefT<llvm::Value*> >, const llvm::Twine&): Assertion `(i >= FTy->getNumParams() || FTy->getParamType(i) == Args[i]->getType()) && "Calling a function with a 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: /usr/lib/llvm/17/bin/clang-linker-wrapper --host-triple=x86_64-pc-linux-gnu --linker-path=/usr/bin/x86_64-pc-linux-gnu-ld.bfd -- -pie --hash-style=gnu --eh-frame-hdr -m elf_x86_64 -dynamic-linker /lib64/ld-linux-x86-64.so.2 -o a.out /usr/lib/gcc/x86_64-pc-linux-gnu/13/../../../../lib64/Scrt1.o /usr/lib/gcc/x86_64-pc-linux-gnu/13/../../../../lib64/crti.o /usr/lib/gcc/x86_64-pc-linux-gnu/13/crtbeginS.o -L/usr/lib/gcc/x86_64-pc-linux-gnu/13 -L/usr/lib/gcc/x86_64-pc-linux-gnu/13/../../../../lib64 -L/lib/../lib64 -L/usr/lib/../lib64 -L/usr/lib/gcc/x86_64-pc-linux-gnu/13/../../../../x86_64-pc-linux-gnu/lib -L/lib -L/usr/lib -z relro /tmp/openmp_offload-c3b2da.o -lomp -lomptarget -lomptarget.devicertl -L/usr/lib/llvm/17/lib64 -lgcc --as-needed -lgcc_s --no-as-needed -lpthread -lc -lgcc --as-needed -lgcc_s --no-as-needed /usr/lib/gcc/x86_64-pc-linux-gnu/13/crtendS.o /usr/lib/gcc/x86_64-pc-linux-gnu/13/../../../../lib64/crtn.o
1. Running pass 'CallGraph Pass Manager' on module 'ld-temp.o'.
2. Running pass 'Insert stack protectors' on function '@__omp_offloading_43_17b92b_main_l12_omp_outlined'
 #0 0x00007fd91f47eaee llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/usr/lib/llvm/17/bin/../lib64/libLLVM-17.so+0xf15aee)
 #1 0x00007fd91f435a8b llvm::sys::RunSignalHandlers() (/usr/lib/llvm/17/bin/../lib64/libLLVM-17.so+0xecca8b)
 #2 0x00007fd91f435c37 (/usr/lib/llvm/17/bin/../lib64/libLLVM-17.so+0xeccc37)
 #3 0x00007fd91dfd44a0 (/lib64/libc.so.6+0x3a4a0)
 #4 0x00007fd91e0258ec __pthread_kill_implementation /usr/src/debug/sys-libs/glibc-2.38-r1/glibc-2.38/nptl/pthread_kill.c:44:76
 #5 0x00007fd91dfd43f6 gsignal /usr/src/debug/sys-libs/glibc-2.38-r1/glibc-2.38/signal/../sysdeps/posix/raise.c:27:6
 #6 0x00007fd91dfbc8f5 abort /usr/src/debug/sys-libs/glibc-2.38-r1/glibc-2.38/stdlib/abort.c:81:7
 #7 0x00007fd91dfbc819 _nl_load_domain /usr/src/debug/sys-libs/glibc-2.38-r1/glibc-2.38/intl/loadmsgcat.c:1177:9
 #8 0x00007fd91dfccad6 (/lib64/libc.so.6+0x32ad6)
 #9 0x00007fd91f616428 llvm::CallInst::init(llvm::FunctionType*, llvm::Value*, llvm::ArrayRef<llvm::Value*>, llvm::ArrayRef<llvm::OperandBundleDefT<llvm::Value*>>, llvm::Twine const&) (/usr/lib/llvm/17/bin/../lib64/libLLVM-17.so+0x10ad428)
#10 0x00007fd92307822d (/usr/lib/llvm/17/bin/../lib64/libLLVM-17.so+0x4b0f22d)
#11 0x00007fd91fbef7f0 llvm::StackProtector::InsertStackProtectors() (/usr/lib/llvm/17/bin/../lib64/libLLVM-17.so+0x16867f0)
#12 0x00007fd91fbf0354 llvm::StackProtector::runOnFunction(llvm::Function&) (/usr/lib/llvm/17/bin/../lib64/libLLVM-17.so+0x1687354)
#13 0x00007fd91f63fa0b llvm::FPPassManager::runOnFunction(llvm::Function&) (/usr/lib/llvm/17/bin/../lib64/libLLVM-17.so+0x10d6a0b)
#14 0x00007fd920c9c862 (/usr/lib/llvm/17/bin/../lib64/libLLVM-17.so+0x2733862)
#15 0x00007fd91f63edca llvm::legacy::PassManagerImpl::run(llvm::Module&) (/usr/lib/llvm/17/bin/../lib64/libLLVM-17.so+0x10d5dca)
#16 0x00007fd920f65fbd (/usr/lib/llvm/17/bin/../lib64/libLLVM-17.so+0x29fcfbd)
#17 0x00007fd920f670b8 llvm::lto::backend(llvm::lto::Config const&, std::function<llvm::Expected<std::unique_ptr<llvm::CachedFileStream, std::default_delete<llvm::CachedFileStream>>> (unsigned int, llvm::Twine const&)>, unsigned int, llvm::Module&, llvm::ModuleSummaryIndex&) (/usr/lib/llvm/17/bin/../lib64/libLLVM-17.so+0x29fe0b8)
#18 0x00007fd920f67fb5 llvm::lto::LTO::runRegularLTO(std::function<llvm::Expected<std::unique_ptr<llvm::CachedFileStream, std::default_delete<llvm::CachedFileStream>>> (unsigned int, llvm::Twine const&)>) (/usr/lib/llvm/17/bin/../lib64/libLLVM-17.so+0x29fefb5)
#19 0x00007fd920f685fa llvm::lto::LTO::run(std::function<llvm::Expected<std::unique_ptr<llvm::CachedFileStream, std::default_delete<llvm::CachedFileStream>>> (unsigned int, llvm::Twine const&)>, std::function<llvm::Expected<std::function<llvm::Expected<std::unique_ptr<llvm::CachedFileStream, std::default_delete<llvm::CachedFileStream>>> (unsigned int, llvm::Twine const&)>> (unsigned int, llvm::StringRef, llvm::Twine const&)>) (/usr/lib/llvm/17/bin/../lib64/libLLVM-17.so+0x29ff5fa)
#20 0x0000557e27d8dc07 (/usr/lib/llvm/17/bin/clang-linker-wrapper+0x34c07)
#21 0x0000557e27d801a3 (/usr/lib/llvm/17/bin/clang-linker-wrapper+0x271a3)
#22 0x0000557e27d723eb (/usr/lib/llvm/17/bin/clang-linker-wrapper+0x193eb)
#23 0x0000557e27d67f29 (/usr/lib/llvm/17/bin/clang-linker-wrapper+0xef29)
#24 0x00007fd91dfbe31e __libc_start_call_main /usr/src/debug/sys-libs/glibc-2.38-r1/glibc-2.38/csu/../sysdeps/nptl/libc_start_call_main.h:74:3
#25 0x00007fd91dfbe3d9 call_init /usr/src/debug/sys-libs/glibc-2.38-r1/glibc-2.38/csu/../csu/libc-start.c:128:20
#26 0x00007fd91dfbe3d9 __libc_start_main /usr/src/debug/sys-libs/glibc-2.38-r1/glibc-2.38/csu/../csu/libc-start.c:347:5
#27 0x0000557e27d68e35 (/usr/lib/llvm/17/bin/clang-linker-wrapper+0xfe35)
 #0 0x00007fd91f47eaee llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/usr/lib/llvm/17/bin/../lib64/libLLVM-17.so+0xf15aee)
 #1 0x00007fd91f435a8b llvm::sys::RunSignalHandlers() (/usr/lib/llvm/17/bin/../lib64/libLLVM-17.so+0xecca8b)
 #2 0x00007fd91f435c37 (/usr/lib/llvm/17/bin/../lib64/libLLVM-17.so+0xeccc37)
 #3 0x00007fd91dfd44a0 (/lib64/libc.so.6+0x3a4a0)
 #4 0x00007fd91e0258ec __pthread_kill_implementation /usr/src/debug/sys-libs/glibc-2.38-r1/glibc-2.38/nptl/pthread_kill.c:44:76
 #5 0x00007fd91dfd43f6 gsignal /usr/src/debug/sys-libs/glibc-2.38-r1/glibc-2.38/signal/../sysdeps/posix/raise.c:27:6
 #6 0x00007fd91dfbc8f5 abort /usr/src/debug/sys-libs/glibc-2.38-r1/glibc-2.38/stdlib/abort.c:81:7
 #7 0x00007fd91dfbc819 _nl_load_domain /usr/src/debug/sys-libs/glibc-2.38-r1/glibc-2.38/intl/loadmsgcat.c:1177:9
 #8 0x00007fd91dfccad6 (/lib64/libc.so.6+0x32ad6)
 #9 0x00007fd91f616428 llvm::CallInst::init(llvm::FunctionType*, llvm::Value*, llvm::ArrayRef<llvm::Value*>, llvm::ArrayRef<llvm::OperandBundleDefT<llvm::Value*>>, llvm::Twine const&) (/usr/lib/llvm/17/bin/../lib64/libLLVM-17.so+0x10ad428)
#10 0x00007fd92307822d (/usr/lib/llvm/17/bin/../lib64/libLLVM-17.so+0x4b0f22d)
#11 0x00007fd91fbef7f0 llvm::StackProtector::InsertStackProtectors() (/usr/lib/llvm/17/bin/../lib64/libLLVM-17.so+0x16867f0)
#12 0x00007fd91fbf0354 llvm::StackProtector::runOnFunction(llvm::Function&) (/usr/lib/llvm/17/bin/../lib64/libLLVM-17.so+0x1687354)
#13 0x00007fd91f63fa0b llvm::FPPassManager::runOnFunction(llvm::Function&) (/usr/lib/llvm/17/bin/../lib64/libLLVM-17.so+0x10d6a0b)
#14 0x00007fd920c9c862 (/usr/lib/llvm/17/bin/../lib64/libLLVM-17.so+0x2733862)
#15 0x00007fd91f63edca llvm::legacy::PassManagerImpl::run(llvm::Module&) (/usr/lib/llvm/17/bin/../lib64/libLLVM-17.so+0x10d5dca)
#16 0x00007fd920f65fbd (/usr/lib/llvm/17/bin/../lib64/libLLVM-17.so+0x29fcfbd)
#17 0x00007fd920f670b8 llvm::lto::backend(llvm::lto::Config const&, std::function<llvm::Expected<std::unique_ptr<llvm::CachedFileStream, std::default_delete<llvm::CachedFileStream>>> (unsigned int, llvm::Twine const&)>, unsigned int, llvm::Module&, llvm::ModuleSummaryIndex&) (/usr/lib/llvm/17/bin/../lib64/libLLVM-17.so+0x29fe0b8)
#18 0x00007fd920f67fb5 llvm::lto::LTO::runRegularLTO(std::function<llvm::Expected<std::unique_ptr<llvm::CachedFileStream, std::default_delete<llvm::CachedFileStream>>> (unsigned int, llvm::Twine const&)>) (/usr/lib/llvm/17/bin/../lib64/libLLVM-17.so+0x29fefb5)
#19 0x00007fd920f685fa llvm::lto::LTO::run(std::function<llvm::Expected<std::unique_ptr<llvm::CachedFileStream, std::default_delete<llvm::CachedFileStream>>> (unsigned int, llvm::Twine const&)>, std::function<llvm::Expected<std::function<llvm::Expected<std::unique_ptr<llvm::CachedFileStream, std::default_delete<llvm::CachedFileStream>>> (unsigned int, llvm::Twine const&)>> (unsigned int, llvm::StringRef, llvm::Twine const&)>) (/usr/lib/llvm/17/bin/../lib64/libLLVM-17.so+0x29ff5fa)
#20 0x0000557e27d8dc07 (/usr/lib/llvm/17/bin/clang-linker-wrapper+0x34c07)
#21 0x0000557e27d801a3 (/usr/lib/llvm/17/bin/clang-linker-wrapper+0x271a3)
#22 0x0000557e27d723eb (/usr/lib/llvm/17/bin/clang-linker-wrapper+0x193eb)
#23 0x0000557e27d67f29 (/usr/lib/llvm/17/bin/clang-linker-wrapper+0xef29)
#24 0x00007fd91dfbe31e __libc_start_call_main /usr/src/debug/sys-libs/glibc-2.38-r1/glibc-2.38/csu/../sysdeps/nptl/libc_start_call_main.h:74:3
#25 0x00007fd91dfbe3d9 call_init /usr/src/debug/sys-libs/glibc-2.38-r1/glibc-2.38/csu/../csu/libc-start.c:128:20
#26 0x00007fd91dfbe3d9 __libc_start_main /usr/src/debug/sys-libs/glibc-2.38-r1/glibc-2.38/csu/../csu/libc-start.c:347:5
#27 0x0000557e27d68e35 (/usr/lib/llvm/17/bin/clang-linker-wrapper+0xfe35)
clang: error: unable to execute command: Aborted
```

When the stack protector is disabled (`-fno-stack-protector`) the compilation succeeds and the compiled program runs normally :
```
$ /usr/lib/llvm/17/bin/clang -fno-stack-protector --rocm-device-lib-path=/usr/lib/amdgcn/bitcode -fopenmp -fopenmp-targets=amdgcn-amd-amdhsa -x c openmp_offload.c
$ ./a.out 
number of devices: 1
ran on GPU 0: yes, 160 teams, limit of 256 threads
```

**openmp_offload.c** :
```
#include <stdio.h>
#include <omp.h>
int main(int argc, char const * argv[]) {
    int ndev;
    int nteams;
    int thread_lmt;
    int on_host;
 
    ndev = omp_get_num_devices();
    printf("number of devices: %d\n", ndev);
    for (int i = 0; i < omp_get_num_devices(); ++i) {
        #pragma omp target teams \
 device(i) \
                           map(from:on_host) map(from:nteams) \
                           map(from:thread_lmt)
        #pragma omp parallel
        #pragma omp master
        if (0 == omp_get_team_num()) {
            on_host = omp_is_initial_device();
 nteams = omp_get_num_teams();
            thread_lmt = omp_get_thread_limit();
        }
        printf("ran on GPU %d: %s, %d teams, "
               "limit of %d threads\n",
 i, on_host ? "no" : "yes", nteams, thread_lmt);
    }
    return 0;
}
```

</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzsG11v2zjy1zAvhAyJtD78kAfHifcKtNeg6e49ChRJybxQlI6k0uR-_YGUbEu2k3YbY7FX2GgNmRzODIfzxYmGGCMqxfk1iG9AfHtFOrtp9DVhtWJXRcNerv-14QoK9dQ8ClXBjx__-ASjdBbOQvhlNYffhN3Azy1Xn-4BWi8_3f52_ztsylI2hEGAlgAtiWL9A7QbDo0l9BG2urGc2kbDgju0hFrxxAFaeRgp1CPXsCRCGk8B4CUIb0G4BEk4_PM_l8ZwbUWjoBtCmYAA3wF8C9dfXwKA7ypu_9nV90ST2gCUAbSAIF2BdDUC8LNfX1ru1nsIfOtQLHVlQHwjQHw7QA5AAC08GEoASiBAaEWk9JuAZaeoZ8eLhcCCMOjkS2ynOUARQAig1G-Ms9nJLa2auiaKORlw6B7KTspBaqyrW_iaLACaQ4DWndEAraUo3Ld8qgFaRylA60IogNZUElXBINANrQPGnwTlgRRF0BIn5NuD9aRmFVV-saUN4zAom5arut09BJboilsD8G0PHJCauf8bQ2DwDCns4fJBJWZ0YNZ_e26C_rSDb5q0LdcAL902nohjw9YtQOu20ZZUHKC1eTGOay6HzQW9JuaazgFaf2v0437X_RY-fHFfyljd-ZMxM9q2AC-TGDlKT41g0C_AS4CX7iQdcP9LKGEByvbT6-F4e0VYOnXdT_5BZHc8utSavHzhJcCrE6D47gegP7dcE8VuOsUkv-Xl19dwwQEfbZSxI6xfvwnFvbou3J5_BaO5_3i3fLiDpitqYd2aroKaO0WBtoEba1vj9o7WAK0rYTddMaNNPVIOpzytbv7NqQVoLYzpuAFo7S1OKCo7xr0ropqYDSwIfbSaUD6Qf9iZ484awxn0n3vdVJrUkOiqq7lyprH8Qbs8sAQYBJvG2MBq0UoO8O1zluTJPGipA-yeg0p1MNguOrTgHu-JJYFks6JkMAhg0AruqBCzCYx98UR6pHwTlJrUPNgwDYMaclnmPS4YsBdFakEHwrDfVeIMULKBzHOWBMl8ZpoZgkEDyazp7KEQKkpPM-gkgwFaz2bHX1tKD1TbaNacFSfVVvwESqptwSuhHmYNDD7-qdV_Fv6tDfS4eiyHo2MKb839FPXT4FIUO44OCMHgv1Bzqb2oew8_DRIBxQVixMlTNi7YuO8-0IyfZ3380lYe72RsYcNmZUUpDAJiAsU546wfyQ0MAtVMhlu70Zy4J_rjy35CbbhiD-fXYTVreo8UzeCXTinnZFtiDAQodU73N03aDbx3I5-IIhXXzrs2CtYN6yR3YJIFltftrAEoHTweOkb2Qbk4cpjQmQHbzqsDlIJ5mOfN_oCFqvI5zqO0WKAir4lQuYxQD9FZl_kwt8oThgDhEIbPYRiGackWUTlPOeF8FN_Mi-kf7rVQ1vvmr85ZT2K3Jt_yxljNSe2D0AoKZfuQlH3XPU9kLEXhsmCXe5gGoJvwuYxiwrkLcTuWoynLOCZZcYrlL516cLFO_oO48K53Eff9XHFKSVZMuEKHXFGcnokUxemEFB6TYiWbz0k4kBrhoS5GJB4HJnMSTlDMxyh4iOKMU5jng3nmj0LKXNSt5C7OkkHZho0Y7ayI8aKrhrxRisJF-MpRDdAMZ4GOJr8BWqvWutRyTGFGAV7O5wAv02TPWny4O1wmsPJZi3wvEz2WrdDNi2G8NT4NNuIZoLUmwnDPFkpdJrvnKplyVdCsjCEpXFb0Xp4sG64EDpsnnkVOJnvi6RHxaAFzJXNn8TlrnJm_lw2h_Pk4jLWpKOk5iaLUCWKkOdmUF0oJS95WPkRYMlG-xcRUkiiZo-yXuSkcofNXhP7i0F8UzuEVopCweZ_6DzdUHI1dOcJhmiHEzkFrXoQlQmxCa-qDC16mZTjasw8U99u41Y_1MW06c0aXHCVZkpbhhMupTy7KEMfz73CpO_VZbVXspN6d8RCTLMXxfMIyntoGLkk4Dm7re5ddbJOLv57jkCUkLCYcj0MJCumCZgk6By2UYpwlaEIrPpAOZ5SMpCN5RejLkLDs5fShbuVOVhMJffJ52VnlEzNKJjwnE_mUSVwWZzFLtChpWUzNMj2glYbF2LNK2_QP7tLNFZvIYje5alQpqpHHWkFjWT-3TT0n3u_uueXUcgbwagfYKfGfjuet1RPQFaEbztZC8ochXxwhZ7wknbQ545Jb_va63tHiOyfJTvlCK-vTzjd97-CdX18x0ojj4Yeurol--aAYfz6f0qBFycNi6suzw4Msi_jUQX78-nmn2V941Umi3RDKfq0TO5ucyyKeyHlxIOcsLsn35PzLSfdn7PtX2Pj3Fj1YLVTlMsG_UEXLuJzED7RN6-I45ShlGaPhj10sT_4JwGfkcxqmExrRAY0wIvh9NFAaETyhgaY0UoR58T4a0QLzSS6C8JRGkpY_eC6v0uClr67vScwP7mIcRxzmubvz5MYSbXNKpMzPcSWjpju-qg736FP0Zht3bXT3abznNz7ily2gX-JuVmdksX_0k56v_v6IMneZDvf8HF6kPT8T-Z1ZdCf5wnN3rY33bKUHmpNxHL9Pc0qO48m191Jqu5TaLqW2S6ntUmq7lNoupbZLqe1SaruU2i6ltkup7e91YpdS26XUdim1XUptl1LbpdT2f1lq81AALyHX2l81YKdIITm0DeTPnHbWeRTfCeBf2S4a7fzoyff-_bfv0jjVXyEMZMI43H2WmYRBqZrAgwU7MP8m-KJ_47mpWyH7Go_pKOWcGf9a9H6SM0fAv-asO2WganRNpHw5S2_CCe7-Dg0LaA6d9gyvMvsx1dUF17ApYc-Yf9U76uc0UbBR8Lf732Hohl-4cVEjSkJouX-xfgWlqIV1y1GcwL4OZt444r6J5oi9vrXmdcnj7evsfRQWjXMLd6dmm7odzQlloTM9gDL3SHRFfXPBhuihw8DRJbp66luH-j6Bm6GsA6GLn1Ax_gTw4WAvgcPhoRIoa3s01ah805jR-H7aUYAA38KmbvOK21x1db49j74iMsbWaqFs6SfQyfMDKGYgXinfdbDqN3CAo2w0HKQiPOkQ4Bv_uHqTCwjQDUA34khS7gMQbjWpauJQwOFtZy8oCOLVANtj3PVc7MZf_9SkBSgrdeOSla0Y0WI6PhzIz6AcHdqupHdyRy3RREou34KpibFcTyFE6WQdbhtMtvJ1HDshj1pLDiXqPsOOdwoijA9zgsh8J8vJ8apB5AcKNQjoSJ22n70YJku3w87QX1kN0tvpwFhDR17E62Wvn955uN97V-K09dS5AYR2XqZfMbiZnYYPy4TDspfW2q1UDUAI9kSRd2C9SeyoTg9_vLPJrjS3nVbeSga3s509cFZX7BqzBV6QK34dJYs5TrMwTK8214sIJSRlRRKnaZFiSlkYZZxEPCpiFIbRlbhGIcLhIgpRiDFKZhgvChQVEaIooiSJwDzkNRFy5uLOrNHVle_5uU7iRRRdSVJwabY9kPraAQVFVxkwD6Uw1uyXWWGl75Y86IR0HjC-GToh_fO0GRLEt_DhIDbX5JGbccdj32101Wl5_fM9TH5L_wsAAP__xUABww">