clang 17.0.0git
Classes | Namespaces | Macros | Functions
UnsafeBufferUsage.cpp File Reference
#include "clang/Analysis/Analyses/UnsafeBufferUsage.h"
#include "clang/AST/Decl.h"
#include "clang/AST/RecursiveASTVisitor.h"
#include "clang/ASTMatchers/ASTMatchFinder.h"
#include "clang/Lex/Lexer.h"
#include "clang/Lex/Preprocessor.h"
#include "llvm/ADT/SmallVector.h"
#include <memory>
#include <optional>
#include "clang/Analysis/Analyses/UnsafeBufferUsageGadgets.def"
Include dependency graph for UnsafeBufferUsage.cpp:

Go to the source code of this file.

Classes

class  clang::ast_matchers::MatchDescendantVisitor
 
class  DerefSimplePtrArithFixableGadget
 
struct  CompareNode< NodeTy >
 
struct  WarningGadgetSets
 
struct  FixableGadgetSets
 

Namespaces

namespace  clang
 
namespace  clang::ast_matchers
 

Macros

#define GADGET(x)   x,
 
#define NEXT   ++numFound
 
#define FIXABLE_GADGET(name)
 
#define WARNING_GADGET(name)
 
#define FIXABLE_GADGET(x)    x ## Gadget::matcher().bind(#x),
 
#define WARNING_GADGET(x)    allOf(x ## Gadget::matcher().bind(#x), notInSafeBufferOptOut(&Handler)),
 

Functions

 clang::ast_matchers::AST_MATCHER_P (Stmt, forEveryDescendant, internal::Matcher< Stmt >, innerMatcher)
 
 clang::ast_matchers::AST_MATCHER_P (Stmt, notInSafeBufferOptOut, const UnsafeBufferUsageHandler *, Handler)
 
 clang::ast_matchers::AST_MATCHER_P (CastExpr, castSubExpr, internal::Matcher< Expr >, innerMatcher)
 
static auto clang::ast_matchers::isInUnspecifiedLvalueContext (internal::Matcher< Expr > innerMatcher)
 
static auto hasPointerType ()
 
static auto hasArrayType ()
 
static std::tuple< FixableGadgetList, WarningGadgetList, DeclUseTracker > findGadgets (const Decl *D, const UnsafeBufferUsageHandler &Handler)
 Scan the function and return a list of gadgets found with provided kits.
 
static WarningGadgetSets groupWarningGadgetsByVar (WarningGadgetList &&AllUnsafeOperations)
 
static FixableGadgetSets groupFixablesByVar (FixableGadgetList &&AllFixableOperations)
 
static std::string getAPIntText (APInt Val)
 
template<typename NodeTy >
static SourceLocation getEndCharLoc (const NodeTy *Node, const SourceManager &SM, const LangOptions &LangOpts)
 
template<typename NodeTy >
static SourceLocation getPastLoc (const NodeTy *Node, const SourceManager &SM, const LangOptions &LangOpts)
 
static StringRef getExprText (const Expr *E, const SourceManager &SM, const LangOptions &LangOpts)
 
static FixItList populateInitializerFixItWithSpan (const Expr *Init, const ASTContext &Ctx, const StringRef UserFillPlaceHolder)
 
static FixItList fixVarDeclWithSpan (const VarDecl *D, const ASTContext &Ctx, const StringRef UserFillPlaceHolder)
 
static FixItList fixVariableWithSpan (const VarDecl *VD, const DeclUseTracker &Tracker, const ASTContext &Ctx, UnsafeBufferUsageHandler &Handler)
 
static FixItList fixVariable (const VarDecl *VD, Strategy::Kind K, const DeclUseTracker &Tracker, const ASTContext &Ctx, UnsafeBufferUsageHandler &Handler)
 
static bool overlapWithMacro (const FixItList &FixIts)
 
static std::map< const VarDecl *, FixItList > getFixIts (FixableGadgetSets &FixablesForUnsafeVars, const Strategy &S, const DeclUseTracker &Tracker, const ASTContext &Ctx, UnsafeBufferUsageHandler &Handler)
 
static Strategy getNaiveStrategy (const llvm::SmallVectorImpl< const VarDecl * > &UnsafeVars)
 

Macro Definition Documentation

◆ FIXABLE_GADGET [1/2]

#define FIXABLE_GADGET (   name)
Value:
if (Result.Nodes.getNodeAs<Stmt>(#name)) { \
FixableGadgets.push_back(std::make_unique<name##Gadget>(Result)); \
NEXT; \
}
#define NEXT
Stmt - This represents one statement.
Definition: Stmt.h:72

◆ FIXABLE_GADGET [2/2]

#define FIXABLE_GADGET (   x)     x ## Gadget::matcher().bind(#x),

◆ GADGET

#define GADGET (   x)    x,

Definition at line 183 of file UnsafeBufferUsage.cpp.

◆ NEXT

#define NEXT   ++numFound

◆ WARNING_GADGET [1/2]

#define WARNING_GADGET (   name)
Value:
if (Result.Nodes.getNodeAs<Stmt>(#name)) { \
WarningGadgets.push_back(std::make_unique<name##Gadget>(Result)); \
NEXT; \
}

◆ WARNING_GADGET [2/2]

#define WARNING_GADGET (   x)     allOf(x ## Gadget::matcher().bind(#x), notInSafeBufferOptOut(&Handler)),

Function Documentation

◆ findGadgets()

static std::tuple< FixableGadgetList, WarningGadgetList, DeclUseTracker > findGadgets ( const Decl D,
const UnsafeBufferUsageHandler Handler 
)
static

◆ fixVarDeclWithSpan()

static FixItList fixVarDeclWithSpan ( const VarDecl D,
const ASTContext Ctx,
const StringRef  UserFillPlaceHolder 
)
static

◆ fixVariable()

static FixItList fixVariable ( const VarDecl VD,
Strategy::Kind  K,
const DeclUseTracker &  Tracker,
const ASTContext Ctx,
UnsafeBufferUsageHandler Handler 
)
static

◆ fixVariableWithSpan()

static FixItList fixVariableWithSpan ( const VarDecl VD,
const DeclUseTracker &  Tracker,
const ASTContext Ctx,
UnsafeBufferUsageHandler Handler 
)
static

◆ getAPIntText()

static std::string getAPIntText ( APInt  Val)
static

Definition at line 834 of file UnsafeBufferUsage.cpp.

Referenced by populateInitializerFixItWithSpan().

◆ getEndCharLoc()

template<typename NodeTy >
static SourceLocation getEndCharLoc ( const NodeTy *  Node,
const SourceManager SM,
const LangOptions LangOpts 
)
static

Definition at line 844 of file UnsafeBufferUsage.cpp.

References clang::Lexer::getLocForEndOfToken(), Node, and SM.

Referenced by fixVarDeclWithSpan().

◆ getExprText()

static StringRef getExprText ( const Expr E,
const SourceManager SM,
const LangOptions LangOpts 
)
static

◆ getFixIts()

static std::map< const VarDecl *, FixItList > getFixIts ( FixableGadgetSets FixablesForUnsafeVars,
const Strategy &  S,
const DeclUseTracker &  Tracker,
const ASTContext Ctx,
UnsafeBufferUsageHandler Handler 
)
static

◆ getNaiveStrategy()

static Strategy getNaiveStrategy ( const llvm::SmallVectorImpl< const VarDecl * > &  UnsafeVars)
static

Definition at line 1124 of file UnsafeBufferUsage.cpp.

Referenced by clang::checkUnsafeBufferUsage().

◆ getPastLoc()

template<typename NodeTy >
static SourceLocation getPastLoc ( const NodeTy *  Node,
const SourceManager SM,
const LangOptions LangOpts 
)
static

◆ groupFixablesByVar()

static FixableGadgetSets groupFixablesByVar ( FixableGadgetList &&  AllFixableOperations)
static

◆ groupWarningGadgetsByVar()

static WarningGadgetSets groupWarningGadgetsByVar ( WarningGadgetList &&  AllUnsafeOperations)
static

◆ hasArrayType()

static auto hasArrayType ( )
static

Definition at line 167 of file UnsafeBufferUsage.cpp.

References clang::ast_matchers::arrayType.

Referenced by findGadgets().

◆ hasPointerType()

static auto hasPointerType ( )
static

◆ overlapWithMacro()

static bool overlapWithMacro ( const FixItList &  FixIts)
static

Definition at line 1067 of file UnsafeBufferUsage.cpp.

References clang::CharSourceRange::getBegin(), and clang::FixItHint::RemoveRange.

Referenced by getFixIts().

◆ populateInitializerFixItWithSpan()

static FixItList populateInitializerFixItWithSpan ( const Expr Init,
const ASTContext Ctx,
const StringRef  UserFillPlaceHolder 
)
static