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