[clang] [clang][Interp] Implement bitwise operations for IntegralAP (PR #71807)
via cfe-commits
cfe-commits at lists.llvm.org
Thu Nov 9 05:35:11 PST 2023
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-clang
Author: Timm Baeder (tbaederr)
<details>
<summary>Changes</summary>
---
Full diff: https://github.com/llvm/llvm-project/pull/71807.diff
2 Files Affected:
- (modified) clang/lib/AST/Interp/IntegralAP.h (+3-5)
- (modified) clang/test/AST/Interp/intap.cpp (+9)
``````````diff
diff --git a/clang/lib/AST/Interp/IntegralAP.h b/clang/lib/AST/Interp/IntegralAP.h
index 88de1f1392e6813..c8850a4bbb574aa 100644
--- a/clang/lib/AST/Interp/IntegralAP.h
+++ b/clang/lib/AST/Interp/IntegralAP.h
@@ -219,21 +219,19 @@ template <bool Signed> class IntegralAP final {
static bool bitAnd(IntegralAP A, IntegralAP B, unsigned OpBits,
IntegralAP *R) {
- // FIXME: Implement.
- assert(false);
+ *R = IntegralAP(A.V & B.V);
return false;
}
static bool bitOr(IntegralAP A, IntegralAP B, unsigned OpBits,
IntegralAP *R) {
- assert(false);
+ *R = IntegralAP(A.V | B.V);
return false;
}
static bool bitXor(IntegralAP A, IntegralAP B, unsigned OpBits,
IntegralAP *R) {
- // FIXME: Implement.
- assert(false);
+ *R = IntegralAP(A.V ^ B.V);
return false;
}
diff --git a/clang/test/AST/Interp/intap.cpp b/clang/test/AST/Interp/intap.cpp
index 34c8d0565082994..a8893c8cb4eb9b8 100644
--- a/clang/test/AST/Interp/intap.cpp
+++ b/clang/test/AST/Interp/intap.cpp
@@ -157,4 +157,13 @@ namespace Bitfields {
// expected-warning {{changes value from 100 to 0}}
}
+namespace BitOps {
+ constexpr unsigned __int128 UZero = 0;
+ constexpr unsigned __int128 Max = ~UZero;
+ static_assert(Max == ~0, "");
+ static_assert((Max & 0) == 0, "");
+ static_assert((UZero | 0) == 0, "");
+ static_assert((Max ^ Max) == 0, "");
+}
+
#endif
``````````
</details>
https://github.com/llvm/llvm-project/pull/71807
More information about the cfe-commits
mailing list