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

    <tr>
        <th>Summary</th>
        <td>
            [clang] Wrong LLVM IR code for 'static' function
        </td>
    </tr>

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

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

    <tr>
      <th>Reporter</th>
      <td>
          pbalasubramanian-amd
      </td>
    </tr>
</table>

<pre>
    Wrong LLVM IR code is generated for clang trunk.

>clang version 18.0.0 (https://github.com/llvm/llvm-project.git ac0dda894231e6281e7739aa0ea01a4e9697c747)
>Target: x86_64-unknown-linux-gnu


In the following test case, 'if' condition is failed and 'abort()' should not be called. But it is wrongly called in IR code.

**Compiler options used:** -O3 -emit-llvm -c -S


**Test case:**

```void abort(void);

struct s1 { double d; };
struct s2 { double d; };
union u { struct s1 x; struct s2 y; };

static double f(struct s1 *a, struct s2 *b)
//double f(struct s1 *a, struct s2 *b)
{
  a->d = 1.0;
  return b->d + 1.0;
}

int main()
{
  union u a;
  a.x.d = 0.0;
  if (f (&a.x, &a.y) != 2.0)
    abort ();
  return 0;
}
```

**LLVM IR:**

Here 'abort()' is wrongly called in IR code.

```define dso_local i32 @main() local_unnamed_addr #0 !dbg !10 {
  call void @llvm.dbg.value(metadata double 1.000000e+00, metadata !16, metadata !DIExpression()), !dbg !28
  tail call void @abort() #3, !dbg !29
  unreachable, !dbg !29
}
```

> [!NOTE]
> Without 'static' declaration, it is generating correct llvm IR code.
> ```
> define dso_local i32 @main() local_unnamed_addr #1 !dbg !38 {
>   call void @llvm.dbg.value(metadata double 1.000000e+00, metadata !43, metadata !DIExpression()), !dbg !48
>   ret i32 0, !dbg !49
> }
> ```

</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJysVllv4zYQ_jX0y8ACRco6HvwQrx10gW0XaBfdx2AkjmR2adKgqMT59wVly1fSK6ghSDA5x_d9Mzyw73VniZZssWKL9QyHsHV-ua_RYD_UHndoNdo57tSsdup1-d0728GXL7__DJ9_hcYpAt1DR5Y8BlLQOg-NQdtB8IP9kTC-Zvzh9Jab49Qz-V47C2mZ8IQDE-U2hH3P5AMTj0w8djpshzpp3I6JR2Oep898790f1ISk0wGw4UphWWVCppSLMqWikBUiJ-QpZlTlVdEUWcFEdU7_DX1HgckHOJT5U57NB_vDuhc7N9oOh3lnhxu84_uzhbAlaJ0x7kVHYtQHaLAnJj4BE4VumSigcVbpEFnpHlrUhhSgVdEAa-cDE2VEIgrot24wCqwLUBM0aAypBFZDAB2i80uU2LyeZkDbSelbMUV8PrndXhvy4PYxdw9DT2rUMT4w_yphTjsd5lE-mDcw_-0tw6PxtzOtyf3GJufH59lpBROj-Ceykqtr2z74oQnQp8CKFSg31IZAMbkCVqzPtpOV-FurwUZJh9HmEvcQzS4BXu-9pgwYdDOFbpkor5CJB4z1u0IhHupLr4x9-CHP4oQBAOdMbhQwuYY04WdwAJ7C4C3Up3mxupmPRK5YaBtgh9qeGug-ySQQXsXH5JAc8_KbvLqNa218MZFjcjh2cI7JKxMVMJFGH5HwcyIAOBYbTunfkHgP99Qrb5vstHG822I_kad3lsu_XxFTWkWttgSqd0_GNWhASwEs4xcVYRx_GqzFHaknVMoDEzJuRamqu_hJOVypHDPD2Pos43EtJarukmc0AzFR7iigwoBTq6UJH3_ExIrzKPLZIkbO70fWnzeHvac-booT8epYmwmOKCcoAbW5xXMlWGQh7zyrS6t4wmaLtaH3Tf6hgnID8ZgQ6S9fv23YYn0Z_q7D1g2xSYrjoouFU9QY9BhGUp9Om9vppIj7aOO8pybAuDXdFTSmusMgN_DhwqZXZGV5KWwM-v8WN5MfKG5WXsPxFEZi_M6outKmWP-lUDO1lKqSFc5omeZVXmUpL_lsu8wykiRaWmCj0jSXlKsy47zmFRbULqqZXgouZMpTngrJF2mCbcEVZotCFlnTqpplnHaoTTKK5Hw3030_0DIvC85nBmsy_XiTEGI86JkQ8VLhl-PhXQ9dHwXWfegvEYIOZrx-HD0Wa3jnihFvFTe91Q62iY01G7xZ_rfLAxOPI-qeiccR-J8BAAD__yosjB0">