[clang] 17a1b8f - [clang][Interp] Fix `nullptr - nullptr` expressions

Timm Bäder via cfe-commits cfe-commits at lists.llvm.org
Mon Feb 19 07:48:17 PST 2024


Author: Timm Bäder
Date: 2024-02-19T16:30:57+01:00
New Revision: 17a1b8f8481783ca9c318db6b6133631015726e9

URL: https://github.com/llvm/llvm-project/commit/17a1b8f8481783ca9c318db6b6133631015726e9
DIFF: https://github.com/llvm/llvm-project/commit/17a1b8f8481783ca9c318db6b6133631015726e9.diff

LOG: [clang][Interp] Fix `nullptr - nullptr` expressions

They can happen and we used to run into an assertion.

Added: 
    

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

Removed: 
    


################################################################################
diff  --git a/clang/lib/AST/Interp/Interp.h b/clang/lib/AST/Interp/Interp.h
index 344f523ed855a2..5e9c07545ae1fb 100644
--- a/clang/lib/AST/Interp/Interp.h
+++ b/clang/lib/AST/Interp/Interp.h
@@ -1579,6 +1579,11 @@ inline bool SubPtr(InterpState &S, CodePtr OpPC) {
     return false;
   }
 
+  if (LHS.isZero() && RHS.isZero()) {
+    S.Stk.push<T>();
+    return true;
+  }
+
   T A = T::from(LHS.getIndex());
   T B = T::from(RHS.getIndex());
   return AddSubMulHelper<T, T::sub, std::minus>(S, OpPC, A.bitWidth(), A, B);

diff  --git a/clang/test/AST/Interp/literals.cpp b/clang/test/AST/Interp/literals.cpp
index bc994c3191ce8e..8ea1c1155143e9 100644
--- a/clang/test/AST/Interp/literals.cpp
+++ b/clang/test/AST/Interp/literals.cpp
@@ -1124,3 +1124,10 @@ namespace rdar8769025 {
     f1(0); // both-warning{{null passed to a callee that requires a non-null argument}}
   }
 }
+
+namespace nullptrsub {
+  void a() {
+    char *f = (char *)0;
+    f = (char *)((char *)0 - (char *)0);
+  }
+}


        


More information about the cfe-commits mailing list