clang 20.0.0git
|
A generic diagnostic builder for errors which may or may not be deferred. More...
#include "clang/Sema/SemaBase.h"
Public Types | |
enum | Kind { K_Nop , K_Immediate , K_ImmediateWithCallStack , K_Deferred } |
using | DeferredDiagnosticsType = llvm::DenseMap< CanonicalDeclPtr< const FunctionDecl >, std::vector< PartialDiagnosticAt > > |
Public Member Functions | |
SemaDiagnosticBuilder (Kind K, SourceLocation Loc, unsigned DiagID, const FunctionDecl *Fn, Sema &S) | |
SemaDiagnosticBuilder (SemaDiagnosticBuilder &&D) | |
SemaDiagnosticBuilder (const SemaDiagnosticBuilder &)=default | |
SemaDiagnosticBuilder & | operator= (const SemaDiagnosticBuilder &)=delete |
SemaDiagnosticBuilder & | operator= (SemaDiagnosticBuilder &&)=delete |
~SemaDiagnosticBuilder () | |
bool | isImmediate () const |
operator bool () const | |
Convertible to bool: True if we immediately emitted an error, false if we didn't emit an error or we created a deferred error. | |
template<typename T , typename = std::enable_if_t<!std::is_lvalue_reference<T>::value>> | |
const SemaDiagnosticBuilder & | operator<< (T &&V) const |
void | AddFixItHint (const FixItHint &Hint) const |
operator ExprResult () const | |
operator StmtResult () const | |
operator TypeResult () const | |
operator DeclResult () const | |
operator MemInitResult () const | |
Friends | |
template<typename T > | |
const SemaDiagnosticBuilder & | operator<< (const SemaDiagnosticBuilder &Diag, const T &Value) |
const SemaDiagnosticBuilder & | operator<< (const SemaDiagnosticBuilder &Diag, const PartialDiagnostic &PD) |
ExprResult | ExprError (const SemaDiagnosticBuilder &) |
StmtResult | StmtError (const SemaDiagnosticBuilder &) |
A generic diagnostic builder for errors which may or may not be deferred.
In CUDA, there exist constructs (e.g. variable-length arrays, try/catch) which are not allowed to appear inside device functions and are allowed to appear in host device functions only if the host+device function is never codegen'ed.
To handle this, we use the notion of "deferred diagnostics", where we attach a diagnostic to a FunctionDecl that's emitted iff it's codegen'ed.
This class lets you emit either a regular diagnostic, a deferred diagnostic, or no diagnostic at all, according to an argument you pass to its constructor, thus simplifying the process of creating these "maybe deferred" diagnostics.
Definition at line 110 of file SemaBase.h.
using clang::SemaBase::SemaDiagnosticBuilder::DeferredDiagnosticsType = llvm::DenseMap<CanonicalDeclPtr<const FunctionDecl>, std::vector<PartialDiagnosticAt> > |
Definition at line 194 of file SemaBase.h.
Enumerator | |
---|---|
K_Nop | Emit no diagnostics. |
K_Immediate | Emit the diagnostic immediately (i.e., behave like Sema::Diag()). |
K_ImmediateWithCallStack | Emit the diagnostic immediately, and, if it's a warning or error, also emit a call stack showing how this function can be reached by an a priori known-emitted function. |
K_Deferred | Create a deferred diagnostic, which is emitted only if the function it's attached to is codegen'ed. Also emit a call stack as with K_ImmediateWithCallStack. |
Definition at line 112 of file SemaBase.h.
clang::SemaBase::SemaDiagnosticBuilder::SemaDiagnosticBuilder | ( | Kind | K, |
SourceLocation | Loc, | ||
unsigned | DiagID, | ||
const FunctionDecl * | Fn, | ||
Sema & | S | ||
) |
clang::SemaBase::SemaDiagnosticBuilder::SemaDiagnosticBuilder | ( | SemaDiagnosticBuilder && | D | ) |
|
default |
clang::SemaBase::SemaDiagnosticBuilder::~SemaDiagnosticBuilder | ( | ) |
void clang::SemaBase::SemaDiagnosticBuilder::AddFixItHint | ( | const FixItHint & | Hint | ) | const |
Definition at line 46 of file SemaBase.cpp.
|
inline |
Definition at line 139 of file SemaBase.h.
Referenced by clang::SemaBase::Diag(), and operator bool().
|
inline |
Convertible to bool: True if we immediately emitted an error, false if we didn't emit an error or we created a deferred error.
Example usage:
if (SemaDiagnosticBuilder(...) << foo << bar) return ExprError();
But see DiagIfDeviceCode() and DiagIfHostCode() – you probably want to use these instead of creating a SemaDiagnosticBuilder yourself.
Definition at line 151 of file SemaBase.h.
References isImmediate().
|
inline |
Definition at line 191 of file SemaBase.h.
|
inline |
Definition at line 188 of file SemaBase.h.
References ExprError.
|
inline |
Definition at line 192 of file SemaBase.h.
|
inline |
Definition at line 189 of file SemaBase.h.
References StmtError.
|
inline |
Definition at line 190 of file SemaBase.h.
References clang::TypeError().
|
inline |
Definition at line 169 of file SemaBase.h.
References V.
|
delete |
|
delete |
|
friend |
Definition at line 182 of file SemaBase.h.
Referenced by operator ExprResult().
|
friend |
Definition at line 36 of file SemaBase.cpp.
|
friend |
Definition at line 154 of file SemaBase.h.
|
friend |
Definition at line 185 of file SemaBase.h.
Referenced by operator StmtResult().