clang  3.9.0
Namespaces | Classes | Enumerations | Functions
clang::threadSafety Namespace Reference

Namespaces

 lexpr
 
 sx
 
 til
 

Classes

class  ThreadSafetyHandler
 Handler class for thread safety warnings. More...
 
class  CFGVisitor
 
class  CFGWalker
 
class  CapabilityExpr
 
class  SExprBuilder
 
class  CopyOnWriteVector
 
class  BeforeSet
 

Enumerations

enum  ProtectedOperationKind {
  POK_VarDereference, POK_VarAccess, POK_FunctionCall, POK_PassByRef,
  POK_PtPassByRef
}
 This enum distinguishes between different kinds of operations that may need to be protected by locks. More...
 
enum  LockKind { LK_Shared, LK_Exclusive, LK_Generic }
 This enum distinguishes between different kinds of lock actions. More...
 
enum  AccessKind { AK_Read, AK_Written }
 This enum distinguishes between different ways to access (read or write) a variable. More...
 
enum  LockErrorKind { LEK_LockedSomeLoopIterations, LEK_LockedSomePredecessors, LEK_LockedAtEndOfFunction, LEK_NotLockedAtEndOfFunction }
 

Functions

void runThreadSafetyAnalysis (AnalysisDeclContext &AC, ThreadSafetyHandler &Handler, BeforeSet **Bset)
 Check a function's CFG for thread-safety violations. More...
 
void threadSafetyCleanup (BeforeSet *Cache)
 
LockKind getLockKindFromAccessKind (AccessKind AK)
 Helper function that returns a LockKind required for the given level of access. More...
 
void printSCFG (CFGWalker &Walker)
 
std::string getSourceLiteralString (const clang::Expr *CE)
 
std::ostream & operator<< (std::ostream &ss, const StringRef str)
 

Enumeration Type Documentation

This enum distinguishes between different ways to access (read or write) a variable.

Enumerator
AK_Read 

Reading a variable.

AK_Written 

Writing a variable.

Definition at line 52 of file ThreadSafety.h.

Enumerator
LEK_LockedSomeLoopIterations 
LEK_LockedSomePredecessors 
LEK_LockedAtEndOfFunction 
LEK_NotLockedAtEndOfFunction 

Definition at line 65 of file ThreadSafety.h.

This enum distinguishes between different kinds of lock actions.

For example, it is an error to write a variable protected by shared version of a mutex.

Enumerator
LK_Shared 

Shared/reader lock of a mutex.

LK_Exclusive 

Exclusive/writer lock of a mutex.

LK_Generic 

Can be either Shared or Exclusive.

Definition at line 44 of file ThreadSafety.h.

This enum distinguishes between different kinds of operations that may need to be protected by locks.

We use this enum in error handling.

Enumerator
POK_VarDereference 

Dereferencing a variable (e.g. p in *p = 5;)

POK_VarAccess 

Reading or writing a variable (e.g. x in x = 5;)

POK_FunctionCall 

Making a function call (e.g. fool())

POK_PassByRef 

Passing a guarded variable by reference.

POK_PtPassByRef 

Passing a pt-guarded variable by reference.

Definition at line 33 of file ThreadSafety.h.

Function Documentation

LockKind clang::threadSafety::getLockKindFromAccessKind ( AccessKind  AK)

Helper function that returns a LockKind required for the given level of access.

Definition at line 2398 of file ThreadSafety.cpp.

References AK_Read, AK_Written, LK_Exclusive, and LK_Shared.

std::string clang::threadSafety::getSourceLiteralString ( const clang::Expr CE)
std::ostream& clang::threadSafety::operator<< ( std::ostream &  ss,
const StringRef  str 
)
inline

Definition at line 342 of file ThreadSafetyUtil.h.

void clang::threadSafety::printSCFG ( CFGWalker &  Walker)
void clang::threadSafety::runThreadSafetyAnalysis ( AnalysisDeclContext AC,
ThreadSafetyHandler Handler,
BeforeSet **  BSet 
)

Check a function's CFG for thread-safety violations.

We traverse the blocks in the CFG, compute the set of mutexes that are held at the end of each block, and issue warnings for thread safety violations. Each block in the CFG is traversed exactly once.

Definition at line 2385 of file ThreadSafety.cpp.

Referenced by clang::sema::AnalysisBasedWarnings::IssueWarnings().

void clang::threadSafety::threadSafetyCleanup ( BeforeSet Cache)

Definition at line 2394 of file ThreadSafety.cpp.

Referenced by clang::Sema::~Sema().