clang 20.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 (SourceLocation Loc)
 Warn about lock expressions which fail to resolve to lockable objects.
 
virtual void handleUnmatchedUnlock (StringRef Kind, Name LockName, SourceLocation Loc, SourceLocation LocPreviousUnlock)
 Warn about unlock function calls that do not have a prior matching lock expression.
 
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.
 
virtual void handleDoubleLock (StringRef Kind, Name LockName, SourceLocation LocLocked, SourceLocation LocDoubleLock)
 Warn about lock function calls for locks which are already held.
 
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.
 
virtual void handleExclusiveAndShared (StringRef Kind, Name LockName, SourceLocation Loc1, SourceLocation Loc2)
 Warn when a mutex is held exclusively and shared at the same point.
 
virtual void handleNoMutexHeld (const NamedDecl *D, ProtectedOperationKind POK, AccessKind AK, SourceLocation Loc)
 Warn when a protected operation occurs while no locks are held.
 
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.
 
virtual void handleNegativeNotHeld (StringRef Kind, Name LockName, Name Neg, SourceLocation Loc)
 Warn when acquiring a lock that the negative capability is not held.
 
virtual void handleNegativeNotHeld (const NamedDecl *D, Name LockName, SourceLocation Loc)
 Warn when calling a function that a negative capability is not held.
 
virtual void handleFunExcludesLock (StringRef Kind, Name FunName, Name LockName, SourceLocation Loc)
 Warn when a function is called while an excluded mutex is locked.
 
virtual void handleLockAcquiredBefore (StringRef Kind, Name L1Name, Name L2Name, SourceLocation Loc)
 Warn that L1 cannot be acquired before L2.
 
virtual void handleBeforeAfterCycle (Name L1Name, SourceLocation Loc)
 Warn that there is a cycle in acquired_before/after dependencies.
 
virtual void enterFunction (const FunctionDecl *FD)
 Called by the analysis when starting analysis of a function.
 
virtual void leaveFunction (const FunctionDecl *FD)
 Called by the analysis when finishing analysis of a function.
 
bool issueBetaWarnings ()
 
void setIssueBetaWarnings (bool b)
 

Detailed Description

Handler class for thread safety warnings.

Definition at line 99 of file ThreadSafety.h.

Member Typedef Documentation

◆ Name

Definition at line 101 of file ThreadSafety.h.

Constructor & Destructor Documentation

◆ ThreadSafetyHandler()

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

◆ ~ThreadSafetyHandler()

ThreadSafetyHandler::~ThreadSafetyHandler ( )
virtualdefault

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

◆ handleDoubleLock()

virtual void clang::threadSafety::ThreadSafetyHandler::handleDoubleLock ( StringRef  Kind,
Name  LockName,
SourceLocation  LocLocked,
SourceLocation  LocDoubleLock 
)
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.
LocLocked– The location of the first lock expression.
LocDoubleLock– The location of the second lock expression.

Definition at line 142 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 172 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 223 of file ThreadSafety.h.

◆ handleIncorrectUnlockKind()

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

Definition at line 131 of file ThreadSafety.h.

◆ handleInvalidLockExp()

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

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

Parameters
Loc– the SourceLocation of the unresolved expression.

Definition at line 108 of file ThreadSafety.h.

Referenced by warnInvalidLock().

◆ 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 227 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 159 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 193 of file ThreadSafety.h.

◆ handleNegativeNotHeld() [1/2]

virtual void clang::threadSafety::ThreadSafetyHandler::handleNegativeNotHeld ( const NamedDecl D,
Name  LockName,
SourceLocation  Loc 
)
inlinevirtual

Warn when calling a function that a negative capability is not held.

Parameters
D– The decl for the function requiring the negative capability.
LockName– The name for the lock expression, to be printed in the diagnostic.
Loc– The location of the protected operation.

Definition at line 213 of file ThreadSafety.h.

◆ handleNegativeNotHeld() [2/2]

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

◆ handleNoMutexHeld()

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

Warn when a protected operation occurs while no locks are held.

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

◆ handleUnmatchedUnlock()

virtual void clang::threadSafety::ThreadSafetyHandler::handleUnmatchedUnlock ( StringRef  Kind,
Name  LockName,
SourceLocation  Loc,
SourceLocation  LocPreviousUnlock 
)
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
LocPreviousUnlock– If valid, the location of a previous Unlock.

Definition at line 117 of file ThreadSafety.h.

◆ issueBetaWarnings()

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

Definition at line 240 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 238 of file ThreadSafety.h.

◆ setIssueBetaWarnings()

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

Definition at line 241 of file ThreadSafety.h.

References b.


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