[clang] [clang][analyzer] Correct SMT Layer for _BitInt cases refutations (PR #143310)
Balazs Benics via cfe-commits
cfe-commits at lists.llvm.org
Wed Jun 11 05:15:44 PDT 2025
================
@@ -570,23 +572,35 @@ class SMTConv {
// TODO: Refactor to put elsewhere
static inline QualType getAPSIntType(ASTContext &Ctx,
const llvm::APSInt &Int) {
- return Ctx.getIntTypeForBitwidth(Int.getBitWidth(), Int.isSigned());
+ QualType Ty;
+ if (!(Ty = Ctx.getIntTypeForBitwidth(Int.getBitWidth(), Int.isSigned()))
+ .isNull())
+ return Ty;
+ // If Ty is Null, could be because the original type was a _BitInt.
+ // Get the bit size and round up to next power of 2, max char size
+ unsigned CharTypeSize = Ctx.getTypeSize(Ctx.CharTy);
+ unsigned Pow2DestWidth =
+ std::max(llvm::bit_ceil(Int.getBitWidth()), CharTypeSize);
+ Ty = Ctx.getIntTypeForBitwidth(Pow2DestWidth, Int.isSigned());
+ return Ty;
----------------
steakhal wrote:
I think we could just directly return this type instead of assigning it and returning what we just assigned.
https://github.com/llvm/llvm-project/pull/143310
More information about the cfe-commits
mailing list