Fix sign extension handling in DumpEnumValue

When an enumerator has an unsigned type and its high bit set, the
code introduced in r374067 would fail to match it due to a sign
extension snafu. This commit fixes this aspec of the code and should
fix the bots.

I think it's not a complete fix though, I'll add more test coverage
and additional tweaks in a follow-up commit.

llvm-svn: 374095
This commit is contained in:
Frederic Riss
2019-10-08 17:59:02 +00:00
parent 085328eeee
commit 5d415b706f

View File

@@ -9374,6 +9374,7 @@ static bool DumpEnumValue(const clang::QualType &qual_type, Stream *s,
// flags.
for (auto enumerator : enum_decl->enumerators()) {
uint64_t val = enumerator->getInitVal().getSExtValue();
val = llvm::SignExtend64(val, 8*byte_size);
if (llvm::countPopulation(val) != 1 && (val & ~covered_bits) != 0)
can_be_bitfield = false;
covered_bits |= val;