Skip to content

Commit 1bfe3f3

Browse files
Optimize -Wunsafe-buffer-usage.
1 parent a01e1d4 commit 1bfe3f3

File tree

2 files changed

+921
-537
lines changed

2 files changed

+921
-537
lines changed

clang/include/clang/Analysis/Analyses/UnsafeBufferUsageGadgets.def

Lines changed: 26 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,14 @@
1818
#define WARNING_GADGET(name) GADGET(name)
1919
#endif
2020

21-
/// A `WARNING_GADGET` subset, each of which may be enable/disable separately
22-
/// with different flags
23-
#ifndef WARNING_OPTIONAL_GADGET
24-
#define WARNING_OPTIONAL_GADGET(name) WARNING_GADGET(name)
21+
/// A `WARNING_GADGET` subset, accepts context as additional parameter.
22+
#ifndef WARNING_OPTIONAL_GADGET_CTX
23+
#define WARNING_OPTIONAL_GADGET_CTX(name) WARNING_GADGET(name)
24+
#endif
25+
26+
/// A `WARNING_GADGET` subset, accepts handler as additional parameter.
27+
#ifndef WARNING_OPTIONAL_GADGET_HANDLER
28+
#define WARNING_OPTIONAL_GADGET_HANDLER(name) WARNING_GADGET(name)
2529
#endif
2630

2731
/// Safe gadgets correspond to code patterns that aren't unsafe but need to be
@@ -31,27 +35,34 @@
3135
#define FIXABLE_GADGET(name) GADGET(name)
3236
#endif
3337

38+
/// A subset of the safe gadgets that may return multiple results.
39+
#ifndef FIXABLE_GADGET_MULTY_RES
40+
#define FIXABLE_GADGET_MULTY_RES(name) GADGET(name)
41+
#endif
42+
3443
WARNING_GADGET(Increment)
3544
WARNING_GADGET(Decrement)
36-
WARNING_GADGET(ArraySubscript)
3745
WARNING_GADGET(PointerArithmetic)
3846
WARNING_GADGET(UnsafeBufferUsageAttr)
39-
WARNING_GADGET(UnsafeBufferUsageCtorAttr)
4047
WARNING_GADGET(DataInvocation)
41-
WARNING_OPTIONAL_GADGET(UnsafeLibcFunctionCall)
42-
WARNING_OPTIONAL_GADGET(SpanTwoParamConstructor) // Uses of `std::span(arg0, arg1)`
48+
WARNING_OPTIONAL_GADGET_CTX(ArraySubscript)
49+
WARNING_OPTIONAL_GADGET_CTX(UnsafeBufferUsageCtorAttr)
50+
WARNING_OPTIONAL_GADGET_HANDLER(UnsafeLibcFunctionCall)
51+
WARNING_OPTIONAL_GADGET_HANDLER(SpanTwoParamConstructor) // Uses of `std::span(arg0, arg1)`
4352
FIXABLE_GADGET(ULCArraySubscript) // `DRE[any]` in an Unspecified Lvalue Context
4453
FIXABLE_GADGET(DerefSimplePtrArithFixable)
4554
FIXABLE_GADGET(PointerDereference)
46-
FIXABLE_GADGET(UPCAddressofArraySubscript) // '&DRE[any]' in an Unspecified Pointer Context
47-
FIXABLE_GADGET(UPCStandalonePointer)
48-
FIXABLE_GADGET(UPCPreIncrement) // '++Ptr' in an Unspecified Pointer Context
49-
FIXABLE_GADGET(UUCAddAssign) // 'Ptr += n' in an Unspecified Untyped Context
50-
FIXABLE_GADGET(PtrToPtrAssignment)
51-
FIXABLE_GADGET(CArrayToPtrAssignment)
55+
FIXABLE_GADGET_MULTY_RES(UPCAddressofArraySubscript) // '&DRE[any]' in an Unspecified Pointer Context
56+
FIXABLE_GADGET_MULTY_RES(UPCStandalonePointer)
57+
FIXABLE_GADGET_MULTY_RES(UPCPreIncrement) // '++Ptr' in an Unspecified Pointer Context
58+
FIXABLE_GADGET_MULTY_RES(UUCAddAssign) // 'Ptr += n' in an Unspecified Untyped Context
59+
FIXABLE_GADGET_MULTY_RES(PtrToPtrAssignment)
60+
FIXABLE_GADGET_MULTY_RES(CArrayToPtrAssignment)
5261
FIXABLE_GADGET(PointerInit)
5362

63+
#undef FIXABLE_GADGET_MULTY_RES
5464
#undef FIXABLE_GADGET
5565
#undef WARNING_GADGET
56-
#undef WARNING_OPTIONAL_GADGET
66+
#undef WARNING_OPTIONAL_GADGET_CTX
67+
#undef WARNING_OPTIONAL_GADGET_HANDLER
5768
#undef GADGET

0 commit comments

Comments
 (0)