[lldb] Fix UB in half2float and add some more tests.

The added DumpDataExtractorTest uncovered that this is lshifting a negative
integer which upsets ubsan and breaks the sanitizer bot. This patch just
changes the variable we shift to be unsigned and adds a bunch of tests to make
sure this function does what it promises.
This commit is contained in:
Raphael Isemann
2021-05-19 21:35:24 +02:00
parent 50be48b0f3
commit 4b074b49be
2 changed files with 25 additions and 1 deletions

View File

@@ -52,7 +52,9 @@ static float half2float(uint16_t half) {
float f;
uint32_t u;
} u;
int32_t v = (int16_t)half;
// Sign extend to 4 byte.
int32_t sign_extended = static_cast<int16_t>(half);
uint32_t v = static_cast<uint32_t>(sign_extended);
if (0 == (v & 0x7c00)) {
u.u = v & 0x80007FFFU;