LLVM  4.0.0
Public Member Functions | Friends | List of all members
llvm::AssertingVH< ValueTy > Class Template Reference

Value handle that asserts if the Value is deleted. More...

#include <ValueHandle.h>

Inheritance diagram for llvm::AssertingVH< ValueTy >:
[legend]
Collaboration diagram for llvm::AssertingVH< ValueTy >:
[legend]

Public Member Functions

 AssertingVH ()
 
 AssertingVH (ValueTy *P)
 
 AssertingVH (const AssertingVH &RHS)
 
 operator ValueTy * () const
 
ValueTy * operator= (ValueTy *RHS)
 
ValueTy * operator= (const AssertingVH< ValueTy > &RHS)
 
ValueTy * operator-> () const
 
ValueTy & operator* () const
 
- Public Member Functions inherited from llvm::ValueHandleBase
 ValueHandleBase (HandleBaseKind Kind)
 
 ValueHandleBase (HandleBaseKind Kind, Value *V)
 
 ~ValueHandleBase ()
 
Valueoperator= (Value *RHS)
 
Valueoperator= (const ValueHandleBase &RHS)
 
Valueoperator-> () const
 
Valueoperator* () const
 

Friends

struct DenseMapInfo< AssertingVH< ValueTy > >
 

Additional Inherited Members

- Static Public Member Functions inherited from llvm::ValueHandleBase
static void ValueIsDeleted (Value *V)
 
static void ValueIsRAUWd (Value *Old, Value *New)
 
- Protected Types inherited from llvm::ValueHandleBase
enum  HandleBaseKind { Assert, Callback, Tracking, Weak }
 This indicates what sub class the handle actually is. More...
 
- Protected Member Functions inherited from llvm::ValueHandleBase
 ValueHandleBase (const ValueHandleBase &RHS)
 
 ValueHandleBase (HandleBaseKind Kind, const ValueHandleBase &RHS)
 
ValuegetValPtr () const
 
- Static Protected Member Functions inherited from llvm::ValueHandleBase
static bool isValid (Value *V)
 

Detailed Description

template<typename ValueTy>
class llvm::AssertingVH< ValueTy >

Value handle that asserts if the Value is deleted.

This is a Value Handle that points to a value and asserts out if the value is destroyed while the handle is still live. This is very useful for catching dangling pointer bugs and other things which can be non-obvious. One particularly useful place to use this is as the Key of a map. Dangling pointer bugs often lead to really subtle bugs that only occur if another object happens to get allocated to the same address as the old one. Using an AssertingVH ensures that an assert is triggered as soon as the bad delete occurs.

Note that an AssertingVH handle does not follow values across RAUW operations. This means that RAUW's need to explicitly update the AssertingVH's as it moves. This is required because in non-assert mode this class turns into a trivial wrapper around a pointer.

Definition at line 182 of file ValueHandle.h.

Constructor & Destructor Documentation

template<typename ValueTy>
llvm::AssertingVH< ValueTy >::AssertingVH ( )
inline

Definition at line 206 of file ValueHandle.h.

template<typename ValueTy>
llvm::AssertingVH< ValueTy >::AssertingVH ( ValueTy *  P)
inline

Definition at line 207 of file ValueHandle.h.

template<typename ValueTy>
llvm::AssertingVH< ValueTy >::AssertingVH ( const AssertingVH< ValueTy > &  RHS)
inline

Definition at line 208 of file ValueHandle.h.

Member Function Documentation

template<typename ValueTy>
llvm::AssertingVH< ValueTy >::operator ValueTy * ( ) const
inline

Definition at line 214 of file ValueHandle.h.

template<typename ValueTy>
ValueTy& llvm::AssertingVH< ValueTy >::operator* ( ) const
inline

Definition at line 228 of file ValueHandle.h.

template<typename ValueTy>
ValueTy* llvm::AssertingVH< ValueTy >::operator-> ( ) const
inline

Definition at line 227 of file ValueHandle.h.

template<typename ValueTy>
ValueTy* llvm::AssertingVH< ValueTy >::operator= ( ValueTy *  RHS)
inline

Definition at line 218 of file ValueHandle.h.

template<typename ValueTy>
ValueTy* llvm::AssertingVH< ValueTy >::operator= ( const AssertingVH< ValueTy > &  RHS)
inline

Definition at line 222 of file ValueHandle.h.

Friends And Related Function Documentation

template<typename ValueTy>
friend struct DenseMapInfo< AssertingVH< ValueTy > >
friend

Definition at line 187 of file ValueHandle.h.


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