================
@@ -11541,30 +11541,33 @@ static void diagnoseSubtractionOnNullPointer(Sema &S,
SourceLocation Loc,
/// Diagnose invalid arithmetic on two function pointers.
static void diagnoseArithmeticOnTwoFunctionPointers(Sema &S, SourceLocation
Loc,
- Expr *LHS, Expr *RHS) {
- assert(LHS->getType()->isAnyPointerType());
- assert(RHS->getType()->isAnyPointerType());
+ Expr *LHS, Expr *RHS,
+ QualType LHSType,
+ QualType RHSType) {
----------------
Kristianerik wrote:
Thank you for the follow up I agree that the structural separation is the right
approach. I'd like to help on the refactor. I want to make sure I understand
the scope correctly.
Is the goal is to restructure the pointer arithmetic checking so that:
Pre-conversion checks run on the original expression (diagnostics that need the
original type, like "this is an _Atomic function pointer")
DefaultFunctionArrayLvalueConversion runs, stripping _Atomic, decaying
arrays/functions
Post-conversion checks run on the clean expression (assertions, type queries
that expect a plain pointer)
Is this scoped to checkArithmeticOpPointerOperand,
checkArithmeticBinOpPointerOperands, and their callers
(CheckIncrementDecrementOperand, the additive operator paths at lines ~11875
and ~12010)? Or do you see this extending to the diagnoseArithmeticOn*
functions as well?
Also, should the conversion move into the check functions themselves (as in
your example), or should the callers do the conversion and pass the converted
expression?
https://github.com/llvm/llvm-project/pull/228255
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits