diff options
author | Eli Friedman <efriedma@quicinc.com> | 2025-07-24 13:36:54 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2025-07-24 13:36:54 -0700 |
commit | bba846773c7dfce0f95b8846672d8dd5fa8912be (patch) | |
tree | 67b834dd6d2d06743281efab8107ac2565d24634 /clang/lib/AST/ExprConstant.cpp | |
parent | e178e82c63a44e3fbce62f4696b0ab402e7b7f6e (diff) | |
download | llvm-bba846773c7dfce0f95b8846672d8dd5fa8912be.zip llvm-bba846773c7dfce0f95b8846672d8dd5fa8912be.tar.gz llvm-bba846773c7dfce0f95b8846672d8dd5fa8912be.tar.bz2 |
[clang] Fix const eval of constexpr-unknown relational comparisons. (#150088)
Like in other places, ignore the reference type of the base. (It might
make sense to refactor this at some point.)
Fixes #150015.
Diffstat (limited to 'clang/lib/AST/ExprConstant.cpp')
-rw-r--r-- | clang/lib/AST/ExprConstant.cpp | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/clang/lib/AST/ExprConstant.cpp b/clang/lib/AST/ExprConstant.cpp index 0d12161..9808298 100644 --- a/clang/lib/AST/ExprConstant.cpp +++ b/clang/lib/AST/ExprConstant.cpp @@ -14636,7 +14636,9 @@ EvaluateComparisonBinaryOperator(EvalInfo &Info, const BinaryOperator *E, if (!LHSDesignator.Invalid && !RHSDesignator.Invalid && IsRelational) { bool WasArrayIndex; unsigned Mismatch = FindDesignatorMismatch( - getType(LHSValue.Base), LHSDesignator, RHSDesignator, WasArrayIndex); + LHSValue.Base.isNull() ? QualType() + : getType(LHSValue.Base).getNonReferenceType(), + LHSDesignator, RHSDesignator, WasArrayIndex); // At the point where the designators diverge, the comparison has a // specified value if: // - we are comparing array indices @@ -14680,7 +14682,7 @@ EvaluateComparisonBinaryOperator(EvalInfo &Info, const BinaryOperator *E, // compare pointers within the object in question; otherwise, the result // depends on where the object is located in memory. if (!LHSValue.Base.isNull() && IsRelational) { - QualType BaseTy = getType(LHSValue.Base); + QualType BaseTy = getType(LHSValue.Base).getNonReferenceType(); if (BaseTy->isIncompleteType()) return Error(E); CharUnits Size = Info.Ctx.getTypeSizeInChars(BaseTy); |