[clang] [clang][Interp] Support __real/__imag on primitives (PR #75485)
via cfe-commits
cfe-commits at lists.llvm.org
Thu Dec 14 07:54:24 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/75485.diff
2 Files Affected:
- (modified) clang/lib/AST/Interp/ByteCodeExprGen.cpp (+7)
- (modified) clang/test/AST/Interp/complex.cpp (+6)
``````````diff
diff --git a/clang/lib/AST/Interp/ByteCodeExprGen.cpp b/clang/lib/AST/Interp/ByteCodeExprGen.cpp
index d0980882f402b..a4ff21c16b5a3 100644
--- a/clang/lib/AST/Interp/ByteCodeExprGen.cpp
+++ b/clang/lib/AST/Interp/ByteCodeExprGen.cpp
@@ -2761,6 +2761,8 @@ bool ByteCodeExprGen<Emitter>::VisitUnaryOperator(const UnaryOperator *E) {
return false;
return DiscardResult ? this->emitPop(*T, E) : this->emitComp(*T, E);
case UO_Real: { // __real x
+ if (T)
+ return this->delegate(SubExpr);
assert(!T);
if (!this->visit(SubExpr))
return false;
@@ -2776,6 +2778,11 @@ bool ByteCodeExprGen<Emitter>::VisitUnaryOperator(const UnaryOperator *E) {
return true;
}
case UO_Imag: { // __imag x
+ if (T) {
+ if (!this->discard(SubExpr))
+ return false;
+ return this->visitZeroInitializer(*T, SubExpr->getType(), SubExpr);
+ }
assert(!T);
if (!this->visit(SubExpr))
return false;
diff --git a/clang/test/AST/Interp/complex.cpp b/clang/test/AST/Interp/complex.cpp
index 66490e973988b..1e97cc6184952 100644
--- a/clang/test/AST/Interp/complex.cpp
+++ b/clang/test/AST/Interp/complex.cpp
@@ -37,6 +37,12 @@ constexpr _Complex int I2 = {};
static_assert(__real(I2) == 0, "");
static_assert(__imag(I2) == 0, "");
+static_assert(__real(4.0) == 4.0, "");
+static_assert(__real(12u) == 12u, "");
+static_assert(__imag(4.0) == 0.0, "");
+static_assert(__imag(13) == 0, "");
+
+
/// Standalone complex expressions.
static_assert(__real((_Complex float){1.0, 3.0}) == 1.0, "");
``````````
</details>
https://github.com/llvm/llvm-project/pull/75485
More information about the cfe-commits
mailing list