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< DeviceDeferredDiagnostic > > |
Public Member Functions | |
SemaDiagnosticBuilder (Kind K, SourceLocation Loc, unsigned DiagID, const FunctionDecl *Fn, Sema &S, DeviceDiagnosticReason R) | |
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. More... | |
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 175 of file SemaBase.h.
using clang::SemaBase::SemaDiagnosticBuilder::DeferredDiagnosticsType = llvm::DenseMap<CanonicalDeclPtr<const FunctionDecl>, std::vector<DeviceDeferredDiagnostic> > |
Definition at line 262 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 177 of file SemaBase.h.
clang::SemaBase::SemaDiagnosticBuilder::SemaDiagnosticBuilder | ( | Kind | K, |
SourceLocation | Loc, | ||
unsigned | DiagID, | ||
const FunctionDecl * | Fn, | ||
Sema & | S, | ||
DeviceDiagnosticReason | R | ||
) |
clang::SemaBase::SemaDiagnosticBuilder::SemaDiagnosticBuilder | ( | SemaDiagnosticBuilder && | D | ) |
|
default |
clang::SemaBase::SemaDiagnosticBuilder::~SemaDiagnosticBuilder | ( | ) |
void clang::SemaBase::SemaDiagnosticBuilder::AddFixItHint | ( | const FixItHint & | Hint | ) | const |
Definition at line 48 of file SemaBase.cpp.
|
inline |
Definition at line 204 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 216 of file SemaBase.h.
References isImmediate().
|
inline |
Definition at line 259 of file SemaBase.h.
|
inline |
Definition at line 256 of file SemaBase.h.
References ExprError.
|
inline |
Definition at line 260 of file SemaBase.h.
|
inline |
Definition at line 257 of file SemaBase.h.
References StmtError.
|
inline |
Definition at line 258 of file SemaBase.h.
References clang::TypeError().
|
inline |
Definition at line 236 of file SemaBase.h.
References V.
|
delete |
|
delete |
|
friend |
Definition at line 250 of file SemaBase.h.
Referenced by operator ExprResult().
|
friend |
Definition at line 36 of file SemaBase.cpp.
|
friend |
Definition at line 219 of file SemaBase.h.
|
friend |
Definition at line 253 of file SemaBase.h.
Referenced by operator StmtResult().