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

    <tr>
        <th>Summary</th>
        <td>
            The inconsistency in debug information produced with "-g -O2", "-g -O1", and "-g -O0".
        </td>
    </tr>

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

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

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

<pre>
    The value of the structure variable **g_7** at line 36 varies depending on the compilation flags "-g -O0", "-g -O1", "-g -O2", and "-g O3".

In LLVM 18.1.8, binaries compiled with "-g -O0" and "-g -O1" both produce the same value for g_7 (`(S0) (f0 = 1901962039155879305, f1 = 0, f2 = 4799, f3 = -117, f4 = 4, f5 = 1)`), whereas this value differs from what are produced with "-g -O2" and "-g -O3" (`(S0) (f0 = 1, f1 = 3, f2 = -12892, f3 = 19, f4 = 1, f5 = 2)`). In contrast, in LLVM 17.0.6, binaries compiled with "-g -O1", "-g -O2", and "-g -O3" yield the same value for g_7 (`(S0) (f0 = 1, f1 = 3, f2 = -12892, f3 = 19, f4 = 1, f5 = 2)`), which is different from the value obtained with "-g -O0" (`(S0) (f0 = 1901962039155879305, f1 = 0, f2 = 4799, f3 = -117, f4 = 4, f5 = 1)`).

Reproducing them in LLVM18.1.8 
```
clang -g -O0 case.c -o case_O0.out
clang -g -O1 case.c -o case_O1.out
clang -g -O2 case.c -o case_O2.out
clang -g -O3 case.c -o case_O3.out


lldb case_O0.out
b case.c:36
r
[...]
   33   {
   34 func_1();
   35       csmith_sink_ = g_3;
-> 36       csmith_sink_ = g_5;
   37       csmith_sink_ = g_7.f0;
   38       csmith_sink_ = g_7.f1;
   39       csmith_sink_ = g_7.f2;
(lldb) p g_7
(S0)  (f0 = 1901962039155879305, f1 = 0, f2 = 4799, f3 = -117, f4 = 4, f5 = 1)

.
.
.

lldb case_O3.out
b case.c:36
r
[...]
   33   {
   34       func_1();
   35 csmith_sink_ = g_3;
-> 36       csmith_sink_ = g_5;
   37 csmith_sink_ = g_7.f0;
   38       csmith_sink_ = g_7.f1;
   39 csmith_sink_ = g_7.f2;
(lldb) p g_7
(S0)  (f0 = 1, f1 = 3, f2 = -12892, f3 = 19, f4 = 1, f5 = 2)

```

```
cat case.c

#include "stdint.h"

volatile uint64_t csmith_sink_ = 0;

#pragma pack(push)
#pragma pack(1)
struct S0 {
   uint64_t  f0;
 unsigned f1 : 8;
   volatile signed f2 : 28;
   volatile signed f3 : 14;
   int32_t  f4;
   volatile uint64_t  f5;
};
#pragma pack(pop)

static int32_t g_3 = 0x5ED06576L;
static uint16_t g_5 = 8UL;
static struct S0 g_6[1][7] = {{{0x1A652065C829ED89LL,0,4799,-117,4L,1UL},{0x1A652065C829ED89LL,0,4799,-117,4L,1UL},{0x1A652065C829ED89LL,0,4799,-117,4L,1UL},{0x1A652065C829ED89LL,0,4799,-117,4L,1UL},{0x1A652065C829ED89LL,0,4799,-117,4L,1UL},{0x1A652065C829ED89LL,0,4799,-117,4L,1UL},{0x1A652065C829ED89LL,0,4799,-117,4L,1UL}}};
static struct S0 g_7 = {1UL,3,-12892,19,1L,2UL};

static uint8_t func_1(void)

    int32_t *l_2 = &g_3;
    uint16_t *l_4 = &g_5;
    (*l_2) |= 1L;
    (*l_2) = (((*l_4) = g_3) && ((*l_2) , ((void*)0 != &g_3)));
    g_7 = g_6[0][6];
    return (*l_2);
}

int main (int argc, char* argv[])
{
 func_1();
    csmith_sink_ = g_3;
    csmith_sink_ = g_5;
 csmith_sink_ = g_7.f0;
    csmith_sink_ = g_7.f1;
    csmith_sink_ = g_7.f2;
    csmith_sink_ = g_7.f3;
    csmith_sink_ = g_7.f4;
 csmith_sink_ = g_7.f5;
    return 0;
}
```


</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzsWE2P4ygT_jXkUooF5e9DDunOtDRSvxrpnZ29RsTGNjsOjmzcPfPvV4DjkI9Oz0q9u5eNrJiPh6KqnqIA82GQtRJiReIHEm8WfNRN169EOe67Ti92Xflz9Vsj4IW3o4CuAt0IGHQ_FnrsTXMv-a4VQHBNcF1vU1cArqGVSkCYWIwYoBQHoUqpauiUlVJ0-4NsuZadgqrl9QAEcVnD8gsliAQf5zq7qONU56qc2r6EBDEgdEPo2v1_VvD8_Pv_gGUBCzKD3knlNHETixJepW7OJvUkullh1-kGDn1XjoVwtvP90RtV10O9TYFgRhJKMPtKCeamWlEg4QZYTlmeIA1zFsdZmoc0NopUzPZSW0ZbjtI8t9XQVpeMpbYauV5bjp1MgrmdzeJfG9ELPoBu5DBpVcqqEv0AVd_t4bXhGngvjiZc2IyXNhs33rHH0z70tF8yzHL09Ge5pz3ztMdZ-wA-Kyg6pXs-aIOQR8LSgAbJLxD2flRM9vyUoi3_OnkfaKyjShYNyGEiSCjtKNKn1bXTXKqbcfkvhdjZivq_cEFklrBuxP7ImFthMEETOj22WrRc1eDsgIIPIihg2dnS9gsNulFf4dgVjt3E4RUOb-LCK1x4wvn_bVvurjXbTcNJuA4T19RPo-KHIAhIvHFVAAhDACDpw6khgmpUxZYZ_jAnodcVg_sVw17qZjtI9X1r3V9vwxm4JOEnk0PfhMZnMtO3gWlQ0TNsdhfLzrD5XSzOWIKZ8aIJ0YPpm1td2P4TcesRGtx6XXEdfhzX7neH8Y_l-uNZ_kB-PyZ7-ov0PLPcTjdcHyn0QRhKVbRjaY4pOOhSKh00ZrfwQC-dOYq0AkapdBJt9bUzTp6d5R56Xu85HHjxnWB2GIfmpPVl7yk83fkJvtKzAJonBp_DUdkDWumcuYbMp2xW-ohBi8H7oNCCWOSDpNIh2rmjm2M95U5hSNKNFxqXzugOFwwOmmtZzFPVWxcB9Ef8aUOTOE2eZ2kT1MzKEot1QZF9u8KcnFlvExI_MLNK44eUxBs7xLjYPvQHWycx0iR-zDD_tMny52eCjybXTDlmyi2RaWbfno15-PjfyL9rpHvu0JkeCTQD8DG0Yqb8YfMGM83opJ2vTS-Asq0-5eSXTpansEwfYA71OS4Jrtuty1YEEz9Dw7RKbUhaWHSCnWVne2CzcuxxLX202e35DsSKyY6PEX1sNhrYM19CMAEP4QbaE3A2m7YmmFMgyDz9zQE0v9iNZve6VUPdqknMy0f1Qo-9OtP1bPl7LpdKw55LCzZl3teF0a5oeG-vhH394m6ZPgHTVG9tmve3zPc3yl_YI39lb3x3Z3wb8662aeDn3NuA-BYp9AYTtzbJRbkKyzzM-UKsWIpIoyjFfNGskhjzhBU7llIhIl4KRhOOoRCsTHesyBZyhRQjmmJKWRRjHpQlljSrBK2Kiod5SSIq9ly2Qdu-7IOurxdyGEaxYpRmUbpo-U60g_22gKjEK9hes_PGm0W_MoOWu7EeSERbOejhJEZL3Qr75UGqolODHLRQxU9z5yjFbqxBqqrr9-7rwduX21tfEfz7oblcBYuxb1eN1oeBhGuCTwSfaqmbcRcU3Z7gk1Fqei0PffeHKDTBJ2vKQPBpsvVlhX8GAAD__99_eXo">