return llvm::None;
// Show enums symbolically, not numerically like APValue::printPretty().
- if (T->isEnumeralType() && Constant.Val.isInt() &&
- Constant.Val.getInt().getMinSignedBits() <= 64) {
+ if (T->isEnumeralType() && Constant.Val.getInt().getMinSignedBits() <= 64) {
// Compare to int64_t to avoid bit-width match requirements.
int64_t Val = Constant.Val.getInt().getExtValue();
for (const EnumConstantDecl *ECD :
.str();
}
// Show hex value of integers if they're at least 10 (or negative!)
- if (T->isIntegralOrEnumerationType() && Constant.Val.isInt() &&
+ if (T->isIntegralOrEnumerationType() &&
Constant.Val.getInt().getMinSignedBits() <= 64 &&
Constant.Val.getInt().uge(10))
return llvm::formatv("{0} ({1})", Constant.Val.getAsString(Ctx, T),
ASSERT_TRUE(H);
EXPECT_EQ(H->Definition, "int arr[]");
}
-
-TEST(Hover, GlobalVarEnumeralCastNoCrash) {
- Annotations T(R"cpp(
- enum Test : unsigned long {};
- unsigned global_var;
- void foo() { Test v^al = (Test)(unsigned long)&global_var; }
- )cpp");
-
- TestTU TU = TestTU::withCode(T.code());
- auto AST = TU.build();
- auto HI = getHover(AST, T.point(), format::getLLVMStyle(), nullptr);
- ASSERT_TRUE(HI);
- EXPECT_EQ(*HI->Value, "&global_var");
-}
-
-TEST(Hover, GlobalVarIntCastNoCrash) {
- Annotations T(R"cpp(
- unsigned global_var;
- int foo() { unsigned long a^ddress = (unsigned long)&global_var; }
- )cpp");
-
- TestTU TU = TestTU::withCode(T.code());
- auto AST = TU.build();
- auto HI = getHover(AST, T.point(), format::getLLVMStyle(), nullptr);
- ASSERT_TRUE(HI);
- EXPECT_EQ(*HI->Value, "&global_var");
-}
} // namespace
} // namespace clangd
} // namespace clang