clang
6.0.0
|
Handler class for thread safety warnings. More...
#include "clang/Analysis/Analyses/ThreadSafety.h"
Public Types | |
typedef StringRef | Name |
Public Member Functions | |
ThreadSafetyHandler () | |
virtual | ~ThreadSafetyHandler () |
virtual void | handleInvalidLockExp (StringRef Kind, SourceLocation Loc) |
Warn about lock expressions which fail to resolve to lockable objects. More... | |
virtual void | handleUnmatchedUnlock (StringRef Kind, Name LockName, SourceLocation Loc) |
Warn about unlock function calls that do not have a prior matching lock expression. More... | |
virtual void | handleIncorrectUnlockKind (StringRef Kind, Name LockName, LockKind Expected, LockKind Received, SourceLocation Loc) |
Warn about an unlock function call that attempts to unlock a lock with the incorrect lock kind. More... | |
virtual void | handleDoubleLock (StringRef Kind, Name LockName, SourceLocation Loc) |
Warn about lock function calls for locks which are already held. More... | |
virtual void | handleMutexHeldEndOfScope (StringRef Kind, Name LockName, SourceLocation LocLocked, SourceLocation LocEndOfScope, LockErrorKind LEK) |
Warn about situations where a mutex is sometimes held and sometimes not. More... | |
virtual void | handleExclusiveAndShared (StringRef Kind, Name LockName, SourceLocation Loc1, SourceLocation Loc2) |
Warn when a mutex is held exclusively and shared at the same point. More... | |
virtual void | handleNoMutexHeld (StringRef Kind, const NamedDecl *D, ProtectedOperationKind POK, AccessKind AK, SourceLocation Loc) |
Warn when a protected operation occurs while no locks are held. More... | |
virtual void | handleMutexNotHeld (StringRef Kind, const NamedDecl *D, ProtectedOperationKind POK, Name LockName, LockKind LK, SourceLocation Loc, Name *PossibleMatch=nullptr) |
Warn when a protected operation occurs while the specific mutex protecting the operation is not locked. More... | |
virtual void | handleNegativeNotHeld (StringRef Kind, Name LockName, Name Neg, SourceLocation Loc) |
Warn when acquiring a lock that the negative capability is not held. More... | |
virtual void | handleFunExcludesLock (StringRef Kind, Name FunName, Name LockName, SourceLocation Loc) |
Warn when a function is called while an excluded mutex is locked. More... | |
virtual void | handleLockAcquiredBefore (StringRef Kind, Name L1Name, Name L2Name, SourceLocation Loc) |
Warn that L1 cannot be acquired before L2. More... | |
virtual void | handleBeforeAfterCycle (Name L1Name, SourceLocation Loc) |
Warn that there is a cycle in acquired_before/after dependencies. More... | |
virtual void | enterFunction (const FunctionDecl *FD) |
Called by the analysis when starting analysis of a function. More... | |
virtual void | leaveFunction (const FunctionDecl *FD) |
Called by the analysis when finishing analysis of a function. More... | |
bool | issueBetaWarnings () |
void | setIssueBetaWarnings (bool b) |
Handler class for thread safety warnings.
Definition at line 73 of file ThreadSafety.h.
typedef StringRef clang::threadSafety::ThreadSafetyHandler::Name |
Definition at line 75 of file ThreadSafety.h.
|
inline |
Definition at line 76 of file ThreadSafety.h.
References ~ThreadSafetyHandler().
|
virtual |
Definition at line 49 of file ThreadSafety.cpp.
References clang::threadSafety::CapabilityExpr::equals(), clang::Expr::getExprLoc(), handleInvalidLockExp(), clang::SourceLocation::isValid(), clang::threadSafety::LK_Exclusive, clang::threadSafety::LK_Shared, and clang::threadSafety::sx::matches().
Referenced by ThreadSafetyHandler().
|
inlinevirtual |
Called by the analysis when starting analysis of a function.
Used to issue suggestions for changes to annotations.
Definition at line 198 of file ThreadSafety.h.
|
inlinevirtual |
Warn that there is a cycle in acquired_before/after dependencies.
Definition at line 194 of file ThreadSafety.h.
|
inlinevirtual |
Warn about lock function calls for locks which are already held.
Kind | – the capability's name parameter (role, mutex, etc). |
LockName | – A StringRef name for the lock expression, to be printed in the error message. |
Loc | – The location of the second lock expression. |
Definition at line 111 of file ThreadSafety.h.
|
inlinevirtual |
Warn when a mutex is held exclusively and shared at the same point.
For example, if a mutex is locked exclusively during an if branch and shared during the else branch.
Kind | – the capability's name parameter (role, mutex, etc). |
LockName | – A StringRef name for the lock expression, to be printed in the error message. |
Loc1 | – The location of the first lock expression. |
Loc2 | – The location of the second lock expression. |
Definition at line 140 of file ThreadSafety.h.
|
inlinevirtual |
Warn when a function is called while an excluded mutex is locked.
For example, the mutex may be locked inside the function.
Kind | – the capability's name parameter (role, mutex, etc). |
FunName | – The name of the function |
LockName | – A StringRef name for the lock expression, to be printed in the error message. |
Loc | – The location of the function call. |
Definition at line 185 of file ThreadSafety.h.
|
inlinevirtual |
Warn about an unlock function call that attempts to unlock a lock with the incorrect lock kind.
For instance, a shared lock being unlocked exclusively, or vice versa.
LockName | – A StringRef name for the lock expression, to be printed in the error message. |
Kind | – the capability's name parameter (role, mutex, etc). |
Expected | – the kind of lock expected. |
Received | – the kind of lock received. |
Loc | – The SourceLocation of the Unlock. |
Definition at line 102 of file ThreadSafety.h.
|
inlinevirtual |
Warn about lock expressions which fail to resolve to lockable objects.
Kind | – the capability's name parameter (role, mutex, etc). |
Loc | – the SourceLocation of the unresolved expression. |
Definition at line 82 of file ThreadSafety.h.
Referenced by ~ThreadSafetyHandler().
|
inlinevirtual |
Warn that L1 cannot be acquired before L2.
Definition at line 190 of file ThreadSafety.h.
|
inlinevirtual |
Warn about situations where a mutex is sometimes held and sometimes not.
The three situations are:
Kind | – the capability's name parameter (role, mutex, etc). |
LockName | – A StringRef name for the lock expression, to be printed in the error message. |
LocLocked | – The location of the lock expression where the mutex is locked |
LocEndOfScope | – The location of the end of the scope where the mutex is no longer held |
LEK | – which of the three above cases we should warn for |
Definition at line 127 of file ThreadSafety.h.
|
inlinevirtual |
Warn when a protected operation occurs while the specific mutex protecting the operation is not locked.
Kind | – the capability's name parameter (role, mutex, etc). |
D | – The decl for the protected variable or function |
POK | – The kind of protected operation (e.g. variable access) |
LockName | – A StringRef name for the lock expression, to be printed in the error message. |
LK | – The kind of access (i.e. read or write) that occurred |
Loc | – The location of the protected operation. |
Definition at line 163 of file ThreadSafety.h.
|
inlinevirtual |
Warn when acquiring a lock that the negative capability is not held.
Kind | – the capability's name parameter (role, mutex, etc). |
LockName | – The name for the lock expression, to be printed in the diagnostic. |
Neg | – The name of the negative capability to be printed in the diagnostic. |
Loc | – The location of the protected operation. |
Definition at line 175 of file ThreadSafety.h.
|
inlinevirtual |
Warn when a protected operation occurs while no locks are held.
Kind | – the capability's name parameter (role, mutex, etc). |
D | – The decl for the protected variable or function |
POK | – The kind of protected operation (e.g. variable access) |
AK | – The kind of access (i.e. read or write) that occurred |
Loc | – The location of the protected operation. |
Definition at line 150 of file ThreadSafety.h.
|
inlinevirtual |
Warn about unlock function calls that do not have a prior matching lock expression.
Kind | – the capability's name parameter (role, mutex, etc). |
LockName | – A StringRef name for the lock expression, to be printed in the error message. |
Loc | – The SourceLocation of the Unlock |
Definition at line 90 of file ThreadSafety.h.
|
inline |
Definition at line 203 of file ThreadSafety.h.
|
inlinevirtual |
Called by the analysis when finishing analysis of a function.
Definition at line 201 of file ThreadSafety.h.
|
inline |
Definition at line 204 of file ThreadSafety.h.
References clang::threadSafety::getLockKindFromAccessKind(), clang::threadSafety::runThreadSafetyAnalysis(), and clang::threadSafety::threadSafetyCleanup().