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

    <tr>
        <th>Summary</th>
        <td>
            Clang emits the same debuginfo for `long double` and `__float128` on x86-64 and PowerPC despite them being different types
        </td>
    </tr>

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

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

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

<pre>
    On both non-Windows x86-64 (which uses `x86_fp80` as `long double`) and PowerPC (which uses `ppc_fp80` as `long double`), Clang emits `long double` and `__float128` with exactly the same debuginfo: a `DW_AT_encoding` of `DW_ATE_float` and a `DW_AT_byte_size` of `0x10`. This means debuggers like LLDB can't tell the difference: currently LLDB will presume the float type that is the same size as `long double` is `long double`, meaning `__float128` values get displayed as nonsense.

This can be seen by debugging this C program on an affected platform:

```c
void breakpoint(long double ld, __float128 f128) {}

int main() {
        breakpoint(1.0, 2.0);
}
```

The `long double` will be displayed correctly in LLDB, whereas the `__float128` will not. This problem also affects debuginfo emitted by GCC and `rustc` (while `rustc` doesn't support `long double`, its `f128` type will still get misinterpreted as `long double` by the debugger).

While searching for previous discussion, I found [this thread](https://lists.dwarfstd.org/pipermail/dwarf-discuss/2022-January/002103.html) from January 2022 on the dwarf-discuss mailing list that appeared to be leaning towards adding new `DW_ATE` codes, but I haven't been able to find any further discussion since.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJyMVcGO4jgQ_RpzKYGMAyQccuiGZTWrkXYOI_UROXEl8Y5jR7YDzX79qhxoaDXSjtSiFbv8XO_5VZUMQbcWsWTrV7bez-QYO-fLCjF6xDCrnLqUf1uoXOzAOjt_01a5c4D3YjPfrICJ4tzpuoMxYAC24e_F5tgMBWcbDjKtGGdbUG6sDLINZ2IL0ir44c7of-y-AgxD_X8ATOxgZ6RtAXsdn8SkG9iGH4-NcTIuRUGLZx07wHdZR3OB2CEE2SMorMZW28ax7AUkndq_HV9-HtHWTmnb0knXfKz_MUHeLnk4UF0iHoP-F-8n-PuSeCzgZ6cD9ChtmO5r0Qcw-hfC9-_7V6ilZSKPENGYlJnSTYMebY2UVT16j5ayTtFnbQwMHsPYY4pOGUG8DPQpI-hwp0cJPdWRop6Iu0tpatt-1e8kzYgBWoygdBiMvKAiaOtsQBtwwfie8ZfpNzGupYUKISBaqC5X6oQdaXcHg3etlz04C9KCbBqsIyoYjIyN8z3LXh4hKb_0V0_fJ6cVVB7lr8FpG5koHsiAUUTmzgAaoiG2wPJXlu8fgbWN0Ett2T3gurv9BL9cJIHEIpkwu0V9gN3y-6wDPtE-PWGFDzrWzntMztQ2PTPddO7Qo5xe84mdjQHr4tVdg3eVwR6kCe4qZbibO1UKaVtd4M_d7lYgfgyxJrCpDA1-WlQOw2TMMA6D8_G5Ya4l2FzzSj5MyYVIv-SXXgdtI_rBY5xM81WTairKW30wsf1kqLeUXkDp644s1DhPRXDSbgykYz2GoJ2lhL5B40YiuH5NRoudR6nYes9E0cU4BDKWODBxMDrEsFBn6ZsQ1cL5lonDoAf0vdSGiUPaml_hmTgILsT8L2lH6S9MHDgXS54tutgbck7jXQ_XXaBQcnYi9QhDXjNEgW6fKlYOA0qPCqIjW5hrCUZ3ll4FkIo6EVg83_sQSVY7hYEYV2OEb9DJE07vVVHFSSqD6KDR1KjsBZrRxw79g1oQtK1xMVNlprbZVs6wXOaCr1e8yJazrsw3hVhvVJ43q7ypVtt83YiMZyvMxFIV2WamS8HFiud8u9xwLraLrFA5FkuRF1JWuWrYiiPxXRhz6kngmQ5hxHJbLPPtzMgKTUjDR4iaWjoTguaQLyl-Xo1tYCs-PdMHQtTRYPk4Ab528-SP3xwMzt7G2eNkUhgGHVOH7aFCeoBbW56abZiN3pSfDdXq2I3VonY9ucucbv_mg3f_YB2ZOCT-5KVJglMp_gsAAP__xftqfg">