================ @@ -31,27 +35,34 @@ #define FIXABLE_GADGET(name) GADGET(name) #endif +/// A subset of the safe gadgets that may return multiple results. +#ifndef FIXABLE_GADGET_MULTY_RES +#define FIXABLE_GADGET_MULTY_RES(name) GADGET(name) +#endif + WARNING_GADGET(Increment) WARNING_GADGET(Decrement) -WARNING_GADGET(ArraySubscript) WARNING_GADGET(PointerArithmetic) WARNING_GADGET(UnsafeBufferUsageAttr) -WARNING_GADGET(UnsafeBufferUsageCtorAttr) WARNING_GADGET(DataInvocation) -WARNING_OPTIONAL_GADGET(UnsafeLibcFunctionCall) -WARNING_OPTIONAL_GADGET(SpanTwoParamConstructor) // Uses of `std::span(arg0, arg1)` +WARNING_OPTIONAL_GADGET_CTX(ArraySubscript) +WARNING_OPTIONAL_GADGET_CTX(UnsafeBufferUsageCtorAttr) +WARNING_OPTIONAL_GADGET_HANDLER(UnsafeLibcFunctionCall) +WARNING_OPTIONAL_GADGET_HANDLER(SpanTwoParamConstructor) // Uses of `std::span(arg0, arg1)` FIXABLE_GADGET(ULCArraySubscript) // `DRE[any]` in an Unspecified Lvalue Context FIXABLE_GADGET(DerefSimplePtrArithFixable) FIXABLE_GADGET(PointerDereference) -FIXABLE_GADGET(UPCAddressofArraySubscript) // '&DRE[any]' in an Unspecified Pointer Context -FIXABLE_GADGET(UPCStandalonePointer) -FIXABLE_GADGET(UPCPreIncrement) // '++Ptr' in an Unspecified Pointer Context -FIXABLE_GADGET(UUCAddAssign) // 'Ptr += n' in an Unspecified Untyped Context -FIXABLE_GADGET(PtrToPtrAssignment) -FIXABLE_GADGET(CArrayToPtrAssignment) +FIXABLE_GADGET_MULTY_RES(UPCAddressofArraySubscript) // '&DRE[any]' in an Unspecified Pointer Context ---------------- ilya-biryukov wrote:
Why not treat all gadgets as returning multiple results? This would make the code simpler and I would not expect any noticeable performance costs if are careful (e.g. using `llvm::SmallVector` for results, etc. Or is that not correct, e.g. is the code becoming more complicated with this approach? https://github.com/llvm/llvm-project/pull/124554 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits