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); + } +} _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits