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

    <tr>
        <th>Summary</th>
        <td>
            [DirectX] Root signature's `DescriptorTableView` has undefined behaviour for version 1.0 root signatures.
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            backend:DirectX
      </td>
    </tr>

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

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

<pre>
    We currently have the "DescriptorTableView" load a `DirectX::DescriptorTable` with a type like so:
```c++
struct DescriptorTable {
  uint32_t NumRanges;
  uint32_t RangesOffset;
 ViewArray<dxbc::RTS0::v2::DescriptorRange> Ranges;
};
```

However, we set up the ranges view like so:
```c++
    size_t RangeSize = sizeof(dxbc::RTS0::v1::DescriptorRange);
    if (Version > 1)
 RangeSize = sizeof(dxbc::RTS0::v2::DescriptorRange);

 Table.Ranges.Stride = RangeSize;
    Table.Ranges.Data =
 ParamData.substr(2 * sizeof(uint32_t), Table.NumRanges * RangeSize);
```

This invokes undefined behaviour. It is not legal to store a `dxbc::RTS0::v1::DescriptorRange` in an object of type `dxbc::RTS0::v2::DescriptorRange` (the inheritance is in the other direction. Furthermore, `dxbc::RTS0::v2::DescriptorRange` will not fit in `sizeof(dxbc::RTS0::v1::DescriptorRange)`, and the last field (currently `Flags`) will overlap with the next object.

Note: this may become moot depending on the fix to #145438, as that issue implies that we won't be able to have an inheritance relationship between the versions of DescriptorRange at all.
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJycVVFv4zYM_jXKC3GGIseO8-CHXLNge7kNbXHb2yDbdKxVlgyJttv79YPkpFmDFkMPMGBBosiP30eR0nt1Mogly76y7LCSI3XWlZU9GXSryjYv5Z8I9egcGtIv0MkJgToEJsQBfe3UQNY9ykrjd4UzEwK0lQ1IYDk_KIc1_cXSPUv3N9Ys5zAr6kACvQwIWj0heBts-Z7lfPlqJr6Gj-89ubEmuPECbBsOAUZlKBV_E3wb-3tpTuhZenOybP_eth7pfBgg752TLyy9a56rekF6__jAl9UkbrFHJyz9Bf4bhG0P58UFd1jz_a92xgkdE3cwI3gkGIdInouXYVI4_2_iAABe_cBLBg_qBwJLD3HTtkwU7yJfv49c7C68AKgWmCi-o_PKGghJrcM5338q0AcUXQIFd1GqZGEseSCnmsXxa5grpjemB0kyGIazP6STfdhI_Fh5ckwUApjYX9FdhA6hxd3Z02s5RNtrwFd4bxV77JQHZSb7hB5G02CrDDZQYScnZUeXwG8EyoOxBBpPUgNZ8GQdLhX_GSlyDsqANGCrf7AmsO3yEj5y8wHROQ8qhqpSpkOnSJoaIaYRa81Shw6a-BSVNQkcRxe2eusw8PT5cLPSOjLQKgpRWM5_thZzHiBI00SoWvrgFHUTUro2HZbzo5YnH813S3w7odNyWHpIuGzwmc5UJouY3ywhS_dAQdRevkCFte0RemsJGhzQNMqcwC48teo5iMlEut5km7SIwDxQJ4PifkRQ_aAVnrdmhNkaJrYEFULsRWSX9ijNGykcahmY950aoEKaEZeI0_LyfFD-hhuQBFLrZNWUabNLd3KF5Xqb8a0QW7FZdWVd53zXpFWbrfO84VmG26LYtDte5KJOq91KlYKLjOciFWkm-CYp6k1WbHnRbpo8r9uMbTj2UulE66lPrDutYpZlzH630rJC7eNYEKKS9ROaJmh4bulChGnhynD5SzWePNtwrTz5qztSpONcudzJDnAfqA8TR9IYym_r45x4Z5DkHDr57huE1roLd7BOOLg3Tn2yGp0uO6LBh7oTRyaOJ0XdWCW17Zk4BoTn35fB2VAxTBxj9p6J45mAqRT_BgAA__-8FkCX">