[clang] [Clang][CodeGen] Enable pointer overflow check for GCC workaround (PR #137849)
Yingwei Zheng via cfe-commits
cfe-commits at lists.llvm.org
Tue May 6 04:58:05 PDT 2025
================
@@ -4169,11 +4169,16 @@ static Value *emitPointerArithmetic(CodeGenFunction &CGF,
// The index is not pointer-sized.
// The pointer type is not byte-sized.
//
- if (BinaryOperator::isNullPointerArithmeticExtension(CGF.getContext(),
- op.Opcode,
- expr->getLHS(),
- expr->getRHS()))
- return CGF.Builder.CreateIntToPtr(index, pointer->getType());
+ // Note that we do not suppress the pointer overflow check in this case.
+ if (!CGF.SanOpts.has(SanitizerKind::PointerOverflow) &&
+ BinaryOperator::isNullPointerArithmeticExtension(
+ CGF.getContext(), op.Opcode, expr->getLHS(), expr->getRHS())) {
+ // isUnderlyingBasePointerConstantNull returns true does not indicate that
+ // the base pointer is null.
----------------
dtcxzyw wrote:
> We may not need `isUnderlyingBasePointerConstantNull`. We can just handle `ConditionalOperator` in `Expr::isNullPointerConstant`.
It breaks `clang/test/Sema/conditional-expr.c`, so I decided to move the workaround into `isNullPointerArithmeticExtension`: https://github.com/llvm/llvm-project/pull/137851/commits/419863eb5169044d3c9f8350fdb3b172365f1b73
https://github.com/llvm/llvm-project/pull/137849
More information about the cfe-commits
mailing list