clang API Documentation
Handler class for thread safety warnings. More...
#include <ThreadSafety.h>
Public Types | |
typedef StringRef | Name |
Public Member Functions | |
ThreadSafetyHandler () | |
virtual | ~ThreadSafetyHandler () |
virtual void | handleInvalidLockExp (StringRef Kind, SourceLocation Loc) |
virtual void | handleUnmatchedUnlock (StringRef Kind, Name LockName, SourceLocation Loc) |
virtual void | handleIncorrectUnlockKind (StringRef Kind, Name LockName, LockKind Expected, LockKind Received, SourceLocation Loc) |
virtual void | handleDoubleLock (StringRef Kind, Name LockName, SourceLocation Loc) |
virtual void | handleMutexHeldEndOfScope (StringRef Kind, Name LockName, SourceLocation LocLocked, SourceLocation LocEndOfScope, LockErrorKind LEK) |
virtual void | handleExclusiveAndShared (StringRef Kind, Name LockName, SourceLocation Loc1, SourceLocation Loc2) |
virtual void | handleNoMutexHeld (StringRef Kind, const NamedDecl *D, ProtectedOperationKind POK, AccessKind AK, SourceLocation Loc) |
virtual void | handleMutexNotHeld (StringRef Kind, const NamedDecl *D, ProtectedOperationKind POK, Name LockName, LockKind LK, SourceLocation Loc, Name *PossibleMatch=nullptr) |
virtual void | handleNegativeNotHeld (StringRef Kind, Name LockName, Name Neg, SourceLocation Loc) |
virtual void | handleFunExcludesLock (StringRef Kind, Name FunName, Name LockName, SourceLocation Loc) |
virtual void | enterFunction (const FunctionDecl *FD) |
virtual void | leaveFunction (const FunctionDecl *FD) |
Called by the analysis when finishing analysis of a function. | |
bool | issueBetaWarnings () |
void | setIssueBetaWarnings (bool b) |
Handler class for thread safety warnings.
Definition at line 71 of file ThreadSafety.h.
typedef StringRef clang::threadSafety::ThreadSafetyHandler::Name |
Definition at line 73 of file ThreadSafety.h.
Definition at line 74 of file ThreadSafety.h.
Definition at line 53 of file ThreadSafety.cpp.
virtual void clang::threadSafety::ThreadSafetyHandler::enterFunction | ( | const FunctionDecl * | FD | ) | [inline, virtual] |
Called by the analysis when starting analysis of a function. Used to issue suggestions for changes to annotations.
Reimplemented in clang::threadSafety::ThreadSafetyReporter.
Definition at line 188 of file ThreadSafety.h.
Referenced by clang::threadSafety::ThreadSafetyAnalyzer::runAnalysis().
virtual void clang::threadSafety::ThreadSafetyHandler::handleDoubleLock | ( | StringRef | Kind, |
Name | LockName, | ||
SourceLocation | Loc | ||
) | [inline, virtual] |
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. |
Reimplemented in clang::threadSafety::ThreadSafetyReporter.
Definition at line 109 of file ThreadSafety.h.
Referenced by clang::threadSafety::ThreadSafetyAnalyzer::addLock().
virtual void clang::threadSafety::ThreadSafetyHandler::handleExclusiveAndShared | ( | StringRef | Kind, |
Name | LockName, | ||
SourceLocation | Loc1, | ||
SourceLocation | Loc2 | ||
) | [inline, virtual] |
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. |
Reimplemented in clang::threadSafety::ThreadSafetyReporter.
Definition at line 138 of file ThreadSafety.h.
Referenced by clang::threadSafety::ThreadSafetyAnalyzer::intersectAndWarn().
virtual void clang::threadSafety::ThreadSafetyHandler::handleFunExcludesLock | ( | StringRef | Kind, |
Name | FunName, | ||
Name | LockName, | ||
SourceLocation | Loc | ||
) | [inline, virtual] |
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. |
Reimplemented in clang::threadSafety::ThreadSafetyReporter.
Definition at line 183 of file ThreadSafety.h.
virtual void clang::threadSafety::ThreadSafetyHandler::handleIncorrectUnlockKind | ( | StringRef | Kind, |
Name | LockName, | ||
LockKind | Expected, | ||
LockKind | Received, | ||
SourceLocation | Loc | ||
) | [inline, virtual] |
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. |
Reimplemented in clang::threadSafety::ThreadSafetyReporter.
Definition at line 100 of file ThreadSafety.h.
Referenced by clang::threadSafety::ThreadSafetyAnalyzer::removeLock().
virtual void clang::threadSafety::ThreadSafetyHandler::handleInvalidLockExp | ( | StringRef | Kind, |
SourceLocation | Loc | ||
) | [inline, virtual] |
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. |
Reimplemented in clang::threadSafety::ThreadSafetyReporter.
Definition at line 80 of file ThreadSafety.h.
Referenced by clang::threadSafety::warnInvalidLock().
virtual void clang::threadSafety::ThreadSafetyHandler::handleMutexHeldEndOfScope | ( | StringRef | Kind, |
Name | LockName, | ||
SourceLocation | LocLocked, | ||
SourceLocation | LocEndOfScope, | ||
LockErrorKind | LEK | ||
) | [inline, virtual] |
Warn about situations where a mutex is sometimes held and sometimes not. The three situations are: 1. a mutex is locked on an "if" branch but not the "else" branch, 2, or a mutex is only held at the start of some loop iterations, 3. or when a mutex is locked but not unlocked inside a function.
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 |
Reimplemented in clang::threadSafety::ThreadSafetyReporter.
Definition at line 125 of file ThreadSafety.h.
Referenced by clang::threadSafety::LockableFactEntry::handleRemovalFromIntersection(), and clang::threadSafety::ScopedLockableFactEntry::handleRemovalFromIntersection().
virtual void clang::threadSafety::ThreadSafetyHandler::handleMutexNotHeld | ( | StringRef | Kind, |
const NamedDecl * | D, | ||
ProtectedOperationKind | POK, | ||
Name | LockName, | ||
LockKind | LK, | ||
SourceLocation | Loc, | ||
Name * | PossibleMatch = nullptr |
||
) | [inline, virtual] |
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. |
Reimplemented in clang::threadSafety::ThreadSafetyReporter.
Definition at line 161 of file ThreadSafety.h.
virtual void clang::threadSafety::ThreadSafetyHandler::handleNegativeNotHeld | ( | StringRef | Kind, |
Name | LockName, | ||
Name | Neg, | ||
SourceLocation | Loc | ||
) | [inline, virtual] |
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. |
Reimplemented in clang::threadSafety::ThreadSafetyReporter.
Definition at line 173 of file ThreadSafety.h.
Referenced by clang::threadSafety::ThreadSafetyAnalyzer::addLock().
virtual void clang::threadSafety::ThreadSafetyHandler::handleNoMutexHeld | ( | StringRef | Kind, |
const NamedDecl * | D, | ||
ProtectedOperationKind | POK, | ||
AccessKind | AK, | ||
SourceLocation | Loc | ||
) | [inline, virtual] |
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. |
Reimplemented in clang::threadSafety::ThreadSafetyReporter.
Definition at line 148 of file ThreadSafety.h.
virtual void clang::threadSafety::ThreadSafetyHandler::handleUnmatchedUnlock | ( | StringRef | Kind, |
Name | LockName, | ||
SourceLocation | Loc | ||
) | [inline, virtual] |
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 |
Reimplemented in clang::threadSafety::ThreadSafetyReporter.
Definition at line 88 of file ThreadSafety.h.
Referenced by clang::threadSafety::ScopedLockableFactEntry::handleUnlock(), and clang::threadSafety::ThreadSafetyAnalyzer::removeLock().
Definition at line 193 of file ThreadSafety.h.
virtual void clang::threadSafety::ThreadSafetyHandler::leaveFunction | ( | const FunctionDecl * | FD | ) | [inline, virtual] |
Called by the analysis when finishing analysis of a function.
Reimplemented in clang::threadSafety::ThreadSafetyReporter.
Definition at line 191 of file ThreadSafety.h.
Referenced by clang::threadSafety::ThreadSafetyAnalyzer::runAnalysis().
void clang::threadSafety::ThreadSafetyHandler::setIssueBetaWarnings | ( | bool | b | ) | [inline] |
Definition at line 194 of file ThreadSafety.h.
Referenced by clang::sema::AnalysisBasedWarnings::IssueWarnings().