1//=- UnsafeBufferUsageGadgets.def - List of ways to use a buffer --*- C++ -*-=//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8
9/// A gadget is an individual operation in the code that may be of interest to
10/// the UnsafeBufferUsage analysis.
11#ifndef GADGET
12#define GADGET(name)
13#endif
14
15/// Unsafe gadgets correspond to unsafe code patterns that warrant
16/// an immediate warning.
17#ifndef WARNING_GADGET
18#define WARNING_GADGET(name) GADGET(name)
19#endif
20
21/// Safe gadgets correspond to code patterns that aren't unsafe but need to be
22/// properly recognized in order to emit correct warnings and fixes over unsafe
23/// gadgets.
24#ifndef FIXABLE_GADGET
25#define FIXABLE_GADGET(name) GADGET(name)
26#endif
27
28WARNING_GADGET(Increment)
29WARNING_GADGET(Decrement)
30WARNING_GADGET(ArraySubscript)
31WARNING_GADGET(PointerArithmetic)
32WARNING_GADGET(UnsafeBufferUsageAttr)
33WARNING_GADGET(DataInvocation)
34FIXABLE_GADGET(ULCArraySubscript)          // `DRE[any]` in an Unspecified Lvalue Context
35FIXABLE_GADGET(DerefSimplePtrArithFixable)
36FIXABLE_GADGET(PointerDereference)
37FIXABLE_GADGET(UPCAddressofArraySubscript) // '&DRE[any]' in an Unspecified Pointer Context
38FIXABLE_GADGET(UPCStandalonePointer)
39FIXABLE_GADGET(UPCPreIncrement)            // '++Ptr' in an Unspecified Pointer Context
40FIXABLE_GADGET(UUCAddAssign)            // 'Ptr += n' in an Unspecified Untyped Context
41FIXABLE_GADGET(PointerAssignment)
42FIXABLE_GADGET(PointerInit)
43
44#undef FIXABLE_GADGET
45#undef WARNING_GADGET
46#undef GADGET
47