//===--- DiagnosticOptions.h ------------------------------------*- C++ -*-===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// #ifndef LLVM_CLANG_BASIC_DIAGNOSTICOPTIONS_H #define LLVM_CLANG_BASIC_DIAGNOSTICOPTIONS_H #include "clang/Basic/LLVM.h" #include "llvm/ADT/IntrusiveRefCntPtr.h" #include #include #include namespace clang { /// \brief Specifies which overload candidates to display when overload /// resolution fails. enum OverloadsShown : unsigned { Ovl_All, ///< Show all overloads. Ovl_Best ///< Show just the "best" overload candidates. }; /// \brief A bitmask representing the diagnostic levels used by /// VerifyDiagnosticConsumer. enum class DiagnosticLevelMask : unsigned { None = 0, Note = 1 << 0, Remark = 1 << 1, Warning = 1 << 2, Error = 1 << 3, All = Note | Remark | Warning | Error }; inline DiagnosticLevelMask operator~(DiagnosticLevelMask M) { using UT = std::underlying_type::type; return static_cast(~static_cast(M)); } inline DiagnosticLevelMask operator|(DiagnosticLevelMask LHS, DiagnosticLevelMask RHS) { using UT = std::underlying_type::type; return static_cast( static_cast(LHS) | static_cast(RHS)); } inline DiagnosticLevelMask operator&(DiagnosticLevelMask LHS, DiagnosticLevelMask RHS) { using UT = std::underlying_type::type; return static_cast( static_cast(LHS) & static_cast(RHS)); } raw_ostream& operator<<(raw_ostream& Out, DiagnosticLevelMask M); /// \brief Options for controlling the compiler diagnostics engine. class DiagnosticOptions : public RefCountedBase{ public: enum TextDiagnosticFormat { Clang, MSVC, Vi }; // Default values. enum { DefaultTabStop = 8, MaxTabStop = 100, DefaultMacroBacktraceLimit = 6, DefaultTemplateBacktraceLimit = 10, DefaultConstexprBacktraceLimit = 10, DefaultSpellCheckingLimit = 50 }; // Define simple diagnostic options (with no accessors). #define DIAGOPT(Name, Bits, Default) unsigned Name : Bits; #define ENUM_DIAGOPT(Name, Type, Bits, Default) #include "clang/Basic/DiagnosticOptions.def" protected: // Define diagnostic options of enumeration type. These are private, and will // have accessors (below). #define DIAGOPT(Name, Bits, Default) #define ENUM_DIAGOPT(Name, Type, Bits, Default) unsigned Name : Bits; #include "clang/Basic/DiagnosticOptions.def" public: /// \brief The file to log diagnostic output to. std::string DiagnosticLogFile; /// \brief The file to serialize diagnostics to (non-appending). std::string DiagnosticSerializationFile; /// The list of -W... options used to alter the diagnostic mappings, with the /// prefixes removed. std::vector Warnings; /// The list of -R... options used to alter the diagnostic mappings, with the /// prefixes removed. std::vector Remarks; public: // Define accessors/mutators for diagnostic options of enumeration type. #define DIAGOPT(Name, Bits, Default) #define ENUM_DIAGOPT(Name, Type, Bits, Default) \ Type get##Name() const { return static_cast(Name); } \ void set##Name(Type Value) { Name = static_cast(Value); } #include "clang/Basic/DiagnosticOptions.def" DiagnosticOptions() { #define DIAGOPT(Name, Bits, Default) Name = Default; #define ENUM_DIAGOPT(Name, Type, Bits, Default) set##Name(Default); #include "clang/Basic/DiagnosticOptions.def" } }; typedef DiagnosticOptions::TextDiagnosticFormat TextDiagnosticFormat; } // end namespace clang #endif