clang 10.0.0git

Public Types | Public Member Functions | List of all members
clang::threadSafety::ThreadSafetyHandler Class Reference

Handler class for thread safety warnings. More...

`#include "clang/Analysis/Analyses/ThreadSafety.h"`

## Public Types
using | Name = StringRef

## Public Member Functions
| ThreadSafetyHandler ()=default
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 LocLocked, SourceLocation LocUnlock)
| 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 LocLocked, SourceLocation LocDoubleLock)
| 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)

## Detailed Description

Handler class for thread safety warnings.

Definition at line 93 of file ThreadSafety.h.

## Member Typedef Documentation

## ◆ Name

using clang::threadSafety::ThreadSafetyHandler::Name = StringRef

Definition at line 95 of file ThreadSafety.h.

## Constructor & Destructor Documentation

## ◆ ThreadSafetyHandler()

clang::threadSafety::ThreadSafetyHandler::ThreadSafetyHandler | ( |  | ) |
| default

## ◆ ~ThreadSafetyHandler()

ThreadSafetyHandler::~ThreadSafetyHandler | ( |  | ) |
| virtual default

## Member Function Documentation

## ◆ enterFunction()

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.

Definition at line 222 of file ThreadSafety.h.

## ◆ handleBeforeAfterCycle()

virtual void clang::threadSafety::ThreadSafetyHandler::handleBeforeAfterCycle | ( | Name | L1Name,
|  | SourceLocation | Loc
| ) |  |
| inline virtual

Warn that there is a cycle in acquired_before/after dependencies.

Definition at line 218 of file ThreadSafety.h.

## ◆ handleDoubleLock()

virtual void clang::threadSafety::ThreadSafetyHandler::handleDoubleLock | ( | StringRef | Kind,
|  | Name | LockName,
|  | SourceLocation | LocLocked,
|  | SourceLocation | LocDoubleLock
| ) |  |
| inline virtual

Warn about lock function calls for locks which are already held.

Parameters

  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 first lock expression.
  LocDoubleLock | – The location of the second lock expression.

Definition at line 135 of file ThreadSafety.h.

Referenced by findBlockLocations().

## ◆ handleExclusiveAndShared()

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.

Parameters

  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 165 of file ThreadSafety.h.

## ◆ handleFunExcludesLock()

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.

Parameters

  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 210 of file ThreadSafety.h.

## ◆ handleIncorrectUnlockKind()

virtual void clang::threadSafety::ThreadSafetyHandler::handleIncorrectUnlockKind | ( | StringRef | Kind,
|  | Name | LockName,
|  | LockKind | Expected,
|  | LockKind | Received,
|  | SourceLocation | LocLocked,
|  | SourceLocation | LocUnlock
| ) |  |
| 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.

Parameters

  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.
  LocLocked | – The SourceLocation of the Lock.
  LocUnlock | – The SourceLocation of the Unlock.

Definition at line 124 of file ThreadSafety.h.

## ◆ handleInvalidLockExp()

virtual void clang::threadSafety::ThreadSafetyHandler::handleInvalidLockExp | ( | StringRef | Kind,
|  | SourceLocation | Loc
| ) |  |
| inline virtual

Warn about lock expressions which fail to resolve to lockable objects.

Parameters

  Kind | – the capability's name parameter (role, mutex, etc).
  Loc | – the SourceLocation of the unresolved expression.

Definition at line 103 of file ThreadSafety.h.

Referenced by warnInvalidLock().

## ◆ handleLockAcquiredBefore()

virtual void clang::threadSafety::ThreadSafetyHandler::handleLockAcquiredBefore | ( | StringRef | Kind,
|  | Name | L1Name,
|  | Name | L2Name,
|  | SourceLocation | Loc
| ) |  |
| inline virtual

Warn that L1 cannot be acquired before L2.

Definition at line 214 of file ThreadSafety.h.

## ◆ handleMutexHeldEndOfScope()

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,
2. or when a mutex is locked but not unlocked inside a function.
   Parameters

     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 152 of file ThreadSafety.h.

Referenced by findBlockLocations().

## ◆ handleMutexNotHeld()

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.

Parameters

  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 188 of file ThreadSafety.h.

## ◆ handleNegativeNotHeld()

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.

Parameters

  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 200 of file ThreadSafety.h.

## ◆ handleNoMutexHeld()

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.

Parameters

  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 175 of file ThreadSafety.h.

## ◆ handleUnmatchedUnlock()

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.

Parameters

  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 111 of file ThreadSafety.h.

Referenced by findBlockLocations().

## ◆ issueBetaWarnings()

bool clang::threadSafety::ThreadSafetyHandler::issueBetaWarnings | ( |  | ) |
| inline

Definition at line 227 of file ThreadSafety.h.

## ◆ leaveFunction()

virtual void clang::threadSafety::ThreadSafetyHandler::leaveFunction | ( | const FunctionDecl * | FD | ) |
| inline virtual

Called by the analysis when finishing analysis of a function.

Definition at line 225 of file ThreadSafety.h.

## ◆ setIssueBetaWarnings()

void clang::threadSafety::ThreadSafetyHandler::setIssueBetaWarnings | ( | bool | b | ) |
| inline

Definition at line 228 of file ThreadSafety.h.

References clang::threadSafety::getLockKindFromAccessKind(), clang::threadSafety::runThreadSafetyAnalysis(), and clang::threadSafety::threadSafetyCleanup().

The documentation for this class was generated from the following files:

- include/clang/Analysis/Analyses/ThreadSafety.h
- lib/Analysis/ThreadSafety.cpp