llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT--> @llvm/pr-subscribers-clang Author: Timm Baeder (tbaederr) <details> <summary>Changes</summary> Ignore the multiplication overflow but report the 0 denominator. --- Full diff: https://github.com/llvm/llvm-project/pull/106395.diff 2 Files Affected: - (modified) clang/lib/AST/ByteCode/Interp.h (+9-2) - (modified) clang/test/AST/ByteCode/complex.cpp (+3) ``````````diff diff --git a/clang/lib/AST/ByteCode/Interp.h b/clang/lib/AST/ByteCode/Interp.h index 242532a3f0544e..ad6e585daab9fc 100644 --- a/clang/lib/AST/ByteCode/Interp.h +++ b/clang/lib/AST/ByteCode/Interp.h @@ -517,12 +517,19 @@ inline bool Divc(InterpState &S, CodePtr OpPC) { // Den = real(RHS)² + imag(RHS)² T A, B; - if (T::mul(RHSR, RHSR, Bits, &A) || T::mul(RHSI, RHSI, Bits, &B)) - return false; + if (T::mul(RHSR, RHSR, Bits, &A) || T::mul(RHSI, RHSI, Bits, &B)) { + // Ignore overflow here, because that's what the current interpeter does. + } T Den; if (T::add(A, B, Bits, &Den)) return false; + if (Compare(Den, Zero) == ComparisonCategoryResult::Equal) { + const SourceInfo &E = S.Current->getSource(OpPC); + S.FFDiag(E, diag::note_expr_divide_by_zero); + return false; + } + // real(Result) = ((real(LHS) * real(RHS)) + (imag(LHS) * imag(RHS))) / Den T &ResultR = Result.atIndex(0).deref<T>(); T &ResultI = Result.atIndex(1).deref<T>(); diff --git a/clang/test/AST/ByteCode/complex.cpp b/clang/test/AST/ByteCode/complex.cpp index a969aadfdcd088..dc93c786dac7ae 100644 --- a/clang/test/AST/ByteCode/complex.cpp +++ b/clang/test/AST/ByteCode/complex.cpp @@ -181,6 +181,9 @@ constexpr _Complex float getComplexFloat() { static_assert(__real(getComplexFloat()) == 1, ""); static_assert(__imag(getComplexFloat()) == 2, ""); +constexpr auto GH55390 = 1 / 65536j; // both-note {{division by zero}} \ + // both-error {{constexpr variable 'GH55390' must be initialized by a constant expression}} + namespace CastToBool { constexpr _Complex int F = {0, 1}; static_assert(F, ""); `````````` </details> https://github.com/llvm/llvm-project/pull/106395 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits