[clang] e6a94dc - [clang][Interp] Fix creating APSInt from IntegralAP (#71410)
via cfe-commits
cfe-commits at lists.llvm.org
Wed Nov 8 01:48:12 PST 2023
Author: Timm Baeder
Date: 2023-11-08T10:48:07+01:00
New Revision: e6a94dca38d77db2678366c55bb7b72cfa312487
URL: https://github.com/llvm/llvm-project/commit/e6a94dca38d77db2678366c55bb7b72cfa312487
DIFF: https://github.com/llvm/llvm-project/commit/e6a94dca38d77db2678366c55bb7b72cfa312487.diff
LOG: [clang][Interp] Fix creating APSInt from IntegralAP (#71410)
The boolean argument in the APSInt constructor is IsUnsigned, not
IsSigned.
Added:
Modified:
clang/lib/AST/Interp/IntegralAP.h
clang/test/AST/Interp/intap.cpp
Removed:
################################################################################
diff --git a/clang/lib/AST/Interp/IntegralAP.h b/clang/lib/AST/Interp/IntegralAP.h
index 6d301bad784af47..b674082d9ea5812 100644
--- a/clang/lib/AST/Interp/IntegralAP.h
+++ b/clang/lib/AST/Interp/IntegralAP.h
@@ -119,8 +119,8 @@ template <bool Signed> class IntegralAP final {
constexpr unsigned bitWidth() const { return V.getBitWidth(); }
- APSInt toAPSInt(unsigned Bits = 0) const { return APSInt(V, Signed); }
- APValue toAPValue() const { return APValue(APSInt(V, Signed)); }
+ APSInt toAPSInt(unsigned Bits = 0) const { return APSInt(V, !Signed); }
+ APValue toAPValue() const { return APValue(APSInt(V, !Signed)); }
bool isZero() const { return V.isZero(); }
bool isPositive() const { return V.isNonNegative(); }
diff --git a/clang/test/AST/Interp/intap.cpp b/clang/test/AST/Interp/intap.cpp
index 45961e6fc74b7a7..5f08b76a565c25a 100644
--- a/clang/test/AST/Interp/intap.cpp
+++ b/clang/test/AST/Interp/intap.cpp
@@ -56,6 +56,10 @@ namespace i128 {
static const __uint128_t UINT128_MAX =__uint128_t(__int128_t(-1L));
static_assert(UINT128_MAX == -1, "");
+ static_assert(UINT128_MAX == 1, ""); // expected-error {{static assertion failed}} \
+ // expected-note {{'340282366920938463463374607431768211455 == 1'}} \
+ // ref-error {{static assertion failed}} \
+ // ref-note {{'340282366920938463463374607431768211455 == 1'}}
static const __int128_t INT128_MAX = UINT128_MAX >> (__int128_t)1;
static_assert(INT128_MAX != 0, "");
More information about the cfe-commits
mailing list