clang
7.0.0
|
#include "clang/Analysis/Analyses/ThreadSafety.h"
#include "clang/AST/Attr.h"
#include "clang/AST/Decl.h"
#include "clang/AST/DeclCXX.h"
#include "clang/AST/DeclGroup.h"
#include "clang/AST/Expr.h"
#include "clang/AST/ExprCXX.h"
#include "clang/AST/OperationKinds.h"
#include "clang/AST/Stmt.h"
#include "clang/AST/StmtVisitor.h"
#include "clang/AST/Type.h"
#include "clang/Analysis/Analyses/PostOrderCFGView.h"
#include "clang/Analysis/Analyses/ThreadSafetyCommon.h"
#include "clang/Analysis/Analyses/ThreadSafetyTIL.h"
#include "clang/Analysis/Analyses/ThreadSafetyTraverse.h"
#include "clang/Analysis/Analyses/ThreadSafetyUtil.h"
#include "clang/Analysis/AnalysisDeclContext.h"
#include "clang/Analysis/CFG.h"
#include "clang/Basic/LLVM.h"
#include "clang/Basic/OperatorKinds.h"
#include "clang/Basic/SourceLocation.h"
#include "clang/Basic/Specifiers.h"
#include "llvm/ADT/ArrayRef.h"
#include "llvm/ADT/DenseMap.h"
#include "llvm/ADT/ImmutableMap.h"
#include "llvm/ADT/Optional.h"
#include "llvm/ADT/STLExtras.h"
#include "llvm/ADT/SmallVector.h"
#include "llvm/ADT/StringRef.h"
#include "llvm/Support/Allocator.h"
#include "llvm/Support/Casting.h"
#include "llvm/Support/ErrorHandling.h"
#include "llvm/Support/raw_ostream.h"
#include <algorithm>
#include <cassert>
#include <functional>
#include <iterator>
#include <memory>
#include <string>
#include <type_traits>
#include <utility>
#include <vector>
Go to the source code of this file.
Classes | |
class | clang::threadSafety::BeforeSet |
Namespaces | |
clang | |
Dataflow Directional Tag Classes. | |
clang::threadSafety | |
Enumerations | |
enum | CFGBlockSide |
A side (entry or exit) of a CFG node. More... | |
Functions | |
static void | warnInvalidLock (ThreadSafetyHandler &Handler, const Expr *MutexExp, const NamedDecl *D, const Expr *DeclExp, StringRef Kind) |
Issue a warning about an invalid lock expression. More... | |
static void | findBlockLocations (CFG *CFGraph, const PostOrderCFGView *SortedGraph, std::vector< CFGBlockInfo > &BlockInfo) |
Find the appropriate source locations to use when producing diagnostics for each block in the CFG. More... | |
static const ValueDecl * | getValueDecl (const Expr *Exp) |
Gets the value decl pointer from DeclRefExprs or MemberExprs. More... | |
static StringRef | ClassifyDiagnostic (const CapabilityAttr *A) |
static StringRef | ClassifyDiagnostic (QualType VDT) |
static StringRef | ClassifyDiagnostic (const ValueDecl *VD) |
template<typename AttrTy > | |
static std::enable_if<!has_arg_iterator_range< AttrTy >::value, StringRef >::type | ClassifyDiagnostic (const AttrTy *A) |
template<typename AttrTy > | |
static std::enable_if< has_arg_iterator_range< AttrTy >::value, StringRef >::type | ClassifyDiagnostic (const AttrTy *A) |
static bool | getStaticBooleanValue (Expr *E, bool &TCond) |
static CXXConstructorDecl * | findConstructorForByValueReturn (const CXXRecordDecl *RD) |
static Expr * | buildFakeCtorCall (CXXConstructorDecl *CD, ArrayRef< Expr *> Args, SourceLocation Loc) |
static bool | neverReturns (const CFGBlock *B) |
enum CFGBlockSide |
A side (entry or exit) of a CFG node.
Definition at line 323 of file ThreadSafety.cpp.
|
static |
Definition at line 2040 of file ThreadSafety.cpp.
References clang::CXXConstructExpr::CK_Complete, clang::CXXConstructExpr::Create(), clang::Decl::getASTContext(), clang::DeclStmt::getDeclGroup(), clang::CXXMethodDecl::getParent(), and clang::ASTContext::getRecordType().
|
static |
Definition at line 1164 of file ThreadSafety.cpp.
Referenced by ClassifyDiagnostic().
|
static |
Definition at line 1168 of file ThreadSafety.cpp.
References ClassifyDiagnostic(), clang::Type::getAs(), clang::Type::getPointeeType(), clang::Type::isPointerType(), and clang::Type::isReferenceType().
|
static |
Definition at line 1186 of file ThreadSafety.cpp.
References ClassifyDiagnostic(), and clang::ValueDecl::getType().
|
static |
Definition at line 1196 of file ThreadSafety.cpp.
References ClassifyDiagnostic(), and getValueDecl().
|
static |
Definition at line 1205 of file ThreadSafety.cpp.
References ClassifyDiagnostic(), getValueDecl(), clang::threadSafety::CapabilityExpr::isInvalid(), clang::threadSafety::LK_Generic, P, clang::threadSafety::CapabilityExpr::sexpr(), clang::threadSafety::CapabilityExpr::shouldIgnore(), clang::CFGBlock::succ_begin(), clang::CFGBlock::succ_end(), clang::threadSafety::CapabilityExpr::toString(), and warnInvalidLock().
|
static |
Find the appropriate source locations to use when producing diagnostics for each block in the CFG.
Definition at line 813 of file ThreadSafety.cpp.
References clang::CFG::getExit(), clang::DeclStmt::getLocStart(), clang::threadSafety::ThreadSafetyHandler::handleMutexHeldEndOfScope(), clang::threadSafety::ThreadSafetyHandler::handleUnmatchedUnlock(), clang::threadSafety::LK_Exclusive, clang::threadSafety::CapabilityExpr::negative(), clang::threadSafety::sx::toString(), and clang::threadSafety::CapabilityExpr::toString().
|
static |
Definition at line 2023 of file ThreadSafety.cpp.
References clang::CXXRecordDecl::ctors(), and clang::CXXConstructorDecl::isCopyConstructor().
Definition at line 1348 of file ThreadSafety.cpp.
Gets the value decl pointer from DeclRefExprs or MemberExprs.
Definition at line 1132 of file ThreadSafety.cpp.
Referenced by ClassifyDiagnostic().
Definition at line 2152 of file ThreadSafety.cpp.
References clang::CFGBlock::back(), clang::CFGBlock::empty(), clang::CFGElement::getAs(), clang::threadSafety::CFGWalker::getDecl(), clang::threadSafety::CFGWalker::getGraph(), clang::CFGBlock::hasNoReturnElement(), clang::threadSafety::CFGWalker::init(), and clang::Last.
|
static |
Issue a warning about an invalid lock expression.
Definition at line 75 of file ThreadSafety.cpp.
References clang::threadSafety::CapabilityExpr::equals(), clang::Expr::getExprLoc(), clang::threadSafety::ThreadSafetyHandler::handleInvalidLockExp(), clang::SourceLocation::isValid(), clang::threadSafety::LK_Exclusive, clang::threadSafety::LK_Shared, and clang::threadSafety::sx::matches().
Referenced by ClassifyDiagnostic().