<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/134367>134367</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
StackSafetyLocalAnalysis Assertion failed with ASAN
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
van-ema
</td>
</tr>
</table>
<pre>
While compiling rust standard library with optimizatons and asan I found a similar issue to https://github.com/llvm/llvm-project/issues/87923
```
rustc: /home/ubuntu/rust-misc/llvm-project/llvm/lib/Analysis/StackSafetyAnalysis.cpp:540: void {anonymous}::StackSafetyLocalAnalysis::analyzeAllUses(llvm::Value*, {anonymous}::UseInfo<llvm::GlobalValue>&, const llvm::StackLifetime&): Assertion `isa<Function>(Callee) || isa<GlobalAlias>(Callee)' failed.
error: could not compile `std` (lib)
```
to reproduce run any rust program with
```
RUSTFLAGS="-C opt-level=3 -Zsanitizer=address" cargo build --target x86_64-unknown-linux-gnu -Zbuild-std
```
issue can be reproduced at any opt level > 0
Rust version: 1.82
llvm: llvmorg-19.1.4
Debugging this I found that assertion `assert(isa<Function>(Callee) || isa<GlobalAlias>(Callee));` fails because of
`@getrandom = extern_weak global i8 at %13 = tail call noundef i64 @getrandom(ptr noundef nonnull %ptr46, i64 noundef %new_len45, i32 noundef 4) #25, !dbg !1007 in module std.33b5cc56158b1412-cgu.15`
My workaround for now is to not take `GlobalVariable` Callee(s)
```
const GlobalValue *Callee =
dyn_cast<GlobalValue>(CB.getCalledOperand()->stripPointerCasts());
if (!Callee || isa<GlobalIFunc>(Callee) || isa<GlobalVariable>(Callee)) {
US.addRange(I, UnknownRange, /*IsSafe=*/false);
break;
}
```
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJysVUtv4zYQ_jXjy0CGROrlgw-KvV4E2D6waVpgLwEljmU2NGmQVLzeX19Qkp3spgWKooYBW5r3N9_MCO9Vb4jWUNxBsV2IIRysW78Ik9BRLForL-s_DkoTdvZ4UlqZHt3gA_ogjBROolatE-6CZxUOaE9BHdU3EazxKIxE4YXBe9zbIT6gV0elhUPl_UAYLB5COHngDbAdsF2vwmFol509Attp_XL9SU7O_kldALYbLT2wXV2tGIe0mb9lOn_TJubXAW8Q2O5gjwRsN7SDCQOwXZQlR-W7956v8VQLbNcYoS9exUAPQXTPD2JP4XJ9u-xOJ-BNkacxzItVEqG6E8aay9EOHqptLIk3b0w_2U7om9dRKuLTN2q0fvSxpHrMYBT9LvRAwBpgm7_3_Ojp3uwt8M2r0UdtW6EnU_4BWBmtO2t8wFelMaVPak9BRWRKYKtYQ-M9uaCsQShT5QXwzW4wXXwz-qo3QmsiYCuEagPVBielKWajlfA_6AGrcC-UJrmEtCHnrIuBOjtoicaGmVAUA_ogoUwxQhDRX_3QUEibYNHRyVk5dIRuMCjMZSLiydneiePEvx8MPz8-_Lb71Hx8AL4FxpJNJGii6YU08C1HTL54YVRQ38gB3wopHXkPjGEnXG-xHZSWmCRBuJ4Cfq3LpzJPBvNs7NkkWpnha9KbAZMvo2YS6_g-g4nonTDY0msFEkUYK7CngGM6CPwDzrV-jmW9kPMj-A1my5pB2sw9HHtpXZ9kq2W2zCeTLbVD38fhDAflbwMXDjHO29ZOD8Dq_6nHK-B3sXWx0x5b6sTgCe1-hiFPewpOGGmPCHyL9DWQM09nEs_Yj25R1REMRGBFxkelIJTGTmiNJlZBe1Rljm99AatPwd3ExhozaB1dnILLR95Hk6scWGHo_KTJ5MUo4-wmy8dyGWejBFgm2z7-ZGlaoTJ4tHLQhD7IJedt0XVFmRV1m-UZS7p-WGbFjaM_XfBs3bNwI_Z7GxM8o_Jxz0XCB_E8sv06p06JVlNE7wpo7Wfyf08inD_TLL8ZcwTWTLYRuKgpL-apEz7c2va6DurN3bKnMOrLX04UoQRWA1slwD_44NTpV6tMILcRPvhJNHc4prRCFaGsgWXXmO9Zch8Z9S_YdKv-HaHivntTM-Ljw1JI-VmYPiJ0H9v0OE3g_C62bQesufdx1Y6jHu_JXmhPt_yxdSSe5__zJ27T75FeyDWXK74SC1pnVc6rsuBptjisRVfndVnuRVtRtU-l7FbVqihlXueSKKWFWrOUFWme5lmWFWm63Kd1K-uK7SWrC5nmkKd0FEov4_wuresX425YZzznZbXQoiXtxzPMmKHzdCKBsXiV3Xq8Ve3Qe8hTrXzwr26CCprW_3Rq3mz2aRtPi7J5aH5eDE6v__sBnhN_WbO_AgAA___IPpIp">