[clang] [clang] Fix pointer comparisons between pointers to constexpr-unknown (PR #147663)
Eli Friedman via cfe-commits
cfe-commits at lists.llvm.org
Fri Jul 11 15:49:48 PDT 2025
================
@@ -14544,6 +14538,23 @@ EvaluateComparisonBinaryOperator(EvalInfo &Info, const BinaryOperator *E,
(LHSValue.Base && isZeroSized(RHSValue)))
return DiagComparison(
diag::note_constexpr_pointer_comparison_zero_sized);
+ // A constexpr-unknown reference can be equal to any other lvalue, except
+ // for variables allocated during constant evaluation. (The "lifetime
+ // [...] includes the entire constant evaluation", so it has to be
+ // distinct from anything allocated during constant evaluation.)
+ //
+ // Theoretically we could handle other cases, but the standard doesn't say
+ // what other cases we need to handle; it just says an "equality
+ // operator where the result is unspecified" isn't a constant expression.
----------------
efriedma-quic wrote:
Okay, I removed the checks for objects from the current evaluation, and my comment about the standard.
I'd like to get this in because it's fixing a clear miscompile of pointer comparisons; we can worry about the finer details in a followup once the CWG decides what to do.
https://github.com/llvm/llvm-project/pull/147663
More information about the cfe-commits
mailing list