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

    <tr>
        <th>Summary</th>
        <td>
            [clang] Clang generate incompatible types in DWARF expressions.
        </td>
    </tr>

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

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

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

<pre>
    Given the following code:
#include "stdint.h"
int a, b = 9067;
volatile uint16_t *c = (volatile uint16_t*)&b;
int *d = &a;
int func_1() {
  uint16_t e[7][2][8];
 uint32_t f = 37455;
  int32_t l_146;
  a = 0;
  l_146 = *c * f;
 *d = e[3][1][5];
  return l_146;
}
int main() { func_1(); return 0; }

Compiled with clang 15.0.7 and -O1 -g.

For l_146, the following DWARF is generated.

(gdb) info addr l_146
Symbol "l_146" is multi-location:
  Range 0x555555554674-0x55555555467b: a complex DWARF expression:
     0: DW_OP_breg0 0 [$rax]
     2: DW_OP_constu 65535
     6: DW_OP_and
     7: DW_OP_convert<DW_ATE_unsigned_16 [0x27]>
    12: DW_OP_convert<DW_ATE_unsigned_32 [0x2b]>
    17: DW_OP_constu 37455
 21: DW_OP_mul
    22: DW_OP_stack_value

However, this DWARF expression is actually invalid, as `DW_OP_mul` expects two operands to have either the same type or generic type as stated in the standard.

> Operations other than DW_OP_const_type push a value with the generic type

while `DW_OP_convert` converts type to unsigned, but explicit unsigned is not compatible with generic (despite it's a really werid standard......)...
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJyMVctyqzgQ_Rp502UKJF5eeOHE8cwuU3emKktKoDbojpBcSNjJ309JYIOTzbCwDKf79ENHLW6tbDXinmQvJDtu-Og6M-x_33T3tamN-Nr_Ia-owXUIZ6OUuUndQmMEEnYg8ZHEB0KZ1I0aBQKh1DohtYs6QukES-2AE_oKNRB2hF2cF4S9TNjVKO6kQhildkleOSD00AQ7QssfKKEHQneE5vWDwbMTehCzT86fkPOomyohtCR0B6SYEVjCIcleCpIdSfZCp6X0y50jGDJaOTiHAKxIs2xB4Y6qKknz1XcerOPVl2AxJ-krpAc4L_CjAp8PmxJJpiV7ygcGdOOgvwUkxXGpuedSLxU_tYCwlzuBzw0eftPvq-kvUqGAm3QdNIrrFpIsiqMCuBawfU9g20Zrj5MZ5lTo6zeJHD8Ov04gLbSoceAOxZMnoWUrap-k1GcDXIg7U4D__upro7yeZnrqqfpROblVpuFOGv0QIMAvrluE-DObnzQv0u3Ta03YATg0pr8o_Jyzw8_LgNY-cwH45hzg-FG9_1XVA7YxxOCPB00H_um3Y7Gki2VjtHUj5FnGspVFvlhwLVZA8eR6xcER9nr8qA7_vFWjDqdSVEnuI8efNIiUvS3-Cf0__ozO_vUP_-JH6pO6JwuaLHA_qsWPruJax5t_qytXI6739k9zwysOkyak_dFsv5W8cSNX6gukvnIlhTfmFkgeLzHz2Dth4yy4mwFzwYFrYcEZ6PgVAaXrcAi6s7xHcF8XBDNMipPN9M4tWOflB3KaYtZxLfjwTY7sDd49vxeWBTMTc73uUBUIL6PtgEOoejopnnUdc0186_wAe5R136k8hvmvndJ0Bu6bFmbl6HztSjbSPQDfN21cEDF3slZz_HtsQkuB9iIdgnSEFhY4DBi6fMNBiqX08BC6i6JoI_ZM7NiOb3Cf5GXCdmVaFptuX5RIcxQxY01ZnJGxhifn7Jyz3S6t63OykXsaUxanCUuyuIyLqI7TJKkFY9lZNCUmJI2x51JFSl37yAztRlo74j6nSVJuFK9R2XDvUKrxBgH010Z23Ax777Otx9aSNFbSOruwOOlUuLDCiCLZEV7DrLpPGpB61SLfXus3_7sMbbQZB7XvnLtYf_7pidBTK1031lFjekJPPuK8bC-D-Y2NI_QU8rSEnkId_wUAAP__fO8mbQ">