================
@@ -454,19 +455,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(),
----------------
timon-ul wrote:

Uhm, maybe I am going insane, now I get the same as you, but I swear earlier I 
was getting `Value = 42 (0x2a)` printed when hovering over `var`....makes sense 
though to print its actual name, had me confused. I also have seen that 
`getName()` is the new replacement, but since I got a number I thought 
`getName()` would then fail.

Anyway I would then suggest moving this call to `getName()`.

https://github.com/llvm/llvm-project/pull/173187
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to