DiagnosticIDs.h revision add80bb3957dba1d9389304453c0a4c975768bd7
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, 30f84109ee6aeffb09366bd70c8593ce1b7818b1adFariborz Jahanian DIAG_START_LEX = DIAG_START_FRONTEND + 120, 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, 34d24eda8ad42bea6b36400d5505f67a7917d65652Chandler Carruth DIAG_START_ANALYSIS = DIAG_START_SEMA + 3000, 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 { 457d2b8c1fcc2b707be78b09930a7767477822462fDouglas Gregor#define DIAG(ENUM,FLAGS,DEFAULT_MAPPING,DESC,GROUP,\ 467d2b8c1fcc2b707be78b09930a7767477822462fDouglas Gregor SFINAE,ACCESS,CATEGORY,BRIEF,FULL) ENUM, 4733e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis#include "clang/Basic/DiagnosticCommonKinds.inc" 4833e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis NUM_BUILTIN_COMMON_DIAGNOSTICS 4933e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis#undef DIAG 5033e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis }; 5133e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis 5233e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis /// Enum values that allow the client to map NOTEs, WARNINGs, and EXTENSIONs 5333e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis /// to either MAP_IGNORE (nothing), MAP_WARNING (emit a warning), MAP_ERROR 5433e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis /// (emit as an error). It allows clients to map errors to 5533e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis /// MAP_ERROR/MAP_DEFAULT or MAP_FATAL (stop emitting diagnostics after this 5633e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis /// one). 5733e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis enum Mapping { 5833e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis // NOTE: 0 means "uncomputed". 5933e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis MAP_IGNORE = 1, //< Map this diagnostic to nothing, ignore it. 6033e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis MAP_WARNING = 2, //< Map this diagnostic to a warning. 6133e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis MAP_ERROR = 3, //< Map this diagnostic to an error. 6233e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis MAP_FATAL = 4, //< Map this diagnostic to a fatal error. 6333e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis 6433e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis /// Map this diagnostic to "warning", but make it immune to -Werror. This 6533e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis /// happens when you specify -Wno-error=foo. 6633e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis MAP_WARNING_NO_WERROR = 5, 67144bc08f5fe6046bd8e07de5e41a4237dd2c6275Argyrios Kyrtzidis /// Map this diagnostic to "warning", but make it immune to 68144bc08f5fe6046bd8e07de5e41a4237dd2c6275Argyrios Kyrtzidis /// -Wno-system-headers. 69144bc08f5fe6046bd8e07de5e41a4237dd2c6275Argyrios Kyrtzidis MAP_WARNING_SHOW_IN_SYSTEM_HEADER = 6, 7033e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis /// Map this diagnostic to "error", but make it immune to -Wfatal-errors. 7133e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis /// This happens for -Wno-fatal-errors=foo. 72144bc08f5fe6046bd8e07de5e41a4237dd2c6275Argyrios Kyrtzidis MAP_ERROR_NO_WFATAL = 7 7333e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis }; 7433e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis } 7533e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis 7633e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis/// \brief Used for handling and querying diagnostic IDs. Can be used and shared 7733e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis/// by multiple Diagnostics for multiple translation units. 7833e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidisclass DiagnosticIDs : public llvm::RefCountedBase<DiagnosticIDs> { 7933e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidispublic: 8033e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis /// Level - The level of the diagnostic, after it has been through mapping. 8133e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis enum Level { 8233e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis Ignored, Note, Warning, Error, Fatal 8333e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis }; 8433e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis 8533e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidisprivate: 8633e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis /// CustomDiagInfo - Information for uniquing and looking up custom diags. 8733e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis diag::CustomDiagInfo *CustomDiagInfo; 8833e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis 8933e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidispublic: 9033e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis DiagnosticIDs(); 9133e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis ~DiagnosticIDs(); 9233e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis 9333e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis /// getCustomDiagID - Return an ID for a diagnostic with the specified message 9433e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis /// and level. If this is the first request for this diagnosic, it is 9533e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis /// registered and created, otherwise the existing ID is returned. 9633e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis unsigned getCustomDiagID(Level L, llvm::StringRef Message); 9733e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis 9833e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis //===--------------------------------------------------------------------===// 9933e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis // Diagnostic classification and reporting interfaces. 10033e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis // 10133e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis 10233e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis /// getDescription - Given a diagnostic ID, return a description of the 10333e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis /// issue. 104477aab6782795e7472055a54108d2df270ce1a89Argyrios Kyrtzidis llvm::StringRef getDescription(unsigned DiagID) const; 10533e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis 1067d2b8c1fcc2b707be78b09930a7767477822462fDouglas Gregor /// isBuiltinWarningOrExtension - Return true if the unmapped diagnostic 10733e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis /// level of the specified diagnostic ID is a Warning or Extension. 10833e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis /// This only works on builtin diagnostics, not custom ones, and is not legal to 10933e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis /// call on NOTEs. 11033e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis static bool isBuiltinWarningOrExtension(unsigned DiagID); 11133e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis 11233e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis /// \brief Determine whether the given built-in diagnostic ID is a 11333e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis /// Note. 11433e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis static bool isBuiltinNote(unsigned DiagID); 11533e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis 11633e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis /// isBuiltinExtensionDiag - Determine whether the given built-in diagnostic 11733e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis /// ID is for an extension of some sort. 11833e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis /// 11933e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis static bool isBuiltinExtensionDiag(unsigned DiagID) { 12033e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis bool ignored; 12133e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis return isBuiltinExtensionDiag(DiagID, ignored); 12233e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis } 12333e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis 12433e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis /// isBuiltinExtensionDiag - Determine whether the given built-in diagnostic 12533e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis /// ID is for an extension of some sort. This also returns EnabledByDefault, 12633e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis /// which is set to indicate whether the diagnostic is ignored by default (in 12733e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis /// which case -pedantic enables it) or treated as a warning/error by default. 12833e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis /// 12933e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis static bool isBuiltinExtensionDiag(unsigned DiagID, bool &EnabledByDefault); 13033e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis 13133e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis 13233e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis /// getWarningOptionForDiag - Return the lowest-level warning option that 13333e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis /// enables the specified diagnostic. If there is no -Wfoo flag that controls 13433e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis /// the diagnostic, this returns null. 135477aab6782795e7472055a54108d2df270ce1a89Argyrios Kyrtzidis static llvm::StringRef getWarningOptionForDiag(unsigned DiagID); 136477aab6782795e7472055a54108d2df270ce1a89Argyrios Kyrtzidis 1377d2b8c1fcc2b707be78b09930a7767477822462fDouglas Gregor /// getCategoryNumberForDiag - Return the category number that a specified 13833e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis /// DiagID belongs to, or 0 if no category. 13933e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis static unsigned getCategoryNumberForDiag(unsigned DiagID); 14033e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis 141477aab6782795e7472055a54108d2df270ce1a89Argyrios Kyrtzidis /// getNumberOfCategories - Return the number of categories 142477aab6782795e7472055a54108d2df270ce1a89Argyrios Kyrtzidis static unsigned getNumberOfCategories(); 143477aab6782795e7472055a54108d2df270ce1a89Argyrios Kyrtzidis 14433e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis /// getCategoryNameFromID - Given a category ID, return the name of the 14533e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis /// category. 146477aab6782795e7472055a54108d2df270ce1a89Argyrios Kyrtzidis static llvm::StringRef getCategoryNameFromID(unsigned CategoryID); 14733e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis 14833e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis /// \brief Enumeration describing how the the emission of a diagnostic should 14933e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis /// be treated when it occurs during C++ template argument deduction. 15033e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis enum SFINAEResponse { 15133e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis /// \brief The diagnostic should not be reported, but it should cause 15233e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis /// template argument deduction to fail. 15333e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis /// 15433e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis /// The vast majority of errors that occur during template argument 15533e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis /// deduction fall into this category. 15633e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis SFINAE_SubstitutionFailure, 15733e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis 15833e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis /// \brief The diagnostic should be suppressed entirely. 15933e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis /// 16033e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis /// Warnings generally fall into this category. 16133e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis SFINAE_Suppress, 16233e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis 16333e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis /// \brief The diagnostic should be reported. 16433e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis /// 16533e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis /// The diagnostic should be reported. Various fatal errors (e.g., 16633e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis /// template instantiation depth exceeded) fall into this category. 167418df343bb50802586d20aae3b83e2eb44c6c828Douglas Gregor SFINAE_Report, 168418df343bb50802586d20aae3b83e2eb44c6c828Douglas Gregor 169418df343bb50802586d20aae3b83e2eb44c6c828Douglas Gregor /// \brief The diagnostic is an access-control diagnostic, which will be 170418df343bb50802586d20aae3b83e2eb44c6c828Douglas Gregor /// substitution failures in some contexts and reported in others. 171418df343bb50802586d20aae3b83e2eb44c6c828Douglas Gregor SFINAE_AccessControl 17233e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis }; 17333e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis 17433e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis /// \brief Determines whether the given built-in diagnostic ID is 17533e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis /// for an error that is suppressed if it occurs during C++ template 17633e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis /// argument deduction. 17733e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis /// 17833e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis /// When an error is suppressed due to SFINAE, the template argument 17933e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis /// deduction fails but no diagnostic is emitted. Certain classes of 18033e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis /// errors, such as those errors that involve C++ access control, 18133e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis /// are not SFINAE errors. 18233e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis static SFINAEResponse getDiagnosticSFINAEResponse(unsigned DiagID); 18333e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis 1847d2b8c1fcc2b707be78b09930a7767477822462fDouglas Gregor /// getName - Given a diagnostic ID, return its name 185477aab6782795e7472055a54108d2df270ce1a89Argyrios Kyrtzidis static llvm::StringRef getName(unsigned DiagID); 1867d2b8c1fcc2b707be78b09930a7767477822462fDouglas Gregor 1877d2b8c1fcc2b707be78b09930a7767477822462fDouglas Gregor /// getIdFromName - Given a diagnostic name, return its ID, or 0 188477aab6782795e7472055a54108d2df270ce1a89Argyrios Kyrtzidis static unsigned getIdFromName(llvm::StringRef Name); 1897d2b8c1fcc2b707be78b09930a7767477822462fDouglas Gregor 1907d2b8c1fcc2b707be78b09930a7767477822462fDouglas Gregor /// getBriefExplanation - Given a diagnostic ID, return a brief explanation 1917d2b8c1fcc2b707be78b09930a7767477822462fDouglas Gregor /// of the issue 192477aab6782795e7472055a54108d2df270ce1a89Argyrios Kyrtzidis static llvm::StringRef getBriefExplanation(unsigned DiagID); 1937d2b8c1fcc2b707be78b09930a7767477822462fDouglas Gregor 1947d2b8c1fcc2b707be78b09930a7767477822462fDouglas Gregor /// getFullExplanation - Given a diagnostic ID, return a full explanation 1957d2b8c1fcc2b707be78b09930a7767477822462fDouglas Gregor /// of the issue 196477aab6782795e7472055a54108d2df270ce1a89Argyrios Kyrtzidis static llvm::StringRef getFullExplanation(unsigned DiagID); 1977d2b8c1fcc2b707be78b09930a7767477822462fDouglas Gregor 19833e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidisprivate: 19933e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis /// setDiagnosticGroupMapping - Change an entire diagnostic group (e.g. 20033e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis /// "unknown-pragmas" to have the specified mapping. This returns true and 20133e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis /// ignores the request if "Group" was unknown, false otherwise. 202477aab6782795e7472055a54108d2df270ce1a89Argyrios Kyrtzidis bool setDiagnosticGroupMapping(llvm::StringRef Group, diag::Mapping Map, 2030827408865e32789e0ec4b8113a302ccdc531423Argyrios Kyrtzidis SourceLocation Loc, Diagnostic &Diag) const; 20433e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis 2050827408865e32789e0ec4b8113a302ccdc531423Argyrios Kyrtzidis /// \brief Based on the way the client configured the Diagnostic 20633e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis /// object, classify the specified diagnostic ID into a Level, consumable by 20733e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis /// the DiagnosticClient. 2080827408865e32789e0ec4b8113a302ccdc531423Argyrios Kyrtzidis /// 2090827408865e32789e0ec4b8113a302ccdc531423Argyrios Kyrtzidis /// \param Loc The source location we are interested in finding out the 2100827408865e32789e0ec4b8113a302ccdc531423Argyrios Kyrtzidis /// diagnostic state. Can be null in order to query the latest state. 2110827408865e32789e0ec4b8113a302ccdc531423Argyrios Kyrtzidis DiagnosticIDs::Level getDiagnosticLevel(unsigned DiagID, SourceLocation Loc, 2127decebfc7b9dc841f228c93cc2e41e3e62911ff8Ted Kremenek const Diagnostic &Diag, 2137decebfc7b9dc841f228c93cc2e41e3e62911ff8Ted Kremenek diag::Mapping *mapping = 0) const; 21433e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis 21533e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis /// getDiagnosticLevel - This is an internal implementation helper used when 21633e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis /// DiagClass is already known. 21733e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis DiagnosticIDs::Level getDiagnosticLevel(unsigned DiagID, 21833e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis unsigned DiagClass, 2190827408865e32789e0ec4b8113a302ccdc531423Argyrios Kyrtzidis SourceLocation Loc, 2207decebfc7b9dc841f228c93cc2e41e3e62911ff8Ted Kremenek const Diagnostic &Diag, 2217decebfc7b9dc841f228c93cc2e41e3e62911ff8Ted Kremenek diag::Mapping *mapping = 0) const; 22233e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis 22333e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis /// ProcessDiag - This is the method used to report a diagnostic that is 22433e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis /// finally fully formed. 22533e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis /// 22633e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis /// \returns true if the diagnostic was emitted, false if it was 22733e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis /// suppressed. 22833e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis bool ProcessDiag(Diagnostic &Diag) const; 22933e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis 230add80bb3957dba1d9389304453c0a4c975768bd7John McCall /// \brief Whether the diagnostic may leave the AST in a state where some 231add80bb3957dba1d9389304453c0a4c975768bd7John McCall /// invariants can break. 232add80bb3957dba1d9389304453c0a4c975768bd7John McCall bool isUnrecoverable(unsigned DiagID) const; 233add80bb3957dba1d9389304453c0a4c975768bd7John McCall 23433e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis friend class Diagnostic; 23533e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis}; 23633e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis 23733e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis} // end namespace clang 23833e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis 23933e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis#endif 240