https://github.com/tbaederr updated https://github.com/llvm/llvm-project/pull/140695
>From 6cfad141013ce10943335713bc6b5c2e85348f07 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timm=20B=C3=A4der?= <tbae...@redhat.com> Date: Tue, 20 May 2025 11:17:46 +0200 Subject: [PATCH] [clang][bytecode] Diagnose comparisons of unrelated zero-sized pointers --- clang/lib/AST/ByteCode/Interp.h | 8 ++++++++ clang/test/AST/ByteCode/cxx11.cpp | 7 +++++++ 2 files changed, 15 insertions(+) diff --git a/clang/lib/AST/ByteCode/Interp.h b/clang/lib/AST/ByteCode/Interp.h index 70bbfc576925e..881a8b12c2626 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 2a1bda675075c..368221106f640 100644 --- a/clang/test/AST/ByteCode/cxx11.cpp +++ b/clang/test/AST/ByteCode/cxx11.cpp @@ -243,3 +243,10 @@ namespace Volatile { // both-note {{in call to 'f(0)'}} }; } + +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}} +} _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits