clang  6.0.0svn
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

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)
 

Detailed Description

Handler class for thread safety warnings.

Definition at line 73 of file ThreadSafety.h.

Member Typedef Documentation

◆ Name

Definition at line 75 of file ThreadSafety.h.

Constructor & Destructor Documentation

◆ ThreadSafetyHandler()

clang::threadSafety::ThreadSafetyHandler::ThreadSafetyHandler ( )
inline

Definition at line 76 of file ThreadSafety.h.

References ~ThreadSafetyHandler().

◆ ~ThreadSafetyHandler()

ThreadSafetyHandler::~ThreadSafetyHandler ( )
virtual

Member Function Documentation

◆ enterFunction()

virtual void clang::threadSafety::ThreadSafetyHandler::enterFunction ( const FunctionDecl FD)
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.

◆ handleBeforeAfterCycle()

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

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

Definition at line 194 of file ThreadSafety.h.

◆ handleDoubleLock()

virtual void clang::threadSafety::ThreadSafetyHandler::handleDoubleLock ( StringRef  Kind,
Name  LockName,
SourceLocation  Loc 
)
inlinevirtual

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

Definition at line 111 of file ThreadSafety.h.

◆ handleExclusiveAndShared()

virtual void clang::threadSafety::ThreadSafetyHandler::handleExclusiveAndShared ( StringRef  Kind,
Name  LockName,
SourceLocation  Loc1,
SourceLocation  Loc2 
)
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.

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

◆ handleFunExcludesLock()

virtual void clang::threadSafety::ThreadSafetyHandler::handleFunExcludesLock ( StringRef  Kind,
Name  FunName,
Name  LockName,
SourceLocation  Loc 
)
inlinevirtual

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

◆ handleIncorrectUnlockKind()

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

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.
Loc– The SourceLocation of the Unlock.

Definition at line 102 of file ThreadSafety.h.

◆ handleInvalidLockExp()

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

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

Referenced by ~ThreadSafetyHandler().

◆ handleLockAcquiredBefore()

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

Warn that L1 cannot be acquired before L2.

Definition at line 190 of file ThreadSafety.h.

◆ handleMutexHeldEndOfScope()

virtual void clang::threadSafety::ThreadSafetyHandler::handleMutexHeldEndOfScope ( StringRef  Kind,
Name  LockName,
SourceLocation  LocLocked,
SourceLocation  LocEndOfScope,
LockErrorKind  LEK 
)
inlinevirtual

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

◆ handleMutexNotHeld()

virtual void clang::threadSafety::ThreadSafetyHandler::handleMutexNotHeld ( StringRef  Kind,
const NamedDecl D,
ProtectedOperationKind  POK,
Name  LockName,
LockKind  LK,
SourceLocation  Loc,
Name PossibleMatch = nullptr 
)
inlinevirtual

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

◆ handleNegativeNotHeld()

virtual void clang::threadSafety::ThreadSafetyHandler::handleNegativeNotHeld ( StringRef  Kind,
Name  LockName,
Name  Neg,
SourceLocation  Loc 
)
inlinevirtual

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

◆ handleNoMutexHeld()

virtual void clang::threadSafety::ThreadSafetyHandler::handleNoMutexHeld ( StringRef  Kind,
const NamedDecl D,
ProtectedOperationKind  POK,
AccessKind  AK,
SourceLocation  Loc 
)
inlinevirtual

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

◆ handleUnmatchedUnlock()

virtual void clang::threadSafety::ThreadSafetyHandler::handleUnmatchedUnlock ( StringRef  Kind,
Name  LockName,
SourceLocation  Loc 
)
inlinevirtual

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

◆ issueBetaWarnings()

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

Definition at line 203 of file ThreadSafety.h.

◆ leaveFunction()

virtual void clang::threadSafety::ThreadSafetyHandler::leaveFunction ( const FunctionDecl FD)
inlinevirtual

Called by the analysis when finishing analysis of a function.

Definition at line 201 of file ThreadSafety.h.

◆ setIssueBetaWarnings()

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

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