clang 20.0.0git
Public Member Functions | Protected Member Functions | Friends | List of all members
clang::DiagnosticBuilder Class Reference

A little helper class used to produce diagnostics. More...

#include "clang/Basic/Diagnostic.h"

Inheritance diagram for clang::DiagnosticBuilder:
Inheritance graph
[legend]

Public Member Functions

 DiagnosticBuilder (const DiagnosticBuilder &D)
 Copy constructor.
 
template<typename T >
const DiagnosticBuilderoperator<< (const T &V) const
 
template<typename T , typename = std::enable_if_t<!std::is_lvalue_reference<T>::value>>
const DiagnosticBuilderoperator<< (T &&V) const
 
DiagnosticBuilderoperator= (const DiagnosticBuilder &)=delete
 
 ~DiagnosticBuilder ()
 Emits the diagnostic.
 
const DiagnosticBuildersetForceEmit () const
 Forces the diagnostic to be emitted.
 
void addFlagValue (StringRef V) const
 
- Public Member Functions inherited from clang::StreamingDiagnostic
DiagnosticStoragegetStorage () const
 Retrieve storage for this particular diagnostic.
 
void freeStorage ()
 
void freeStorageSlow ()
 
void AddTaggedVal (uint64_t V, DiagnosticsEngine::ArgumentKind Kind) const
 
void AddString (StringRef V) const
 
void AddSourceRange (const CharSourceRange &R) const
 
void AddFixItHint (const FixItHint &Hint) const
 
 operator bool () const
 Conversion of StreamingDiagnostic to bool always returns true.
 

Protected Member Functions

void Clear () const
 Clear out the current diagnostic.
 
bool isActive () const
 Determine whether this diagnostic is still active.
 
bool Emit ()
 Force the diagnostic builder to emit the diagnostic now.
 
- Protected Member Functions inherited from clang::StreamingDiagnostic
 StreamingDiagnostic ()=default
 
 StreamingDiagnostic (DiagStorageAllocator &Alloc)
 Construct with a storage allocator which will manage the storage.
 
 StreamingDiagnostic (const StreamingDiagnostic &Diag)=default
 
 StreamingDiagnostic (StreamingDiagnostic &&Diag)=default
 
 ~StreamingDiagnostic ()
 

Friends

class DiagnosticsEngine
 
class PartialDiagnostic
 
class Diagnostic
 

Additional Inherited Members

- Public Types inherited from clang::StreamingDiagnostic
using DiagStorageAllocator = clang::DiagStorageAllocator
 
- Protected Attributes inherited from clang::StreamingDiagnostic
DiagnosticStorageDiagStorage = nullptr
 
DiagStorageAllocatorAllocator = nullptr
 Allocator used to allocate storage for this diagnostic.
 

Detailed Description

A little helper class used to produce diagnostics.

This is constructed by the DiagnosticsEngine::Report method, and allows insertion of extra information (arguments and source ranges) into the currently "in flight" diagnostic. When the temporary for the builder is destroyed, the diagnostic is issued.

Note that many of these will be created as temporary objects (many call sites), so we want them to be small and we never want their address taken. This ensures that compilers with somewhat reasonable optimizers will promote the common fields to registers, eliminating increments of the NumArgs field, for example.

Definition at line 1220 of file Diagnostic.h.

Constructor & Destructor Documentation

◆ DiagnosticBuilder()

DiagnosticBuilder::DiagnosticBuilder ( const DiagnosticBuilder D)

Copy constructor.

When copied, this "takes" the diagnostic info from the input and neuters it.

Definition at line 683 of file Diagnostic.cpp.

References clang::StreamingDiagnostic::Allocator, D, and clang::StreamingDiagnostic::DiagStorage.

◆ ~DiagnosticBuilder()

clang::DiagnosticBuilder::~DiagnosticBuilder ( )
inline

Emits the diagnostic.

Definition at line 1312 of file Diagnostic.h.

References Emit().

Member Function Documentation

◆ addFlagValue()

void clang::DiagnosticBuilder::addFlagValue ( StringRef  V) const
inline

Definition at line 1320 of file Diagnostic.h.

References V.

Referenced by clang::operator<<().

◆ Clear()

void clang::DiagnosticBuilder::Clear ( ) const
inlineprotected

Clear out the current diagnostic.

Definition at line 1255 of file Diagnostic.h.

Referenced by Emit(), clang::PartialDiagnostic::EmitToString(), and clang::SemaBase::ImmediateDiagBuilder::~ImmediateDiagBuilder().

◆ Emit()

bool clang::DiagnosticBuilder::Emit ( )
inlineprotected

Force the diagnostic builder to emit the diagnostic now.

Once this function has been called, the DiagnosticBuilder object should not be used again before it is destroyed.

Returns
true if a diagnostic was emitted, false if the diagnostic was suppressed.

Definition at line 1271 of file Diagnostic.h.

References Clear(), clang::DiagnosticsEngine::EmitDiagnostic(), isActive(), and clang::Result.

Referenced by ~DiagnosticBuilder().

◆ isActive()

bool clang::DiagnosticBuilder::isActive ( ) const
inlineprotected

Determine whether this diagnostic is still active.

Definition at line 1262 of file Diagnostic.h.

Referenced by Emit(), operator<<(), and clang::SemaBase::ImmediateDiagBuilder::~ImmediateDiagBuilder().

◆ operator<<() [1/2]

template<typename T >
const DiagnosticBuilder & clang::DiagnosticBuilder::operator<< ( const T V) const
inline

Definition at line 1290 of file Diagnostic.h.

References isActive(), and V.

◆ operator<<() [2/2]

template<typename T , typename = std::enable_if_t<!std::is_lvalue_reference<T>::value>>
const DiagnosticBuilder & clang::DiagnosticBuilder::operator<< ( T &&  V) const
inline

Definition at line 1302 of file Diagnostic.h.

References isActive(), and V.

◆ operator=()

DiagnosticBuilder & clang::DiagnosticBuilder::operator= ( const DiagnosticBuilder )
delete

◆ setForceEmit()

const DiagnosticBuilder & clang::DiagnosticBuilder::setForceEmit ( ) const
inline

Forces the diagnostic to be emitted.

Definition at line 1315 of file Diagnostic.h.

Referenced by PrintExpected(), and PrintUnexpected().

Friends And Related Function Documentation

◆ Diagnostic

friend class Diagnostic
friend

Definition at line 1223 of file Diagnostic.h.

◆ DiagnosticsEngine

friend class DiagnosticsEngine
friend

Definition at line 1221 of file Diagnostic.h.

◆ PartialDiagnostic

friend class PartialDiagnostic
friend

Definition at line 1222 of file Diagnostic.h.


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