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

    <tr>
        <th>Summary</th>
        <td>
            Dynamic initializers not optimized away when using #pragma init_seg
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            platform:windows,
            clang-cl,
            missed-optimization
      </td>
    </tr>

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

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

<pre>
    Consider:

```
$ cat /tmp/a.cc
#pragma init_seg(lib)

struct S {
  S(int x) : x_(x) {}
  int x_;
};

S s{42};

$ clang -target i686-pc-win32 -O2 -S -emit-llvm -o - /tmp/a.cc
```

With the pragma commented out, Clang will optimize the initialization of `s`:

```
@"?s@@3US@@A" = dso_local local_unnamed_addr global %struct.S { i32 42 }, align 4
```

but with the pragma intact, it gets initialized dynamically:

```
@"?s@@3US@@A" = dso_local local_unnamed_addr global %struct.S zeroinitializer, align 4
@__cxx_init_fn_ptr = private constant ptr @"??__Es@@YAXXZ", section ".CRT$XCL"
@llvm.used = appending global [1 x ptr] [ptr @__cxx_init_fn_ptr], section "llvm.metadata"

; Function Attrs: mustprogress nofree norecurse nosync nounwind willreturn writeonly
define internal void @"??__Es@@YAXXZ"() #0 {
entry:
  store i32 42, ptr @"?s@@3US@@A", align 4, !tbaa !3
  ret void
}
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJy9VE1v4zYQ_TXSZSBD1lesgw6JvTkVKFC3aLoXgRJpmQuKFMhRbOfXd0jL62Sz2N4KSPwacua9eUN2hl-ardFOcmGj_DFKd1F6a6t0-a7TrICeIUTZM44TtWzV9zdTPlk2jAykltg6MUTZRskuyur3Dh3auUfYQ_TwdF0B2NNOqRHOtBcIAJxbWrnOaNfD7rYxbGqjfDnpLd_Hod2DoxNF9tkSkCumB0iQ2UEgyGpTJVOfnKTOM0h-p38PiRglJkq9jpAYSH5K9IeUhPZviUfAo4AlB70ZR6FRcDAzRtkWtiH2SSoFZkI5yjcR9vtkSabkG0NpNJgDkGfnvf9aiCKNsizKn50fFWn-1_46IKIZ5XAH3JlWmZ4pCG07a81GwVvGuYVBmY4sUVZe9VgFPUBSIgo6TtkjyIRq0FD8gnU3I1H6yJw0Yn2gLBEoz-5OkbLBL4RCEh51-b8Jvglr7lDsZ4ZF2rb9-dyG-j3odkIbAk1WvjIUpKl2yKgEg-GGj762_bKg_Ofx5eWrXyfnTvRBUpqutn_8SQX4sv3N227RfJWtZkdZ8VHYNAnNJRXJDXv5tIazDxaVOz9bwn4CSeYf4gXPo0DGGbJ7yGubP8HzrK97HxGt8zdunB1O1gxWOAfaHKwQ1FnRz9b5kbvonrpZ023hoYytwNlqOFmJwmiSM3jn4iC1r2oUVhOJVyP5f-ZqE256lqf3R4Hujr1XCIBDArPUpyf7QYKflch7eWkYZWvsGPN9fvNJDAK--2PysRBj0ayrsq7Wm01dxrzJeZ3XLEaJSjS7ayG_K27rE4ffbzcHdmIXOB2Fhtl5XT-_kPFsVXNEnLwG9MjQN9B1mrsVvR808TouXULqfBP-Yj1L52bhaFBWdZbFR0K5KdNKsMO67vqqKEUn-KFM05rVhy6vNrFinVCuoRqizEyK4cHYkUJ6Mc3JLemiLryQSa_uKyNFEzxZWIVHyhvLXSybLM2ydJMW63xdlMWqqvuirvKC86Kvav5ASoiRSbUK5WjsENsmUOnmwUumpEN3NzLnSC4hAkzyz2Y8Gtu8jYaLMQ6km8D4X-Dk-vc">