[clang] [clang][bytecode] Diagnose comparisons of unrelated zero-sized pointers (PR #140695)
via cfe-commits
cfe-commits at lists.llvm.org
Tue May 20 02:20:06 PDT 2025
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-clang
Author: Timm Baeder (tbaederr)
<details>
<summary>Changes</summary>
---
Full diff: https://github.com/llvm/llvm-project/pull/140695.diff
2 Files Affected:
- (modified) clang/lib/AST/ByteCode/Interp.h (+8)
- (modified) clang/test/AST/ByteCode/cxx11.cpp (+7)
``````````diff
diff --git a/clang/lib/AST/ByteCode/Interp.h b/clang/lib/AST/ByteCode/Interp.h
index 9f1a6302eb856..23d3c088d571d 100644
--- a/clang/lib/AST/ByteCode/Interp.h
+++ b/clang/lib/AST/ByteCode/Interp.h
@@ -1135,6 +1135,14 @@ inline bool CmpHelperEQ<Pointer>(InterpState &S, CodePtr OpPC, CompareFn Fn) {
}
}
+ if (LHS.isUnknownSizeArray() && RHS.isUnknownSizeArray()) {
+ const SourceInfo &Loc = S.Current->getSource(OpPC);
+ S.FFDiag(Loc, diag::note_constexpr_pointer_comparison_zero_sized)
+ << LHS.toDiagnosticString(S.getASTContext())
+ << RHS.toDiagnosticString(S.getASTContext());
+ return false;
+ }
+
S.Stk.push<BoolT>(BoolT::from(Fn(ComparisonCategoryResult::Unordered)));
return true;
}
diff --git a/clang/test/AST/ByteCode/cxx11.cpp b/clang/test/AST/ByteCode/cxx11.cpp
index 88e195c36b583..36a57001ab966 100644
--- a/clang/test/AST/ByteCode/cxx11.cpp
+++ b/clang/test/AST/ByteCode/cxx11.cpp
@@ -233,3 +233,10 @@ namespace IntToPtrCast {
constexpr intptr_t i = f((intptr_t)&foo - 10); // both-error{{constexpr variable 'i' must be initialized by a constant expression}} \
// both-note{{reinterpret_cast}}
}
+
+namespace ZeroSizeCmp {
+ extern void (*start[])();
+ extern void (*end[])();
+ static_assert(&start != &end, ""); // both-error {{constant expression}} \
+ // both-note {{comparison of pointers '&start' and '&end' to unrelated zero-sized objects}}
+}
``````````
</details>
https://github.com/llvm/llvm-project/pull/140695
More information about the cfe-commits
mailing list