[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