================
@@ -450,19 +451,28 @@ std::optional<std::string> printExprValue(const Expr *E,
return std::nullopt;
// Show enums symbolically, not numerically like APValue::printPretty().
- if (T->isEnumeralType() && Constant.Val.isInt() &&
- Constant.Val.getInt().getSignificantBits() <= 64) {
- // Compare to int64_t to avoid bit-width match requirements.
- int64_t Val = Constant.Val.getInt().getExtValue();
- for (const EnumConstantDecl *ECD : T->castAsEnumDecl()->enumerators())
- if (ECD->getInitVal() == Val)
- return llvm::formatv("{0} ({1})", ECD->getNameAsString(),
- printHex(Constant.Val.getInt()))
- .str();
+ if (T->isEnumeralType() && Constant.Val.isInt()) {
+ const llvm::APSInt &Val = Constant.Val.getInt();
+ if (Val.isRepresentableByInt64()) {
+ // Compare to int64_t to avoid bit-width match requirements.
+ int64_t Val = Constant.Val.getInt().getExtValue();
+ for (const EnumConstantDecl *ECD : T->castAsEnumDecl()->enumerators())
+ if (ECD->getInitVal() == Val)
+ return llvm::formatv("{0} ({1})", ECD->getNameAsString(),
+ printHex(Constant.Val.getInt()))
+ .str();
+ } else if (const auto UVal = Constant.Val.getInt().tryZExtValue()) {
+ for (const EnumConstantDecl *ECD : T->castAsEnumDecl()->enumerators())
+ if (ECD->getInitVal().getZExtValue() == *UVal)
+ return llvm::formatv("{0} ({1})", ECD->getNameAsString(),
+ printHex(Constant.Val.getInt()))
+ .str();
----------------
MythreyaK wrote:
not confident if this is the right thing to do, still exploring this API.
https://github.com/llvm/llvm-project/pull/173187
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits