//===--- 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 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 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 }; // 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; 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