DiagnosticIDs.h revision 33e4e70c8c0a17e0ccb7465d96556b077a68ecb1
133e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis//===--- DiagnosticIDs.h - Diagnostic IDs Handling --------------*- C++ -*-===// 233e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis// 333e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis// The LLVM Compiler Infrastructure 433e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis// 533e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis// This file is distributed under the University of Illinois Open Source 633e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis// License. See LICENSE.TXT for details. 733e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis// 833e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis//===----------------------------------------------------------------------===// 933e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis// 1033e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis// This file defines the Diagnostic IDs-related interfaces. 1133e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis// 1233e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis//===----------------------------------------------------------------------===// 1333e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis 1433e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis#ifndef LLVM_CLANG_DIAGNOSTICIDS_H 1533e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis#define LLVM_CLANG_DIAGNOSTICIDS_H 1633e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis 1733e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis#include "llvm/ADT/IntrusiveRefCntPtr.h" 1833e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis#include "llvm/ADT/StringRef.h" 1933e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis 2033e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidisnamespace clang { 2133e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis class Diagnostic; 2233e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis 2333e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis // Import the diagnostic enums themselves. 2433e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis namespace diag { 2533e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis // Start position for diagnostics. 2633e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis enum { 2733e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis DIAG_START_DRIVER = 300, 2833e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis DIAG_START_FRONTEND = DIAG_START_DRIVER + 100, 2933e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis DIAG_START_LEX = DIAG_START_FRONTEND + 100, 3033e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis DIAG_START_PARSE = DIAG_START_LEX + 300, 3133e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis DIAG_START_AST = DIAG_START_PARSE + 300, 3233e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis DIAG_START_SEMA = DIAG_START_AST + 100, 3333e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis DIAG_START_ANALYSIS = DIAG_START_SEMA + 1500, 3433e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis DIAG_UPPER_LIMIT = DIAG_START_ANALYSIS + 100 3533e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis }; 3633e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis 3733e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis class CustomDiagInfo; 3833e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis 3933e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis /// diag::kind - All of the diagnostics that can be emitted by the frontend. 4033e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis typedef unsigned kind; 4133e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis 4233e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis // Get typedefs for common diagnostics. 4333e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis enum { 4433e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis#define DIAG(ENUM,FLAGS,DEFAULT_MAPPING,DESC,GROUP,SFINAE,CATEGORY) ENUM, 4533e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis#include "clang/Basic/DiagnosticCommonKinds.inc" 4633e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis NUM_BUILTIN_COMMON_DIAGNOSTICS 4733e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis#undef DIAG 4833e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis }; 4933e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis 5033e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis /// Enum values that allow the client to map NOTEs, WARNINGs, and EXTENSIONs 5133e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis /// to either MAP_IGNORE (nothing), MAP_WARNING (emit a warning), MAP_ERROR 5233e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis /// (emit as an error). It allows clients to map errors to 5333e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis /// MAP_ERROR/MAP_DEFAULT or MAP_FATAL (stop emitting diagnostics after this 5433e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis /// one). 5533e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis enum Mapping { 5633e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis // NOTE: 0 means "uncomputed". 5733e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis MAP_IGNORE = 1, //< Map this diagnostic to nothing, ignore it. 5833e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis MAP_WARNING = 2, //< Map this diagnostic to a warning. 5933e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis MAP_ERROR = 3, //< Map this diagnostic to an error. 6033e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis MAP_FATAL = 4, //< Map this diagnostic to a fatal error. 6133e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis 6233e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis /// Map this diagnostic to "warning", but make it immune to -Werror. This 6333e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis /// happens when you specify -Wno-error=foo. 6433e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis MAP_WARNING_NO_WERROR = 5, 6533e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis /// Map this diagnostic to "error", but make it immune to -Wfatal-errors. 6633e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis /// This happens for -Wno-fatal-errors=foo. 6733e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis MAP_ERROR_NO_WFATAL = 6 6833e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis }; 6933e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis } 7033e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis 7133e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis/// \brief Used for handling and querying diagnostic IDs. Can be used and shared 7233e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis/// by multiple Diagnostics for multiple translation units. 7333e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidisclass DiagnosticIDs : public llvm::RefCountedBase<DiagnosticIDs> { 7433e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidispublic: 7533e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis /// Level - The level of the diagnostic, after it has been through mapping. 7633e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis enum Level { 7733e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis Ignored, Note, Warning, Error, Fatal 7833e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis }; 7933e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis 8033e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidisprivate: 8133e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis /// CustomDiagInfo - Information for uniquing and looking up custom diags. 8233e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis diag::CustomDiagInfo *CustomDiagInfo; 8333e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis 8433e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidispublic: 8533e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis DiagnosticIDs(); 8633e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis ~DiagnosticIDs(); 8733e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis 8833e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis /// getCustomDiagID - Return an ID for a diagnostic with the specified message 8933e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis /// and level. If this is the first request for this diagnosic, it is 9033e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis /// registered and created, otherwise the existing ID is returned. 9133e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis unsigned getCustomDiagID(Level L, llvm::StringRef Message); 9233e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis 9333e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis //===--------------------------------------------------------------------===// 9433e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis // Diagnostic classification and reporting interfaces. 9533e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis // 9633e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis 9733e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis /// getDescription - Given a diagnostic ID, return a description of the 9833e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis /// issue. 9933e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis const char *getDescription(unsigned DiagID) const; 10033e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis 10133e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis /// isNoteWarningOrExtension - Return true if the unmapped diagnostic 10233e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis /// level of the specified diagnostic ID is a Warning or Extension. 10333e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis /// This only works on builtin diagnostics, not custom ones, and is not legal to 10433e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis /// call on NOTEs. 10533e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis static bool isBuiltinWarningOrExtension(unsigned DiagID); 10633e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis 10733e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis /// \brief Determine whether the given built-in diagnostic ID is a 10833e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis /// Note. 10933e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis static bool isBuiltinNote(unsigned DiagID); 11033e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis 11133e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis /// isBuiltinExtensionDiag - Determine whether the given built-in diagnostic 11233e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis /// ID is for an extension of some sort. 11333e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis /// 11433e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis static bool isBuiltinExtensionDiag(unsigned DiagID) { 11533e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis bool ignored; 11633e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis return isBuiltinExtensionDiag(DiagID, ignored); 11733e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis } 11833e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis 11933e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis /// isBuiltinExtensionDiag - Determine whether the given built-in diagnostic 12033e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis /// ID is for an extension of some sort. This also returns EnabledByDefault, 12133e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis /// which is set to indicate whether the diagnostic is ignored by default (in 12233e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis /// which case -pedantic enables it) or treated as a warning/error by default. 12333e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis /// 12433e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis static bool isBuiltinExtensionDiag(unsigned DiagID, bool &EnabledByDefault); 12533e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis 12633e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis 12733e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis /// getWarningOptionForDiag - Return the lowest-level warning option that 12833e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis /// enables the specified diagnostic. If there is no -Wfoo flag that controls 12933e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis /// the diagnostic, this returns null. 13033e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis static const char *getWarningOptionForDiag(unsigned DiagID); 13133e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis 13233e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis /// getWarningOptionForDiag - Return the category number that a specified 13333e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis /// DiagID belongs to, or 0 if no category. 13433e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis static unsigned getCategoryNumberForDiag(unsigned DiagID); 13533e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis 13633e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis /// getCategoryNameFromID - Given a category ID, return the name of the 13733e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis /// category. 13833e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis static const char *getCategoryNameFromID(unsigned CategoryID); 13933e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis 14033e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis /// \brief Enumeration describing how the the emission of a diagnostic should 14133e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis /// be treated when it occurs during C++ template argument deduction. 14233e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis enum SFINAEResponse { 14333e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis /// \brief The diagnostic should not be reported, but it should cause 14433e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis /// template argument deduction to fail. 14533e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis /// 14633e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis /// The vast majority of errors that occur during template argument 14733e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis /// deduction fall into this category. 14833e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis SFINAE_SubstitutionFailure, 14933e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis 15033e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis /// \brief The diagnostic should be suppressed entirely. 15133e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis /// 15233e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis /// Warnings generally fall into this category. 15333e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis SFINAE_Suppress, 15433e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis 15533e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis /// \brief The diagnostic should be reported. 15633e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis /// 15733e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis /// The diagnostic should be reported. Various fatal errors (e.g., 15833e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis /// template instantiation depth exceeded) fall into this category. 15933e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis SFINAE_Report 16033e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis }; 16133e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis 16233e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis /// \brief Determines whether the given built-in diagnostic ID is 16333e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis /// for an error that is suppressed if it occurs during C++ template 16433e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis /// argument deduction. 16533e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis /// 16633e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis /// When an error is suppressed due to SFINAE, the template argument 16733e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis /// deduction fails but no diagnostic is emitted. Certain classes of 16833e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis /// errors, such as those errors that involve C++ access control, 16933e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis /// are not SFINAE errors. 17033e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis static SFINAEResponse getDiagnosticSFINAEResponse(unsigned DiagID); 17133e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis 17233e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidisprivate: 17333e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis /// setDiagnosticGroupMapping - Change an entire diagnostic group (e.g. 17433e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis /// "unknown-pragmas" to have the specified mapping. This returns true and 17533e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis /// ignores the request if "Group" was unknown, false otherwise. 17633e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis bool setDiagnosticGroupMapping(const char *Group, diag::Mapping Map, 17733e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis Diagnostic &Diag) const; 17833e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis 17933e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis /// getDiagnosticLevel - Based on the way the client configured the Diagnostic 18033e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis /// object, classify the specified diagnostic ID into a Level, consumable by 18133e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis /// the DiagnosticClient. 18233e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis DiagnosticIDs::Level getDiagnosticLevel(unsigned DiagID, 18333e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis const Diagnostic &Diag) const; 18433e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis 18533e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis /// getDiagnosticLevel - This is an internal implementation helper used when 18633e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis /// DiagClass is already known. 18733e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis DiagnosticIDs::Level getDiagnosticLevel(unsigned DiagID, 18833e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis unsigned DiagClass, 18933e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis const Diagnostic &Diag) const; 19033e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis 19133e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis /// ProcessDiag - This is the method used to report a diagnostic that is 19233e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis /// finally fully formed. 19333e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis /// 19433e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis /// \returns true if the diagnostic was emitted, false if it was 19533e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis /// suppressed. 19633e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis bool ProcessDiag(Diagnostic &Diag) const; 19733e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis 19833e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis friend class Diagnostic; 19933e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis}; 20033e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis 20133e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis} // end namespace clang 20233e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis 20333e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis#endif 204