123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155 |
- #pragma once
- #ifdef __GNUC__
- #pragma GCC diagnostic push
- #pragma GCC diagnostic ignored "-Wunused-parameter"
- #endif
- //===- DiagnosticOptions.h --------------------------------------*- C++ -*-===//
- //
- // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
- // See https://llvm.org/LICENSE.txt for license information.
- // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
- //
- //===----------------------------------------------------------------------===//
- #ifndef LLVM_CLANG_BASIC_DIAGNOSTICOPTIONS_H
- #define LLVM_CLANG_BASIC_DIAGNOSTICOPTIONS_H
- #include "clang/Basic/LLVM.h"
- #include "llvm/ADT/IntrusiveRefCntPtr.h"
- #include <string>
- #include <type_traits>
- #include <vector>
- namespace llvm {
- namespace opt {
- class ArgList;
- } // namespace opt
- } // namespace llvm
- namespace clang {
- class DiagnosticsEngine;
- /// Specifies which overload candidates to display when overload
- /// resolution fails.
- enum OverloadsShown : unsigned {
- /// Show all overloads.
- Ovl_All,
- /// Show just the "best" overload candidates.
- Ovl_Best
- };
- /// 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<DiagnosticLevelMask>::type;
- return static_cast<DiagnosticLevelMask>(~static_cast<UT>(M));
- }
- inline DiagnosticLevelMask operator|(DiagnosticLevelMask LHS,
- DiagnosticLevelMask RHS) {
- using UT = std::underlying_type<DiagnosticLevelMask>::type;
- return static_cast<DiagnosticLevelMask>(
- static_cast<UT>(LHS) | static_cast<UT>(RHS));
- }
- inline DiagnosticLevelMask operator&(DiagnosticLevelMask LHS,
- DiagnosticLevelMask RHS) {
- using UT = std::underlying_type<DiagnosticLevelMask>::type;
- return static_cast<DiagnosticLevelMask>(
- static_cast<UT>(LHS) & static_cast<UT>(RHS));
- }
- raw_ostream& operator<<(raw_ostream& Out, DiagnosticLevelMask M);
- /// Options for controlling the compiler diagnostics engine.
- class DiagnosticOptions : public RefCountedBase<DiagnosticOptions>{
- friend bool ParseDiagnosticArgs(DiagnosticOptions &, llvm::opt::ArgList &,
- clang::DiagnosticsEngine *, bool);
- friend class CompilerInvocation;
- public:
- enum TextDiagnosticFormat { Clang, MSVC, Vi };
- // Default values.
- enum {
- DefaultTabStop = 8,
- MaxTabStop = 100,
- DefaultMacroBacktraceLimit = 6,
- DefaultTemplateBacktraceLimit = 10,
- DefaultConstexprBacktraceLimit = 10,
- DefaultSpellCheckingLimit = 50,
- DefaultSnippetLineLimit = 1,
- };
- // 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:
- /// The file to log diagnostic output to.
- std::string DiagnosticLogFile;
- /// 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<std::string> Warnings;
- /// The list of prefixes from -Wundef-prefix=... used to generate warnings
- /// for undefined macros.
- std::vector<std::string> UndefPrefixes;
- /// The list of -R... options used to alter the diagnostic mappings, with the
- /// prefixes removed.
- std::vector<std::string> Remarks;
- /// The prefixes for comment directives sought by -verify ("expected" by
- /// default).
- std::vector<std::string> VerifyPrefixes;
- 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<Type>(Name); } \
- void set##Name(Type Value) { Name = static_cast<unsigned>(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"
- }
- };
- using TextDiagnosticFormat = DiagnosticOptions::TextDiagnosticFormat;
- } // namespace clang
- #endif // LLVM_CLANG_BASIC_DIAGNOSTICOPTIONS_H
- #ifdef __GNUC__
- #pragma GCC diagnostic pop
- #endif
|