[clang] 2dbcfd2 - Revert "[clang][Interp][NFC] Move CheckDivRem() implementation into Interp.cpp"

Timm Bäder via cfe-commits cfe-commits at lists.llvm.org
Thu Jan 19 03:37:39 PST 2023


Author: Timm Bäder
Date: 2023-01-19T12:37:20+01:00
New Revision: 2dbcfd298f7cb1454ca16f544b7df980ec8fc17d

URL: https://github.com/llvm/llvm-project/commit/2dbcfd298f7cb1454ca16f544b7df980ec8fc17d
DIFF: https://github.com/llvm/llvm-project/commit/2dbcfd298f7cb1454ca16f544b7df980ec8fc17d.diff

LOG: Revert "[clang][Interp][NFC] Move CheckDivRem() implementation into Interp.cpp"

This reverts commit 9ee0d7494eb35f5addefcb730cdf5c002ddeacd2.

Added: 
    

Modified: 
    clang/lib/AST/Interp/Interp.cpp
    clang/lib/AST/Interp/Interp.h

Removed: 
    


################################################################################
diff  --git a/clang/lib/AST/Interp/Interp.cpp b/clang/lib/AST/Interp/Interp.cpp
index d7195148d015..76ade4401e08 100644
--- a/clang/lib/AST/Interp/Interp.cpp
+++ b/clang/lib/AST/Interp/Interp.cpp
@@ -422,26 +422,6 @@ bool CheckShift(InterpState &S, CodePtr OpPC, const RT &RHS, unsigned Bits) {
   return true;
 }
 
-template <typename T>
-bool CheckDivRem(InterpState &S, CodePtr OpPC, const T &LHS, const T &RHS) {
-  if (RHS.isZero()) {
-    const SourceInfo &Loc = S.Current->getSource(OpPC);
-    S.FFDiag(Loc, diag::note_expr_divide_by_zero);
-    return false;
-  }
-
-  if (LHS.isSigned() && LHS.isMin() && RHS.isNegative() && RHS.isMinusOne()) {
-    APSInt LHSInt = LHS.toAPSInt();
-    SmallString<32> Trunc;
-    (-LHSInt.extend(LHSInt.getBitWidth() + 1)).toString(Trunc, 10);
-    const SourceInfo &Loc = S.Current->getSource(OpPC);
-    const Expr *E = S.Current->getExpr(OpPC);
-    S.CCEDiag(Loc, diag::note_constexpr_overflow) << Trunc << E->getType();
-    return false;
-  }
-  return true;
-}
-
 static void DiagnoseUninitializedSubobject(InterpState &S, const SourceInfo &SI,
                                            QualType SubObjType,
                                            SourceLocation SubObjLoc) {

diff  --git a/clang/lib/AST/Interp/Interp.h b/clang/lib/AST/Interp/Interp.h
index 3fa977d4a02e..903c68f4511c 100644
--- a/clang/lib/AST/Interp/Interp.h
+++ b/clang/lib/AST/Interp/Interp.h
@@ -100,7 +100,24 @@ bool CheckShift(InterpState &S, CodePtr OpPC, const RT &RHS, unsigned Bits);
 
 /// Checks if Div/Rem operation on LHS and RHS is valid.
 template <typename T>
-bool CheckDivRem(InterpState &S, CodePtr OpPC, const T &LHS, const T &RHS);
+bool CheckDivRem(InterpState &S, CodePtr OpPC, const T &LHS, const T &RHS) {
+  if (RHS.isZero()) {
+    const SourceInfo &Loc = S.Current->getSource(OpPC);
+    S.FFDiag(Loc, diag::note_expr_divide_by_zero);
+    return false;
+  }
+
+  if (LHS.isSigned() && LHS.isMin() && RHS.isNegative() && RHS.isMinusOne()) {
+    APSInt LHSInt = LHS.toAPSInt();
+    SmallString<32> Trunc;
+    (-LHSInt.extend(LHSInt.getBitWidth() + 1)).toString(Trunc, 10);
+    const SourceInfo &Loc = S.Current->getSource(OpPC);
+    const Expr *E = S.Current->getExpr(OpPC);
+    S.CCEDiag(Loc, diag::note_constexpr_overflow) << Trunc << E->getType();
+    return false;
+  }
+  return true;
+}
 
 /// Interpreter entry point.
 bool Interpret(InterpState &S, APValue &Result);


        


More information about the cfe-commits mailing list