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