clang 22.0.0git
clang::DiagnosticIDs Class Reference

Used for handling and querying diagnostic IDs. More...

#include "clang/Basic/DiagnosticIDs.h"

Inheritance diagram for clang::DiagnosticIDs:
[legend]

Classes

class  CustomDiagDesc
struct  GroupInfo

Public Types

enum  Level : uint8_t {
  Ignored , Note , Remark , Warning ,
  Error , Fatal
}
 The level of the diagnostic, after it has been through mapping. More...
enum  Class {
  CLASS_INVALID = 0x00 , CLASS_NOTE = 0x01 , CLASS_REMARK = 0x02 , CLASS_WARNING = 0x03 ,
  CLASS_EXTENSION = 0x04 , CLASS_ERROR = 0x05 , CLASS_TRAP = 0x06
}
enum  SFINAEResponse { SFINAE_SubstitutionFailure , SFINAE_Suppress , SFINAE_Report , SFINAE_AccessControl }
 Enumeration describing how the emission of a diagnostic should be treated when it occurs during C++ template argument deduction. More...

Public Member Functions

 DiagnosticIDs ()
 ~DiagnosticIDs ()
unsigned getCustomDiagID (CustomDiagDesc Diag)
 Return an ID for a diagnostic with the specified format string and level.
unsigned getCustomDiagID (Level Level, StringRef Message)
StringRef getDescription (unsigned DiagID) const
 Given a diagnostic ID, return a description of the issue.
bool isWarningOrExtension (unsigned DiagID) const
 Return true if the unmapped diagnostic levelof the specified diagnostic ID is a Warning or Extension.
bool isDefaultMappingAsError (unsigned DiagID) const
 Return true if the specified diagnostic is mapped to errors by default.
DiagnosticMapping getDefaultMapping (unsigned DiagID) const
 Get the default mapping for this diagnostic.
void initCustomDiagMapping (DiagnosticMapping &, unsigned DiagID)
bool isNote (unsigned DiagID) const
 Determine whether the given diagnostic ID is a Note.
bool isExtensionDiag (unsigned DiagID) const
 Determine whether the given diagnostic ID is for an extension of some sort.
bool isExtensionDiag (unsigned DiagID, bool &EnabledByDefault) const
 Determine whether the given diagnostic ID is for an extension of some sort, and whether it is enabled by default.
bool isTrapDiag (unsigned DiagID) const
void setGroupSeverity (StringRef Group, diag::Severity)
void setGroupNoWarningsAsError (StringRef Group, bool)
std::optional< diag::GroupgetGroupForDiag (unsigned DiagID) const
 Return the lowest-level group that contains the specified diagnostic.
StringRef getWarningOptionForDiag (unsigned DiagID)
 Return the lowest-level warning option that enables the specified diagnostic.
bool getDiagnosticsInGroup (diag::Flavor Flavor, StringRef Group, SmallVectorImpl< diag::kind > &Diags) const
 Get the set of all diagnostic IDs in the group with the given name.

Static Public Member Functions

static bool IsCustomDiag (diag::kind Diag)
static llvm::IntrusiveRefCntPtr< DiagnosticIDscreate ()
static StringRef getWarningOptionForGroup (diag::Group)
 Given a group ID, returns the flag that toggles the group.
static StringRef getWarningOptionDocumentation (diag::Group GroupID)
 Given a diagnostic group ID, return its documentation.
static std::optional< diag::GroupgetGroupForWarningOption (StringRef)
 Given a group ID, returns the flag that toggles the group.
static unsigned getCategoryNumberForDiag (unsigned DiagID)
 Return the category number that a specified DiagID belongs to, or 0 if no category.
static unsigned getNumberOfCategories ()
 Return the number of diagnostic categories.
static StringRef getCategoryNameFromID (unsigned CategoryID)
 Given a category ID, return the name of the category.
static bool isARCDiagnostic (unsigned DiagID)
 Return true if a given diagnostic falls into an ARC diagnostic category.
static bool isCodegenABICheckDiagnostic (unsigned DiagID)
 Return true if a given diagnostic is a codegen-time ABI check.
static SFINAEResponse getDiagnosticSFINAEResponse (unsigned DiagID)
 Determines whether the given built-in diagnostic ID is for an error that is suppressed if it occurs during C++ template argument deduction.
static bool isDeferrable (unsigned DiagID)
 Whether the diagnostic message can be deferred.
static std::vector< std::string > getDiagnosticFlags ()
 Get the string of all diagnostic flags.
static void getAllDiagnostics (diag::Flavor Flavor, std::vector< diag::kind > &Diags)
 Get the set of all diagnostic IDs.
static StringRef getNearestOption (diag::Flavor Flavor, StringRef Group)
 Get the diagnostic option with the closest edit distance to the given group name.
static unsigned getCXXCompatDiagId (const LangOptions &LangOpts, unsigned CompatDiagId)
 Get the appropriate diagnostic Id to use for issuing a compatibility diagnostic.

Friends

class DiagnosticsEngine

Detailed Description

Used for handling and querying diagnostic IDs.

Can be used and shared by multiple Diagnostics for multiple translation units.

Definition at line 182 of file DiagnosticIDs.h.

Member Enumeration Documentation

◆ Class

Enumerator
CLASS_INVALID 
CLASS_NOTE 
CLASS_REMARK 
CLASS_WARNING 
CLASS_EXTENSION 
CLASS_ERROR 
CLASS_TRAP 

Definition at line 188 of file DiagnosticIDs.h.

◆ Level

The level of the diagnostic, after it has been through mapping.

Enumerator
Ignored 
Note 
Remark 
Warning 
Error 
Fatal 

Definition at line 185 of file DiagnosticIDs.h.

◆ SFINAEResponse

Enumeration describing how the emission of a diagnostic should be treated when it occurs during C++ template argument deduction.

Enumerator
SFINAE_SubstitutionFailure 

The diagnostic should not be reported, but it should cause template argument deduction to fail.

The vast majority of errors that occur during template argument deduction fall into this category.

SFINAE_Suppress 

The diagnostic should be suppressed entirely.

Warnings generally fall into this category.

SFINAE_Report 

The diagnostic should be reported.

The diagnostic should be reported. Various fatal errors (e.g., template instantiation depth exceeded) fall into this category.

SFINAE_AccessControl 

The diagnostic is an access-control diagnostic, which will be substitution failures in some contexts and reported in others.

Definition at line 417 of file DiagnosticIDs.h.

Constructor & Destructor Documentation

◆ DiagnosticIDs()

DiagnosticIDs::DiagnosticIDs ( )

Definition at line 381 of file DiagnosticIDs.cpp.

◆ ~DiagnosticIDs()

DiagnosticIDs::~DiagnosticIDs ( )

Definition at line 383 of file DiagnosticIDs.cpp.

Member Function Documentation

◆ create()

◆ getAllDiagnostics()

void DiagnosticIDs::getAllDiagnostics ( diag::Flavor Flavor,
std::vector< diag::kind > & Diags )
static

Get the set of all diagnostic IDs.

Definition at line 747 of file DiagnosticIDs.cpp.

References StaticDiagInfoSize.

Referenced by clang::DiagnosticsEngine::setSeverityForAll().

◆ getCategoryNameFromID()

StringRef DiagnosticIDs::getCategoryNameFromID ( unsigned CategoryID)
static

Given a category ID, return the name of the category.

getCategoryNameFromID - Given a category ID, return the name of the category, an empty string if CategoryID is zero, or null if CategoryID is invalid.

Definition at line 356 of file DiagnosticIDs.cpp.

References CategoryNameTable, and getNumberOfCategories().

Referenced by isARCDiagnostic(), isCodegenABICheckDiagnostic(), PrintDiagnosticCategories(), and printDiagnosticOptions().

◆ getCategoryNumberForDiag()

unsigned DiagnosticIDs::getCategoryNumberForDiag ( unsigned DiagID)
static

Return the category number that a specified DiagID belongs to, or 0 if no category.

getCategoryNumberForDiag - Return the category number that a specified DiagID belongs to, or 0 if no category.

Definition at line 322 of file DiagnosticIDs.cpp.

References GetDiagInfo().

Referenced by isARCDiagnostic(), isCodegenABICheckDiagnostic(), and printDiagnosticOptions().

◆ getCustomDiagID() [1/2]

unsigned DiagnosticIDs::getCustomDiagID ( CustomDiagDesc Diag)

Return an ID for a diagnostic with the specified format string and level.

getCustomDiagID - Return an ID for a diagnostic with the specified message and level.

If this is the first request for this diagnostic, it is registered and created, otherwise the existing ID is returned.

If this is the first request for this diagnostic, it is registered and created, otherwise the existing ID is returned.

Parameters
FormatStringA fixed diagnostic format string that will be hashed and mapped to a unique DiagID.

Definition at line 391 of file DiagnosticIDs.cpp.

References Diag().

Referenced by getCustomDiagID().

◆ getCustomDiagID() [2/2]

unsigned clang::DiagnosticIDs::getCustomDiagID ( Level Level,
StringRef Message )
inline

◆ getCXXCompatDiagId()

unsigned DiagnosticIDs::getCXXCompatDiagId ( const LangOptions & LangOpts,
unsigned CompatDiagId )
static

Get the appropriate diagnostic Id to use for issuing a compatibility diagnostic.

For use by the various DiagCompat() helpers.

Definition at line 785 of file DiagnosticIDs.cpp.

Referenced by clang::Parser::DiagCompat(), and clang::SemaBase::DiagCompat().

◆ getDefaultMapping()

◆ getDescription()

StringRef DiagnosticIDs::getDescription ( unsigned DiagID) const

Given a diagnostic ID, return a description of the issue.

getDescription - Given a diagnostic ID, return a description of the issue.

Definition at line 430 of file DiagnosticIDs.cpp.

References GetDiagInfo().

◆ getDiagnosticFlags()

std::vector< std::string > DiagnosticIDs::getDiagnosticFlags ( )
static

Get the string of all diagnostic flags.

Returns
A list of all diagnostics flags as they would be written in a command line invocation including their no- variants. For example: {"-Wempty-body", "-Wno-empty-body", ...}

Definition at line 652 of file DiagnosticIDs.cpp.

Referenced by clang::driver::Driver::HandleAutocompletions(), and clang::driver::Driver::HandleImmediateArgs().

◆ getDiagnosticSFINAEResponse()

DiagnosticIDs::SFINAEResponse DiagnosticIDs::getDiagnosticSFINAEResponse ( unsigned DiagID)
static

Determines whether the given built-in diagnostic ID is for an error that is suppressed if it occurs during C++ template argument deduction.

When an error is suppressed due to SFINAE, the template argument deduction fails but no diagnostic is emitted. Certain classes of errors, such as those errors that involve C++ access control, are not SFINAE errors.

Definition at line 365 of file DiagnosticIDs.cpp.

References GetDiagInfo(), and SFINAE_Report.

Referenced by clang::Sema::EmitDiagnostic().

◆ getDiagnosticsInGroup()

bool DiagnosticIDs::getDiagnosticsInGroup ( diag::Flavor Flavor,
StringRef Group,
SmallVectorImpl< diag::kind > & Diags ) const

Get the set of all diagnostic IDs in the group with the given name.

Parameters
[out]Diags- On return, the diagnostics in the group.
Returns
true if the given group is unknown, false otherwise.

Definition at line 702 of file DiagnosticIDs.cpp.

References getGroupForWarningOption(), and OptionTable.

Referenced by getNearestOption().

◆ getGroupForDiag()

std::optional< diag::Group > DiagnosticIDs::getGroupForDiag ( unsigned DiagID) const

Return the lowest-level group that contains the specified diagnostic.

Definition at line 633 of file DiagnosticIDs.cpp.

References GetDiagInfo(), and IsCustomDiag().

Referenced by getWarningOptionForDiag().

◆ getGroupForWarningOption()

std::optional< diag::Group > DiagnosticIDs::getGroupForWarningOption ( StringRef Name)
static

Given a group ID, returns the flag that toggles the group.

For example, for "deprecated-declarations", returns Group::DeprecatedDeclarations.

Definition at line 624 of file DiagnosticIDs.cpp.

References clang::Found, and OptionTable.

Referenced by getDiagnosticsInGroup(), setGroupNoWarningsAsError(), and setGroupSeverity().

◆ getNearestOption()

StringRef DiagnosticIDs::getNearestOption ( diag::Flavor Flavor,
StringRef Group )
static

Get the diagnostic option with the closest edit distance to the given group name.

Definition at line 754 of file DiagnosticIDs.cpp.

References getDiagnosticsInGroup(), and OptionTable.

Referenced by EmitUnknownDiagWarning().

◆ getNumberOfCategories()

unsigned DiagnosticIDs::getNumberOfCategories ( )
static

Return the number of diagnostic categories.

getNumberOfCategories - Return the number of categories

Definition at line 349 of file DiagnosticIDs.cpp.

References CategoryNameTable.

Referenced by getCategoryNameFromID(), and PrintDiagnosticCategories().

◆ getWarningOptionDocumentation()

StringRef DiagnosticIDs::getWarningOptionDocumentation ( diag::Group GroupID)
static

Given a diagnostic group ID, return its documentation.

Definition at line 615 of file DiagnosticIDs.cpp.

References OptionTable.

◆ getWarningOptionForDiag()

StringRef DiagnosticIDs::getWarningOptionForDiag ( unsigned DiagID)

Return the lowest-level warning option that enables the specified diagnostic.

getWarningOptionForDiag - Return the lowest-level warning option that enables the specified diagnostic.

If there is no -Wfoo flag that controls the diagnostic, this returns null.

Definition at line 646 of file DiagnosticIDs.cpp.

References getGroupForDiag(), and getWarningOptionForGroup().

◆ getWarningOptionForGroup()

StringRef DiagnosticIDs::getWarningOptionForGroup ( diag::Group Group)
static

Given a group ID, returns the flag that toggles the group.

For example, for Group::DeprecatedDeclarations, returns "deprecated-declarations".

Definition at line 619 of file DiagnosticIDs.cpp.

References OptionTable.

Referenced by clang::driver::tools::Clang::ConstructJob(), and getWarningOptionForDiag().

◆ initCustomDiagMapping()

◆ isARCDiagnostic()

bool DiagnosticIDs::isARCDiagnostic ( unsigned DiagID)
static

Return true if a given diagnostic falls into an ARC diagnostic category.

Definition at line 853 of file DiagnosticIDs.cpp.

References getCategoryNameFromID(), and getCategoryNumberForDiag().

◆ isCodegenABICheckDiagnostic()

bool DiagnosticIDs::isCodegenABICheckDiagnostic ( unsigned DiagID)
static

Return true if a given diagnostic is a codegen-time ABI check.

Definition at line 858 of file DiagnosticIDs.cpp.

References getCategoryNameFromID(), and getCategoryNumberForDiag().

◆ IsCustomDiag()

bool clang::DiagnosticIDs::IsCustomDiag ( diag::kind Diag)
inlinestatic

◆ isDefaultMappingAsError()

bool DiagnosticIDs::isDefaultMappingAsError ( unsigned DiagID) const

Return true if the specified diagnostic is mapped to errors by default.

Definition at line 424 of file DiagnosticIDs.cpp.

References clang::diag::Error, getDefaultMapping(), and clang::DiagnosticMapping::getSeverity().

◆ isDeferrable()

bool DiagnosticIDs::isDeferrable ( unsigned DiagID)
static

Whether the diagnostic message can be deferred.

For single source offloading languages, a diagnostic message occurred in a device host function may be deferred until the function is sure to be emitted.

Definition at line 371 of file DiagnosticIDs.cpp.

References GetDiagInfo().

Referenced by clang::SemaBase::Diag().

◆ isExtensionDiag() [1/2]

bool clang::DiagnosticIDs::isExtensionDiag ( unsigned DiagID) const
inline

Determine whether the given diagnostic ID is for an extension of some sort.

Definition at line 355 of file DiagnosticIDs.h.

References isExtensionDiag().

Referenced by isExtensionDiag().

◆ isExtensionDiag() [2/2]

bool DiagnosticIDs::isExtensionDiag ( unsigned DiagID,
bool & EnabledByDefault ) const

Determine whether the given diagnostic ID is for an extension of some sort, and whether it is enabled by default.

isExtensionDiag - Determine whether the given built-in diagnostic ID is for an extension of some sort.

This also returns EnabledByDefault, which is set to indicate whether the diagnostic is ignored by default (in which case -pedantic enables it) or treated as a warning/error by default.

Definition at line 414 of file DiagnosticIDs.cpp.

References CLASS_EXTENSION, getDefaultMapping(), clang::DiagnosticMapping::getSeverity(), clang::diag::Ignored, and IsCustomDiag().

◆ isNote()

bool DiagnosticIDs::isNote ( unsigned DiagID) const

Determine whether the given diagnostic ID is a Note.

Determine whether the given built-in diagnostic ID is a Note.

Definition at line 405 of file DiagnosticIDs.cpp.

References CLASS_NOTE, and clang::diag::DIAG_UPPER_LIMIT.

◆ isTrapDiag()

bool clang::DiagnosticIDs::isTrapDiag ( unsigned DiagID) const
inline

Definition at line 369 of file DiagnosticIDs.h.

References CLASS_TRAP.

◆ isWarningOrExtension()

bool DiagnosticIDs::isWarningOrExtension ( unsigned DiagID) const

Return true if the unmapped diagnostic levelof the specified diagnostic ID is a Warning or Extension.

This is not legal to call on NOTEs.

Definition at line 397 of file DiagnosticIDs.cpp.

References CLASS_ERROR, and clang::diag::DIAG_UPPER_LIMIT.

◆ setGroupNoWarningsAsError()

void DiagnosticIDs::setGroupNoWarningsAsError ( StringRef Group,
bool Val )

Definition at line 739 of file DiagnosticIDs.cpp.

References forEachSubGroup(), and getGroupForWarningOption().

◆ setGroupSeverity()

void DiagnosticIDs::setGroupSeverity ( StringRef Group,
diag::Severity Sev )

Definition at line 731 of file DiagnosticIDs.cpp.

References forEachSubGroup(), and getGroupForWarningOption().

◆ DiagnosticsEngine

friend class DiagnosticsEngine
friend

Definition at line 508 of file DiagnosticIDs.h.

References DiagnosticsEngine.

Referenced by DiagnosticsEngine.


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