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

    <tr>
        <th>Summary</th>
        <td>
            LLDB pretty printer for `std::optional` doesn't print contained value with libstdc++
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            lldb,
            libstdc++
      </td>
    </tr>

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

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

<pre>
    For this reproducer:
```c++
#include <cassert>
#include <optional>

int main() {
  std::optional<int> V = 12;
  assert(false);
  return 0;
}
```

compiled with `clang++ ./vec.cpp -std=c++17 -g -stdlib=libstdc++` correctly prints the summray, but fails to actually print the contained value:
```console
~ ยป lldb ./a.out -o run -o 'up 5' -o 'p V'  -o q
(lldb) target create "./a.out"
Current executable set to '/home/tbaeder/a.out' (x86_64).
(lldb) run
a.out: ./vec.cpp:6: int main(): Assertion `false' failed.
Process 68311 stopped
* thread #1, name = 'a.out', stop reason = signal SIGABRT
    frame #0: 0x00007ffff7aafe5c libc.so.6`__pthread_kill_implementation + 268
libc.so.6`__pthread_kill_implementation:
->  0x7ffff7aafe5c <+268>: movl   %eax, %ebp
    0x7ffff7aafe5e <+270>: negl   %ebp
    0x7ffff7aafe60 <+272>: cmpl   $0xfffff000, %eax         ; imm = 0xFFFFF000
    0x7ffff7aafe65 <+277>: movl   $0x0, %eax
Process 68311 launched: '/home/tbaeder/a.out' (x86_64)
(lldb) up 5
frame #5: 0x00000000004011ab a.out`main at vec.cpp:6:3
   3    
   4    int main() {
   5      std::optional<int> V = 12;
-> 6           assert(false);
   7      return 0;
   8    }
(lldb) p V
(std::optional<int>) $0 =  Has Value=true  {
  Value = {}
}
(lldb) q
```

This is on Fedora linux with LLDB 15.0.7, and libstdc++ 12.2.1, so I don't think there's anything special about this setup.

The value is printed correctly when libc++ is being used.

</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJyUVk1v2zgT_jX0ZRCBJvXlgw92XL9vgR4Wu0WvAUWNbG4pUiWp1Lnsb1-Qkuy4SYutYEThcD45D5-R8F6dDOKWFHtSHFZiDGfrtqER2KJzq8a2L9ujdRDOyoPDwdl2lOgI3xF6IHRHSjr9JGH7-JukjCsj9dgiEP4ohffoAuEf3tu1Q1DWCH3bTn-VCdALZQirCdsAqWbXAD60MTzf3SwflYnu4QsQfoA1I_yqPcdmdSe0R8I2r_YchtEZoFcRqQ4_lPU6JWn7QWls4bsKZ4g1a2FOU92QEXZ8RpnJYYCHlOJhPpJ1BQ-nJNOqIfygVeNDu5xXSUFa51AG_QKDUyZ4CGcEP_a9Ey-EPUIzBuiE0h6CBSHDKPSim1SlNUEogy08Cz3iO72xxluNk_QfII-M7PegdduktEVmxwAPFtxo4ouwahygIKyaVwN8iYu4-ra0sI7msTNBuBMGkA5FQCCMXV0Sxibtx9E5NAHwgnIMotEIHkOshrCKsOPZ9kjYcUbdzbwCwupLXT6VOWGb7E1oN5pJNunz3esuEL4ro-geSFGyS5BQ1sQezrCo0gljOwf5w1mJ3kNZ8_UafLDDgO0Sfwfh7FC0QBhfxwYZ0WNCHmHVknqURztwKHwMxQ8Q75rQ8NfH_-32f35eUAjQueSAcRrToxdKKa26rusqITosJGjVyMzbrCQlfXoapvBPX5XWT6ofNPZogpgqYntgZT35_s9mV8g8xFsE9HIXnfBHwvbRK_8QE-ztswYAwgoUl1hn_K8ZbvXc2eNiX9HZ3uBpsf-ZVUmvVmy2kv0wWeX0EvU6SukSXFxgeQjfg-r7dN70coxPVHw_SnGNUv1YW04vr9y_hwotRiPPGMnot3D8BsbpsiXhFQjFDQjTk9P1WjQwOSxpBDSIAPdY59cyeayBbq7rfFr_nFShmDR-j14TXMrF8ldUC9Wi9YZ0AaCe073S7-1wIvcssp-nlqphOU0Jwv-Fhy8TFR6CGxFeV5o2ptta7W8R3wn97Rez4HOch8qDNXDE1joBWpnxMo2GT58Oe1gXGc0SDQjTwh3pw5plLEvU4S18hNYawqpI5sp8jZTuIiN5EOYlik7gB5RKaBBNZOo0iz2GccjuU8JpAMS80nTA9tVs-X5Gk4hkzkF5aDA6H_2V9lbtlrcbvhEr3K7LqqzqTc6r1XkrN6zKGd_IjnZ10VZlXstaiIY1XV5XtVypLaOMU7be0LKgvMo2nazqdUGLvKZYFZzkFHuhdKb1c59Zd1op70fclrQu6pUWDWqfvkIYm86fEfYYF3fTkrH4leK20clDM548yalWPvib26CCxm1qweAwhHlSooPOusj4b1FUUmgt-qkJ01z9YaZOfb3LZTU6vT2HMPjojR0JO55UOI9NJm1P2DEmNL8eBmf_RhkIO6aiPWHHVPe_AQAA__92gLa_">