summaryrefslogtreecommitdiffstats
path: root/include/clang/Frontend
diff options
context:
space:
mode:
Diffstat (limited to 'include/clang/Frontend')
-rw-r--r--include/clang/Frontend/ASTConsumers.h58
-rw-r--r--include/clang/Frontend/ASTUnit.h924
-rw-r--r--include/clang/Frontend/ChainedDiagnosticConsumer.h72
-rw-r--r--include/clang/Frontend/CodeGenOptions.def212
-rw-r--r--include/clang/Frontend/CodeGenOptions.h245
-rw-r--r--include/clang/Frontend/CommandLineSourceLoc.h87
-rw-r--r--include/clang/Frontend/CompilerInstance.h785
-rw-r--r--include/clang/Frontend/CompilerInvocation.h219
-rw-r--r--include/clang/Frontend/DependencyOutputOptions.h73
-rw-r--r--include/clang/Frontend/DiagnosticRenderer.h178
-rw-r--r--include/clang/Frontend/FrontendAction.h298
-rw-r--r--include/clang/Frontend/FrontendActions.h241
-rw-r--r--include/clang/Frontend/FrontendDiagnostic.h28
-rw-r--r--include/clang/Frontend/FrontendOptions.h292
-rw-r--r--include/clang/Frontend/FrontendPluginRegistry.h26
-rw-r--r--include/clang/Frontend/LangStandard.h100
-rw-r--r--include/clang/Frontend/LangStandards.def153
-rw-r--r--include/clang/Frontend/LayoutOverrideSource.h63
-rw-r--r--include/clang/Frontend/LogDiagnosticPrinter.h85
-rw-r--r--include/clang/Frontend/MigratorOptions.h31
-rw-r--r--include/clang/Frontend/MultiplexConsumer.h69
-rw-r--r--include/clang/Frontend/PCHContainerOperations.h118
-rw-r--r--include/clang/Frontend/PreprocessorOutputOptions.h41
-rw-r--r--include/clang/Frontend/SerializedDiagnosticPrinter.h43
-rw-r--r--include/clang/Frontend/SerializedDiagnosticReader.h131
-rw-r--r--include/clang/Frontend/SerializedDiagnostics.h59
-rw-r--r--include/clang/Frontend/TextDiagnostic.h122
-rw-r--r--include/clang/Frontend/TextDiagnosticBuffer.h55
-rw-r--r--include/clang/Frontend/TextDiagnosticPrinter.h58
-rw-r--r--include/clang/Frontend/Utils.h220
-rw-r--r--include/clang/Frontend/VerifyDiagnosticConsumer.h278
31 files changed, 0 insertions, 5364 deletions
diff --git a/include/clang/Frontend/ASTConsumers.h b/include/clang/Frontend/ASTConsumers.h
deleted file mode 100644
index 757fcae..0000000
--- a/include/clang/Frontend/ASTConsumers.h
+++ /dev/null
@@ -1,58 +0,0 @@
-//===--- ASTConsumers.h - ASTConsumer implementations -----------*- C++ -*-===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-//
-// AST Consumers.
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef LLVM_CLANG_FRONTEND_ASTCONSUMERS_H
-#define LLVM_CLANG_FRONTEND_ASTCONSUMERS_H
-
-#include "clang/Basic/LLVM.h"
-#include <memory>
-
-namespace clang {
-
-class ASTConsumer;
-class CodeGenOptions;
-class DiagnosticsEngine;
-class FileManager;
-class LangOptions;
-class Preprocessor;
-class TargetOptions;
-
-// AST pretty-printer: prints out the AST in a format that is close to the
-// original C code. The output is intended to be in a format such that
-// clang could re-parse the output back into the same AST, but the
-// implementation is still incomplete.
-std::unique_ptr<ASTConsumer> CreateASTPrinter(raw_ostream *OS,
- StringRef FilterString);
-
-// AST dumper: dumps the raw AST in human-readable form to stderr; this is
-// intended for debugging.
-std::unique_ptr<ASTConsumer> CreateASTDumper(StringRef FilterString,
- bool DumpDecls,
- bool DumpLookups);
-
-// AST Decl node lister: prints qualified names of all filterable AST Decl
-// nodes.
-std::unique_ptr<ASTConsumer> CreateASTDeclNodeLister();
-
-// Graphical AST viewer: for each function definition, creates a graph of
-// the AST and displays it with the graph viewer "dotty". Also outputs
-// function declarations to stderr.
-std::unique_ptr<ASTConsumer> CreateASTViewer();
-
-// DeclContext printer: prints out the DeclContext tree in human-readable form
-// to stderr; this is intended for debugging.
-std::unique_ptr<ASTConsumer> CreateDeclContextPrinter();
-
-} // end clang namespace
-
-#endif
diff --git a/include/clang/Frontend/ASTUnit.h b/include/clang/Frontend/ASTUnit.h
deleted file mode 100644
index a5f7af5..0000000
--- a/include/clang/Frontend/ASTUnit.h
+++ /dev/null
@@ -1,924 +0,0 @@
-//===--- ASTUnit.h - ASTUnit utility ----------------------------*- C++ -*-===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-//
-// ASTUnit utility class.
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef LLVM_CLANG_FRONTEND_ASTUNIT_H
-#define LLVM_CLANG_FRONTEND_ASTUNIT_H
-
-#include "clang-c/Index.h"
-#include "clang/AST/ASTContext.h"
-#include "clang/Basic/FileManager.h"
-#include "clang/Basic/FileSystemOptions.h"
-#include "clang/Basic/LangOptions.h"
-#include "clang/Basic/SourceManager.h"
-#include "clang/Basic/TargetOptions.h"
-#include "clang/Lex/HeaderSearchOptions.h"
-#include "clang/Lex/ModuleLoader.h"
-#include "clang/Lex/PreprocessingRecord.h"
-#include "clang/Sema/CodeCompleteConsumer.h"
-#include "clang/Serialization/ASTBitCodes.h"
-#include "llvm/ADT/IntrusiveRefCntPtr.h"
-#include "llvm/ADT/SmallVector.h"
-#include "llvm/ADT/StringMap.h"
-#include "llvm/Support/MD5.h"
-#include "llvm/Support/Path.h"
-#include <cassert>
-#include <map>
-#include <memory>
-#include <string>
-#include <sys/types.h>
-#include <utility>
-#include <vector>
-
-namespace llvm {
- class MemoryBuffer;
-}
-
-namespace clang {
-class Sema;
-class ASTContext;
-class ASTReader;
-class CodeCompleteConsumer;
-class CompilerInvocation;
-class CompilerInstance;
-class Decl;
-class DiagnosticsEngine;
-class FileEntry;
-class FileManager;
-class HeaderSearch;
-class Preprocessor;
-class PCHContainerOperations;
-class PCHContainerReader;
-class SourceManager;
-class TargetInfo;
-class ASTFrontendAction;
-class ASTDeserializationListener;
-
-/// \brief Utility class for loading a ASTContext from an AST file.
-///
-class ASTUnit : public ModuleLoader {
-public:
- struct StandaloneFixIt {
- std::pair<unsigned, unsigned> RemoveRange;
- std::pair<unsigned, unsigned> InsertFromRange;
- std::string CodeToInsert;
- bool BeforePreviousInsertions;
- };
-
- struct StandaloneDiagnostic {
- unsigned ID;
- DiagnosticsEngine::Level Level;
- std::string Message;
- std::string Filename;
- unsigned LocOffset;
- std::vector<std::pair<unsigned, unsigned> > Ranges;
- std::vector<StandaloneFixIt> FixIts;
- };
-
-private:
- std::shared_ptr<LangOptions> LangOpts;
- IntrusiveRefCntPtr<DiagnosticsEngine> Diagnostics;
- IntrusiveRefCntPtr<FileManager> FileMgr;
- IntrusiveRefCntPtr<SourceManager> SourceMgr;
- std::unique_ptr<HeaderSearch> HeaderInfo;
- IntrusiveRefCntPtr<TargetInfo> Target;
- IntrusiveRefCntPtr<Preprocessor> PP;
- IntrusiveRefCntPtr<ASTContext> Ctx;
- std::shared_ptr<TargetOptions> TargetOpts;
- IntrusiveRefCntPtr<HeaderSearchOptions> HSOpts;
- IntrusiveRefCntPtr<ASTReader> Reader;
- bool HadModuleLoaderFatalFailure;
-
- struct ASTWriterData;
- std::unique_ptr<ASTWriterData> WriterData;
-
- FileSystemOptions FileSystemOpts;
-
- /// \brief The AST consumer that received information about the translation
- /// unit as it was parsed or loaded.
- std::unique_ptr<ASTConsumer> Consumer;
-
- /// \brief The semantic analysis object used to type-check the translation
- /// unit.
- std::unique_ptr<Sema> TheSema;
-
- /// Optional owned invocation, just used to make the invocation used in
- /// LoadFromCommandLine available.
- IntrusiveRefCntPtr<CompilerInvocation> Invocation;
-
- // OnlyLocalDecls - when true, walking this AST should only visit declarations
- // that come from the AST itself, not from included precompiled headers.
- // FIXME: This is temporary; eventually, CIndex will always do this.
- bool OnlyLocalDecls;
-
- /// \brief Whether to capture any diagnostics produced.
- bool CaptureDiagnostics;
-
- /// \brief Track whether the main file was loaded from an AST or not.
- bool MainFileIsAST;
-
- /// \brief What kind of translation unit this AST represents.
- TranslationUnitKind TUKind;
-
- /// \brief Whether we should time each operation.
- bool WantTiming;
-
- /// \brief Whether the ASTUnit should delete the remapped buffers.
- bool OwnsRemappedFileBuffers;
-
- /// Track the top-level decls which appeared in an ASTUnit which was loaded
- /// from a source file.
- //
- // FIXME: This is just an optimization hack to avoid deserializing large parts
- // of a PCH file when using the Index library on an ASTUnit loaded from
- // source. In the long term we should make the Index library use efficient and
- // more scalable search mechanisms.
- std::vector<Decl*> TopLevelDecls;
-
- /// \brief Sorted (by file offset) vector of pairs of file offset/Decl.
- typedef SmallVector<std::pair<unsigned, Decl *>, 64> LocDeclsTy;
- typedef llvm::DenseMap<FileID, LocDeclsTy *> FileDeclsTy;
-
- /// \brief Map from FileID to the file-level declarations that it contains.
- /// The files and decls are only local (and non-preamble) ones.
- FileDeclsTy FileDecls;
-
- /// The name of the original source file used to generate this ASTUnit.
- std::string OriginalSourceFile;
-
- /// \brief The set of diagnostics produced when creating the preamble.
- SmallVector<StandaloneDiagnostic, 4> PreambleDiagnostics;
-
- /// \brief The set of diagnostics produced when creating this
- /// translation unit.
- SmallVector<StoredDiagnostic, 4> StoredDiagnostics;
-
- /// \brief The set of diagnostics produced when failing to parse, e.g. due
- /// to failure to load the PCH.
- SmallVector<StoredDiagnostic, 4> FailedParseDiagnostics;
-
- /// \brief The number of stored diagnostics that come from the driver
- /// itself.
- ///
- /// Diagnostics that come from the driver are retained from one parse to
- /// the next.
- unsigned NumStoredDiagnosticsFromDriver;
-
- /// \brief Counter that determines when we want to try building a
- /// precompiled preamble.
- ///
- /// If zero, we will never build a precompiled preamble. Otherwise,
- /// it's treated as a counter that decrements each time we reparse
- /// without the benefit of a precompiled preamble. When it hits 1,
- /// we'll attempt to rebuild the precompiled header. This way, if
- /// building the precompiled preamble fails, we won't try again for
- /// some number of calls.
- unsigned PreambleRebuildCounter;
-
-public:
- class PreambleData {
- const FileEntry *File;
- std::vector<char> Buffer;
- mutable unsigned NumLines;
-
- public:
- PreambleData() : File(nullptr), NumLines(0) { }
-
- void assign(const FileEntry *F, const char *begin, const char *end) {
- File = F;
- Buffer.assign(begin, end);
- NumLines = 0;
- }
-
- void clear() { Buffer.clear(); File = nullptr; NumLines = 0; }
-
- size_t size() const { return Buffer.size(); }
- bool empty() const { return Buffer.empty(); }
-
- const char *getBufferStart() const { return &Buffer[0]; }
-
- unsigned getNumLines() const {
- if (NumLines)
- return NumLines;
- countLines();
- return NumLines;
- }
-
- SourceRange getSourceRange(const SourceManager &SM) const {
- SourceLocation FileLoc = SM.getLocForStartOfFile(SM.getPreambleFileID());
- return SourceRange(FileLoc, FileLoc.getLocWithOffset(size()-1));
- }
-
- private:
- void countLines() const;
- };
-
- const PreambleData &getPreambleData() const {
- return Preamble;
- }
-
- /// Data used to determine if a file used in the preamble has been changed.
- struct PreambleFileHash {
- /// All files have size set.
- off_t Size;
-
- /// Modification time is set for files that are on disk. For memory
- /// buffers it is zero.
- time_t ModTime;
-
- /// Memory buffers have MD5 instead of modification time. We don't
- /// compute MD5 for on-disk files because we hope that modification time is
- /// enough to tell if the file was changed.
- llvm::MD5::MD5Result MD5;
-
- static PreambleFileHash createForFile(off_t Size, time_t ModTime);
- static PreambleFileHash
- createForMemoryBuffer(const llvm::MemoryBuffer *Buffer);
-
- friend bool operator==(const PreambleFileHash &LHS,
- const PreambleFileHash &RHS);
-
- friend bool operator!=(const PreambleFileHash &LHS,
- const PreambleFileHash &RHS) {
- return !(LHS == RHS);
- }
- };
-
-private:
- /// \brief The contents of the preamble that has been precompiled to
- /// \c PreambleFile.
- PreambleData Preamble;
-
- /// \brief Whether the preamble ends at the start of a new line.
- ///
- /// Used to inform the lexer as to whether it's starting at the beginning of
- /// a line after skipping the preamble.
- bool PreambleEndsAtStartOfLine;
-
- /// \brief Keeps track of the files that were used when computing the
- /// preamble, with both their buffer size and their modification time.
- ///
- /// If any of the files have changed from one compile to the next,
- /// the preamble must be thrown away.
- llvm::StringMap<PreambleFileHash> FilesInPreamble;
-
- /// \brief When non-NULL, this is the buffer used to store the contents of
- /// the main file when it has been padded for use with the precompiled
- /// preamble.
- std::unique_ptr<llvm::MemoryBuffer> SavedMainFileBuffer;
-
- /// \brief When non-NULL, this is the buffer used to store the
- /// contents of the preamble when it has been padded to build the
- /// precompiled preamble.
- std::unique_ptr<llvm::MemoryBuffer> PreambleBuffer;
-
- /// \brief The number of warnings that occurred while parsing the preamble.
- ///
- /// This value will be used to restore the state of the \c DiagnosticsEngine
- /// object when re-using the precompiled preamble. Note that only the
- /// number of warnings matters, since we will not save the preamble
- /// when any errors are present.
- unsigned NumWarningsInPreamble;
-
- /// \brief A list of the serialization ID numbers for each of the top-level
- /// declarations parsed within the precompiled preamble.
- std::vector<serialization::DeclID> TopLevelDeclsInPreamble;
-
- /// \brief Whether we should be caching code-completion results.
- bool ShouldCacheCodeCompletionResults : 1;
-
- /// \brief Whether to include brief documentation within the set of code
- /// completions cached.
- bool IncludeBriefCommentsInCodeCompletion : 1;
-
- /// \brief True if non-system source files should be treated as volatile
- /// (likely to change while trying to use them).
- bool UserFilesAreVolatile : 1;
-
- /// \brief The language options used when we load an AST file.
- LangOptions ASTFileLangOpts;
-
- static void ConfigureDiags(IntrusiveRefCntPtr<DiagnosticsEngine> Diags,
- ASTUnit &AST, bool CaptureDiagnostics);
-
- void TranslateStoredDiagnostics(FileManager &FileMgr,
- SourceManager &SrcMan,
- const SmallVectorImpl<StandaloneDiagnostic> &Diags,
- SmallVectorImpl<StoredDiagnostic> &Out);
-
- void clearFileLevelDecls();
-
-public:
- /// \brief A cached code-completion result, which may be introduced in one of
- /// many different contexts.
- struct CachedCodeCompletionResult {
- /// \brief The code-completion string corresponding to this completion
- /// result.
- CodeCompletionString *Completion;
-
- /// \brief A bitmask that indicates which code-completion contexts should
- /// contain this completion result.
- ///
- /// The bits in the bitmask correspond to the values of
- /// CodeCompleteContext::Kind. To map from a completion context kind to a
- /// bit, shift 1 by that number of bits. Many completions can occur in
- /// several different contexts.
- uint64_t ShowInContexts;
-
- /// \brief The priority given to this code-completion result.
- unsigned Priority;
-
- /// \brief The libclang cursor kind corresponding to this code-completion
- /// result.
- CXCursorKind Kind;
-
- /// \brief The availability of this code-completion result.
- CXAvailabilityKind Availability;
-
- /// \brief The simplified type class for a non-macro completion result.
- SimplifiedTypeClass TypeClass;
-
- /// \brief The type of a non-macro completion result, stored as a unique
- /// integer used by the string map of cached completion types.
- ///
- /// This value will be zero if the type is not known, or a unique value
- /// determined by the formatted type string. Se \c CachedCompletionTypes
- /// for more information.
- unsigned Type;
- };
-
- /// \brief Retrieve the mapping from formatted type names to unique type
- /// identifiers.
- llvm::StringMap<unsigned> &getCachedCompletionTypes() {
- return CachedCompletionTypes;
- }
-
- /// \brief Retrieve the allocator used to cache global code completions.
- IntrusiveRefCntPtr<GlobalCodeCompletionAllocator>
- getCachedCompletionAllocator() {
- return CachedCompletionAllocator;
- }
-
- CodeCompletionTUInfo &getCodeCompletionTUInfo() {
- if (!CCTUInfo)
- CCTUInfo.reset(new CodeCompletionTUInfo(
- new GlobalCodeCompletionAllocator));
- return *CCTUInfo;
- }
-
-private:
- /// \brief Allocator used to store cached code completions.
- IntrusiveRefCntPtr<GlobalCodeCompletionAllocator>
- CachedCompletionAllocator;
-
- std::unique_ptr<CodeCompletionTUInfo> CCTUInfo;
-
- /// \brief The set of cached code-completion results.
- std::vector<CachedCodeCompletionResult> CachedCompletionResults;
-
- /// \brief A mapping from the formatted type name to a unique number for that
- /// type, which is used for type equality comparisons.
- llvm::StringMap<unsigned> CachedCompletionTypes;
-
- /// \brief A string hash of the top-level declaration and macro definition
- /// names processed the last time that we reparsed the file.
- ///
- /// This hash value is used to determine when we need to refresh the
- /// global code-completion cache.
- unsigned CompletionCacheTopLevelHashValue;
-
- /// \brief A string hash of the top-level declaration and macro definition
- /// names processed the last time that we reparsed the precompiled preamble.
- ///
- /// This hash value is used to determine when we need to refresh the
- /// global code-completion cache after a rebuild of the precompiled preamble.
- unsigned PreambleTopLevelHashValue;
-
- /// \brief The current hash value for the top-level declaration and macro
- /// definition names
- unsigned CurrentTopLevelHashValue;
-
- /// \brief Bit used by CIndex to mark when a translation unit may be in an
- /// inconsistent state, and is not safe to free.
- unsigned UnsafeToFree : 1;
-
- /// \brief Cache any "global" code-completion results, so that we can avoid
- /// recomputing them with each completion.
- void CacheCodeCompletionResults();
-
- /// \brief Clear out and deallocate
- void ClearCachedCompletionResults();
-
- ASTUnit(const ASTUnit &) = delete;
- void operator=(const ASTUnit &) = delete;
-
- explicit ASTUnit(bool MainFileIsAST);
-
- void CleanTemporaryFiles();
- bool Parse(std::shared_ptr<PCHContainerOperations> PCHContainerOps,
- std::unique_ptr<llvm::MemoryBuffer> OverrideMainBuffer);
-
- struct ComputedPreamble {
- llvm::MemoryBuffer *Buffer;
- std::unique_ptr<llvm::MemoryBuffer> Owner;
- unsigned Size;
- bool PreambleEndsAtStartOfLine;
- ComputedPreamble(llvm::MemoryBuffer *Buffer,
- std::unique_ptr<llvm::MemoryBuffer> Owner, unsigned Size,
- bool PreambleEndsAtStartOfLine)
- : Buffer(Buffer), Owner(std::move(Owner)), Size(Size),
- PreambleEndsAtStartOfLine(PreambleEndsAtStartOfLine) {}
- ComputedPreamble(ComputedPreamble &&C)
- : Buffer(C.Buffer), Owner(std::move(C.Owner)), Size(C.Size),
- PreambleEndsAtStartOfLine(C.PreambleEndsAtStartOfLine) {}
- };
- ComputedPreamble ComputePreamble(CompilerInvocation &Invocation,
- unsigned MaxLines);
-
- std::unique_ptr<llvm::MemoryBuffer> getMainBufferWithPrecompiledPreamble(
- std::shared_ptr<PCHContainerOperations> PCHContainerOps,
- const CompilerInvocation &PreambleInvocationIn, bool AllowRebuild = true,
- unsigned MaxLines = 0);
- void RealizeTopLevelDeclsFromPreamble();
-
- /// \brief Transfers ownership of the objects (like SourceManager) from
- /// \param CI to this ASTUnit.
- void transferASTDataFromCompilerInstance(CompilerInstance &CI);
-
- /// \brief Allows us to assert that ASTUnit is not being used concurrently,
- /// which is not supported.
- ///
- /// Clients should create instances of the ConcurrencyCheck class whenever
- /// using the ASTUnit in a way that isn't intended to be concurrent, which is
- /// just about any usage.
- /// Becomes a noop in release mode; only useful for debug mode checking.
- class ConcurrencyState {
- void *Mutex; // a llvm::sys::MutexImpl in debug;
-
- public:
- ConcurrencyState();
- ~ConcurrencyState();
-
- void start();
- void finish();
- };
- ConcurrencyState ConcurrencyCheckValue;
-
-public:
- class ConcurrencyCheck {
- ASTUnit &Self;
-
- public:
- explicit ConcurrencyCheck(ASTUnit &Self)
- : Self(Self)
- {
- Self.ConcurrencyCheckValue.start();
- }
- ~ConcurrencyCheck() {
- Self.ConcurrencyCheckValue.finish();
- }
- };
- friend class ConcurrencyCheck;
-
- ~ASTUnit() override;
-
- bool isMainFileAST() const { return MainFileIsAST; }
-
- bool isUnsafeToFree() const { return UnsafeToFree; }
- void setUnsafeToFree(bool Value) { UnsafeToFree = Value; }
-
- const DiagnosticsEngine &getDiagnostics() const { return *Diagnostics; }
- DiagnosticsEngine &getDiagnostics() { return *Diagnostics; }
-
- const SourceManager &getSourceManager() const { return *SourceMgr; }
- SourceManager &getSourceManager() { return *SourceMgr; }
-
- const Preprocessor &getPreprocessor() const { return *PP; }
- Preprocessor &getPreprocessor() { return *PP; }
-
- const ASTContext &getASTContext() const { return *Ctx; }
- ASTContext &getASTContext() { return *Ctx; }
-
- void setASTContext(ASTContext *ctx) { Ctx = ctx; }
- void setPreprocessor(Preprocessor *pp);
-
- bool hasSema() const { return (bool)TheSema; }
- Sema &getSema() const {
- assert(TheSema && "ASTUnit does not have a Sema object!");
- return *TheSema;
- }
-
- const LangOptions &getLangOpts() const {
- assert(LangOpts && " ASTUnit does not have language options");
- return *LangOpts;
- }
-
- const FileManager &getFileManager() const { return *FileMgr; }
- FileManager &getFileManager() { return *FileMgr; }
-
- const FileSystemOptions &getFileSystemOpts() const { return FileSystemOpts; }
-
- StringRef getOriginalSourceFileName() {
- return OriginalSourceFile;
- }
-
- ASTMutationListener *getASTMutationListener();
- ASTDeserializationListener *getDeserializationListener();
-
- /// \brief Add a temporary file that the ASTUnit depends on.
- ///
- /// This file will be erased when the ASTUnit is destroyed.
- void addTemporaryFile(StringRef TempFile);
-
- bool getOnlyLocalDecls() const { return OnlyLocalDecls; }
-
- bool getOwnsRemappedFileBuffers() const { return OwnsRemappedFileBuffers; }
- void setOwnsRemappedFileBuffers(bool val) { OwnsRemappedFileBuffers = val; }
-
- StringRef getMainFileName() const;
-
- /// \brief If this ASTUnit came from an AST file, returns the filename for it.
- StringRef getASTFileName() const;
-
- typedef std::vector<Decl *>::iterator top_level_iterator;
-
- top_level_iterator top_level_begin() {
- assert(!isMainFileAST() && "Invalid call for AST based ASTUnit!");
- if (!TopLevelDeclsInPreamble.empty())
- RealizeTopLevelDeclsFromPreamble();
- return TopLevelDecls.begin();
- }
-
- top_level_iterator top_level_end() {
- assert(!isMainFileAST() && "Invalid call for AST based ASTUnit!");
- if (!TopLevelDeclsInPreamble.empty())
- RealizeTopLevelDeclsFromPreamble();
- return TopLevelDecls.end();
- }
-
- std::size_t top_level_size() const {
- assert(!isMainFileAST() && "Invalid call for AST based ASTUnit!");
- return TopLevelDeclsInPreamble.size() + TopLevelDecls.size();
- }
-
- bool top_level_empty() const {
- assert(!isMainFileAST() && "Invalid call for AST based ASTUnit!");
- return TopLevelDeclsInPreamble.empty() && TopLevelDecls.empty();
- }
-
- /// \brief Add a new top-level declaration.
- void addTopLevelDecl(Decl *D) {
- TopLevelDecls.push_back(D);
- }
-
- /// \brief Add a new local file-level declaration.
- void addFileLevelDecl(Decl *D);
-
- /// \brief Get the decls that are contained in a file in the Offset/Length
- /// range. \p Length can be 0 to indicate a point at \p Offset instead of
- /// a range.
- void findFileRegionDecls(FileID File, unsigned Offset, unsigned Length,
- SmallVectorImpl<Decl *> &Decls);
-
- /// \brief Add a new top-level declaration, identified by its ID in
- /// the precompiled preamble.
- void addTopLevelDeclFromPreamble(serialization::DeclID D) {
- TopLevelDeclsInPreamble.push_back(D);
- }
-
- /// \brief Retrieve a reference to the current top-level name hash value.
- ///
- /// Note: This is used internally by the top-level tracking action
- unsigned &getCurrentTopLevelHashValue() { return CurrentTopLevelHashValue; }
-
- /// \brief Get the source location for the given file:line:col triplet.
- ///
- /// The difference with SourceManager::getLocation is that this method checks
- /// whether the requested location points inside the precompiled preamble
- /// in which case the returned source location will be a "loaded" one.
- SourceLocation getLocation(const FileEntry *File,
- unsigned Line, unsigned Col) const;
-
- /// \brief Get the source location for the given file:offset pair.
- SourceLocation getLocation(const FileEntry *File, unsigned Offset) const;
-
- /// \brief If \p Loc is a loaded location from the preamble, returns
- /// the corresponding local location of the main file, otherwise it returns
- /// \p Loc.
- SourceLocation mapLocationFromPreamble(SourceLocation Loc);
-
- /// \brief If \p Loc is a local location of the main file but inside the
- /// preamble chunk, returns the corresponding loaded location from the
- /// preamble, otherwise it returns \p Loc.
- SourceLocation mapLocationToPreamble(SourceLocation Loc);
-
- bool isInPreambleFileID(SourceLocation Loc);
- bool isInMainFileID(SourceLocation Loc);
- SourceLocation getStartOfMainFileID();
- SourceLocation getEndOfPreambleFileID();
-
- /// \see mapLocationFromPreamble.
- SourceRange mapRangeFromPreamble(SourceRange R) {
- return SourceRange(mapLocationFromPreamble(R.getBegin()),
- mapLocationFromPreamble(R.getEnd()));
- }
-
- /// \see mapLocationToPreamble.
- SourceRange mapRangeToPreamble(SourceRange R) {
- return SourceRange(mapLocationToPreamble(R.getBegin()),
- mapLocationToPreamble(R.getEnd()));
- }
-
- // Retrieve the diagnostics associated with this AST
- typedef StoredDiagnostic *stored_diag_iterator;
- typedef const StoredDiagnostic *stored_diag_const_iterator;
- stored_diag_const_iterator stored_diag_begin() const {
- return StoredDiagnostics.begin();
- }
- stored_diag_iterator stored_diag_begin() {
- return StoredDiagnostics.begin();
- }
- stored_diag_const_iterator stored_diag_end() const {
- return StoredDiagnostics.end();
- }
- stored_diag_iterator stored_diag_end() {
- return StoredDiagnostics.end();
- }
- unsigned stored_diag_size() const { return StoredDiagnostics.size(); }
-
- stored_diag_iterator stored_diag_afterDriver_begin() {
- if (NumStoredDiagnosticsFromDriver > StoredDiagnostics.size())
- NumStoredDiagnosticsFromDriver = 0;
- return StoredDiagnostics.begin() + NumStoredDiagnosticsFromDriver;
- }
-
- typedef std::vector<CachedCodeCompletionResult>::iterator
- cached_completion_iterator;
-
- cached_completion_iterator cached_completion_begin() {
- return CachedCompletionResults.begin();
- }
-
- cached_completion_iterator cached_completion_end() {
- return CachedCompletionResults.end();
- }
-
- unsigned cached_completion_size() const {
- return CachedCompletionResults.size();
- }
-
- /// \brief Returns an iterator range for the local preprocessing entities
- /// of the local Preprocessor, if this is a parsed source file, or the loaded
- /// preprocessing entities of the primary module if this is an AST file.
- llvm::iterator_range<PreprocessingRecord::iterator>
- getLocalPreprocessingEntities() const;
-
- /// \brief Type for a function iterating over a number of declarations.
- /// \returns true to continue iteration and false to abort.
- typedef bool (*DeclVisitorFn)(void *context, const Decl *D);
-
- /// \brief Iterate over local declarations (locally parsed if this is a parsed
- /// source file or the loaded declarations of the primary module if this is an
- /// AST file).
- /// \returns true if the iteration was complete or false if it was aborted.
- bool visitLocalTopLevelDecls(void *context, DeclVisitorFn Fn);
-
- /// \brief Get the PCH file if one was included.
- const FileEntry *getPCHFile();
-
- /// \brief Returns true if the ASTUnit was constructed from a serialized
- /// module file.
- bool isModuleFile();
-
- std::unique_ptr<llvm::MemoryBuffer>
- getBufferForFile(StringRef Filename, std::string *ErrorStr = nullptr);
-
- /// \brief Determine what kind of translation unit this AST represents.
- TranslationUnitKind getTranslationUnitKind() const { return TUKind; }
-
- /// \brief A mapping from a file name to the memory buffer that stores the
- /// remapped contents of that file.
- typedef std::pair<std::string, llvm::MemoryBuffer *> RemappedFile;
-
- /// \brief Create a ASTUnit. Gets ownership of the passed CompilerInvocation.
- static ASTUnit *create(CompilerInvocation *CI,
- IntrusiveRefCntPtr<DiagnosticsEngine> Diags,
- bool CaptureDiagnostics,
- bool UserFilesAreVolatile);
-
- /// \brief Create a ASTUnit from an AST file.
- ///
- /// \param Filename - The AST file to load.
- ///
- /// \param PCHContainerRdr - The PCHContainerOperations to use for loading and
- /// creating modules.
- /// \param Diags - The diagnostics engine to use for reporting errors; its
- /// lifetime is expected to extend past that of the returned ASTUnit.
- ///
- /// \returns - The initialized ASTUnit or null if the AST failed to load.
- static std::unique_ptr<ASTUnit> LoadFromASTFile(
- const std::string &Filename, const PCHContainerReader &PCHContainerRdr,
- IntrusiveRefCntPtr<DiagnosticsEngine> Diags,
- const FileSystemOptions &FileSystemOpts, bool UseDebugInfo = false,
- bool OnlyLocalDecls = false, ArrayRef<RemappedFile> RemappedFiles = None,
- bool CaptureDiagnostics = false, bool AllowPCHWithCompilerErrors = false,
- bool UserFilesAreVolatile = false);
-
-private:
- /// \brief Helper function for \c LoadFromCompilerInvocation() and
- /// \c LoadFromCommandLine(), which loads an AST from a compiler invocation.
- ///
- /// \param PrecompilePreambleAfterNParses After how many parses the preamble
- /// of this translation unit should be precompiled, to improve the performance
- /// of reparsing. Set to zero to disable preambles.
- ///
- /// \returns \c true if a catastrophic failure occurred (which means that the
- /// \c ASTUnit itself is invalid), or \c false otherwise.
- bool LoadFromCompilerInvocation(
- std::shared_ptr<PCHContainerOperations> PCHContainerOps,
- unsigned PrecompilePreambleAfterNParses);
-
-public:
-
- /// \brief Create an ASTUnit from a source file, via a CompilerInvocation
- /// object, by invoking the optionally provided ASTFrontendAction.
- ///
- /// \param CI - The compiler invocation to use; it must have exactly one input
- /// source file. The ASTUnit takes ownership of the CompilerInvocation object.
- ///
- /// \param PCHContainerOps - The PCHContainerOperations to use for loading and
- /// creating modules.
- ///
- /// \param Diags - The diagnostics engine to use for reporting errors; its
- /// lifetime is expected to extend past that of the returned ASTUnit.
- ///
- /// \param Action - The ASTFrontendAction to invoke. Its ownership is not
- /// transferred.
- ///
- /// \param Unit - optionally an already created ASTUnit. Its ownership is not
- /// transferred.
- ///
- /// \param Persistent - if true the returned ASTUnit will be complete.
- /// false means the caller is only interested in getting info through the
- /// provided \see Action.
- ///
- /// \param ErrAST - If non-null and parsing failed without any AST to return
- /// (e.g. because the PCH could not be loaded), this accepts the ASTUnit
- /// mainly to allow the caller to see the diagnostics.
- /// This will only receive an ASTUnit if a new one was created. If an already
- /// created ASTUnit was passed in \p Unit then the caller can check that.
- ///
- static ASTUnit *LoadFromCompilerInvocationAction(
- CompilerInvocation *CI,
- std::shared_ptr<PCHContainerOperations> PCHContainerOps,
- IntrusiveRefCntPtr<DiagnosticsEngine> Diags,
- ASTFrontendAction *Action = nullptr, ASTUnit *Unit = nullptr,
- bool Persistent = true, StringRef ResourceFilesPath = StringRef(),
- bool OnlyLocalDecls = false, bool CaptureDiagnostics = false,
- unsigned PrecompilePreambleAfterNParses = 0,
- bool CacheCodeCompletionResults = false,
- bool IncludeBriefCommentsInCodeCompletion = false,
- bool UserFilesAreVolatile = false,
- std::unique_ptr<ASTUnit> *ErrAST = nullptr);
-
- /// LoadFromCompilerInvocation - Create an ASTUnit from a source file, via a
- /// CompilerInvocation object.
- ///
- /// \param CI - The compiler invocation to use; it must have exactly one input
- /// source file. The ASTUnit takes ownership of the CompilerInvocation object.
- ///
- /// \param PCHContainerOps - The PCHContainerOperations to use for loading and
- /// creating modules.
- ///
- /// \param Diags - The diagnostics engine to use for reporting errors; its
- /// lifetime is expected to extend past that of the returned ASTUnit.
- //
- // FIXME: Move OnlyLocalDecls, UseBumpAllocator to setters on the ASTUnit, we
- // shouldn't need to specify them at construction time.
- static std::unique_ptr<ASTUnit> LoadFromCompilerInvocation(
- CompilerInvocation *CI,
- std::shared_ptr<PCHContainerOperations> PCHContainerOps,
- IntrusiveRefCntPtr<DiagnosticsEngine> Diags, FileManager *FileMgr,
- bool OnlyLocalDecls = false, bool CaptureDiagnostics = false,
- unsigned PrecompilePreambleAfterNParses = 0,
- TranslationUnitKind TUKind = TU_Complete,
- bool CacheCodeCompletionResults = false,
- bool IncludeBriefCommentsInCodeCompletion = false,
- bool UserFilesAreVolatile = false);
-
- /// LoadFromCommandLine - Create an ASTUnit from a vector of command line
- /// arguments, which must specify exactly one source file.
- ///
- /// \param ArgBegin - The beginning of the argument vector.
- ///
- /// \param ArgEnd - The end of the argument vector.
- ///
- /// \param PCHContainerOps - The PCHContainerOperations to use for loading and
- /// creating modules.
- ///
- /// \param Diags - The diagnostics engine to use for reporting errors; its
- /// lifetime is expected to extend past that of the returned ASTUnit.
- ///
- /// \param ResourceFilesPath - The path to the compiler resource files.
- ///
- /// \param ModuleFormat - If provided, uses the specific module format.
- ///
- /// \param ErrAST - If non-null and parsing failed without any AST to return
- /// (e.g. because the PCH could not be loaded), this accepts the ASTUnit
- /// mainly to allow the caller to see the diagnostics.
- ///
- // FIXME: Move OnlyLocalDecls, UseBumpAllocator to setters on the ASTUnit, we
- // shouldn't need to specify them at construction time.
- static ASTUnit *LoadFromCommandLine(
- const char **ArgBegin, const char **ArgEnd,
- std::shared_ptr<PCHContainerOperations> PCHContainerOps,
- IntrusiveRefCntPtr<DiagnosticsEngine> Diags, StringRef ResourceFilesPath,
- bool OnlyLocalDecls = false, bool CaptureDiagnostics = false,
- ArrayRef<RemappedFile> RemappedFiles = None,
- bool RemappedFilesKeepOriginalName = true,
- unsigned PrecompilePreambleAfterNParses = 0,
- TranslationUnitKind TUKind = TU_Complete,
- bool CacheCodeCompletionResults = false,
- bool IncludeBriefCommentsInCodeCompletion = false,
- bool AllowPCHWithCompilerErrors = false, bool SkipFunctionBodies = false,
- bool UserFilesAreVolatile = false, bool ForSerialization = false,
- llvm::Optional<StringRef> ModuleFormat = llvm::None,
- std::unique_ptr<ASTUnit> *ErrAST = nullptr);
-
- /// \brief Reparse the source files using the same command-line options that
- /// were originally used to produce this translation unit.
- ///
- /// \returns True if a failure occurred that causes the ASTUnit not to
- /// contain any translation-unit information, false otherwise.
- bool Reparse(std::shared_ptr<PCHContainerOperations> PCHContainerOps,
- ArrayRef<RemappedFile> RemappedFiles = None);
-
- /// \brief Perform code completion at the given file, line, and
- /// column within this translation unit.
- ///
- /// \param File The file in which code completion will occur.
- ///
- /// \param Line The line at which code completion will occur.
- ///
- /// \param Column The column at which code completion will occur.
- ///
- /// \param IncludeMacros Whether to include macros in the code-completion
- /// results.
- ///
- /// \param IncludeCodePatterns Whether to include code patterns (such as a
- /// for loop) in the code-completion results.
- ///
- /// \param IncludeBriefComments Whether to include brief documentation within
- /// the set of code completions returned.
- ///
- /// FIXME: The Diag, LangOpts, SourceMgr, FileMgr, StoredDiagnostics, and
- /// OwnedBuffers parameters are all disgusting hacks. They will go away.
- void CodeComplete(StringRef File, unsigned Line, unsigned Column,
- ArrayRef<RemappedFile> RemappedFiles, bool IncludeMacros,
- bool IncludeCodePatterns, bool IncludeBriefComments,
- CodeCompleteConsumer &Consumer,
- std::shared_ptr<PCHContainerOperations> PCHContainerOps,
- DiagnosticsEngine &Diag, LangOptions &LangOpts,
- SourceManager &SourceMgr, FileManager &FileMgr,
- SmallVectorImpl<StoredDiagnostic> &StoredDiagnostics,
- SmallVectorImpl<const llvm::MemoryBuffer *> &OwnedBuffers);
-
- /// \brief Save this translation unit to a file with the given name.
- ///
- /// \returns true if there was a file error or false if the save was
- /// successful.
- bool Save(StringRef File);
-
- /// \brief Serialize this translation unit with the given output stream.
- ///
- /// \returns True if an error occurred, false otherwise.
- bool serialize(raw_ostream &OS);
-
- ModuleLoadResult loadModule(SourceLocation ImportLoc, ModuleIdPath Path,
- Module::NameVisibilityKind Visibility,
- bool IsInclusionDirective) override {
- // ASTUnit doesn't know how to load modules (not that this matters).
- return ModuleLoadResult();
- }
-
- void makeModuleVisible(Module *Mod, Module::NameVisibilityKind Visibility,
- SourceLocation ImportLoc) override {}
-
- GlobalModuleIndex *loadGlobalModuleIndex(SourceLocation TriggerLoc) override
- { return nullptr; }
- bool lookupMissingImports(StringRef Name, SourceLocation TriggerLoc) override
- { return 0; }
-};
-
-} // namespace clang
-
-#endif
diff --git a/include/clang/Frontend/ChainedDiagnosticConsumer.h b/include/clang/Frontend/ChainedDiagnosticConsumer.h
deleted file mode 100644
index eb33273..0000000
--- a/include/clang/Frontend/ChainedDiagnosticConsumer.h
+++ /dev/null
@@ -1,72 +0,0 @@
-//===- ChainedDiagnosticConsumer.h - Chain Diagnostic Clients ---*- 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_FRONTEND_CHAINEDDIAGNOSTICCONSUMER_H
-#define LLVM_CLANG_FRONTEND_CHAINEDDIAGNOSTICCONSUMER_H
-
-#include "clang/Basic/Diagnostic.h"
-#include <memory>
-
-namespace clang {
-class LangOptions;
-
-/// ChainedDiagnosticConsumer - Chain two diagnostic clients so that diagnostics
-/// go to the first client and then the second. The first diagnostic client
-/// should be the "primary" client, and will be used for computing whether the
-/// diagnostics should be included in counts.
-class ChainedDiagnosticConsumer : public DiagnosticConsumer {
- virtual void anchor();
- std::unique_ptr<DiagnosticConsumer> OwningPrimary;
- DiagnosticConsumer *Primary;
- std::unique_ptr<DiagnosticConsumer> Secondary;
-
-public:
- ChainedDiagnosticConsumer(std::unique_ptr<DiagnosticConsumer> Primary,
- std::unique_ptr<DiagnosticConsumer> Secondary)
- : OwningPrimary(std::move(Primary)), Primary(OwningPrimary.get()),
- Secondary(std::move(Secondary)) {}
-
- /// \brief Construct without taking ownership of \c Primary.
- ChainedDiagnosticConsumer(DiagnosticConsumer *Primary,
- std::unique_ptr<DiagnosticConsumer> Secondary)
- : Primary(Primary), Secondary(std::move(Secondary)) {}
-
- void BeginSourceFile(const LangOptions &LO,
- const Preprocessor *PP) override {
- Primary->BeginSourceFile(LO, PP);
- Secondary->BeginSourceFile(LO, PP);
- }
-
- void EndSourceFile() override {
- Secondary->EndSourceFile();
- Primary->EndSourceFile();
- }
-
- void finish() override {
- Secondary->finish();
- Primary->finish();
- }
-
- bool IncludeInDiagnosticCounts() const override {
- return Primary->IncludeInDiagnosticCounts();
- }
-
- void HandleDiagnostic(DiagnosticsEngine::Level DiagLevel,
- const Diagnostic &Info) override {
- // Default implementation (Warnings/errors count).
- DiagnosticConsumer::HandleDiagnostic(DiagLevel, Info);
-
- Primary->HandleDiagnostic(DiagLevel, Info);
- Secondary->HandleDiagnostic(DiagLevel, Info);
- }
-};
-
-} // end namspace clang
-
-#endif
diff --git a/include/clang/Frontend/CodeGenOptions.def b/include/clang/Frontend/CodeGenOptions.def
deleted file mode 100644
index d9f6ab7..0000000
--- a/include/clang/Frontend/CodeGenOptions.def
+++ /dev/null
@@ -1,212 +0,0 @@
-//===--- CodeGenOptions.def - Code generation option database ------ C++ -*-===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-//
-// This file defines the code generation options. Users of this file
-// must define the CODEGENOPT macro to make use of this information.
-// Optionally, the user may also define ENUM_CODEGENOPT (for options
-// that have enumeration type and VALUE_CODEGENOPT is a code
-// generation option that describes a value rather than a flag.
-//
-//===----------------------------------------------------------------------===//
-#ifndef CODEGENOPT
-# error Define the CODEGENOPT macro to handle language options
-#endif
-
-#ifndef VALUE_CODEGENOPT
-# define VALUE_CODEGENOPT(Name, Bits, Default) \
-CODEGENOPT(Name, Bits, Default)
-#endif
-
-#ifndef ENUM_CODEGENOPT
-# define ENUM_CODEGENOPT(Name, Type, Bits, Default) \
-CODEGENOPT(Name, Bits, Default)
-#endif
-
-CODEGENOPT(DisableIntegratedAS, 1, 0) ///< -no-integrated-as
-CODEGENOPT(CompressDebugSections, 1, 0) ///< -Wa,-compress-debug-sections
-CODEGENOPT(Autolink , 1, 1) ///< -fno-autolink
-CODEGENOPT(AsmVerbose , 1, 0) ///< -dA, -fverbose-asm.
-CODEGENOPT(ObjCAutoRefCountExceptions , 1, 0) ///< Whether ARC should be EH-safe.
-CODEGENOPT(CoverageExtraChecksum, 1, 0) ///< Whether we need a second checksum for functions in GCNO files.
-CODEGENOPT(CoverageNoFunctionNamesInData, 1, 0) ///< Do not include function names in GCDA files.
-CODEGENOPT(CoverageExitBlockBeforeBody, 1, 0) ///< Whether to emit the exit block before the body blocks in GCNO files.
-CODEGENOPT(CXAAtExit , 1, 1) ///< Use __cxa_atexit for calling destructors.
-CODEGENOPT(CXXCtorDtorAliases, 1, 0) ///< Emit complete ctors/dtors as linker
- ///< aliases to base ctors when possible.
-CODEGENOPT(DataSections , 1, 0) ///< Set when -fdata-sections is enabled.
-CODEGENOPT(UniqueSectionNames, 1, 1) ///< Set for -funique-section-names.
-CODEGENOPT(DisableFPElim , 1, 0) ///< Set when -fomit-frame-pointer is enabled.
-CODEGENOPT(DisableFree , 1, 0) ///< Don't free memory.
-CODEGENOPT(DisableGCov , 1, 0) ///< Don't run the GCov pass, for testing.
-CODEGENOPT(DisableLLVMOpts , 1, 0) ///< Don't run any optimizations, for use in
- ///< getting .bc files that correspond to the
- ///< internal state before optimizations are
- ///< done.
-CODEGENOPT(DisableLLVMPasses , 1, 0) ///< Don't run any LLVM IR passes to get
- ///< the pristine IR generated by the
- ///< frontend.
-CODEGENOPT(DisableRedZone , 1, 0) ///< Set when -mno-red-zone is enabled.
-CODEGENOPT(DisableTailCalls , 1, 0) ///< Do not emit tail calls.
-CODEGENOPT(EmitDeclMetadata , 1, 0) ///< Emit special metadata indicating what
- ///< Decl* various IR entities came from.
- ///< Only useful when running CodeGen as a
- ///< subroutine.
-CODEGENOPT(EmitGcovArcs , 1, 0) ///< Emit coverage data files, aka. GCDA.
-CODEGENOPT(EmitGcovNotes , 1, 0) ///< Emit coverage "notes" files, aka GCNO.
-CODEGENOPT(EmitOpenCLArgMetadata , 1, 0) ///< Emit OpenCL kernel arg metadata.
-CODEGENOPT(EmulatedTLS , 1, 0) ///< Set when -femulated-tls is enabled.
-/// \brief FP_CONTRACT mode (on/off/fast).
-ENUM_CODEGENOPT(FPContractMode, FPContractModeKind, 2, FPC_On)
-CODEGENOPT(ForbidGuardVariables , 1, 0) ///< Issue errors if C++ guard variables
- ///< are required.
-CODEGENOPT(FunctionSections , 1, 0) ///< Set when -ffunction-sections is enabled.
-CODEGENOPT(InstrumentFunctions , 1, 0) ///< Set when -finstrument-functions is
- ///< enabled.
-CODEGENOPT(InstrumentForProfiling , 1, 0) ///< Set when -pg is enabled.
-CODEGENOPT(LessPreciseFPMAD , 1, 0) ///< Enable less precise MAD instructions to
- ///< be generated.
-CODEGENOPT(PrepareForLTO , 1, 0) ///< Set when -flto is enabled on the
- ///< compile step.
-CODEGENOPT(EmitFunctionSummary, 1, 0) ///< Set when -flto=thin is enabled on the
- ///< compile step.
-CODEGENOPT(IncrementalLinkerCompatible, 1, 0) ///< Emit an object file which can
- ///< be used with an incremental
- ///< linker.
-CODEGENOPT(MergeAllConstants , 1, 1) ///< Merge identical constants.
-CODEGENOPT(MergeFunctions , 1, 0) ///< Set when -fmerge-functions is enabled.
-CODEGENOPT(MSVolatile , 1, 0) ///< Set when /volatile:ms is enabled.
-CODEGENOPT(NoCommon , 1, 0) ///< Set when -fno-common or C++ is enabled.
-CODEGENOPT(NoDwarfDirectoryAsm , 1, 0) ///< Set when -fno-dwarf-directory-asm is
- ///< enabled.
-CODEGENOPT(NoExecStack , 1, 0) ///< Set when -Wa,--noexecstack is enabled.
-CODEGENOPT(FatalWarnings , 1, 0) ///< Set when -Wa,--fatal-warnings is
- ///< enabled.
-CODEGENOPT(EnableSegmentedStacks , 1, 0) ///< Set when -fsplit-stack is enabled.
-CODEGENOPT(NoImplicitFloat , 1, 0) ///< Set when -mno-implicit-float is enabled.
-CODEGENOPT(NoInfsFPMath , 1, 0) ///< Assume FP arguments, results not +-Inf.
-CODEGENOPT(NoSignedZeros , 1, 0) ///< Allow ignoring the signedness of FP zero
-CODEGENOPT(ReciprocalMath , 1, 0) ///< Allow FP divisions to be reassociated.
-CODEGENOPT(NoInline , 1, 0) ///< Set when -fno-inline is enabled.
- ///< Disables use of the inline keyword.
-CODEGENOPT(NoNaNsFPMath , 1, 0) ///< Assume FP arguments, results not NaN.
-CODEGENOPT(NoZeroInitializedInBSS , 1, 0) ///< -fno-zero-initialized-in-bss.
-/// \brief Method of Objective-C dispatch to use.
-ENUM_CODEGENOPT(ObjCDispatchMethod, ObjCDispatchMethodKind, 2, Legacy)
-CODEGENOPT(OmitLeafFramePointer , 1, 0) ///< Set when -momit-leaf-frame-pointer is
- ///< enabled.
-VALUE_CODEGENOPT(OptimizationLevel, 2, 0) ///< The -O[0-3] option specified.
-VALUE_CODEGENOPT(OptimizeSize, 2, 0) ///< If -Os (==1) or -Oz (==2) is specified.
-
-CODEGENOPT(ProfileInstrGenerate , 1, 0) ///< Instrument code to generate
- ///< execution counts to use with PGO.
-CODEGENOPT(CoverageMapping , 1, 0) ///< Generate coverage mapping regions to
- ///< enable code coverage analysis.
-CODEGENOPT(DumpCoverageMapping , 1, 0) ///< Dump the generated coverage mapping
- ///< regions.
-
- /// If -fpcc-struct-return or -freg-struct-return is specified.
-ENUM_CODEGENOPT(StructReturnConvention, StructReturnConventionKind, 2, SRCK_Default)
-
-CODEGENOPT(RelaxAll , 1, 0) ///< Relax all machine code instructions.
-CODEGENOPT(RelaxedAliasing , 1, 0) ///< Set when -fno-strict-aliasing is enabled.
-CODEGENOPT(StructPathTBAA , 1, 0) ///< Whether or not to use struct-path TBAA.
-CODEGENOPT(SaveTempLabels , 1, 0) ///< Save temporary labels.
-CODEGENOPT(SanitizeAddressZeroBaseShadow , 1, 0) ///< Map shadow memory at zero
- ///< offset in AddressSanitizer.
-CODEGENOPT(SanitizeMemoryTrackOrigins, 2, 0) ///< Enable tracking origins in
- ///< MemorySanitizer
-CODEGENOPT(SanitizeMemoryUseAfterDtor, 1, 0) ///< Enable use-after-delete detection
- ///< in MemorySanitizer
-CODEGENOPT(SanitizeCfiCrossDso, 1, 0) ///< Enable cross-dso support in CFI.
-CODEGENOPT(SanitizeCoverageType, 2, 0) ///< Type of sanitizer coverage
- ///< instrumentation.
-CODEGENOPT(SanitizeCoverageIndirectCalls, 1, 0) ///< Enable sanitizer coverage
- ///< for indirect calls.
-CODEGENOPT(SanitizeCoverageTraceBB, 1, 0) ///< Enable basic block tracing in
- ///< in sanitizer coverage.
-CODEGENOPT(SanitizeCoverageTraceCmp, 1, 0) ///< Enable cmp instruction tracing
- ///< in sanitizer coverage.
-CODEGENOPT(SanitizeCoverage8bitCounters, 1, 0) ///< Use 8-bit frequency counters
- ///< in sanitizer coverage.
-CODEGENOPT(SimplifyLibCalls , 1, 1) ///< Set when -fbuiltin is enabled.
-CODEGENOPT(SoftFloat , 1, 0) ///< -soft-float.
-CODEGENOPT(StrictEnums , 1, 0) ///< Optimize based on strict enum definition.
-CODEGENOPT(StrictVTablePointers, 1, 0) ///< Optimize based on the strict vtable pointers
-CODEGENOPT(TimePasses , 1, 0) ///< Set when -ftime-report is enabled.
-CODEGENOPT(UnitAtATime , 1, 1) ///< Unused. For mirroring GCC optimization
- ///< selection.
-CODEGENOPT(UnrollLoops , 1, 0) ///< Control whether loops are unrolled.
-CODEGENOPT(RerollLoops , 1, 0) ///< Control whether loops are rerolled.
-CODEGENOPT(UnsafeFPMath , 1, 0) ///< Allow unsafe floating point optzns.
-CODEGENOPT(UnwindTables , 1, 0) ///< Emit unwind tables.
-CODEGENOPT(VectorizeBB , 1, 0) ///< Run basic block vectorizer.
-CODEGENOPT(VectorizeLoop , 1, 0) ///< Run loop vectorizer.
-CODEGENOPT(VectorizeSLP , 1, 0) ///< Run SLP vectorizer.
-
- /// Attempt to use register sized accesses to bit-fields in structures, when
- /// possible.
-CODEGENOPT(UseRegisterSizedBitfieldAccess , 1, 0)
-
-CODEGENOPT(VerifyModule , 1, 1) ///< Control whether the module should be run
- ///< through the LLVM Verifier.
-
-CODEGENOPT(StackRealignment , 1, 0) ///< Control whether to force stack
- ///< realignment.
-CODEGENOPT(UseInitArray , 1, 0) ///< Control whether to use .init_array or
- ///< .ctors.
-VALUE_CODEGENOPT(StackAlignment , 32, 0) ///< Overrides default stack
- ///< alignment, if not 0.
-VALUE_CODEGENOPT(StackProbeSize , 32, 4096) ///< Overrides default stack
- ///< probe size, even if 0.
-CODEGENOPT(DebugColumnInfo, 1, 0) ///< Whether or not to use column information
- ///< in debug info.
-
-CODEGENOPT(DebugTypeExtRefs, 1, 0) ///< Whether or not debug info should contain
- ///< external references to a PCH or module.
-
-CODEGENOPT(DebugExplicitImport, 1, 0) ///< Whether or not debug info should
- ///< contain explicit imports for
- ///< anonymous namespaces
-
-CODEGENOPT(EmitLLVMUseLists, 1, 0) ///< Control whether to serialize use-lists.
-
-/// The user specified number of registers to be used for integral arguments,
-/// or 0 if unspecified.
-VALUE_CODEGENOPT(NumRegisterParameters, 32, 0)
-
-/// The lower bound for a buffer to be considered for stack protection.
-VALUE_CODEGENOPT(SSPBufferSize, 32, 0)
-
-/// The kind of generated debug info.
-ENUM_CODEGENOPT(DebugInfo, DebugInfoKind, 3, NoDebugInfo)
-
-/// Tune the debug info for this debugger.
-ENUM_CODEGENOPT(DebuggerTuning, DebuggerKind, 2, DebuggerKindDefault)
-
-/// Dwarf version. Version zero indicates to LLVM that no DWARF should be
-/// emitted.
-VALUE_CODEGENOPT(DwarfVersion, 3, 0)
-
-/// Whether we should emit CodeView debug information. It's possible to emit
-/// CodeView and DWARF into the same object.
-CODEGENOPT(EmitCodeView, 1, 0)
-
-/// The kind of inlining to perform.
-ENUM_CODEGENOPT(Inlining, InliningMethod, 2, NoInlining)
-
-// Vector functions library to use.
-ENUM_CODEGENOPT(VecLib, VectorLibrary, 1, NoLibrary)
-
-/// The default TLS model to use.
-ENUM_CODEGENOPT(DefaultTLSModel, TLSModel, 2, GeneralDynamicTLSModel)
-
-#undef CODEGENOPT
-#undef ENUM_CODEGENOPT
-#undef VALUE_CODEGENOPT
-
diff --git a/include/clang/Frontend/CodeGenOptions.h b/include/clang/Frontend/CodeGenOptions.h
deleted file mode 100644
index 7550e6f..0000000
--- a/include/clang/Frontend/CodeGenOptions.h
+++ /dev/null
@@ -1,245 +0,0 @@
-//===--- CodeGenOptions.h ---------------------------------------*- C++ -*-===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-//
-// This file defines the CodeGenOptions interface.
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef LLVM_CLANG_FRONTEND_CODEGENOPTIONS_H
-#define LLVM_CLANG_FRONTEND_CODEGENOPTIONS_H
-
-#include "clang/Basic/Sanitizers.h"
-#include "llvm/Support/Regex.h"
-#include <map>
-#include <memory>
-#include <string>
-#include <vector>
-
-namespace clang {
-
-/// \brief Bitfields of CodeGenOptions, split out from CodeGenOptions to ensure
-/// that this large collection of bitfields is a trivial class type.
-class CodeGenOptionsBase {
-public:
-#define CODEGENOPT(Name, Bits, Default) unsigned Name : Bits;
-#define ENUM_CODEGENOPT(Name, Type, Bits, Default)
-#include "clang/Frontend/CodeGenOptions.def"
-
-protected:
-#define CODEGENOPT(Name, Bits, Default)
-#define ENUM_CODEGENOPT(Name, Type, Bits, Default) unsigned Name : Bits;
-#include "clang/Frontend/CodeGenOptions.def"
-};
-
-/// CodeGenOptions - Track various options which control how the code
-/// is optimized and passed to the backend.
-class CodeGenOptions : public CodeGenOptionsBase {
-public:
- enum InliningMethod {
- NoInlining, // Perform no inlining whatsoever.
- NormalInlining, // Use the standard function inlining pass.
- OnlyAlwaysInlining // Only run the always inlining pass.
- };
-
- enum VectorLibrary {
- NoLibrary, // Don't use any vector library.
- Accelerate // Use the Accelerate framework.
- };
-
- enum ObjCDispatchMethodKind {
- Legacy = 0,
- NonLegacy = 1,
- Mixed = 2
- };
-
- enum DebugInfoKind {
- NoDebugInfo, /// Don't generate debug info.
-
- LocTrackingOnly, /// Emit location information but do not generate
- /// debug info in the output. This is useful in
- /// cases where the backend wants to track source
- /// locations for instructions without actually
- /// emitting debug info for them (e.g., when -Rpass
- /// is used).
-
- DebugLineTablesOnly, /// Emit only debug info necessary for generating
- /// line number tables (-gline-tables-only).
-
- LimitedDebugInfo, /// Limit generated debug info to reduce size
- /// (-fno-standalone-debug). This emits
- /// forward decls for types that could be
- /// replaced with forward decls in the source
- /// code. For dynamic C++ classes type info
- /// is only emitted int the module that
- /// contains the classe's vtable.
-
- FullDebugInfo /// Generate complete debug info.
- };
-
- enum DebuggerKind {
- DebuggerKindDefault,
- DebuggerKindGDB,
- DebuggerKindLLDB,
- DebuggerKindSCE
- };
-
- enum TLSModel {
- GeneralDynamicTLSModel,
- LocalDynamicTLSModel,
- InitialExecTLSModel,
- LocalExecTLSModel
- };
-
- enum FPContractModeKind {
- FPC_Off, // Form fused FP ops only where result will not be affected.
- FPC_On, // Form fused FP ops according to FP_CONTRACT rules.
- FPC_Fast // Aggressively fuse FP ops (E.g. FMA).
- };
-
- enum StructReturnConventionKind {
- SRCK_Default, // No special option was passed.
- SRCK_OnStack, // Small structs on the stack (-fpcc-struct-return).
- SRCK_InRegs // Small structs in registers (-freg-struct-return).
- };
-
- /// The code model to use (-mcmodel).
- std::string CodeModel;
-
- /// The filename with path we use for coverage files. The extension will be
- /// replaced.
- std::string CoverageFile;
-
- /// The version string to put into coverage files.
- char CoverageVersion[4];
-
- /// Enable additional debugging information.
- std::string DebugPass;
-
- /// The string to embed in debug information as the current working directory.
- std::string DebugCompilationDir;
-
- /// The string to embed in the debug information for the compile unit, if
- /// non-empty.
- std::string DwarfDebugFlags;
-
- std::map<std::string, std::string> DebugPrefixMap;
-
- /// The ABI to use for passing floating point arguments.
- std::string FloatABI;
-
- /// The float precision limit to use, if non-empty.
- std::string LimitFloatPrecision;
-
- /// The name of the bitcode file to link before optzns.
- std::vector<std::pair<unsigned, std::string>> LinkBitcodeFiles;
-
- /// The user provided name for the "main file", if non-empty. This is useful
- /// in situations where the input file name does not match the original input
- /// file, for example with -save-temps.
- std::string MainFileName;
-
- /// The name for the split debug info file that we'll break out. This is used
- /// in the backend for setting the name in the skeleton cu.
- std::string SplitDwarfFile;
-
- /// The name of the relocation model to use.
- std::string RelocationModel;
-
- /// The thread model to use
- std::string ThreadModel;
-
- /// If not an empty string, trap intrinsics are lowered to calls to this
- /// function instead of to trap instructions.
- std::string TrapFuncName;
-
- /// A list of command-line options to forward to the LLVM backend.
- std::vector<std::string> BackendOptions;
-
- /// A list of dependent libraries.
- std::vector<std::string> DependentLibraries;
-
- /// Name of the profile file to use as output for -fprofile-instr-generate
- /// and -fprofile-generate.
- std::string InstrProfileOutput;
-
- /// Name of the profile file to use with -fprofile-sample-use.
- std::string SampleProfileFile;
-
- /// Name of the profile file to use as input for -fprofile-instr-use
- std::string InstrProfileInput;
-
- /// Name of the function summary index file to use for ThinLTO function
- /// importing.
- std::string ThinLTOIndexFile;
-
- /// The EABI version to use
- std::string EABIVersion;
-
- /// A list of file names passed with -fcuda-include-gpubinary options to
- /// forward to CUDA runtime back-end for incorporating them into host-side
- /// object file.
- std::vector<std::string> CudaGpuBinaryFileNames;
-
- /// Regular expression to select optimizations for which we should enable
- /// optimization remarks. Transformation passes whose name matches this
- /// expression (and support this feature), will emit a diagnostic
- /// whenever they perform a transformation. This is enabled by the
- /// -Rpass=regexp flag.
- std::shared_ptr<llvm::Regex> OptimizationRemarkPattern;
-
- /// Regular expression to select optimizations for which we should enable
- /// missed optimization remarks. Transformation passes whose name matches this
- /// expression (and support this feature), will emit a diagnostic
- /// whenever they tried but failed to perform a transformation. This is
- /// enabled by the -Rpass-missed=regexp flag.
- std::shared_ptr<llvm::Regex> OptimizationRemarkMissedPattern;
-
- /// Regular expression to select optimizations for which we should enable
- /// optimization analyses. Transformation passes whose name matches this
- /// expression (and support this feature), will emit a diagnostic
- /// whenever they want to explain why they decided to apply or not apply
- /// a given transformation. This is enabled by the -Rpass-analysis=regexp
- /// flag.
- std::shared_ptr<llvm::Regex> OptimizationRemarkAnalysisPattern;
-
- /// Set of files definining the rules for the symbol rewriting.
- std::vector<std::string> RewriteMapFiles;
-
- /// Set of sanitizer checks that are non-fatal (i.e. execution should be
- /// continued when possible).
- SanitizerSet SanitizeRecover;
-
- /// Set of sanitizer checks that trap rather than diagnose.
- SanitizerSet SanitizeTrap;
-
- /// \brief A list of all -fno-builtin-* function names (e.g., memset).
- std::vector<std::string> NoBuiltinFuncs;
-
-public:
- // Define accessors/mutators for code generation options of enumeration type.
-#define CODEGENOPT(Name, Bits, Default)
-#define ENUM_CODEGENOPT(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/Frontend/CodeGenOptions.def"
-
- CodeGenOptions();
-
- /// \brief Is this a libc/libm function that is no longer recognized as a
- /// builtin because a -fno-builtin-* option has been specified?
- bool isNoBuiltinFunc(const char *Name) const;
-
- const std::vector<std::string> &getNoBuiltinFuncs() const {
- return NoBuiltinFuncs;
- }
-};
-
-} // end namespace clang
-
-#endif
diff --git a/include/clang/Frontend/CommandLineSourceLoc.h b/include/clang/Frontend/CommandLineSourceLoc.h
deleted file mode 100644
index a78c96d..0000000
--- a/include/clang/Frontend/CommandLineSourceLoc.h
+++ /dev/null
@@ -1,87 +0,0 @@
-
-//===--- CommandLineSourceLoc.h - Parsing for source locations-*- C++ -*---===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-//
-// Command line parsing for source locations.
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef LLVM_CLANG_FRONTEND_COMMANDLINESOURCELOC_H
-#define LLVM_CLANG_FRONTEND_COMMANDLINESOURCELOC_H
-
-#include "clang/Basic/LLVM.h"
-#include "llvm/Support/CommandLine.h"
-#include "llvm/Support/raw_ostream.h"
-
-namespace clang {
-
-/// \brief A source location that has been parsed on the command line.
-struct ParsedSourceLocation {
- std::string FileName;
- unsigned Line;
- unsigned Column;
-
-public:
- /// Construct a parsed source location from a string; the Filename is empty on
- /// error.
- static ParsedSourceLocation FromString(StringRef Str) {
- ParsedSourceLocation PSL;
- std::pair<StringRef, StringRef> ColSplit = Str.rsplit(':');
- std::pair<StringRef, StringRef> LineSplit =
- ColSplit.first.rsplit(':');
-
- // If both tail splits were valid integers, return success.
- if (!ColSplit.second.getAsInteger(10, PSL.Column) &&
- !LineSplit.second.getAsInteger(10, PSL.Line)) {
- PSL.FileName = LineSplit.first;
-
- // On the command-line, stdin may be specified via "-". Inside the
- // compiler, stdin is called "<stdin>".
- if (PSL.FileName == "-")
- PSL.FileName = "<stdin>";
- }
-
- return PSL;
- }
-};
-
-}
-
-namespace llvm {
- namespace cl {
- /// \brief Command-line option parser that parses source locations.
- ///
- /// Source locations are of the form filename:line:column.
- template<>
- class parser<clang::ParsedSourceLocation> final
- : public basic_parser<clang::ParsedSourceLocation> {
- public:
- inline bool parse(Option &O, StringRef ArgName, StringRef ArgValue,
- clang::ParsedSourceLocation &Val);
- };
-
- bool
- parser<clang::ParsedSourceLocation>::
- parse(Option &O, StringRef ArgName, StringRef ArgValue,
- clang::ParsedSourceLocation &Val) {
- using namespace clang;
-
- Val = ParsedSourceLocation::FromString(ArgValue);
- if (Val.FileName.empty()) {
- errs() << "error: "
- << "source location must be of the form filename:line:column\n";
- return true;
- }
-
- return false;
- }
- }
-}
-
-#endif
diff --git a/include/clang/Frontend/CompilerInstance.h b/include/clang/Frontend/CompilerInstance.h
deleted file mode 100644
index 83eed2c..0000000
--- a/include/clang/Frontend/CompilerInstance.h
+++ /dev/null
@@ -1,785 +0,0 @@
-//===-- CompilerInstance.h - Clang Compiler Instance ------------*- 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_FRONTEND_COMPILERINSTANCE_H_
-#define LLVM_CLANG_FRONTEND_COMPILERINSTANCE_H_
-
-#include "clang/AST/ASTConsumer.h"
-#include "clang/Frontend/PCHContainerOperations.h"
-#include "clang/Basic/Diagnostic.h"
-#include "clang/Basic/SourceManager.h"
-#include "clang/Frontend/CompilerInvocation.h"
-#include "clang/Frontend/Utils.h"
-#include "clang/Lex/ModuleLoader.h"
-#include "llvm/ADT/ArrayRef.h"
-#include "llvm/ADT/DenseMap.h"
-#include "llvm/ADT/IntrusiveRefCntPtr.h"
-#include "llvm/ADT/StringRef.h"
-#include <cassert>
-#include <list>
-#include <memory>
-#include <string>
-#include <utility>
-
-namespace llvm {
-class raw_fd_ostream;
-class Timer;
-class TimerGroup;
-}
-
-namespace clang {
-class ASTContext;
-class ASTConsumer;
-class ASTReader;
-class CodeCompleteConsumer;
-class DiagnosticsEngine;
-class DiagnosticConsumer;
-class ExternalASTSource;
-class FileEntry;
-class FileManager;
-class FrontendAction;
-class Module;
-class Preprocessor;
-class Sema;
-class SourceManager;
-class TargetInfo;
-
-/// CompilerInstance - Helper class for managing a single instance of the Clang
-/// compiler.
-///
-/// The CompilerInstance serves two purposes:
-/// (1) It manages the various objects which are necessary to run the compiler,
-/// for example the preprocessor, the target information, and the AST
-/// context.
-/// (2) It provides utility routines for constructing and manipulating the
-/// common Clang objects.
-///
-/// The compiler instance generally owns the instance of all the objects that it
-/// manages. However, clients can still share objects by manually setting the
-/// object and retaking ownership prior to destroying the CompilerInstance.
-///
-/// The compiler instance is intended to simplify clients, but not to lock them
-/// in to the compiler instance for everything. When possible, utility functions
-/// come in two forms; a short form that reuses the CompilerInstance objects,
-/// and a long form that takes explicit instances of any required objects.
-class CompilerInstance : public ModuleLoader {
- /// The options used in this compiler instance.
- IntrusiveRefCntPtr<CompilerInvocation> Invocation;
-
- /// The diagnostics engine instance.
- IntrusiveRefCntPtr<DiagnosticsEngine> Diagnostics;
-
- /// The target being compiled for.
- IntrusiveRefCntPtr<TargetInfo> Target;
-
- /// Auxiliary Target info.
- IntrusiveRefCntPtr<TargetInfo> AuxTarget;
-
- /// The virtual file system.
- IntrusiveRefCntPtr<vfs::FileSystem> VirtualFileSystem;
-
- /// The file manager.
- IntrusiveRefCntPtr<FileManager> FileMgr;
-
- /// The source manager.
- IntrusiveRefCntPtr<SourceManager> SourceMgr;
-
- /// The preprocessor.
- IntrusiveRefCntPtr<Preprocessor> PP;
-
- /// The AST context.
- IntrusiveRefCntPtr<ASTContext> Context;
-
- /// The AST consumer.
- std::unique_ptr<ASTConsumer> Consumer;
-
- /// The code completion consumer.
- std::unique_ptr<CodeCompleteConsumer> CompletionConsumer;
-
- /// \brief The semantic analysis object.
- std::unique_ptr<Sema> TheSema;
-
- /// \brief The frontend timer group.
- std::unique_ptr<llvm::TimerGroup> FrontendTimerGroup;
-
- /// \brief The frontend timer.
- std::unique_ptr<llvm::Timer> FrontendTimer;
-
- /// \brief The ASTReader, if one exists.
- IntrusiveRefCntPtr<ASTReader> ModuleManager;
-
- /// \brief The module dependency collector for crashdumps
- std::shared_ptr<ModuleDependencyCollector> ModuleDepCollector;
-
- /// \brief The module provider.
- std::shared_ptr<PCHContainerOperations> ThePCHContainerOperations;
-
- /// \brief The dependency file generator.
- std::unique_ptr<DependencyFileGenerator> TheDependencyFileGenerator;
-
- std::vector<std::shared_ptr<DependencyCollector>> DependencyCollectors;
-
- /// \brief The set of top-level modules that has already been loaded,
- /// along with the module map
- llvm::DenseMap<const IdentifierInfo *, Module *> KnownModules;
-
- /// \brief The location of the module-import keyword for the last module
- /// import.
- SourceLocation LastModuleImportLoc;
-
- /// \brief The result of the last module import.
- ///
- ModuleLoadResult LastModuleImportResult;
-
- /// \brief Whether we should (re)build the global module index once we
- /// have finished with this translation unit.
- bool BuildGlobalModuleIndex;
-
- /// \brief We have a full global module index, with all modules.
- bool HaveFullGlobalModuleIndex;
-
- /// \brief One or more modules failed to build.
- bool ModuleBuildFailed;
-
- /// \brief Holds information about the output file.
- ///
- /// If TempFilename is not empty we must rename it to Filename at the end.
- /// TempFilename may be empty and Filename non-empty if creating the temporary
- /// failed.
- struct OutputFile {
- std::string Filename;
- std::string TempFilename;
- std::unique_ptr<raw_ostream> OS;
-
- OutputFile(std::string filename, std::string tempFilename,
- std::unique_ptr<raw_ostream> OS)
- : Filename(std::move(filename)), TempFilename(std::move(tempFilename)),
- OS(std::move(OS)) {}
- OutputFile(OutputFile &&O)
- : Filename(std::move(O.Filename)),
- TempFilename(std::move(O.TempFilename)), OS(std::move(O.OS)) {}
- };
-
- /// If the output doesn't support seeking (terminal, pipe). we switch
- /// the stream to a buffer_ostream. These are the buffer and the original
- /// stream.
- std::unique_ptr<llvm::raw_fd_ostream> NonSeekStream;
-
- /// The list of active output files.
- std::list<OutputFile> OutputFiles;
-
- CompilerInstance(const CompilerInstance &) = delete;
- void operator=(const CompilerInstance &) = delete;
-public:
- explicit CompilerInstance(
- std::shared_ptr<PCHContainerOperations> PCHContainerOps =
- std::make_shared<PCHContainerOperations>(),
- bool BuildingModule = false);
- ~CompilerInstance() override;
-
- /// @name High-Level Operations
- /// {
-
- /// ExecuteAction - Execute the provided action against the compiler's
- /// CompilerInvocation object.
- ///
- /// This function makes the following assumptions:
- ///
- /// - The invocation options should be initialized. This function does not
- /// handle the '-help' or '-version' options, clients should handle those
- /// directly.
- ///
- /// - The diagnostics engine should have already been created by the client.
- ///
- /// - No other CompilerInstance state should have been initialized (this is
- /// an unchecked error).
- ///
- /// - Clients should have initialized any LLVM target features that may be
- /// required.
- ///
- /// - Clients should eventually call llvm_shutdown() upon the completion of
- /// this routine to ensure that any managed objects are properly destroyed.
- ///
- /// Note that this routine may write output to 'stderr'.
- ///
- /// \param Act - The action to execute.
- /// \return - True on success.
- //
- // FIXME: This function should take the stream to write any debugging /
- // verbose output to as an argument.
- //
- // FIXME: Eliminate the llvm_shutdown requirement, that should either be part
- // of the context or else not CompilerInstance specific.
- bool ExecuteAction(FrontendAction &Act);
-
- /// }
- /// @name Compiler Invocation and Options
- /// {
-
- bool hasInvocation() const { return Invocation != nullptr; }
-
- CompilerInvocation &getInvocation() {
- assert(Invocation && "Compiler instance has no invocation!");
- return *Invocation;
- }
-
- /// setInvocation - Replace the current invocation.
- void setInvocation(CompilerInvocation *Value);
-
- /// \brief Indicates whether we should (re)build the global module index.
- bool shouldBuildGlobalModuleIndex() const;
-
- /// \brief Set the flag indicating whether we should (re)build the global
- /// module index.
- void setBuildGlobalModuleIndex(bool Build) {
- BuildGlobalModuleIndex = Build;
- }
-
- /// }
- /// @name Forwarding Methods
- /// {
-
- AnalyzerOptionsRef getAnalyzerOpts() {
- return Invocation->getAnalyzerOpts();
- }
-
- CodeGenOptions &getCodeGenOpts() {
- return Invocation->getCodeGenOpts();
- }
- const CodeGenOptions &getCodeGenOpts() const {
- return Invocation->getCodeGenOpts();
- }
-
- DependencyOutputOptions &getDependencyOutputOpts() {
- return Invocation->getDependencyOutputOpts();
- }
- const DependencyOutputOptions &getDependencyOutputOpts() const {
- return Invocation->getDependencyOutputOpts();
- }
-
- DiagnosticOptions &getDiagnosticOpts() {
- return Invocation->getDiagnosticOpts();
- }
- const DiagnosticOptions &getDiagnosticOpts() const {
- return Invocation->getDiagnosticOpts();
- }
-
- FileSystemOptions &getFileSystemOpts() {
- return Invocation->getFileSystemOpts();
- }
- const FileSystemOptions &getFileSystemOpts() const {
- return Invocation->getFileSystemOpts();
- }
-
- FrontendOptions &getFrontendOpts() {
- return Invocation->getFrontendOpts();
- }
- const FrontendOptions &getFrontendOpts() const {
- return Invocation->getFrontendOpts();
- }
-
- HeaderSearchOptions &getHeaderSearchOpts() {
- return Invocation->getHeaderSearchOpts();
- }
- const HeaderSearchOptions &getHeaderSearchOpts() const {
- return Invocation->getHeaderSearchOpts();
- }
-
- LangOptions &getLangOpts() {
- return *Invocation->getLangOpts();
- }
- const LangOptions &getLangOpts() const {
- return *Invocation->getLangOpts();
- }
-
- PreprocessorOptions &getPreprocessorOpts() {
- return Invocation->getPreprocessorOpts();
- }
- const PreprocessorOptions &getPreprocessorOpts() const {
- return Invocation->getPreprocessorOpts();
- }
-
- PreprocessorOutputOptions &getPreprocessorOutputOpts() {
- return Invocation->getPreprocessorOutputOpts();
- }
- const PreprocessorOutputOptions &getPreprocessorOutputOpts() const {
- return Invocation->getPreprocessorOutputOpts();
- }
-
- TargetOptions &getTargetOpts() {
- return Invocation->getTargetOpts();
- }
- const TargetOptions &getTargetOpts() const {
- return Invocation->getTargetOpts();
- }
-
- /// }
- /// @name Diagnostics Engine
- /// {
-
- bool hasDiagnostics() const { return Diagnostics != nullptr; }
-
- /// Get the current diagnostics engine.
- DiagnosticsEngine &getDiagnostics() const {
- assert(Diagnostics && "Compiler instance has no diagnostics!");
- return *Diagnostics;
- }
-
- /// setDiagnostics - Replace the current diagnostics engine.
- void setDiagnostics(DiagnosticsEngine *Value);
-
- DiagnosticConsumer &getDiagnosticClient() const {
- assert(Diagnostics && Diagnostics->getClient() &&
- "Compiler instance has no diagnostic client!");
- return *Diagnostics->getClient();
- }
-
- /// }
- /// @name Target Info
- /// {
-
- bool hasTarget() const { return Target != nullptr; }
-
- TargetInfo &getTarget() const {
- assert(Target && "Compiler instance has no target!");
- return *Target;
- }
-
- /// Replace the current Target.
- void setTarget(TargetInfo *Value);
-
- /// }
- /// @name AuxTarget Info
- /// {
-
- TargetInfo *getAuxTarget() const { return AuxTarget.get(); }
-
- /// Replace the current AuxTarget.
- void setAuxTarget(TargetInfo *Value);
-
- /// }
- /// @name Virtual File System
- /// {
-
- bool hasVirtualFileSystem() const { return VirtualFileSystem != nullptr; }
-
- vfs::FileSystem &getVirtualFileSystem() const {
- assert(hasVirtualFileSystem() &&
- "Compiler instance has no virtual file system");
- return *VirtualFileSystem;
- }
-
- /// \brief Replace the current virtual file system.
- ///
- /// \note Most clients should use setFileManager, which will implicitly reset
- /// the virtual file system to the one contained in the file manager.
- void setVirtualFileSystem(IntrusiveRefCntPtr<vfs::FileSystem> FS) {
- VirtualFileSystem = FS;
- }
-
- /// }
- /// @name File Manager
- /// {
-
- bool hasFileManager() const { return FileMgr != nullptr; }
-
- /// Return the current file manager to the caller.
- FileManager &getFileManager() const {
- assert(FileMgr && "Compiler instance has no file manager!");
- return *FileMgr;
- }
-
- void resetAndLeakFileManager() {
- BuryPointer(FileMgr.get());
- FileMgr.resetWithoutRelease();
- }
-
- /// \brief Replace the current file manager and virtual file system.
- void setFileManager(FileManager *Value);
-
- /// }
- /// @name Source Manager
- /// {
-
- bool hasSourceManager() const { return SourceMgr != nullptr; }
-
- /// Return the current source manager.
- SourceManager &getSourceManager() const {
- assert(SourceMgr && "Compiler instance has no source manager!");
- return *SourceMgr;
- }
-
- void resetAndLeakSourceManager() {
- BuryPointer(SourceMgr.get());
- SourceMgr.resetWithoutRelease();
- }
-
- /// setSourceManager - Replace the current source manager.
- void setSourceManager(SourceManager *Value);
-
- /// }
- /// @name Preprocessor
- /// {
-
- bool hasPreprocessor() const { return PP != nullptr; }
-
- /// Return the current preprocessor.
- Preprocessor &getPreprocessor() const {
- assert(PP && "Compiler instance has no preprocessor!");
- return *PP;
- }
-
- void resetAndLeakPreprocessor() {
- BuryPointer(PP.get());
- PP.resetWithoutRelease();
- }
-
- /// Replace the current preprocessor.
- void setPreprocessor(Preprocessor *Value);
-
- /// }
- /// @name ASTContext
- /// {
-
- bool hasASTContext() const { return Context != nullptr; }
-
- ASTContext &getASTContext() const {
- assert(Context && "Compiler instance has no AST context!");
- return *Context;
- }
-
- void resetAndLeakASTContext() {
- BuryPointer(Context.get());
- Context.resetWithoutRelease();
- }
-
- /// setASTContext - Replace the current AST context.
- void setASTContext(ASTContext *Value);
-
- /// \brief Replace the current Sema; the compiler instance takes ownership
- /// of S.
- void setSema(Sema *S);
-
- /// }
- /// @name ASTConsumer
- /// {
-
- bool hasASTConsumer() const { return (bool)Consumer; }
-
- ASTConsumer &getASTConsumer() const {
- assert(Consumer && "Compiler instance has no AST consumer!");
- return *Consumer;
- }
-
- /// takeASTConsumer - Remove the current AST consumer and give ownership to
- /// the caller.
- std::unique_ptr<ASTConsumer> takeASTConsumer() { return std::move(Consumer); }
-
- /// setASTConsumer - Replace the current AST consumer; the compiler instance
- /// takes ownership of \p Value.
- void setASTConsumer(std::unique_ptr<ASTConsumer> Value);
-
- /// }
- /// @name Semantic analysis
- /// {
- bool hasSema() const { return (bool)TheSema; }
-
- Sema &getSema() const {
- assert(TheSema && "Compiler instance has no Sema object!");
- return *TheSema;
- }
-
- std::unique_ptr<Sema> takeSema();
- void resetAndLeakSema();
-
- /// }
- /// @name Module Management
- /// {
-
- IntrusiveRefCntPtr<ASTReader> getModuleManager() const;
- void setModuleManager(IntrusiveRefCntPtr<ASTReader> Reader);
-
- std::shared_ptr<ModuleDependencyCollector> getModuleDepCollector() const;
- void setModuleDepCollector(
- std::shared_ptr<ModuleDependencyCollector> Collector);
-
- std::shared_ptr<PCHContainerOperations> getPCHContainerOperations() const {
- return ThePCHContainerOperations;
- }
-
- /// Return the appropriate PCHContainerWriter depending on the
- /// current CodeGenOptions.
- const PCHContainerWriter &getPCHContainerWriter() const {
- assert(Invocation && "cannot determine module format without invocation");
- StringRef Format = getHeaderSearchOpts().ModuleFormat;
- auto *Writer = ThePCHContainerOperations->getWriterOrNull(Format);
- if (!Writer) {
- if (Diagnostics)
- Diagnostics->Report(diag::err_module_format_unhandled) << Format;
- llvm::report_fatal_error("unknown module format");
- }
- return *Writer;
- }
-
- /// Return the appropriate PCHContainerReader depending on the
- /// current CodeGenOptions.
- const PCHContainerReader &getPCHContainerReader() const {
- assert(Invocation && "cannot determine module format without invocation");
- StringRef Format = getHeaderSearchOpts().ModuleFormat;
- auto *Reader = ThePCHContainerOperations->getReaderOrNull(Format);
- if (!Reader) {
- if (Diagnostics)
- Diagnostics->Report(diag::err_module_format_unhandled) << Format;
- llvm::report_fatal_error("unknown module format");
- }
- return *Reader;
- }
-
- /// }
- /// @name Code Completion
- /// {
-
- bool hasCodeCompletionConsumer() const { return (bool)CompletionConsumer; }
-
- CodeCompleteConsumer &getCodeCompletionConsumer() const {
- assert(CompletionConsumer &&
- "Compiler instance has no code completion consumer!");
- return *CompletionConsumer;
- }
-
- /// setCodeCompletionConsumer - Replace the current code completion consumer;
- /// the compiler instance takes ownership of \p Value.
- void setCodeCompletionConsumer(CodeCompleteConsumer *Value);
-
- /// }
- /// @name Frontend timer
- /// {
-
- bool hasFrontendTimer() const { return (bool)FrontendTimer; }
-
- llvm::Timer &getFrontendTimer() const {
- assert(FrontendTimer && "Compiler instance has no frontend timer!");
- return *FrontendTimer;
- }
-
- /// }
- /// @name Output Files
- /// {
-
- /// addOutputFile - Add an output file onto the list of tracked output files.
- ///
- /// \param OutFile - The output file info.
- void addOutputFile(OutputFile &&OutFile);
-
- /// clearOutputFiles - Clear the output file list, destroying the contained
- /// output streams.
- ///
- /// \param EraseFiles - If true, attempt to erase the files from disk.
- void clearOutputFiles(bool EraseFiles);
-
- /// }
- /// @name Construction Utility Methods
- /// {
-
- /// Create the diagnostics engine using the invocation's diagnostic options
- /// and replace any existing one with it.
- ///
- /// Note that this routine also replaces the diagnostic client,
- /// allocating one if one is not provided.
- ///
- /// \param Client If non-NULL, a diagnostic client that will be
- /// attached to (and, then, owned by) the DiagnosticsEngine inside this AST
- /// unit.
- ///
- /// \param ShouldOwnClient If Client is non-NULL, specifies whether
- /// the diagnostic object should take ownership of the client.
- void createDiagnostics(DiagnosticConsumer *Client = nullptr,
- bool ShouldOwnClient = true);
-
- /// Create a DiagnosticsEngine object with a the TextDiagnosticPrinter.
- ///
- /// If no diagnostic client is provided, this creates a
- /// DiagnosticConsumer that is owned by the returned diagnostic
- /// object, if using directly the caller is responsible for
- /// releasing the returned DiagnosticsEngine's client eventually.
- ///
- /// \param Opts - The diagnostic options; note that the created text
- /// diagnostic object contains a reference to these options.
- ///
- /// \param Client If non-NULL, a diagnostic client that will be
- /// attached to (and, then, owned by) the returned DiagnosticsEngine
- /// object.
- ///
- /// \param CodeGenOpts If non-NULL, the code gen options in use, which may be
- /// used by some diagnostics printers (for logging purposes only).
- ///
- /// \return The new object on success, or null on failure.
- static IntrusiveRefCntPtr<DiagnosticsEngine>
- createDiagnostics(DiagnosticOptions *Opts,
- DiagnosticConsumer *Client = nullptr,
- bool ShouldOwnClient = true,
- const CodeGenOptions *CodeGenOpts = nullptr);
-
- /// Create the file manager and replace any existing one with it.
- void createFileManager();
-
- /// Create the source manager and replace any existing one with it.
- void createSourceManager(FileManager &FileMgr);
-
- /// Create the preprocessor, using the invocation, file, and source managers,
- /// and replace any existing one with it.
- void createPreprocessor(TranslationUnitKind TUKind);
-
- std::string getSpecificModuleCachePath();
-
- /// Create the AST context.
- void createASTContext();
-
- /// Create an external AST source to read a PCH file and attach it to the AST
- /// context.
- void createPCHExternalASTSource(StringRef Path, bool DisablePCHValidation,
- bool AllowPCHWithCompilerErrors,
- void *DeserializationListener,
- bool OwnDeserializationListener);
-
- /// Create an external AST source to read a PCH file.
- ///
- /// \return - The new object on success, or null on failure.
- static IntrusiveRefCntPtr<ASTReader> createPCHExternalASTSource(
- StringRef Path, StringRef Sysroot, bool DisablePCHValidation,
- bool AllowPCHWithCompilerErrors, Preprocessor &PP, ASTContext &Context,
- const PCHContainerReader &PCHContainerRdr,
- ArrayRef<IntrusiveRefCntPtr<ModuleFileExtension>> Extensions,
- void *DeserializationListener, bool OwnDeserializationListener,
- bool Preamble, bool UseGlobalModuleIndex);
-
- /// Create a code completion consumer using the invocation; note that this
- /// will cause the source manager to truncate the input source file at the
- /// completion point.
- void createCodeCompletionConsumer();
-
- /// Create a code completion consumer to print code completion results, at
- /// \p Filename, \p Line, and \p Column, to the given output stream \p OS.
- static CodeCompleteConsumer *createCodeCompletionConsumer(
- Preprocessor &PP, StringRef Filename, unsigned Line, unsigned Column,
- const CodeCompleteOptions &Opts, raw_ostream &OS);
-
- /// \brief Create the Sema object to be used for parsing.
- void createSema(TranslationUnitKind TUKind,
- CodeCompleteConsumer *CompletionConsumer);
-
- /// Create the frontend timer and replace any existing one with it.
- void createFrontendTimer();
-
- /// Create the default output file (from the invocation's options) and add it
- /// to the list of tracked output files.
- ///
- /// The files created by this function always use temporary files to write to
- /// their result (that is, the data is written to a temporary file which will
- /// atomically replace the target output on success).
- ///
- /// \return - Null on error.
- raw_pwrite_stream *createDefaultOutputFile(bool Binary = true,
- StringRef BaseInput = "",
- StringRef Extension = "");
-
- /// Create a new output file and add it to the list of tracked output files,
- /// optionally deriving the output path name.
- ///
- /// \return - Null on error.
- raw_pwrite_stream *createOutputFile(StringRef OutputPath, bool Binary,
- bool RemoveFileOnSignal,
- StringRef BaseInput, StringRef Extension,
- bool UseTemporary,
- bool CreateMissingDirectories = false);
-
- /// Create a new output file, optionally deriving the output path name.
- ///
- /// If \p OutputPath is empty, then createOutputFile will derive an output
- /// path location as \p BaseInput, with any suffix removed, and \p Extension
- /// appended. If \p OutputPath is not stdout and \p UseTemporary
- /// is true, createOutputFile will create a new temporary file that must be
- /// renamed to \p OutputPath in the end.
- ///
- /// \param OutputPath - If given, the path to the output file.
- /// \param Error [out] - On failure, the error.
- /// \param BaseInput - If \p OutputPath is empty, the input path name to use
- /// for deriving the output path.
- /// \param Extension - The extension to use for derived output names.
- /// \param Binary - The mode to open the file in.
- /// \param RemoveFileOnSignal - Whether the file should be registered with
- /// llvm::sys::RemoveFileOnSignal. Note that this is not safe for
- /// multithreaded use, as the underlying signal mechanism is not reentrant
- /// \param UseTemporary - Create a new temporary file that must be renamed to
- /// OutputPath in the end.
- /// \param CreateMissingDirectories - When \p UseTemporary is true, create
- /// missing directories in the output path.
- /// \param ResultPathName [out] - If given, the result path name will be
- /// stored here on success.
- /// \param TempPathName [out] - If given, the temporary file path name
- /// will be stored here on success.
- std::unique_ptr<raw_pwrite_stream>
- createOutputFile(StringRef OutputPath, std::error_code &Error, bool Binary,
- bool RemoveFileOnSignal, StringRef BaseInput,
- StringRef Extension, bool UseTemporary,
- bool CreateMissingDirectories, std::string *ResultPathName,
- std::string *TempPathName);
-
- llvm::raw_null_ostream *createNullOutputFile();
-
- /// }
- /// @name Initialization Utility Methods
- /// {
-
- /// InitializeSourceManager - Initialize the source manager to set InputFile
- /// as the main file.
- ///
- /// \return True on success.
- bool InitializeSourceManager(const FrontendInputFile &Input);
-
- /// InitializeSourceManager - Initialize the source manager to set InputFile
- /// as the main file.
- ///
- /// \return True on success.
- static bool InitializeSourceManager(const FrontendInputFile &Input,
- DiagnosticsEngine &Diags,
- FileManager &FileMgr,
- SourceManager &SourceMgr,
- const FrontendOptions &Opts);
-
- /// }
-
- // Create module manager.
- void createModuleManager();
-
- bool loadModuleFile(StringRef FileName);
-
- ModuleLoadResult loadModule(SourceLocation ImportLoc, ModuleIdPath Path,
- Module::NameVisibilityKind Visibility,
- bool IsInclusionDirective) override;
-
- void makeModuleVisible(Module *Mod, Module::NameVisibilityKind Visibility,
- SourceLocation ImportLoc) override;
-
- bool hadModuleLoaderFatalFailure() const {
- return ModuleLoader::HadFatalFailure;
- }
-
- GlobalModuleIndex *loadGlobalModuleIndex(SourceLocation TriggerLoc) override;
-
- bool lookupMissingImports(StringRef Name, SourceLocation TriggerLoc) override;
-
- void addDependencyCollector(std::shared_ptr<DependencyCollector> Listener) {
- DependencyCollectors.push_back(std::move(Listener));
- }
-};
-
-} // end namespace clang
-
-#endif
diff --git a/include/clang/Frontend/CompilerInvocation.h b/include/clang/Frontend/CompilerInvocation.h
deleted file mode 100644
index 0b4a1e5..0000000
--- a/include/clang/Frontend/CompilerInvocation.h
+++ /dev/null
@@ -1,219 +0,0 @@
-//===-- CompilerInvocation.h - Compiler Invocation Helper Data --*- 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_FRONTEND_COMPILERINVOCATION_H_
-#define LLVM_CLANG_FRONTEND_COMPILERINVOCATION_H_
-
-#include "clang/Basic/DiagnosticOptions.h"
-#include "clang/Basic/FileSystemOptions.h"
-#include "clang/Basic/LangOptions.h"
-#include "clang/Basic/TargetOptions.h"
-#include "clang/Frontend/CodeGenOptions.h"
-#include "clang/Frontend/DependencyOutputOptions.h"
-#include "clang/Frontend/FrontendOptions.h"
-#include "clang/Frontend/LangStandard.h"
-#include "clang/Frontend/MigratorOptions.h"
-#include "clang/Frontend/PreprocessorOutputOptions.h"
-#include "clang/Lex/HeaderSearchOptions.h"
-#include "clang/Lex/PreprocessorOptions.h"
-#include "clang/StaticAnalyzer/Core/AnalyzerOptions.h"
-#include "llvm/ADT/IntrusiveRefCntPtr.h"
-#include "llvm/ADT/StringMap.h"
-#include "llvm/ADT/StringRef.h"
-#include <string>
-#include <vector>
-
-namespace llvm {
-namespace opt {
-class ArgList;
-}
-}
-
-namespace clang {
-class CompilerInvocation;
-class DiagnosticsEngine;
-
-/// \brief Fill out Opts based on the options given in Args.
-///
-/// Args must have been created from the OptTable returned by
-/// createCC1OptTable().
-///
-/// When errors are encountered, return false and, if Diags is non-null,
-/// report the error(s).
-bool ParseDiagnosticArgs(DiagnosticOptions &Opts, llvm::opt::ArgList &Args,
- DiagnosticsEngine *Diags = nullptr);
-
-class CompilerInvocationBase : public RefCountedBase<CompilerInvocation> {
- void operator=(const CompilerInvocationBase &) = delete;
-
-public:
- /// Options controlling the language variant.
- std::shared_ptr<LangOptions> LangOpts;
-
- /// Options controlling the target.
- std::shared_ptr<TargetOptions> TargetOpts;
-
- /// Options controlling the diagnostic engine.
- IntrusiveRefCntPtr<DiagnosticOptions> DiagnosticOpts;
-
- /// Options controlling the \#include directive.
- IntrusiveRefCntPtr<HeaderSearchOptions> HeaderSearchOpts;
-
- /// Options controlling the preprocessor (aside from \#include handling).
- IntrusiveRefCntPtr<PreprocessorOptions> PreprocessorOpts;
-
- CompilerInvocationBase();
- ~CompilerInvocationBase();
-
- CompilerInvocationBase(const CompilerInvocationBase &X);
-
- LangOptions *getLangOpts() { return LangOpts.get(); }
- const LangOptions *getLangOpts() const { return LangOpts.get(); }
-
- TargetOptions &getTargetOpts() { return *TargetOpts.get(); }
- const TargetOptions &getTargetOpts() const {
- return *TargetOpts.get();
- }
-
- DiagnosticOptions &getDiagnosticOpts() const { return *DiagnosticOpts; }
-
- HeaderSearchOptions &getHeaderSearchOpts() { return *HeaderSearchOpts; }
- const HeaderSearchOptions &getHeaderSearchOpts() const {
- return *HeaderSearchOpts;
- }
-
- PreprocessorOptions &getPreprocessorOpts() { return *PreprocessorOpts; }
- const PreprocessorOptions &getPreprocessorOpts() const {
- return *PreprocessorOpts;
- }
-};
-
-/// \brief Helper class for holding the data necessary to invoke the compiler.
-///
-/// This class is designed to represent an abstract "invocation" of the
-/// compiler, including data such as the include paths, the code generation
-/// options, the warning flags, and so on.
-class CompilerInvocation : public CompilerInvocationBase {
- /// Options controlling the static analyzer.
- AnalyzerOptionsRef AnalyzerOpts;
-
- MigratorOptions MigratorOpts;
-
- /// Options controlling IRgen and the backend.
- CodeGenOptions CodeGenOpts;
-
- /// Options controlling dependency output.
- DependencyOutputOptions DependencyOutputOpts;
-
- /// Options controlling file system operations.
- FileSystemOptions FileSystemOpts;
-
- /// Options controlling the frontend itself.
- FrontendOptions FrontendOpts;
-
- /// Options controlling preprocessed output.
- PreprocessorOutputOptions PreprocessorOutputOpts;
-
-public:
- CompilerInvocation() : AnalyzerOpts(new AnalyzerOptions()) {}
-
- /// @name Utility Methods
- /// @{
-
- /// \brief Create a compiler invocation from a list of input options.
- /// \returns true on success.
- ///
- /// \param [out] Res - The resulting invocation.
- /// \param ArgBegin - The first element in the argument vector.
- /// \param ArgEnd - The last element in the argument vector.
- /// \param Diags - The diagnostic engine to use for errors.
- static bool CreateFromArgs(CompilerInvocation &Res,
- const char* const *ArgBegin,
- const char* const *ArgEnd,
- DiagnosticsEngine &Diags);
-
- /// \brief Get the directory where the compiler headers
- /// reside, relative to the compiler binary (found by the passed in
- /// arguments).
- ///
- /// \param Argv0 - The program path (from argv[0]), for finding the builtin
- /// compiler path.
- /// \param MainAddr - The address of main (or some other function in the main
- /// executable), for finding the builtin compiler path.
- static std::string GetResourcesPath(const char *Argv0, void *MainAddr);
-
- /// \brief Set language defaults for the given input language and
- /// language standard in the given LangOptions object.
- ///
- /// \param Opts - The LangOptions object to set up.
- /// \param IK - The input language.
- /// \param LangStd - The input language standard.
- static void setLangDefaults(LangOptions &Opts, InputKind IK,
- LangStandard::Kind LangStd = LangStandard::lang_unspecified);
-
- /// \brief Retrieve a module hash string that is suitable for uniquely
- /// identifying the conditions under which the module was built.
- std::string getModuleHash() const;
-
- /// @}
- /// @name Option Subgroups
- /// @{
-
- AnalyzerOptionsRef getAnalyzerOpts() const {
- return AnalyzerOpts;
- }
-
- MigratorOptions &getMigratorOpts() { return MigratorOpts; }
- const MigratorOptions &getMigratorOpts() const {
- return MigratorOpts;
- }
-
- CodeGenOptions &getCodeGenOpts() { return CodeGenOpts; }
- const CodeGenOptions &getCodeGenOpts() const {
- return CodeGenOpts;
- }
-
- DependencyOutputOptions &getDependencyOutputOpts() {
- return DependencyOutputOpts;
- }
- const DependencyOutputOptions &getDependencyOutputOpts() const {
- return DependencyOutputOpts;
- }
-
- FileSystemOptions &getFileSystemOpts() { return FileSystemOpts; }
- const FileSystemOptions &getFileSystemOpts() const {
- return FileSystemOpts;
- }
-
- FrontendOptions &getFrontendOpts() { return FrontendOpts; }
- const FrontendOptions &getFrontendOpts() const {
- return FrontendOpts;
- }
-
- PreprocessorOutputOptions &getPreprocessorOutputOpts() {
- return PreprocessorOutputOpts;
- }
- const PreprocessorOutputOptions &getPreprocessorOutputOpts() const {
- return PreprocessorOutputOpts;
- }
-
- /// @}
-};
-
-namespace vfs {
- class FileSystem;
-}
-
-IntrusiveRefCntPtr<vfs::FileSystem>
-createVFSFromCompilerInvocation(const CompilerInvocation &CI,
- DiagnosticsEngine &Diags);
-
-} // end namespace clang
-
-#endif
diff --git a/include/clang/Frontend/DependencyOutputOptions.h b/include/clang/Frontend/DependencyOutputOptions.h
deleted file mode 100644
index 129b534..0000000
--- a/include/clang/Frontend/DependencyOutputOptions.h
+++ /dev/null
@@ -1,73 +0,0 @@
-//===--- DependencyOutputOptions.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_FRONTEND_DEPENDENCYOUTPUTOPTIONS_H
-#define LLVM_CLANG_FRONTEND_DEPENDENCYOUTPUTOPTIONS_H
-
-#include <string>
-#include <vector>
-
-namespace clang {
-
-/// DependencyOutputFormat - Format for the compiler dependency file.
-enum class DependencyOutputFormat { Make, NMake };
-
-/// DependencyOutputOptions - Options for controlling the compiler dependency
-/// file generation.
-class DependencyOutputOptions {
-public:
- unsigned IncludeSystemHeaders : 1; ///< Include system header dependencies.
- unsigned ShowHeaderIncludes : 1; ///< Show header inclusions (-H).
- unsigned UsePhonyTargets : 1; ///< Include phony targets for each
- /// dependency, which can avoid some 'make'
- /// problems.
- unsigned AddMissingHeaderDeps : 1; ///< Add missing headers to dependency list
- unsigned PrintShowIncludes : 1; ///< Print cl.exe style /showIncludes info.
- unsigned IncludeModuleFiles : 1; ///< Include module file dependencies.
-
- /// The format for the dependency file.
- DependencyOutputFormat OutputFormat;
-
- /// The file to write dependency output to.
- std::string OutputFile;
-
- /// The file to write header include output to. This is orthogonal to
- /// ShowHeaderIncludes (-H) and will include headers mentioned in the
- /// predefines buffer. If the output file is "-", output will be sent to
- /// stderr.
- std::string HeaderIncludeOutputFile;
-
- /// A list of names to use as the targets in the dependency file; this list
- /// must contain at least one entry.
- std::vector<std::string> Targets;
-
- /// A list of filenames to be used as extra dependencies for every target.
- std::vector<std::string> ExtraDeps;
-
- /// \brief The file to write GraphViz-formatted header dependencies to.
- std::string DOTOutputFile;
-
- /// \brief The directory to copy module dependencies to when collecting them.
- std::string ModuleDependencyOutputDir;
-
-public:
- DependencyOutputOptions() {
- IncludeSystemHeaders = 0;
- ShowHeaderIncludes = 0;
- UsePhonyTargets = 0;
- AddMissingHeaderDeps = 0;
- PrintShowIncludes = 0;
- IncludeModuleFiles = 0;
- OutputFormat = DependencyOutputFormat::Make;
- }
-};
-
-} // end namespace clang
-
-#endif
diff --git a/include/clang/Frontend/DiagnosticRenderer.h b/include/clang/Frontend/DiagnosticRenderer.h
deleted file mode 100644
index c372fdd..0000000
--- a/include/clang/Frontend/DiagnosticRenderer.h
+++ /dev/null
@@ -1,178 +0,0 @@
-//===--- DiagnosticRenderer.h - Diagnostic Pretty-Printing ------*- C++ -*-===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-//
-// This is a utility class that provides support for pretty-printing of
-// diagnostics. It is used to implement the different code paths which require
-// such functionality in a consistent way.
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef LLVM_CLANG_FRONTEND_DIAGNOSTICRENDERER_H
-#define LLVM_CLANG_FRONTEND_DIAGNOSTICRENDERER_H
-
-#include "clang/Basic/Diagnostic.h"
-#include "clang/Basic/LLVM.h"
-#include "clang/Basic/SourceLocation.h"
-#include "llvm/ADT/Optional.h"
-#include "llvm/ADT/PointerUnion.h"
-
-namespace clang {
-
-class DiagnosticOptions;
-class LangOptions;
-class SourceManager;
-
-typedef llvm::PointerUnion<const Diagnostic *,
- const StoredDiagnostic *> DiagOrStoredDiag;
-
-/// \brief Class to encapsulate the logic for formatting a diagnostic message.
-///
-/// Actual "printing" logic is implemented by subclasses.
-///
-/// This class provides an interface for building and emitting
-/// diagnostic, including all of the macro backtraces, caret diagnostics, FixIt
-/// Hints, and code snippets. In the presence of macros this involves
-/// a recursive process, synthesizing notes for each macro expansion.
-///
-/// A brief worklist:
-/// FIXME: Sink the recursive printing of template instantiations into this
-/// class.
-class DiagnosticRenderer {
-protected:
- const LangOptions &LangOpts;
- IntrusiveRefCntPtr<DiagnosticOptions> DiagOpts;
-
- /// \brief The location of the previous diagnostic if known.
- ///
- /// This will be invalid in cases where there is no (known) previous
- /// diagnostic location, or that location itself is invalid or comes from
- /// a different source manager than SM.
- SourceLocation LastLoc;
-
- /// \brief The location of the last include whose stack was printed if known.
- ///
- /// Same restriction as LastLoc essentially, but tracking include stack
- /// root locations rather than diagnostic locations.
- SourceLocation LastIncludeLoc;
-
- /// \brief The level of the last diagnostic emitted.
- ///
- /// The level of the last diagnostic emitted. Used to detect level changes
- /// which change the amount of information displayed.
- DiagnosticsEngine::Level LastLevel;
-
- DiagnosticRenderer(const LangOptions &LangOpts,
- DiagnosticOptions *DiagOpts);
-
- virtual ~DiagnosticRenderer();
-
- virtual void emitDiagnosticMessage(SourceLocation Loc, PresumedLoc PLoc,
- DiagnosticsEngine::Level Level,
- StringRef Message,
- ArrayRef<CharSourceRange> Ranges,
- const SourceManager *SM,
- DiagOrStoredDiag Info) = 0;
-
- virtual void emitDiagnosticLoc(SourceLocation Loc, PresumedLoc PLoc,
- DiagnosticsEngine::Level Level,
- ArrayRef<CharSourceRange> Ranges,
- const SourceManager &SM) = 0;
-
- virtual void emitCodeContext(SourceLocation Loc,
- DiagnosticsEngine::Level Level,
- SmallVectorImpl<CharSourceRange>& Ranges,
- ArrayRef<FixItHint> Hints,
- const SourceManager &SM) = 0;
-
- virtual void emitIncludeLocation(SourceLocation Loc, PresumedLoc PLoc,
- const SourceManager &SM) = 0;
- virtual void emitImportLocation(SourceLocation Loc, PresumedLoc PLoc,
- StringRef ModuleName,
- const SourceManager &SM) = 0;
- virtual void emitBuildingModuleLocation(SourceLocation Loc, PresumedLoc PLoc,
- StringRef ModuleName,
- const SourceManager &SM) = 0;
-
- virtual void beginDiagnostic(DiagOrStoredDiag D,
- DiagnosticsEngine::Level Level) {}
- virtual void endDiagnostic(DiagOrStoredDiag D,
- DiagnosticsEngine::Level Level) {}
-
-
-private:
- void emitBasicNote(StringRef Message);
- void emitIncludeStack(SourceLocation Loc, PresumedLoc PLoc,
- DiagnosticsEngine::Level Level, const SourceManager &SM);
- void emitIncludeStackRecursively(SourceLocation Loc, const SourceManager &SM);
- void emitImportStack(SourceLocation Loc, const SourceManager &SM);
- void emitImportStackRecursively(SourceLocation Loc, StringRef ModuleName,
- const SourceManager &SM);
- void emitModuleBuildStack(const SourceManager &SM);
- void emitCaret(SourceLocation Loc, DiagnosticsEngine::Level Level,
- ArrayRef<CharSourceRange> Ranges, ArrayRef<FixItHint> Hints,
- const SourceManager &SM);
- void emitSingleMacroExpansion(SourceLocation Loc,
- DiagnosticsEngine::Level Level,
- ArrayRef<CharSourceRange> Ranges,
- const SourceManager &SM);
- void emitMacroExpansions(SourceLocation Loc,
- DiagnosticsEngine::Level Level,
- ArrayRef<CharSourceRange> Ranges,
- ArrayRef<FixItHint> Hints,
- const SourceManager &SM);
-public:
- /// \brief Emit a diagnostic.
- ///
- /// This is the primary entry point for emitting diagnostic messages.
- /// It handles formatting and rendering the message as well as any ancillary
- /// information needed based on macros whose expansions impact the
- /// diagnostic.
- ///
- /// \param Loc The location for this caret.
- /// \param Level The level of the diagnostic to be emitted.
- /// \param Message The diagnostic message to emit.
- /// \param Ranges The underlined ranges for this code snippet.
- /// \param FixItHints The FixIt hints active for this diagnostic.
- /// \param SM The SourceManager; will be null if the diagnostic came from the
- /// frontend, thus \p Loc will be invalid.
- void emitDiagnostic(SourceLocation Loc, DiagnosticsEngine::Level Level,
- StringRef Message, ArrayRef<CharSourceRange> Ranges,
- ArrayRef<FixItHint> FixItHints,
- const SourceManager *SM,
- DiagOrStoredDiag D = (Diagnostic *)nullptr);
-
- void emitStoredDiagnostic(StoredDiagnostic &Diag);
-};
-
-/// Subclass of DiagnosticRender that turns all subdiagostics into explicit
-/// notes. It is up to subclasses to further define the behavior.
-class DiagnosticNoteRenderer : public DiagnosticRenderer {
-public:
- DiagnosticNoteRenderer(const LangOptions &LangOpts,
- DiagnosticOptions *DiagOpts)
- : DiagnosticRenderer(LangOpts, DiagOpts) {}
-
- ~DiagnosticNoteRenderer() override;
-
- void emitIncludeLocation(SourceLocation Loc, PresumedLoc PLoc,
- const SourceManager &SM) override;
-
- void emitImportLocation(SourceLocation Loc, PresumedLoc PLoc,
- StringRef ModuleName,
- const SourceManager &SM) override;
-
- void emitBuildingModuleLocation(SourceLocation Loc, PresumedLoc PLoc,
- StringRef ModuleName,
- const SourceManager &SM) override;
-
- virtual void emitNote(SourceLocation Loc, StringRef Message,
- const SourceManager *SM) = 0;
-};
-} // end clang namespace
-#endif
diff --git a/include/clang/Frontend/FrontendAction.h b/include/clang/Frontend/FrontendAction.h
deleted file mode 100644
index c407ff8..0000000
--- a/include/clang/Frontend/FrontendAction.h
+++ /dev/null
@@ -1,298 +0,0 @@
-//===-- FrontendAction.h - Generic Frontend Action Interface ----*- C++ -*-===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-///
-/// \file
-/// \brief Defines the clang::FrontendAction interface and various convenience
-/// abstract classes (clang::ASTFrontendAction, clang::PluginASTAction,
-/// clang::PreprocessorFrontendAction, and clang::WrapperFrontendAction)
-/// derived from it.
-///
-//===----------------------------------------------------------------------===//
-
-#ifndef LLVM_CLANG_FRONTEND_FRONTENDACTION_H
-#define LLVM_CLANG_FRONTEND_FRONTENDACTION_H
-
-#include "clang/AST/ASTConsumer.h"
-#include "clang/Basic/LLVM.h"
-#include "clang/Basic/LangOptions.h"
-#include "clang/Frontend/ASTUnit.h"
-#include "clang/Frontend/FrontendOptions.h"
-#include "llvm/ADT/StringRef.h"
-#include <memory>
-#include <string>
-#include <vector>
-
-namespace clang {
-class ASTMergeAction;
-class CompilerInstance;
-
-/// Abstract base class for actions which can be performed by the frontend.
-class FrontendAction {
- FrontendInputFile CurrentInput;
- std::unique_ptr<ASTUnit> CurrentASTUnit;
- CompilerInstance *Instance;
- friend class ASTMergeAction;
- friend class WrapperFrontendAction;
-
-private:
- std::unique_ptr<ASTConsumer> CreateWrappedASTConsumer(CompilerInstance &CI,
- StringRef InFile);
-
-protected:
- /// @name Implementation Action Interface
- /// @{
-
- /// \brief Create the AST consumer object for this action, if supported.
- ///
- /// This routine is called as part of BeginSourceFile(), which will
- /// fail if the AST consumer cannot be created. This will not be called if the
- /// action has indicated that it only uses the preprocessor.
- ///
- /// \param CI - The current compiler instance, provided as a convenience, see
- /// getCompilerInstance().
- ///
- /// \param InFile - The current input file, provided as a convenience, see
- /// getCurrentFile().
- ///
- /// \return The new AST consumer, or null on failure.
- virtual std::unique_ptr<ASTConsumer> CreateASTConsumer(CompilerInstance &CI,
- StringRef InFile) = 0;
-
- /// \brief Callback before starting processing a single input, giving the
- /// opportunity to modify the CompilerInvocation or do some other action
- /// before BeginSourceFileAction is called.
- ///
- /// \return True on success; on failure BeginSourceFileAction(),
- /// ExecuteAction() and EndSourceFileAction() will not be called.
- virtual bool BeginInvocation(CompilerInstance &CI) { return true; }
-
- /// \brief Callback at the start of processing a single input.
- ///
- /// \return True on success; on failure ExecutionAction() and
- /// EndSourceFileAction() will not be called.
- virtual bool BeginSourceFileAction(CompilerInstance &CI,
- StringRef Filename) {
- return true;
- }
-
- /// \brief Callback to run the program action, using the initialized
- /// compiler instance.
- ///
- /// This is guaranteed to only be called between BeginSourceFileAction()
- /// and EndSourceFileAction().
- virtual void ExecuteAction() = 0;
-
- /// \brief Callback at the end of processing a single input.
- ///
- /// This is guaranteed to only be called following a successful call to
- /// BeginSourceFileAction (and BeginSourceFile).
- virtual void EndSourceFileAction() {}
-
- /// \brief Callback at the end of processing a single input, to determine
- /// if the output files should be erased or not.
- ///
- /// By default it returns true if a compiler error occurred.
- /// This is guaranteed to only be called following a successful call to
- /// BeginSourceFileAction (and BeginSourceFile).
- virtual bool shouldEraseOutputFiles();
-
- /// @}
-
-public:
- FrontendAction();
- virtual ~FrontendAction();
-
- /// @name Compiler Instance Access
- /// @{
-
- CompilerInstance &getCompilerInstance() const {
- assert(Instance && "Compiler instance not registered!");
- return *Instance;
- }
-
- void setCompilerInstance(CompilerInstance *Value) { Instance = Value; }
-
- /// @}
- /// @name Current File Information
- /// @{
-
- bool isCurrentFileAST() const {
- assert(!CurrentInput.isEmpty() && "No current file!");
- return (bool)CurrentASTUnit;
- }
-
- const FrontendInputFile &getCurrentInput() const {
- return CurrentInput;
- }
-
- const StringRef getCurrentFile() const {
- assert(!CurrentInput.isEmpty() && "No current file!");
- return CurrentInput.getFile();
- }
-
- InputKind getCurrentFileKind() const {
- assert(!CurrentInput.isEmpty() && "No current file!");
- return CurrentInput.getKind();
- }
-
- ASTUnit &getCurrentASTUnit() const {
- assert(CurrentASTUnit && "No current AST unit!");
- return *CurrentASTUnit;
- }
-
- std::unique_ptr<ASTUnit> takeCurrentASTUnit() {
- return std::move(CurrentASTUnit);
- }
-
- void setCurrentInput(const FrontendInputFile &CurrentInput,
- std::unique_ptr<ASTUnit> AST = nullptr);
-
- /// @}
- /// @name Supported Modes
- /// @{
-
- /// \brief Is this action invoked on a model file?
- ///
- /// Model files are incomplete translation units that relies on type
- /// information from another translation unit. Check ParseModelFileAction for
- /// details.
- virtual bool isModelParsingAction() const { return false; }
-
- /// \brief Does this action only use the preprocessor?
- ///
- /// If so no AST context will be created and this action will be invalid
- /// with AST file inputs.
- virtual bool usesPreprocessorOnly() const = 0;
-
- /// \brief For AST-based actions, the kind of translation unit we're handling.
- virtual TranslationUnitKind getTranslationUnitKind() { return TU_Complete; }
-
- /// \brief Does this action support use with PCH?
- virtual bool hasPCHSupport() const { return !usesPreprocessorOnly(); }
-
- /// \brief Does this action support use with AST files?
- virtual bool hasASTFileSupport() const { return !usesPreprocessorOnly(); }
-
- /// \brief Does this action support use with IR files?
- virtual bool hasIRSupport() const { return false; }
-
- /// \brief Does this action support use with code completion?
- virtual bool hasCodeCompletionSupport() const { return false; }
-
- /// @}
- /// @name Public Action Interface
- /// @{
-
- /// \brief Prepare the action for processing the input file \p Input.
- ///
- /// This is run after the options and frontend have been initialized,
- /// but prior to executing any per-file processing.
- ///
- /// \param CI - The compiler instance this action is being run from. The
- /// action may store and use this object up until the matching EndSourceFile
- /// action.
- ///
- /// \param Input - The input filename and kind. Some input kinds are handled
- /// specially, for example AST inputs, since the AST file itself contains
- /// several objects which would normally be owned by the
- /// CompilerInstance. When processing AST input files, these objects should
- /// generally not be initialized in the CompilerInstance -- they will
- /// automatically be shared with the AST file in between
- /// BeginSourceFile() and EndSourceFile().
- ///
- /// \return True on success; on failure the compilation of this file should
- /// be aborted and neither Execute() nor EndSourceFile() should be called.
- bool BeginSourceFile(CompilerInstance &CI, const FrontendInputFile &Input);
-
- /// \brief Set the source manager's main input file, and run the action.
- bool Execute();
-
- /// \brief Perform any per-file post processing, deallocate per-file
- /// objects, and run statistics and output file cleanup code.
- void EndSourceFile();
-
- /// @}
-};
-
-/// \brief Abstract base class to use for AST consumer-based frontend actions.
-class ASTFrontendAction : public FrontendAction {
-protected:
- /// \brief Implement the ExecuteAction interface by running Sema on
- /// the already-initialized AST consumer.
- ///
- /// This will also take care of instantiating a code completion consumer if
- /// the user requested it and the action supports it.
- void ExecuteAction() override;
-
-public:
- ASTFrontendAction() {}
- bool usesPreprocessorOnly() const override { return false; }
-};
-
-class PluginASTAction : public ASTFrontendAction {
- virtual void anchor();
-public:
- std::unique_ptr<ASTConsumer> CreateASTConsumer(CompilerInstance &CI,
- StringRef InFile) override = 0;
-
- /// \brief Parse the given plugin command line arguments.
- ///
- /// \param CI - The compiler instance, for use in reporting diagnostics.
- /// \return True if the parsing succeeded; otherwise the plugin will be
- /// destroyed and no action run. The plugin is responsible for using the
- /// CompilerInstance's Diagnostic object to report errors.
- virtual bool ParseArgs(const CompilerInstance &CI,
- const std::vector<std::string> &arg) = 0;
-};
-
-/// \brief Abstract base class to use for preprocessor-based frontend actions.
-class PreprocessorFrontendAction : public FrontendAction {
-protected:
- /// \brief Provide a default implementation which returns aborts;
- /// this method should never be called by FrontendAction clients.
- std::unique_ptr<ASTConsumer> CreateASTConsumer(CompilerInstance &CI,
- StringRef InFile) override;
-
-public:
- bool usesPreprocessorOnly() const override { return true; }
-};
-
-/// \brief A frontend action which simply wraps some other runtime-specified
-/// frontend action.
-///
-/// Deriving from this class allows an action to inject custom logic around
-/// some existing action's behavior. It implements every virtual method in
-/// the FrontendAction interface by forwarding to the wrapped action.
-class WrapperFrontendAction : public FrontendAction {
- std::unique_ptr<FrontendAction> WrappedAction;
-
-protected:
- std::unique_ptr<ASTConsumer> CreateASTConsumer(CompilerInstance &CI,
- StringRef InFile) override;
- bool BeginInvocation(CompilerInstance &CI) override;
- bool BeginSourceFileAction(CompilerInstance &CI, StringRef Filename) override;
- void ExecuteAction() override;
- void EndSourceFileAction() override;
-
-public:
- /// Construct a WrapperFrontendAction from an existing action, taking
- /// ownership of it.
- WrapperFrontendAction(FrontendAction *WrappedAction);
-
- bool usesPreprocessorOnly() const override;
- TranslationUnitKind getTranslationUnitKind() override;
- bool hasPCHSupport() const override;
- bool hasASTFileSupport() const override;
- bool hasIRSupport() const override;
- bool hasCodeCompletionSupport() const override;
-};
-
-} // end namespace clang
-
-#endif
diff --git a/include/clang/Frontend/FrontendActions.h b/include/clang/Frontend/FrontendActions.h
deleted file mode 100644
index f61775f..0000000
--- a/include/clang/Frontend/FrontendActions.h
+++ /dev/null
@@ -1,241 +0,0 @@
-//===-- FrontendActions.h - Useful Frontend Actions -------------*- 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_FRONTEND_FRONTENDACTIONS_H
-#define LLVM_CLANG_FRONTEND_FRONTENDACTIONS_H
-
-#include "clang/Frontend/FrontendAction.h"
-#include <string>
-#include <vector>
-
-namespace clang {
-
-class Module;
-class FileEntry;
-
-//===----------------------------------------------------------------------===//
-// Custom Consumer Actions
-//===----------------------------------------------------------------------===//
-
-class InitOnlyAction : public FrontendAction {
- void ExecuteAction() override;
-
- std::unique_ptr<ASTConsumer> CreateASTConsumer(CompilerInstance &CI,
- StringRef InFile) override;
-
-public:
- // Don't claim to only use the preprocessor, we want to follow the AST path,
- // but do nothing.
- bool usesPreprocessorOnly() const override { return false; }
-};
-
-//===----------------------------------------------------------------------===//
-// AST Consumer Actions
-//===----------------------------------------------------------------------===//
-
-class ASTPrintAction : public ASTFrontendAction {
-protected:
- std::unique_ptr<ASTConsumer> CreateASTConsumer(CompilerInstance &CI,
- StringRef InFile) override;
-};
-
-class ASTDumpAction : public ASTFrontendAction {
-protected:
- std::unique_ptr<ASTConsumer> CreateASTConsumer(CompilerInstance &CI,
- StringRef InFile) override;
-};
-
-class ASTDeclListAction : public ASTFrontendAction {
-protected:
- std::unique_ptr<ASTConsumer> CreateASTConsumer(CompilerInstance &CI,
- StringRef InFile) override;
-};
-
-class ASTViewAction : public ASTFrontendAction {
-protected:
- std::unique_ptr<ASTConsumer> CreateASTConsumer(CompilerInstance &CI,
- StringRef InFile) override;
-};
-
-class DeclContextPrintAction : public ASTFrontendAction {
-protected:
- std::unique_ptr<ASTConsumer> CreateASTConsumer(CompilerInstance &CI,
- StringRef InFile) override;
-};
-
-class GeneratePCHAction : public ASTFrontendAction {
-protected:
- std::unique_ptr<ASTConsumer> CreateASTConsumer(CompilerInstance &CI,
- StringRef InFile) override;
-
- TranslationUnitKind getTranslationUnitKind() override {
- return TU_Prefix;
- }
-
- bool hasASTFileSupport() const override { return false; }
-
-public:
- /// \brief Compute the AST consumer arguments that will be used to
- /// create the PCHGenerator instance returned by CreateASTConsumer.
- ///
- /// \returns true if an error occurred, false otherwise.
- static raw_pwrite_stream *
- ComputeASTConsumerArguments(CompilerInstance &CI, StringRef InFile,
- std::string &Sysroot, std::string &OutputFile);
-};
-
-class GenerateModuleAction : public ASTFrontendAction {
- clang::Module *Module;
- const FileEntry *ModuleMapForUniquing;
- bool IsSystem;
-
-protected:
- std::unique_ptr<ASTConsumer> CreateASTConsumer(CompilerInstance &CI,
- StringRef InFile) override;
-
- TranslationUnitKind getTranslationUnitKind() override {
- return TU_Module;
- }
-
- bool hasASTFileSupport() const override { return false; }
-
-public:
- GenerateModuleAction(const FileEntry *ModuleMap = nullptr,
- bool IsSystem = false)
- : ASTFrontendAction(), ModuleMapForUniquing(ModuleMap), IsSystem(IsSystem)
- { }
-
- bool BeginSourceFileAction(CompilerInstance &CI, StringRef Filename) override;
-
- /// \brief Compute the AST consumer arguments that will be used to
- /// create the PCHGenerator instance returned by CreateASTConsumer.
- ///
- /// \returns true if an error occurred, false otherwise.
- raw_pwrite_stream *ComputeASTConsumerArguments(CompilerInstance &CI,
- StringRef InFile,
- std::string &Sysroot,
- std::string &OutputFile);
-};
-
-class SyntaxOnlyAction : public ASTFrontendAction {
-protected:
- std::unique_ptr<ASTConsumer> CreateASTConsumer(CompilerInstance &CI,
- StringRef InFile) override;
-
-public:
- bool hasCodeCompletionSupport() const override { return true; }
-};
-
-/// \brief Dump information about the given module file, to be used for
-/// basic debugging and discovery.
-class DumpModuleInfoAction : public ASTFrontendAction {
-protected:
- std::unique_ptr<ASTConsumer> CreateASTConsumer(CompilerInstance &CI,
- StringRef InFile) override;
- void ExecuteAction() override;
-
-public:
- bool hasPCHSupport() const override { return false; }
- bool hasASTFileSupport() const override { return true; }
- bool hasIRSupport() const override { return false; }
- bool hasCodeCompletionSupport() const override { return false; }
-};
-
-class VerifyPCHAction : public ASTFrontendAction {
-protected:
- std::unique_ptr<ASTConsumer> CreateASTConsumer(CompilerInstance &CI,
- StringRef InFile) override;
-
- void ExecuteAction() override;
-
-public:
- bool hasCodeCompletionSupport() const override { return false; }
-};
-
-/**
- * \brief Frontend action adaptor that merges ASTs together.
- *
- * This action takes an existing AST file and "merges" it into the AST
- * context, producing a merged context. This action is an action
- * adaptor, which forwards most of its calls to another action that
- * will consume the merged context.
- */
-class ASTMergeAction : public FrontendAction {
- /// \brief The action that the merge action adapts.
- FrontendAction *AdaptedAction;
-
- /// \brief The set of AST files to merge.
- std::vector<std::string> ASTFiles;
-
-protected:
- std::unique_ptr<ASTConsumer> CreateASTConsumer(CompilerInstance &CI,
- StringRef InFile) override;
-
- bool BeginSourceFileAction(CompilerInstance &CI,
- StringRef Filename) override;
-
- void ExecuteAction() override;
- void EndSourceFileAction() override;
-
-public:
- ASTMergeAction(FrontendAction *AdaptedAction, ArrayRef<std::string> ASTFiles);
- ~ASTMergeAction() override;
-
- bool usesPreprocessorOnly() const override;
- TranslationUnitKind getTranslationUnitKind() override;
- bool hasPCHSupport() const override;
- bool hasASTFileSupport() const override;
- bool hasCodeCompletionSupport() const override;
-};
-
-class PrintPreambleAction : public FrontendAction {
-protected:
- void ExecuteAction() override;
- std::unique_ptr<ASTConsumer> CreateASTConsumer(CompilerInstance &,
- StringRef) override {
- return nullptr;
- }
-
- bool usesPreprocessorOnly() const override { return true; }
-};
-
-//===----------------------------------------------------------------------===//
-// Preprocessor Actions
-//===----------------------------------------------------------------------===//
-
-class DumpRawTokensAction : public PreprocessorFrontendAction {
-protected:
- void ExecuteAction() override;
-};
-
-class DumpTokensAction : public PreprocessorFrontendAction {
-protected:
- void ExecuteAction() override;
-};
-
-class GeneratePTHAction : public PreprocessorFrontendAction {
-protected:
- void ExecuteAction() override;
-};
-
-class PreprocessOnlyAction : public PreprocessorFrontendAction {
-protected:
- void ExecuteAction() override;
-};
-
-class PrintPreprocessedAction : public PreprocessorFrontendAction {
-protected:
- void ExecuteAction() override;
-
- bool hasPCHSupport() const override { return true; }
-};
-
-} // end namespace clang
-
-#endif
diff --git a/include/clang/Frontend/FrontendDiagnostic.h b/include/clang/Frontend/FrontendDiagnostic.h
deleted file mode 100644
index 0f37b7e..0000000
--- a/include/clang/Frontend/FrontendDiagnostic.h
+++ /dev/null
@@ -1,28 +0,0 @@
-//===--- DiagnosticFrontend.h - Diagnostics for frontend --------*- 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_FRONTEND_FRONTENDDIAGNOSTIC_H
-#define LLVM_CLANG_FRONTEND_FRONTENDDIAGNOSTIC_H
-
-#include "clang/Basic/Diagnostic.h"
-
-namespace clang {
- namespace diag {
- enum {
-#define DIAG(ENUM,FLAGS,DEFAULT_MAPPING,DESC,GROUP,\
- SFINAE,NOWERROR,SHOWINSYSHEADER,CATEGORY) ENUM,
-#define FRONTENDSTART
-#include "clang/Basic/DiagnosticFrontendKinds.inc"
-#undef DIAG
- NUM_BUILTIN_FRONTEND_DIAGNOSTICS
- };
- } // end namespace diag
-} // end namespace clang
-
-#endif
diff --git a/include/clang/Frontend/FrontendOptions.h b/include/clang/Frontend/FrontendOptions.h
deleted file mode 100644
index c800a51..0000000
--- a/include/clang/Frontend/FrontendOptions.h
+++ /dev/null
@@ -1,292 +0,0 @@
-//===--- FrontendOptions.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_FRONTEND_FRONTENDOPTIONS_H
-#define LLVM_CLANG_FRONTEND_FRONTENDOPTIONS_H
-
-#include "clang/Frontend/CommandLineSourceLoc.h"
-#include "clang/Serialization/ModuleFileExtension.h"
-#include "clang/Sema/CodeCompleteOptions.h"
-#include "llvm/ADT/StringRef.h"
-#include <string>
-#include <vector>
-
-namespace llvm {
-class MemoryBuffer;
-}
-
-namespace clang {
-
-namespace frontend {
- enum ActionKind {
- ASTDeclList, ///< Parse ASTs and list Decl nodes.
- ASTDump, ///< Parse ASTs and dump them.
- ASTPrint, ///< Parse ASTs and print them.
- ASTView, ///< Parse ASTs and view them in Graphviz.
- DumpRawTokens, ///< Dump out raw tokens.
- DumpTokens, ///< Dump out preprocessed tokens.
- EmitAssembly, ///< Emit a .s file.
- EmitBC, ///< Emit a .bc file.
- EmitHTML, ///< Translate input source into HTML.
- EmitLLVM, ///< Emit a .ll file.
- EmitLLVMOnly, ///< Generate LLVM IR, but do not emit anything.
- EmitCodeGenOnly, ///< Generate machine code, but don't emit anything.
- EmitObj, ///< Emit a .o file.
- FixIt, ///< Parse and apply any fixits to the source.
- GenerateModule, ///< Generate pre-compiled module.
- GeneratePCH, ///< Generate pre-compiled header.
- GeneratePTH, ///< Generate pre-tokenized header.
- InitOnly, ///< Only execute frontend initialization.
- ModuleFileInfo, ///< Dump information about a module file.
- VerifyPCH, ///< Load and verify that a PCH file is usable.
- ParseSyntaxOnly, ///< Parse and perform semantic analysis.
- PluginAction, ///< Run a plugin action, \see ActionName.
- PrintDeclContext, ///< Print DeclContext and their Decls.
- PrintPreamble, ///< Print the "preamble" of the input file
- PrintPreprocessedInput, ///< -E mode.
- RewriteMacros, ///< Expand macros but not \#includes.
- RewriteObjC, ///< ObjC->C Rewriter.
- RewriteTest, ///< Rewriter playground
- RunAnalysis, ///< Run one or more source code analyses.
- MigrateSource, ///< Run migrator.
- RunPreprocessorOnly ///< Just lex, no output.
- };
-}
-
-enum InputKind {
- IK_None,
- IK_Asm,
- IK_C,
- IK_CXX,
- IK_ObjC,
- IK_ObjCXX,
- IK_PreprocessedC,
- IK_PreprocessedCXX,
- IK_PreprocessedObjC,
- IK_PreprocessedObjCXX,
- IK_OpenCL,
- IK_CUDA,
- IK_PreprocessedCuda,
- IK_AST,
- IK_LLVM_IR
-};
-
-
-/// \brief An input file for the front end.
-class FrontendInputFile {
- /// \brief The file name, or "-" to read from standard input.
- std::string File;
-
- llvm::MemoryBuffer *Buffer;
-
- /// \brief The kind of input, e.g., C source, AST file, LLVM IR.
- InputKind Kind;
-
- /// \brief Whether we're dealing with a 'system' input (vs. a 'user' input).
- bool IsSystem;
-
-public:
- FrontendInputFile() : Buffer(nullptr), Kind(IK_None), IsSystem(false) { }
- FrontendInputFile(StringRef File, InputKind Kind, bool IsSystem = false)
- : File(File.str()), Buffer(nullptr), Kind(Kind), IsSystem(IsSystem) { }
- FrontendInputFile(llvm::MemoryBuffer *buffer, InputKind Kind,
- bool IsSystem = false)
- : Buffer(buffer), Kind(Kind), IsSystem(IsSystem) { }
-
- InputKind getKind() const { return Kind; }
- bool isSystem() const { return IsSystem; }
-
- bool isEmpty() const { return File.empty() && Buffer == nullptr; }
- bool isFile() const { return !isBuffer(); }
- bool isBuffer() const { return Buffer != nullptr; }
-
- StringRef getFile() const {
- assert(isFile());
- return File;
- }
- llvm::MemoryBuffer *getBuffer() const {
- assert(isBuffer());
- return Buffer;
- }
-};
-
-/// FrontendOptions - Options for controlling the behavior of the frontend.
-class FrontendOptions {
-public:
- unsigned DisableFree : 1; ///< Disable memory freeing on exit.
- unsigned RelocatablePCH : 1; ///< When generating PCH files,
- /// instruct the AST writer to create
- /// relocatable PCH files.
- unsigned ShowHelp : 1; ///< Show the -help text.
- unsigned ShowStats : 1; ///< Show frontend performance
- /// metrics and statistics.
- unsigned ShowTimers : 1; ///< Show timers for individual
- /// actions.
- unsigned ShowVersion : 1; ///< Show the -version text.
- unsigned FixWhatYouCan : 1; ///< Apply fixes even if there are
- /// unfixable errors.
- unsigned FixOnlyWarnings : 1; ///< Apply fixes only for warnings.
- unsigned FixAndRecompile : 1; ///< Apply fixes and recompile.
- unsigned FixToTemporaries : 1; ///< Apply fixes to temporary files.
- unsigned ARCMTMigrateEmitARCErrors : 1; /// Emit ARC errors even if the
- /// migrator can fix them
- unsigned SkipFunctionBodies : 1; ///< Skip over function bodies to
- /// speed up parsing in cases you do
- /// not need them (e.g. with code
- /// completion).
- unsigned UseGlobalModuleIndex : 1; ///< Whether we can use the
- ///< global module index if available.
- unsigned GenerateGlobalModuleIndex : 1; ///< Whether we can generate the
- ///< global module index if needed.
- unsigned ASTDumpDecls : 1; ///< Whether we include declaration
- ///< dumps in AST dumps.
- unsigned ASTDumpLookups : 1; ///< Whether we include lookup table
- ///< dumps in AST dumps.
- unsigned BuildingImplicitModule : 1; ///< Whether we are performing an
- ///< implicit module build.
- unsigned ModulesEmbedAllFiles : 1; ///< Whether we should embed all used
- ///< files into the PCM file.
-
- CodeCompleteOptions CodeCompleteOpts;
-
- enum {
- ARCMT_None,
- ARCMT_Check,
- ARCMT_Modify,
- ARCMT_Migrate
- } ARCMTAction;
-
- enum {
- ObjCMT_None = 0,
- /// \brief Enable migration to modern ObjC literals.
- ObjCMT_Literals = 0x1,
- /// \brief Enable migration to modern ObjC subscripting.
- ObjCMT_Subscripting = 0x2,
- /// \brief Enable migration to modern ObjC readonly property.
- ObjCMT_ReadonlyProperty = 0x4,
- /// \brief Enable migration to modern ObjC readwrite property.
- ObjCMT_ReadwriteProperty = 0x8,
- /// \brief Enable migration to modern ObjC property.
- ObjCMT_Property = (ObjCMT_ReadonlyProperty | ObjCMT_ReadwriteProperty),
- /// \brief Enable annotation of ObjCMethods of all kinds.
- ObjCMT_Annotation = 0x10,
- /// \brief Enable migration of ObjC methods to 'instancetype'.
- ObjCMT_Instancetype = 0x20,
- /// \brief Enable migration to NS_ENUM/NS_OPTIONS macros.
- ObjCMT_NsMacros = 0x40,
- /// \brief Enable migration to add conforming protocols.
- ObjCMT_ProtocolConformance = 0x80,
- /// \brief prefer 'atomic' property over 'nonatomic'.
- ObjCMT_AtomicProperty = 0x100,
- /// \brief annotate property with NS_RETURNS_INNER_POINTER
- ObjCMT_ReturnsInnerPointerProperty = 0x200,
- /// \brief use NS_NONATOMIC_IOSONLY for property 'atomic' attribute
- ObjCMT_NsAtomicIOSOnlyProperty = 0x400,
- /// \brief Enable inferring NS_DESIGNATED_INITIALIZER for ObjC methods.
- ObjCMT_DesignatedInitializer = 0x800,
- /// \brief Enable converting setter/getter expressions to property-dot syntx.
- ObjCMT_PropertyDotSyntax = 0x1000,
- ObjCMT_MigrateDecls = (ObjCMT_ReadonlyProperty | ObjCMT_ReadwriteProperty |
- ObjCMT_Annotation | ObjCMT_Instancetype |
- ObjCMT_NsMacros | ObjCMT_ProtocolConformance |
- ObjCMT_NsAtomicIOSOnlyProperty |
- ObjCMT_DesignatedInitializer),
- ObjCMT_MigrateAll = (ObjCMT_Literals | ObjCMT_Subscripting |
- ObjCMT_MigrateDecls | ObjCMT_PropertyDotSyntax)
- };
- unsigned ObjCMTAction;
- std::string ObjCMTWhiteListPath;
-
- std::string MTMigrateDir;
- std::string ARCMTMigrateReportOut;
-
- /// The input files and their types.
- std::vector<FrontendInputFile> Inputs;
-
- /// The output file, if any.
- std::string OutputFile;
-
- /// If given, the new suffix for fix-it rewritten files.
- std::string FixItSuffix;
-
- /// If given, filter dumped AST Decl nodes by this substring.
- std::string ASTDumpFilter;
-
- /// If given, enable code completion at the provided location.
- ParsedSourceLocation CodeCompletionAt;
-
- /// The frontend action to perform.
- frontend::ActionKind ProgramAction;
-
- /// The name of the action to run when using a plugin action.
- std::string ActionName;
-
- /// Args to pass to the plugin
- std::vector<std::string> PluginArgs;
-
- /// The list of plugin actions to run in addition to the normal action.
- std::vector<std::string> AddPluginActions;
-
- /// Args to pass to the additional plugins
- std::vector<std::vector<std::string> > AddPluginArgs;
-
- /// The list of plugins to load.
- std::vector<std::string> Plugins;
-
- /// The list of module file extensions.
- std::vector<IntrusiveRefCntPtr<ModuleFileExtension>> ModuleFileExtensions;
-
- /// \brief The list of module map files to load before processing the input.
- std::vector<std::string> ModuleMapFiles;
-
- /// \brief The list of additional prebuilt module files to load before
- /// processing the input.
- std::vector<std::string> ModuleFiles;
-
- /// \brief The list of files to embed into the compiled module file.
- std::vector<std::string> ModulesEmbedFiles;
-
- /// \brief The list of AST files to merge.
- std::vector<std::string> ASTMergeFiles;
-
- /// \brief A list of arguments to forward to LLVM's option processing; this
- /// should only be used for debugging and experimental features.
- std::vector<std::string> LLVMArgs;
-
- /// \brief File name of the file that will provide record layouts
- /// (in the format produced by -fdump-record-layouts).
- std::string OverrideRecordLayoutsFile;
-
- /// \brief Auxiliary triple for CUDA compilation.
- std::string AuxTriple;
-
-public:
- FrontendOptions() :
- DisableFree(false), RelocatablePCH(false), ShowHelp(false),
- ShowStats(false), ShowTimers(false), ShowVersion(false),
- FixWhatYouCan(false), FixOnlyWarnings(false), FixAndRecompile(false),
- FixToTemporaries(false), ARCMTMigrateEmitARCErrors(false),
- SkipFunctionBodies(false), UseGlobalModuleIndex(true),
- GenerateGlobalModuleIndex(true), ASTDumpDecls(false), ASTDumpLookups(false),
- BuildingImplicitModule(false), ModulesEmbedAllFiles(false),
- ARCMTAction(ARCMT_None), ObjCMTAction(ObjCMT_None),
- ProgramAction(frontend::ParseSyntaxOnly)
- {}
-
- /// getInputKindForExtension - Return the appropriate input kind for a file
- /// extension. For example, "c" would return IK_C.
- ///
- /// \return The input kind for the extension, or IK_None if the extension is
- /// not recognized.
- static InputKind getInputKindForExtension(StringRef Extension);
-};
-
-} // end namespace clang
-
-#endif
diff --git a/include/clang/Frontend/FrontendPluginRegistry.h b/include/clang/Frontend/FrontendPluginRegistry.h
deleted file mode 100644
index ecab630..0000000
--- a/include/clang/Frontend/FrontendPluginRegistry.h
+++ /dev/null
@@ -1,26 +0,0 @@
-//===-- FrontendAction.h - Pluggable Frontend Action Interface --*- 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_FRONTEND_FRONTENDPLUGINREGISTRY_H
-#define LLVM_CLANG_FRONTEND_FRONTENDPLUGINREGISTRY_H
-
-#include "clang/Frontend/FrontendAction.h"
-#include "llvm/Support/Registry.h"
-
-// Instantiated in FrontendAction.cpp.
-extern template class llvm::Registry<clang::PluginASTAction>;
-
-namespace clang {
-
-/// The frontend plugin registry.
-typedef llvm::Registry<PluginASTAction> FrontendPluginRegistry;
-
-} // end namespace clang
-
-#endif
diff --git a/include/clang/Frontend/LangStandard.h b/include/clang/Frontend/LangStandard.h
deleted file mode 100644
index 8021d08..0000000
--- a/include/clang/Frontend/LangStandard.h
+++ /dev/null
@@ -1,100 +0,0 @@
-//===--- LangStandard.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_FRONTEND_LANGSTANDARD_H
-#define LLVM_CLANG_FRONTEND_LANGSTANDARD_H
-
-#include "clang/Basic/LLVM.h"
-#include "llvm/ADT/StringRef.h"
-
-namespace clang {
-
-namespace frontend {
-
-enum LangFeatures {
- LineComment = (1 << 0),
- C89 = (1 << 1),
- C99 = (1 << 2),
- C11 = (1 << 3),
- CPlusPlus = (1 << 4),
- CPlusPlus11 = (1 << 5),
- CPlusPlus14 = (1 << 6),
- CPlusPlus1z = (1 << 7),
- Digraphs = (1 << 8),
- GNUMode = (1 << 9),
- HexFloat = (1 << 10),
- ImplicitInt = (1 << 11)
-};
-
-}
-
-/// LangStandard - Information about the properties of a particular language
-/// standard.
-struct LangStandard {
- enum Kind {
-#define LANGSTANDARD(id, name, desc, features) \
- lang_##id,
-#include "clang/Frontend/LangStandards.def"
- lang_unspecified
- };
-
- const char *ShortName;
- const char *Description;
- unsigned Flags;
-
-public:
- /// getName - Get the name of this standard.
- const char *getName() const { return ShortName; }
-
- /// getDescription - Get the description of this standard.
- const char *getDescription() const { return Description; }
-
- /// Language supports '//' comments.
- bool hasLineComments() const { return Flags & frontend::LineComment; }
-
- /// isC89 - Language is a superset of C89.
- bool isC89() const { return Flags & frontend::C89; }
-
- /// isC99 - Language is a superset of C99.
- bool isC99() const { return Flags & frontend::C99; }
-
- /// isC11 - Language is a superset of C11.
- bool isC11() const { return Flags & frontend::C11; }
-
- /// isCPlusPlus - Language is a C++ variant.
- bool isCPlusPlus() const { return Flags & frontend::CPlusPlus; }
-
- /// isCPlusPlus11 - Language is a C++11 variant (or later).
- bool isCPlusPlus11() const { return Flags & frontend::CPlusPlus11; }
-
- /// isCPlusPlus14 - Language is a C++14 variant (or later).
- bool isCPlusPlus14() const { return Flags & frontend::CPlusPlus14; }
-
- /// isCPlusPlus1z - Language is a C++17 variant (or later).
- bool isCPlusPlus1z() const { return Flags & frontend::CPlusPlus1z; }
-
- /// hasDigraphs - Language supports digraphs.
- bool hasDigraphs() const { return Flags & frontend::Digraphs; }
-
- /// isGNUMode - Language includes GNU extensions.
- bool isGNUMode() const { return Flags & frontend::GNUMode; }
-
- /// hasHexFloats - Language supports hexadecimal float constants.
- bool hasHexFloats() const { return Flags & frontend::HexFloat; }
-
- /// hasImplicitInt - Language allows variables to be typed as int implicitly.
- bool hasImplicitInt() const { return Flags & frontend::ImplicitInt; }
-
- static const LangStandard &getLangStandardForKind(Kind K);
- static const LangStandard *getLangStandardForName(StringRef Name);
-};
-
-} // end namespace clang
-
-#endif
diff --git a/include/clang/Frontend/LangStandards.def b/include/clang/Frontend/LangStandards.def
deleted file mode 100644
index cac9c3c..0000000
--- a/include/clang/Frontend/LangStandards.def
+++ /dev/null
@@ -1,153 +0,0 @@
-//===-- LangStandards.def - Language Standard Data --------------*- C++ -*-===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef LANGSTANDARD
-#error "LANGSTANDARD must be defined before including this file"
-#endif
-
-/// LANGSTANDARD(IDENT, NAME, DESC, FEATURES)
-///
-/// \param IDENT - The name of the standard as a C++ identifier.
-/// \param NAME - The name of the standard.
-/// \param DESC - A short description of the standard.
-/// \param FEATURES - The standard features as flags, these are enums from the
-/// clang::frontend namespace, which is assumed to be be available.
-
-// C89-ish modes.
-LANGSTANDARD(c89, "c89",
- "ISO C 1990",
- C89 | ImplicitInt)
-LANGSTANDARD(c90, "c90",
- "ISO C 1990",
- C89 | ImplicitInt)
-LANGSTANDARD(iso9899_1990, "iso9899:1990",
- "ISO C 1990",
- C89 | ImplicitInt)
-
-LANGSTANDARD(c94, "iso9899:199409",
- "ISO C 1990 with amendment 1",
- C89 | Digraphs | ImplicitInt)
-
-LANGSTANDARD(gnu89, "gnu89",
- "ISO C 1990 with GNU extensions",
- LineComment | C89 | Digraphs | GNUMode | ImplicitInt)
-LANGSTANDARD(gnu90, "gnu90",
- "ISO C 1990 with GNU extensions",
- LineComment | C89 | Digraphs | GNUMode | ImplicitInt)
-
-// C99-ish modes
-LANGSTANDARD(c99, "c99",
- "ISO C 1999",
- LineComment | C99 | Digraphs | HexFloat)
-LANGSTANDARD(c9x, "c9x",
- "ISO C 1999",
- LineComment | C99 | Digraphs | HexFloat)
-LANGSTANDARD(iso9899_1999,
- "iso9899:1999", "ISO C 1999",
- LineComment | C99 | Digraphs | HexFloat)
-LANGSTANDARD(iso9899_199x,
- "iso9899:199x", "ISO C 1999",
- LineComment | C99 | Digraphs | HexFloat)
-
-LANGSTANDARD(gnu99, "gnu99",
- "ISO C 1999 with GNU extensions",
- LineComment | C99 | Digraphs | GNUMode | HexFloat)
-LANGSTANDARD(gnu9x, "gnu9x",
- "ISO C 1999 with GNU extensions",
- LineComment | C99 | Digraphs | GNUMode | HexFloat)
-
-// C11 modes
-LANGSTANDARD(c11, "c11",
- "ISO C 2011",
- LineComment | C99 | C11 | Digraphs | HexFloat)
-LANGSTANDARD(c1x, "c1x",
- "ISO C 2011",
- LineComment | C99 | C11 | Digraphs | HexFloat)
-LANGSTANDARD(iso9899_2011,
- "iso9899:2011", "ISO C 2011",
- LineComment | C99 | C11 | Digraphs | HexFloat)
-LANGSTANDARD(iso9899_201x,
- "iso9899:2011", "ISO C 2011",
- LineComment | C99 | C11 | Digraphs | HexFloat)
-
-LANGSTANDARD(gnu11, "gnu11",
- "ISO C 2011 with GNU extensions",
- LineComment | C99 | C11 | Digraphs | GNUMode | HexFloat)
-LANGSTANDARD(gnu1x, "gnu1x",
- "ISO C 2011 with GNU extensions",
- LineComment | C99 | C11 | Digraphs | GNUMode | HexFloat)
-
-// C++ modes
-LANGSTANDARD(cxx98, "c++98",
- "ISO C++ 1998 with amendments",
- LineComment | CPlusPlus | Digraphs)
-LANGSTANDARD(cxx03, "c++03",
- "ISO C++ 1998 with amendments",
- LineComment | CPlusPlus | Digraphs)
-LANGSTANDARD(gnucxx98, "gnu++98",
- "ISO C++ 1998 with amendments and GNU extensions",
- LineComment | CPlusPlus | Digraphs | GNUMode)
-
-LANGSTANDARD(cxx0x, "c++0x",
- "ISO C++ 2011 with amendments",
- LineComment | CPlusPlus | CPlusPlus11 | Digraphs)
-LANGSTANDARD(cxx11, "c++11",
- "ISO C++ 2011 with amendments",
- LineComment | CPlusPlus | CPlusPlus11 | Digraphs)
-LANGSTANDARD(gnucxx0x, "gnu++0x",
- "ISO C++ 2011 with amendments and GNU extensions",
- LineComment | CPlusPlus | CPlusPlus11 | Digraphs | GNUMode)
-LANGSTANDARD(gnucxx11, "gnu++11",
- "ISO C++ 2011 with amendments and GNU extensions",
- LineComment | CPlusPlus | CPlusPlus11 | Digraphs | GNUMode)
-
-LANGSTANDARD(cxx1y, "c++1y",
- "ISO C++ 2014 with amendments",
- LineComment | CPlusPlus | CPlusPlus11 | CPlusPlus14 | Digraphs)
-LANGSTANDARD(cxx14, "c++14",
- "ISO C++ 2014 with amendments",
- LineComment | CPlusPlus | CPlusPlus11 | CPlusPlus14 | Digraphs)
-LANGSTANDARD(gnucxx1y, "gnu++1y",
- "ISO C++ 2014 with amendments and GNU extensions",
- LineComment | CPlusPlus | CPlusPlus11 | CPlusPlus14 | Digraphs |
- GNUMode)
-LANGSTANDARD(gnucxx14, "gnu++14",
- "ISO C++ 2014 with amendments and GNU extensions",
- LineComment | CPlusPlus | CPlusPlus11 | CPlusPlus14 | Digraphs |
- GNUMode)
-
-LANGSTANDARD(cxx1z, "c++1z",
- "Working draft for ISO C++ 2017",
- LineComment | CPlusPlus | CPlusPlus11 | CPlusPlus14 | CPlusPlus1z |
- Digraphs)
-LANGSTANDARD(gnucxx1z, "gnu++1z",
- "Working draft for ISO C++ 2017 with GNU extensions",
- LineComment | CPlusPlus | CPlusPlus11 | CPlusPlus14 | CPlusPlus1z |
- Digraphs | GNUMode)
-
-// OpenCL
-LANGSTANDARD(opencl, "cl",
- "OpenCL 1.0",
- LineComment | C99 | Digraphs | HexFloat)
-LANGSTANDARD(opencl11, "CL1.1",
- "OpenCL 1.1",
- LineComment | C99 | Digraphs | HexFloat)
-LANGSTANDARD(opencl12, "CL1.2",
- "OpenCL 1.2",
- LineComment | C99 | Digraphs | HexFloat)
-LANGSTANDARD(opencl20, "CL2.0",
- "OpenCL 2.0",
- LineComment | C99 | Digraphs | HexFloat)
-
-// CUDA
-LANGSTANDARD(cuda, "cuda",
- "NVIDIA CUDA(tm)",
- LineComment | CPlusPlus | Digraphs)
-
-#undef LANGSTANDARD
diff --git a/include/clang/Frontend/LayoutOverrideSource.h b/include/clang/Frontend/LayoutOverrideSource.h
deleted file mode 100644
index 16d032b..0000000
--- a/include/clang/Frontend/LayoutOverrideSource.h
+++ /dev/null
@@ -1,63 +0,0 @@
-//===--- LayoutOverrideSource.h --Override Record Layouts -----------------===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef LLVM_CLANG_FRONTEND_LAYOUTOVERRIDESOURCE_H
-#define LLVM_CLANG_FRONTEND_LAYOUTOVERRIDESOURCE_H
-
-#include "clang/AST/ExternalASTSource.h"
-#include "clang/Basic/LLVM.h"
-#include "llvm/ADT/StringMap.h"
-#include "llvm/ADT/StringRef.h"
-
-namespace clang {
- /// \brief An external AST source that overrides the layout of
- /// a specified set of record types.
- ///
- /// This class is used only for testing the ability of external AST sources
- /// to override the layout of record types. Its input is the output format
- /// of the command-line argument -fdump-record-layouts.
- class LayoutOverrideSource : public ExternalASTSource {
- /// \brief The layout of a given record.
- struct Layout {
- /// \brief The size of the record.
- uint64_t Size;
-
- /// \brief The alignment of the record.
- uint64_t Align;
-
- /// \brief The offsets of the fields, in source order.
- SmallVector<uint64_t, 8> FieldOffsets;
- };
-
- /// \brief The set of layouts that will be overridden.
- llvm::StringMap<Layout> Layouts;
-
- public:
- /// \brief Create a new AST source that overrides the layout of some
- /// set of record types.
- ///
- /// The file is the result of passing -fdump-record-layouts to a file.
- explicit LayoutOverrideSource(StringRef Filename);
-
- /// \brief If this particular record type has an overridden layout,
- /// return that layout.
- bool
- layoutRecordType(const RecordDecl *Record,
- uint64_t &Size, uint64_t &Alignment,
- llvm::DenseMap<const FieldDecl *, uint64_t> &FieldOffsets,
- llvm::DenseMap<const CXXRecordDecl *, CharUnits> &BaseOffsets,
- llvm::DenseMap<const CXXRecordDecl *,
- CharUnits> &VirtualBaseOffsets) override;
-
- /// \brief Dump the overridden layouts.
- void dump();
- };
-}
-
-#endif
diff --git a/include/clang/Frontend/LogDiagnosticPrinter.h b/include/clang/Frontend/LogDiagnosticPrinter.h
deleted file mode 100644
index 98adf65..0000000
--- a/include/clang/Frontend/LogDiagnosticPrinter.h
+++ /dev/null
@@ -1,85 +0,0 @@
-//===--- LogDiagnosticPrinter.h - Log Diagnostic Client ---------*- 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_FRONTEND_LOGDIAGNOSTICPRINTER_H
-#define LLVM_CLANG_FRONTEND_LOGDIAGNOSTICPRINTER_H
-
-#include "clang/Basic/Diagnostic.h"
-#include "clang/Basic/SourceLocation.h"
-#include "llvm/ADT/SmallVector.h"
-#include "llvm/ADT/StringRef.h"
-
-namespace clang {
-class DiagnosticOptions;
-class LangOptions;
-
-class LogDiagnosticPrinter : public DiagnosticConsumer {
- struct DiagEntry {
- /// The primary message line of the diagnostic.
- std::string Message;
-
- /// The source file name, if available.
- std::string Filename;
-
- /// The source file line number, if available.
- unsigned Line;
-
- /// The source file column number, if available.
- unsigned Column;
-
- /// The ID of the diagnostic.
- unsigned DiagnosticID;
-
- /// The Option Flag for the diagnostic
- std::string WarningOption;
-
- /// The level of the diagnostic.
- DiagnosticsEngine::Level DiagnosticLevel;
- };
-
- void EmitDiagEntry(llvm::raw_ostream &OS,
- const LogDiagnosticPrinter::DiagEntry &DE);
-
- // Conditional ownership (when StreamOwner is non-null, it's keeping OS
- // alive). We might want to replace this with a wrapper for conditional
- // ownership eventually - it seems to pop up often enough.
- raw_ostream &OS;
- std::unique_ptr<raw_ostream> StreamOwner;
- const LangOptions *LangOpts;
- IntrusiveRefCntPtr<DiagnosticOptions> DiagOpts;
-
- SourceLocation LastWarningLoc;
- FullSourceLoc LastLoc;
-
- SmallVector<DiagEntry, 8> Entries;
-
- std::string MainFilename;
- std::string DwarfDebugFlags;
-
-public:
- LogDiagnosticPrinter(raw_ostream &OS, DiagnosticOptions *Diags,
- std::unique_ptr<raw_ostream> StreamOwner);
-
- void setDwarfDebugFlags(StringRef Value) {
- DwarfDebugFlags = Value;
- }
-
- void BeginSourceFile(const LangOptions &LO, const Preprocessor *PP) override {
- LangOpts = &LO;
- }
-
- void EndSourceFile() override;
-
- void HandleDiagnostic(DiagnosticsEngine::Level DiagLevel,
- const Diagnostic &Info) override;
-};
-
-} // end namespace clang
-
-#endif
diff --git a/include/clang/Frontend/MigratorOptions.h b/include/clang/Frontend/MigratorOptions.h
deleted file mode 100644
index 8eb71b1..0000000
--- a/include/clang/Frontend/MigratorOptions.h
+++ /dev/null
@@ -1,31 +0,0 @@
-//===--- MigratorOptions.h - MigratorOptions Options ------------*- C++ -*-===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-//
-// This header contains the structures necessary for a front-end to specify
-// various migration analysis.
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef LLVM_CLANG_FRONTEND_MIGRATOROPTIONS_H
-#define LLVM_CLANG_FRONTEND_MIGRATOROPTIONS_H
-
-namespace clang {
-
-class MigratorOptions {
-public:
- unsigned NoNSAllocReallocError : 1;
- unsigned NoFinalizeRemoval : 1;
- MigratorOptions() {
- NoNSAllocReallocError = 0;
- NoFinalizeRemoval = 0;
- }
-};
-
-}
-#endif
diff --git a/include/clang/Frontend/MultiplexConsumer.h b/include/clang/Frontend/MultiplexConsumer.h
deleted file mode 100644
index 873af03..0000000
--- a/include/clang/Frontend/MultiplexConsumer.h
+++ /dev/null
@@ -1,69 +0,0 @@
-//===-- MultiplexConsumer.h - AST Consumer for PCH Generation ---*- C++ -*-===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-//
-// This file declares the MultiplexConsumer class, which can be used to
-// multiplex ASTConsumer and SemaConsumer messages to many consumers.
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef LLVM_CLANG_FRONTEND_MULTIPLEXCONSUMER_H
-#define LLVM_CLANG_FRONTEND_MULTIPLEXCONSUMER_H
-
-#include "clang/Basic/LLVM.h"
-#include "clang/Sema/SemaConsumer.h"
-#include <memory>
-#include <vector>
-
-namespace clang {
-
-class MultiplexASTMutationListener;
-class MultiplexASTDeserializationListener;
-
-// Has a list of ASTConsumers and calls each of them. Owns its children.
-class MultiplexConsumer : public SemaConsumer {
-public:
- // Takes ownership of the pointers in C.
- MultiplexConsumer(std::vector<std::unique_ptr<ASTConsumer>> C);
- ~MultiplexConsumer() override;
-
- // ASTConsumer
- void Initialize(ASTContext &Context) override;
- void HandleCXXStaticMemberVarInstantiation(VarDecl *VD) override;
- bool HandleTopLevelDecl(DeclGroupRef D) override;
- void HandleInlineMethodDefinition(CXXMethodDecl *D) override;
- void HandleInterestingDecl(DeclGroupRef D) override;
- void HandleTranslationUnit(ASTContext &Ctx) override;
- void HandleTagDeclDefinition(TagDecl *D) override;
- void HandleTagDeclRequiredDefinition(const TagDecl *D) override;
- void HandleCXXImplicitFunctionInstantiation(FunctionDecl *D) override;
- void HandleTopLevelDeclInObjCContainer(DeclGroupRef D) override;
- void HandleImplicitImportDecl(ImportDecl *D) override;
- void HandleLinkerOptionPragma(llvm::StringRef Opts) override;
- void HandleDetectMismatch(llvm::StringRef Name,
- llvm::StringRef Value) override;
- void HandleDependentLibrary(llvm::StringRef Lib) override;
- void CompleteTentativeDefinition(VarDecl *D) override;
- void HandleVTable(CXXRecordDecl *RD) override;
- ASTMutationListener *GetASTMutationListener() override;
- ASTDeserializationListener *GetASTDeserializationListener() override;
- void PrintStats() override;
-
- // SemaConsumer
- void InitializeSema(Sema &S) override;
- void ForgetSema() override;
-
-private:
- std::vector<std::unique_ptr<ASTConsumer>> Consumers; // Owns these.
- std::unique_ptr<MultiplexASTMutationListener> MutationListener;
- std::unique_ptr<MultiplexASTDeserializationListener> DeserializationListener;
-};
-
-} // end namespace clang
-
-#endif
diff --git a/include/clang/Frontend/PCHContainerOperations.h b/include/clang/Frontend/PCHContainerOperations.h
deleted file mode 100644
index 67c36cf..0000000
--- a/include/clang/Frontend/PCHContainerOperations.h
+++ /dev/null
@@ -1,118 +0,0 @@
-//===--- Frontend/PCHContainerOperations.h - PCH Containers -----*- 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_PCH_CONTAINER_OPERATIONS_H
-#define LLVM_CLANG_PCH_CONTAINER_OPERATIONS_H
-
-#include "llvm/ADT/SmallVector.h"
-#include "llvm/ADT/StringMap.h"
-#include "llvm/Support/MemoryBuffer.h"
-#include <memory>
-
-namespace llvm {
-class raw_pwrite_stream;
-class BitstreamReader;
-}
-
-using llvm::StringRef;
-
-namespace clang {
-
-class ASTConsumer;
-class CodeGenOptions;
-class DiagnosticsEngine;
-class CompilerInstance;
-
-struct PCHBuffer {
- uint64_t Signature;
- llvm::SmallVector<char, 0> Data;
- bool IsComplete;
-};
-
-/// This abstract interface provides operations for creating
-/// containers for serialized ASTs (precompiled headers and clang
-/// modules).
-class PCHContainerWriter {
-public:
- virtual ~PCHContainerWriter() = 0;
- virtual StringRef getFormat() const = 0;
-
- /// Return an ASTConsumer that can be chained with a
- /// PCHGenerator that produces a wrapper file format containing a
- /// serialized AST bitstream.
- virtual std::unique_ptr<ASTConsumer> CreatePCHContainerGenerator(
- CompilerInstance &CI, const std::string &MainFileName,
- const std::string &OutputFileName, llvm::raw_pwrite_stream *OS,
- std::shared_ptr<PCHBuffer> Buffer) const = 0;
-};
-
-/// This abstract interface provides operations for unwrapping
-/// containers for serialized ASTs (precompiled headers and clang
-/// modules).
-class PCHContainerReader {
-public:
- virtual ~PCHContainerReader() = 0;
- /// Equivalent to the format passed to -fmodule-format=
- virtual StringRef getFormat() const = 0;
-
- /// Initialize an llvm::BitstreamReader with the serialized AST inside
- /// the PCH container Buffer.
- virtual void ExtractPCH(llvm::MemoryBufferRef Buffer,
- llvm::BitstreamReader &StreamFile) const = 0;
-};
-
-/// Implements write operations for a raw pass-through PCH container.
-class RawPCHContainerWriter : public PCHContainerWriter {
- StringRef getFormat() const override { return "raw"; }
-
- /// Return an ASTConsumer that can be chained with a
- /// PCHGenerator that writes the module to a flat file.
- std::unique_ptr<ASTConsumer> CreatePCHContainerGenerator(
- CompilerInstance &CI, const std::string &MainFileName,
- const std::string &OutputFileName, llvm::raw_pwrite_stream *OS,
- std::shared_ptr<PCHBuffer> Buffer) const override;
-};
-
-/// Implements read operations for a raw pass-through PCH container.
-class RawPCHContainerReader : public PCHContainerReader {
- StringRef getFormat() const override { return "raw"; }
-
- /// Initialize an llvm::BitstreamReader with Buffer.
- void ExtractPCH(llvm::MemoryBufferRef Buffer,
- llvm::BitstreamReader &StreamFile) const override;
-};
-
-/// A registry of PCHContainerWriter and -Reader objects for different formats.
-class PCHContainerOperations {
- llvm::StringMap<std::unique_ptr<PCHContainerWriter>> Writers;
- llvm::StringMap<std::unique_ptr<PCHContainerReader>> Readers;
-public:
- /// Automatically registers a RawPCHContainerWriter and
- /// RawPCHContainerReader.
- PCHContainerOperations();
- void registerWriter(std::unique_ptr<PCHContainerWriter> Writer) {
- Writers[Writer->getFormat()] = std::move(Writer);
- }
- void registerReader(std::unique_ptr<PCHContainerReader> Reader) {
- Readers[Reader->getFormat()] = std::move(Reader);
- }
- const PCHContainerWriter *getWriterOrNull(StringRef Format) {
- return Writers[Format].get();
- }
- const PCHContainerReader *getReaderOrNull(StringRef Format) {
- return Readers[Format].get();
- }
- const PCHContainerReader &getRawReader() {
- return *getReaderOrNull("raw");
- }
-};
-
-}
-
-#endif
diff --git a/include/clang/Frontend/PreprocessorOutputOptions.h b/include/clang/Frontend/PreprocessorOutputOptions.h
deleted file mode 100644
index f86c490..0000000
--- a/include/clang/Frontend/PreprocessorOutputOptions.h
+++ /dev/null
@@ -1,41 +0,0 @@
-//===--- PreprocessorOutputOptions.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_FRONTEND_PREPROCESSOROUTPUTOPTIONS_H
-#define LLVM_CLANG_FRONTEND_PREPROCESSOROUTPUTOPTIONS_H
-
-namespace clang {
-
-/// PreprocessorOutputOptions - Options for controlling the C preprocessor
-/// output (e.g., -E).
-class PreprocessorOutputOptions {
-public:
- unsigned ShowCPP : 1; ///< Print normal preprocessed output.
- unsigned ShowComments : 1; ///< Show comments.
- unsigned ShowLineMarkers : 1; ///< Show \#line markers.
- unsigned UseLineDirectives : 1; ///< Use \#line instead of GCC-style \# N.
- unsigned ShowMacroComments : 1; ///< Show comments, even in macros.
- unsigned ShowMacros : 1; ///< Print macro definitions.
- unsigned RewriteIncludes : 1; ///< Preprocess include directives only.
-
-public:
- PreprocessorOutputOptions() {
- ShowCPP = 0;
- ShowComments = 0;
- ShowLineMarkers = 1;
- UseLineDirectives = 0;
- ShowMacroComments = 0;
- ShowMacros = 0;
- RewriteIncludes = 0;
- }
-};
-
-} // end namespace clang
-
-#endif
diff --git a/include/clang/Frontend/SerializedDiagnosticPrinter.h b/include/clang/Frontend/SerializedDiagnosticPrinter.h
deleted file mode 100644
index 4c57e9d..0000000
--- a/include/clang/Frontend/SerializedDiagnosticPrinter.h
+++ /dev/null
@@ -1,43 +0,0 @@
-//===--- SerializedDiagnosticPrinter.h - Serializer for diagnostics -------===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef LLVM_CLANG_FRONTEND_SERIALIZEDDIAGNOSTICPRINTER_H
-#define LLVM_CLANG_FRONTEND_SERIALIZEDDIAGNOSTICPRINTER_H
-
-#include "clang/Basic/LLVM.h"
-#include "clang/Frontend/SerializedDiagnostics.h"
-#include "llvm/Bitcode/BitstreamWriter.h"
-
-namespace llvm {
-class raw_ostream;
-}
-
-namespace clang {
-class DiagnosticConsumer;
-class DiagnosticsEngine;
-class DiagnosticOptions;
-
-namespace serialized_diags {
-
-/// \brief Returns a DiagnosticConsumer that serializes diagnostics to
-/// a bitcode file.
-///
-/// The created DiagnosticConsumer is designed for quick and lightweight
-/// transfer of of diagnostics to the enclosing build system (e.g., an IDE).
-/// This allows wrapper tools for Clang to get diagnostics from Clang
-/// (via libclang) without needing to parse Clang's command line output.
-///
-std::unique_ptr<DiagnosticConsumer> create(StringRef OutputFile,
- DiagnosticOptions *Diags,
- bool MergeChildRecords = false);
-
-} // end serialized_diags namespace
-} // end clang namespace
-
-#endif
diff --git a/include/clang/Frontend/SerializedDiagnosticReader.h b/include/clang/Frontend/SerializedDiagnosticReader.h
deleted file mode 100644
index 3db362b..0000000
--- a/include/clang/Frontend/SerializedDiagnosticReader.h
+++ /dev/null
@@ -1,131 +0,0 @@
-//===--- SerializedDiagnosticReader.h - Reads diagnostics -------*- 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_FRONTEND_SERIALIZED_DIAGNOSTIC_READER_H_
-#define LLVM_CLANG_FRONTEND_SERIALIZED_DIAGNOSTIC_READER_H_
-
-#include "clang/Basic/LLVM.h"
-#include "llvm/ADT/ArrayRef.h"
-#include "llvm/Bitcode/BitstreamReader.h"
-#include "llvm/Support/ErrorOr.h"
-
-namespace clang {
-namespace serialized_diags {
-
-enum class SDError {
- CouldNotLoad = 1,
- InvalidSignature,
- InvalidDiagnostics,
- MalformedTopLevelBlock,
- MalformedSubBlock,
- MalformedBlockInfoBlock,
- MalformedMetadataBlock,
- MalformedDiagnosticBlock,
- MalformedDiagnosticRecord,
- MissingVersion,
- VersionMismatch,
- UnsupportedConstruct,
- /// A generic error for subclass handlers that don't want or need to define
- /// their own error_category.
- HandlerFailed
-};
-
-const std::error_category &SDErrorCategory();
-
-inline std::error_code make_error_code(SDError E) {
- return std::error_code(static_cast<int>(E), SDErrorCategory());
-}
-
-/// \brief A location that is represented in the serialized diagnostics.
-struct Location {
- unsigned FileID;
- unsigned Line;
- unsigned Col;
- unsigned Offset;
- Location(unsigned FileID, unsigned Line, unsigned Col, unsigned Offset)
- : FileID(FileID), Line(Line), Col(Col), Offset(Offset) {}
-};
-
-/// \brief A base class that handles reading serialized diagnostics from a file.
-///
-/// Subclasses should override the visit* methods with their logic for handling
-/// the various constructs that are found in serialized diagnostics.
-class SerializedDiagnosticReader {
-public:
- SerializedDiagnosticReader() {}
- virtual ~SerializedDiagnosticReader() {}
-
- /// \brief Read the diagnostics in \c File
- std::error_code readDiagnostics(StringRef File);
-
-private:
- enum class Cursor;
-
- /// \brief Read to the next record or block to process.
- llvm::ErrorOr<Cursor> skipUntilRecordOrBlock(llvm::BitstreamCursor &Stream,
- unsigned &BlockOrRecordId);
-
- /// \brief Read a metadata block from \c Stream.
- std::error_code readMetaBlock(llvm::BitstreamCursor &Stream);
-
- /// \brief Read a diagnostic block from \c Stream.
- std::error_code readDiagnosticBlock(llvm::BitstreamCursor &Stream);
-
-protected:
- /// \brief Visit the start of a diagnostic block.
- virtual std::error_code visitStartOfDiagnostic() {
- return std::error_code();
- }
- /// \brief Visit the end of a diagnostic block.
- virtual std::error_code visitEndOfDiagnostic() { return std::error_code(); }
- /// \brief Visit a category. This associates the category \c ID to a \c Name.
- virtual std::error_code visitCategoryRecord(unsigned ID, StringRef Name) {
- return std::error_code();
- }
- /// \brief Visit a flag. This associates the flag's \c ID to a \c Name.
- virtual std::error_code visitDiagFlagRecord(unsigned ID, StringRef Name) {
- return std::error_code();
- }
- /// \brief Visit a diagnostic.
- virtual std::error_code
- visitDiagnosticRecord(unsigned Severity, const Location &Location,
- unsigned Category, unsigned Flag, StringRef Message) {
- return std::error_code();
- }
- /// \brief Visit a filename. This associates the file's \c ID to a \c Name.
- virtual std::error_code visitFilenameRecord(unsigned ID, unsigned Size,
- unsigned Timestamp,
- StringRef Name) {
- return std::error_code();
- }
- /// \brief Visit a fixit hint.
- virtual std::error_code
- visitFixitRecord(const Location &Start, const Location &End, StringRef Text) {
- return std::error_code();
- }
- /// \brief Visit a source range.
- virtual std::error_code visitSourceRangeRecord(const Location &Start,
- const Location &End) {
- return std::error_code();
- }
- /// \brief Visit the version of the set of diagnostics.
- virtual std::error_code visitVersionRecord(unsigned Version) {
- return std::error_code();
- }
-};
-
-} // end serialized_diags namespace
-} // end clang namespace
-
-namespace std {
-template <>
-struct is_error_code_enum<clang::serialized_diags::SDError> : std::true_type {};
-}
-
-#endif
diff --git a/include/clang/Frontend/SerializedDiagnostics.h b/include/clang/Frontend/SerializedDiagnostics.h
deleted file mode 100644
index 2032cd3..0000000
--- a/include/clang/Frontend/SerializedDiagnostics.h
+++ /dev/null
@@ -1,59 +0,0 @@
-//===--- SerializedDiagnostics.h - Common data for serialized diagnostics -===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef LLVM_CLANG_FRONTEND_SERIALIZE_DIAGNOSTICS_H_
-#define LLVM_CLANG_FRONTEND_SERIALIZE_DIAGNOSTICS_H_
-
-#include "llvm/Bitcode/BitCodes.h"
-
-namespace clang {
-namespace serialized_diags {
-
-enum BlockIDs {
- /// \brief A top-level block which represents any meta data associated
- /// with the diagostics, including versioning of the format.
- BLOCK_META = llvm::bitc::FIRST_APPLICATION_BLOCKID,
-
- /// \brief The this block acts as a container for all the information
- /// for a specific diagnostic.
- BLOCK_DIAG
-};
-
-enum RecordIDs {
- RECORD_VERSION = 1,
- RECORD_DIAG,
- RECORD_SOURCE_RANGE,
- RECORD_DIAG_FLAG,
- RECORD_CATEGORY,
- RECORD_FILENAME,
- RECORD_FIXIT,
- RECORD_FIRST = RECORD_VERSION,
- RECORD_LAST = RECORD_FIXIT
-};
-
-/// \brief A stable version of DiagnosticIDs::Level.
-///
-/// Do not change the order of values in this enum, and please increment the
-/// serialized diagnostics version number when you add to it.
-enum Level {
- Ignored = 0,
- Note,
- Warning,
- Error,
- Fatal,
- Remark
-};
-
-/// \brief The serialized diagnostics version number.
-enum { VersionNumber = 2 };
-
-} // end serialized_diags namespace
-} // end clang namespace
-
-#endif
diff --git a/include/clang/Frontend/TextDiagnostic.h b/include/clang/Frontend/TextDiagnostic.h
deleted file mode 100644
index d41f15a..0000000
--- a/include/clang/Frontend/TextDiagnostic.h
+++ /dev/null
@@ -1,122 +0,0 @@
-//===--- TextDiagnostic.h - Text Diagnostic Pretty-Printing -----*- C++ -*-===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-//
-// This is a utility class that provides support for textual pretty-printing of
-// diagnostics. It is used to implement the different code paths which require
-// such functionality in a consistent way.
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef LLVM_CLANG_FRONTEND_TEXTDIAGNOSTIC_H
-#define LLVM_CLANG_FRONTEND_TEXTDIAGNOSTIC_H
-
-#include "clang/Frontend/DiagnosticRenderer.h"
-
-namespace clang {
-
-/// \brief Class to encapsulate the logic for formatting and printing a textual
-/// diagnostic message.
-///
-/// This class provides an interface for building and emitting a textual
-/// diagnostic, including all of the macro backtraces, caret diagnostics, FixIt
-/// Hints, and code snippets. In the presence of macros this involves
-/// a recursive process, synthesizing notes for each macro expansion.
-///
-/// The purpose of this class is to isolate the implementation of printing
-/// beautiful text diagnostics from any particular interfaces. The Clang
-/// DiagnosticClient is implemented through this class as is diagnostic
-/// printing coming out of libclang.
-class TextDiagnostic : public DiagnosticRenderer {
- raw_ostream &OS;
-
-public:
- TextDiagnostic(raw_ostream &OS,
- const LangOptions &LangOpts,
- DiagnosticOptions *DiagOpts);
-
- ~TextDiagnostic() override;
-
- /// \brief Print the diagonstic level to a raw_ostream.
- ///
- /// This is a static helper that handles colorizing the level and formatting
- /// it into an arbitrary output stream. This is used internally by the
- /// TextDiagnostic emission code, but it can also be used directly by
- /// consumers that don't have a source manager or other state that the full
- /// TextDiagnostic logic requires.
- static void printDiagnosticLevel(raw_ostream &OS,
- DiagnosticsEngine::Level Level,
- bool ShowColors,
- bool CLFallbackMode = false);
-
- /// \brief Pretty-print a diagnostic message to a raw_ostream.
- ///
- /// This is a static helper to handle the line wrapping, colorizing, and
- /// rendering of a diagnostic message to a particular ostream. It is
- /// publicly visible so that clients which do not have sufficient state to
- /// build a complete TextDiagnostic object can still get consistent
- /// formatting of their diagnostic messages.
- ///
- /// \param OS Where the message is printed
- /// \param IsSupplemental true if this is a continuation note diagnostic
- /// \param Message The text actually printed
- /// \param CurrentColumn The starting column of the first line, accounting
- /// for any prefix.
- /// \param Columns The number of columns to use in line-wrapping, 0 disables
- /// all line-wrapping.
- /// \param ShowColors Enable colorizing of the message.
- static void printDiagnosticMessage(raw_ostream &OS, bool IsSupplemental,
- StringRef Message, unsigned CurrentColumn,
- unsigned Columns, bool ShowColors);
-
-protected:
- void emitDiagnosticMessage(SourceLocation Loc,PresumedLoc PLoc,
- DiagnosticsEngine::Level Level,
- StringRef Message,
- ArrayRef<CharSourceRange> Ranges,
- const SourceManager *SM,
- DiagOrStoredDiag D) override;
-
- void emitDiagnosticLoc(SourceLocation Loc, PresumedLoc PLoc,
- DiagnosticsEngine::Level Level,
- ArrayRef<CharSourceRange> Ranges,
- const SourceManager &SM) override;
-
- void emitCodeContext(SourceLocation Loc,
- DiagnosticsEngine::Level Level,
- SmallVectorImpl<CharSourceRange>& Ranges,
- ArrayRef<FixItHint> Hints,
- const SourceManager &SM) override {
- emitSnippetAndCaret(Loc, Level, Ranges, Hints, SM);
- }
-
- void emitIncludeLocation(SourceLocation Loc, PresumedLoc PLoc,
- const SourceManager &SM) override;
-
- void emitImportLocation(SourceLocation Loc, PresumedLoc PLoc,
- StringRef ModuleName,
- const SourceManager &SM) override;
-
- void emitBuildingModuleLocation(SourceLocation Loc, PresumedLoc PLoc,
- StringRef ModuleName,
- const SourceManager &SM) override;
-
-private:
- void emitSnippetAndCaret(SourceLocation Loc, DiagnosticsEngine::Level Level,
- SmallVectorImpl<CharSourceRange>& Ranges,
- ArrayRef<FixItHint> Hints,
- const SourceManager &SM);
-
- void emitSnippet(StringRef SourceLine);
-
- void emitParseableFixits(ArrayRef<FixItHint> Hints, const SourceManager &SM);
-};
-
-} // end namespace clang
-
-#endif
diff --git a/include/clang/Frontend/TextDiagnosticBuffer.h b/include/clang/Frontend/TextDiagnosticBuffer.h
deleted file mode 100644
index 3bcf824..0000000
--- a/include/clang/Frontend/TextDiagnosticBuffer.h
+++ /dev/null
@@ -1,55 +0,0 @@
-//===--- TextDiagnosticBuffer.h - Buffer Text Diagnostics -------*- C++ -*-===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-//
-// This is a concrete diagnostic client, which buffers the diagnostic messages.
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef LLVM_CLANG_FRONTEND_TEXTDIAGNOSTICBUFFER_H
-#define LLVM_CLANG_FRONTEND_TEXTDIAGNOSTICBUFFER_H
-
-#include "clang/Basic/Diagnostic.h"
-#include <vector>
-
-namespace clang {
-
-class Preprocessor;
-class SourceManager;
-
-class TextDiagnosticBuffer : public DiagnosticConsumer {
-public:
- typedef std::vector<std::pair<SourceLocation, std::string> > DiagList;
- typedef DiagList::iterator iterator;
- typedef DiagList::const_iterator const_iterator;
-private:
- DiagList Errors, Warnings, Remarks, Notes;
-public:
- const_iterator err_begin() const { return Errors.begin(); }
- const_iterator err_end() const { return Errors.end(); }
-
- const_iterator warn_begin() const { return Warnings.begin(); }
- const_iterator warn_end() const { return Warnings.end(); }
-
- const_iterator remark_begin() const { return Remarks.begin(); }
- const_iterator remark_end() const { return Remarks.end(); }
-
- const_iterator note_begin() const { return Notes.begin(); }
- const_iterator note_end() const { return Notes.end(); }
-
- void HandleDiagnostic(DiagnosticsEngine::Level DiagLevel,
- const Diagnostic &Info) override;
-
- /// FlushDiagnostics - Flush the buffered diagnostics to an given
- /// diagnostic engine.
- void FlushDiagnostics(DiagnosticsEngine &Diags) const;
-};
-
-} // end namspace clang
-
-#endif
diff --git a/include/clang/Frontend/TextDiagnosticPrinter.h b/include/clang/Frontend/TextDiagnosticPrinter.h
deleted file mode 100644
index 04a5705..0000000
--- a/include/clang/Frontend/TextDiagnosticPrinter.h
+++ /dev/null
@@ -1,58 +0,0 @@
-//===--- TextDiagnosticPrinter.h - Text Diagnostic Client -------*- C++ -*-===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-//
-// This is a concrete diagnostic client, which prints the diagnostics to
-// standard error.
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef LLVM_CLANG_FRONTEND_TEXTDIAGNOSTICPRINTER_H
-#define LLVM_CLANG_FRONTEND_TEXTDIAGNOSTICPRINTER_H
-
-#include "clang/Basic/Diagnostic.h"
-#include "clang/Basic/LLVM.h"
-#include "llvm/ADT/IntrusiveRefCntPtr.h"
-#include <memory>
-
-namespace clang {
-class DiagnosticOptions;
-class LangOptions;
-class TextDiagnostic;
-
-class TextDiagnosticPrinter : public DiagnosticConsumer {
- raw_ostream &OS;
- IntrusiveRefCntPtr<DiagnosticOptions> DiagOpts;
-
- /// \brief Handle to the currently active text diagnostic emitter.
- std::unique_ptr<TextDiagnostic> TextDiag;
-
- /// A string to prefix to error messages.
- std::string Prefix;
-
- unsigned OwnsOutputStream : 1;
-
-public:
- TextDiagnosticPrinter(raw_ostream &os, DiagnosticOptions *diags,
- bool OwnsOutputStream = false);
- ~TextDiagnosticPrinter() override;
-
- /// setPrefix - Set the diagnostic printer prefix string, which will be
- /// printed at the start of any diagnostics. If empty, no prefix string is
- /// used.
- void setPrefix(std::string Value) { Prefix = Value; }
-
- void BeginSourceFile(const LangOptions &LO, const Preprocessor *PP) override;
- void EndSourceFile() override;
- void HandleDiagnostic(DiagnosticsEngine::Level Level,
- const Diagnostic &Info) override;
-};
-
-} // end namespace clang
-
-#endif
diff --git a/include/clang/Frontend/Utils.h b/include/clang/Frontend/Utils.h
deleted file mode 100644
index a5f667e..0000000
--- a/include/clang/Frontend/Utils.h
+++ /dev/null
@@ -1,220 +0,0 @@
-//===--- Utils.h - Misc utilities for the front-end -------------*- C++ -*-===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-//
-// This header contains miscellaneous utilities for various front-end actions.
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef LLVM_CLANG_FRONTEND_UTILS_H
-#define LLVM_CLANG_FRONTEND_UTILS_H
-
-#include "clang/Basic/Diagnostic.h"
-#include "clang/Basic/VirtualFileSystem.h"
-#include "llvm/ADT/IntrusiveRefCntPtr.h"
-#include "llvm/ADT/StringRef.h"
-#include "llvm/ADT/StringSet.h"
-#include "llvm/Option/OptSpecifier.h"
-
-namespace llvm {
-class raw_fd_ostream;
-class Triple;
-
-namespace opt {
-class ArgList;
-}
-}
-
-namespace clang {
-class ASTConsumer;
-class ASTReader;
-class CompilerInstance;
-class CompilerInvocation;
-class Decl;
-class DependencyOutputOptions;
-class DiagnosticsEngine;
-class DiagnosticOptions;
-class ExternalSemaSource;
-class FileManager;
-class HeaderSearch;
-class HeaderSearchOptions;
-class IdentifierTable;
-class LangOptions;
-class PCHContainerReader;
-class Preprocessor;
-class PreprocessorOptions;
-class PreprocessorOutputOptions;
-class SourceManager;
-class Stmt;
-class TargetInfo;
-class FrontendOptions;
-
-/// Apply the header search options to get given HeaderSearch object.
-void ApplyHeaderSearchOptions(HeaderSearch &HS,
- const HeaderSearchOptions &HSOpts,
- const LangOptions &Lang,
- const llvm::Triple &triple);
-
-/// InitializePreprocessor - Initialize the preprocessor getting it and the
-/// environment ready to process a single file.
-void InitializePreprocessor(Preprocessor &PP, const PreprocessorOptions &PPOpts,
- const PCHContainerReader &PCHContainerRdr,
- const FrontendOptions &FEOpts);
-
-/// DoPrintPreprocessedInput - Implement -E mode.
-void DoPrintPreprocessedInput(Preprocessor &PP, raw_ostream* OS,
- const PreprocessorOutputOptions &Opts);
-
-/// An interface for collecting the dependencies of a compilation. Users should
-/// use \c attachToPreprocessor and \c attachToASTReader to get all of the
-/// dependencies.
-// FIXME: Migrate DependencyFileGen, DependencyGraphGen, ModuleDepCollectory to
-// use this interface.
-class DependencyCollector {
-public:
- void attachToPreprocessor(Preprocessor &PP);
- void attachToASTReader(ASTReader &R);
- llvm::ArrayRef<std::string> getDependencies() const { return Dependencies; }
-
- /// Called when a new file is seen. Return true if \p Filename should be added
- /// to the list of dependencies.
- ///
- /// The default implementation ignores <built-in> and system files.
- virtual bool sawDependency(StringRef Filename, bool FromModule,
- bool IsSystem, bool IsModuleFile, bool IsMissing);
- /// Called when the end of the main file is reached.
- virtual void finishedMainFile() { }
- /// Return true if system files should be passed to sawDependency().
- virtual bool needSystemDependencies() { return false; }
- virtual ~DependencyCollector();
-
-public: // implementation detail
- /// Add a dependency \p Filename if it has not been seen before and
- /// sawDependency() returns true.
- void maybeAddDependency(StringRef Filename, bool FromModule, bool IsSystem,
- bool IsModuleFile, bool IsMissing);
-private:
- llvm::StringSet<> Seen;
- std::vector<std::string> Dependencies;
-};
-
-/// Builds a depdenency file when attached to a Preprocessor (for includes) and
-/// ASTReader (for module imports), and writes it out at the end of processing
-/// a source file. Users should attach to the ast reader whenever a module is
-/// loaded.
-class DependencyFileGenerator {
- void *Impl; // Opaque implementation
- DependencyFileGenerator(void *Impl);
-public:
- static DependencyFileGenerator *CreateAndAttachToPreprocessor(
- Preprocessor &PP, const DependencyOutputOptions &Opts);
- void AttachToASTReader(ASTReader &R);
-};
-
-/// Collects the dependencies for imported modules into a directory. Users
-/// should attach to the AST reader whenever a module is loaded.
-class ModuleDependencyCollector {
- std::string DestDir;
- bool HasErrors;
- llvm::StringSet<> Seen;
- vfs::YAMLVFSWriter VFSWriter;
-
-public:
- StringRef getDest() { return DestDir; }
- bool insertSeen(StringRef Filename) { return Seen.insert(Filename).second; }
- void setHasErrors() { HasErrors = true; }
- void addFileMapping(StringRef VPath, StringRef RPath) {
- VFSWriter.addFileMapping(VPath, RPath);
- }
-
- void attachToASTReader(ASTReader &R);
- void writeFileMap();
- bool hasErrors() { return HasErrors; }
- ModuleDependencyCollector(std::string DestDir)
- : DestDir(DestDir), HasErrors(false) {}
- ~ModuleDependencyCollector() { writeFileMap(); }
-};
-
-/// AttachDependencyGraphGen - Create a dependency graph generator, and attach
-/// it to the given preprocessor.
- void AttachDependencyGraphGen(Preprocessor &PP, StringRef OutputFile,
- StringRef SysRoot);
-
-/// AttachHeaderIncludeGen - Create a header include list generator, and attach
-/// it to the given preprocessor.
-///
-/// \param ExtraHeaders - If not empty, will write the header filenames, just
-/// like they were included during a regular preprocessing. Useful for
-/// implicit include dependencies, like sanitizer blacklists.
-/// \param ShowAllHeaders - If true, show all header information instead of just
-/// headers following the predefines buffer. This is useful for making sure
-/// includes mentioned on the command line are also reported, but differs from
-/// the default behavior used by -H.
-/// \param OutputPath - If non-empty, a path to write the header include
-/// information to, instead of writing to stderr.
-/// \param ShowDepth - Whether to indent to show the nesting of the includes.
-/// \param MSStyle - Whether to print in cl.exe /showIncludes style.
-void AttachHeaderIncludeGen(Preprocessor &PP,
- const std::vector<std::string> &ExtraHeaders,
- bool ShowAllHeaders = false,
- StringRef OutputPath = "",
- bool ShowDepth = true, bool MSStyle = false);
-
-/// Cache tokens for use with PCH. Note that this requires a seekable stream.
-void CacheTokens(Preprocessor &PP, raw_pwrite_stream *OS);
-
-/// The ChainedIncludesSource class converts headers to chained PCHs in
-/// memory, mainly for testing.
-IntrusiveRefCntPtr<ExternalSemaSource>
-createChainedIncludesSource(CompilerInstance &CI,
- IntrusiveRefCntPtr<ExternalSemaSource> &Reader);
-
-/// createInvocationFromCommandLine - Construct a compiler invocation object for
-/// a command line argument vector.
-///
-/// \return A CompilerInvocation, or 0 if none was built for the given
-/// argument vector.
-CompilerInvocation *
-createInvocationFromCommandLine(ArrayRef<const char *> Args,
- IntrusiveRefCntPtr<DiagnosticsEngine> Diags =
- IntrusiveRefCntPtr<DiagnosticsEngine>());
-
-/// Return the value of the last argument as an integer, or a default. If Diags
-/// is non-null, emits an error if the argument is given, but non-integral.
-int getLastArgIntValue(const llvm::opt::ArgList &Args,
- llvm::opt::OptSpecifier Id, int Default,
- DiagnosticsEngine *Diags = nullptr);
-
-inline int getLastArgIntValue(const llvm::opt::ArgList &Args,
- llvm::opt::OptSpecifier Id, int Default,
- DiagnosticsEngine &Diags) {
- return getLastArgIntValue(Args, Id, Default, &Diags);
-}
-
-uint64_t getLastArgUInt64Value(const llvm::opt::ArgList &Args,
- llvm::opt::OptSpecifier Id, uint64_t Default,
- DiagnosticsEngine *Diags = nullptr);
-
-inline uint64_t getLastArgUInt64Value(const llvm::opt::ArgList &Args,
- llvm::opt::OptSpecifier Id,
- uint64_t Default,
- DiagnosticsEngine &Diags) {
- return getLastArgUInt64Value(Args, Id, Default, &Diags);
-}
-
-// When Clang->getFrontendOpts().DisableFree is set we don't delete some of the
-// global objects, but we don't want LeakDetectors to complain, so we bury them
-// in a globally visible array.
-void BuryPointer(const void *Ptr);
-template <typename T> void BuryPointer(std::unique_ptr<T> Ptr) {
- BuryPointer(Ptr.release());
-}
-
-} // end namespace clang
-
-#endif
diff --git a/include/clang/Frontend/VerifyDiagnosticConsumer.h b/include/clang/Frontend/VerifyDiagnosticConsumer.h
deleted file mode 100644
index 475f07f..0000000
--- a/include/clang/Frontend/VerifyDiagnosticConsumer.h
+++ /dev/null
@@ -1,278 +0,0 @@
-//===- VerifyDiagnosticConsumer.h - Verifying Diagnostic Client -*- 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_FRONTEND_VERIFYDIAGNOSTICCONSUMER_H
-#define LLVM_CLANG_FRONTEND_VERIFYDIAGNOSTICCONSUMER_H
-
-#include "clang/Basic/Diagnostic.h"
-#include "clang/Lex/Preprocessor.h"
-#include "llvm/ADT/DenseMap.h"
-#include "llvm/ADT/PointerIntPair.h"
-#include "llvm/ADT/STLExtras.h"
-#include <climits>
-#include <memory>
-
-namespace clang {
-
-class DiagnosticsEngine;
-class TextDiagnosticBuffer;
-class FileEntry;
-
-/// VerifyDiagnosticConsumer - Create a diagnostic client which will use
-/// markers in the input source to check that all the emitted diagnostics match
-/// those expected.
-///
-/// USING THE DIAGNOSTIC CHECKER:
-///
-/// Indicating that a line expects an error or a warning is simple. Put a
-/// comment on the line that has the diagnostic, use:
-///
-/// \code
-/// expected-{error,warning,remark,note}
-/// \endcode
-///
-/// to tag if it's an expected error, remark or warning, and place the expected
-/// text between {{ and }} markers. The full text doesn't have to be included,
-/// only enough to ensure that the correct diagnostic was emitted.
-///
-/// Here's an example:
-///
-/// \code
-/// int A = B; // expected-error {{use of undeclared identifier 'B'}}
-/// \endcode
-///
-/// You can place as many diagnostics on one line as you wish. To make the code
-/// more readable, you can use slash-newline to separate out the diagnostics.
-///
-/// Alternatively, it is possible to specify the line on which the diagnostic
-/// should appear by appending "@<line>" to "expected-<type>", for example:
-///
-/// \code
-/// #warning some text
-/// // expected-warning@10 {{some text}}
-/// \endcode
-///
-/// The line number may be absolute (as above), or relative to the current
-/// line by prefixing the number with either '+' or '-'.
-///
-/// If the diagnostic is generated in a separate file, for example in a shared
-/// header file, it may be beneficial to be able to declare the file in which
-/// the diagnostic will appear, rather than placing the expected-* directive in
-/// the actual file itself. This can be done using the following syntax:
-///
-/// \code
-/// // expected-error@path/include.h:15 {{error message}}
-/// \endcode
-///
-/// The path can be absolute or relative and the same search paths will be used
-/// as for #include directives. The line number in an external file may be
-/// substituted with '*' meaning that any line number will match (useful where
-/// the included file is, for example, a system header where the actual line
-/// number may change and is not critical).
-///
-/// The simple syntax above allows each specification to match exactly one
-/// error. You can use the extended syntax to customize this. The extended
-/// syntax is "expected-<type> <n> {{diag text}}", where \<type> is one of
-/// "error", "warning" or "note", and \<n> is a positive integer. This allows
-/// the diagnostic to appear as many times as specified. Example:
-///
-/// \code
-/// void f(); // expected-note 2 {{previous declaration is here}}
-/// \endcode
-///
-/// Where the diagnostic is expected to occur a minimum number of times, this
-/// can be specified by appending a '+' to the number. Example:
-///
-/// \code
-/// void f(); // expected-note 0+ {{previous declaration is here}}
-/// void g(); // expected-note 1+ {{previous declaration is here}}
-/// \endcode
-///
-/// In the first example, the diagnostic becomes optional, i.e. it will be
-/// swallowed if it occurs, but will not generate an error if it does not
-/// occur. In the second example, the diagnostic must occur at least once.
-/// As a short-hand, "one or more" can be specified simply by '+'. Example:
-///
-/// \code
-/// void g(); // expected-note + {{previous declaration is here}}
-/// \endcode
-///
-/// A range can also be specified by "<n>-<m>". Example:
-///
-/// \code
-/// void f(); // expected-note 0-1 {{previous declaration is here}}
-/// \endcode
-///
-/// In this example, the diagnostic may appear only once, if at all.
-///
-/// Regex matching mode may be selected by appending '-re' to type and
-/// including regexes wrapped in double curly braces in the directive, such as:
-///
-/// \code
-/// expected-error-re {{format specifies type 'wchar_t **' (aka '{{.+}}')}}
-/// \endcode
-///
-/// Examples matching error: "variable has incomplete type 'struct s'"
-///
-/// \code
-/// // expected-error {{variable has incomplete type 'struct s'}}
-/// // expected-error {{variable has incomplete type}}
-///
-/// // expected-error-re {{variable has type 'struct {{.}}'}}
-/// // expected-error-re {{variable has type 'struct {{.*}}'}}
-/// // expected-error-re {{variable has type 'struct {{(.*)}}'}}
-/// // expected-error-re {{variable has type 'struct{{[[:space:]](.*)}}'}}
-/// \endcode
-///
-/// VerifyDiagnosticConsumer expects at least one expected-* directive to
-/// be found inside the source code. If no diagnostics are expected the
-/// following directive can be used to indicate this:
-///
-/// \code
-/// // expected-no-diagnostics
-/// \endcode
-///
-class VerifyDiagnosticConsumer: public DiagnosticConsumer,
- public CommentHandler {
-public:
- /// Directive - Abstract class representing a parsed verify directive.
- ///
- class Directive {
- public:
- static std::unique_ptr<Directive> create(bool RegexKind,
- SourceLocation DirectiveLoc,
- SourceLocation DiagnosticLoc,
- bool MatchAnyLine, StringRef Text,
- unsigned Min, unsigned Max);
-
- public:
- /// Constant representing n or more matches.
- static const unsigned MaxCount = UINT_MAX;
-
- SourceLocation DirectiveLoc;
- SourceLocation DiagnosticLoc;
- const std::string Text;
- unsigned Min, Max;
- bool MatchAnyLine;
-
- virtual ~Directive() { }
-
- // Returns true if directive text is valid.
- // Otherwise returns false and populates E.
- virtual bool isValid(std::string &Error) = 0;
-
- // Returns true on match.
- virtual bool match(StringRef S) = 0;
-
- protected:
- Directive(SourceLocation DirectiveLoc, SourceLocation DiagnosticLoc,
- bool MatchAnyLine, StringRef Text, unsigned Min, unsigned Max)
- : DirectiveLoc(DirectiveLoc), DiagnosticLoc(DiagnosticLoc),
- Text(Text), Min(Min), Max(Max), MatchAnyLine(MatchAnyLine) {
- assert(!DirectiveLoc.isInvalid() && "DirectiveLoc is invalid!");
- assert(!DiagnosticLoc.isInvalid() && "DiagnosticLoc is invalid!");
- }
-
- private:
- Directive(const Directive &) = delete;
- void operator=(const Directive &) = delete;
- };
-
- typedef std::vector<std::unique_ptr<Directive>> DirectiveList;
-
- /// ExpectedData - owns directive objects and deletes on destructor.
- ///
- struct ExpectedData {
- DirectiveList Errors;
- DirectiveList Warnings;
- DirectiveList Remarks;
- DirectiveList Notes;
-
- void Reset() {
- Errors.clear();
- Warnings.clear();
- Remarks.clear();
- Notes.clear();
- }
- };
-
- enum DirectiveStatus {
- HasNoDirectives,
- HasNoDirectivesReported,
- HasExpectedNoDiagnostics,
- HasOtherExpectedDirectives
- };
-
-private:
- DiagnosticsEngine &Diags;
- DiagnosticConsumer *PrimaryClient;
- std::unique_ptr<DiagnosticConsumer> PrimaryClientOwner;
- std::unique_ptr<TextDiagnosticBuffer> Buffer;
- const Preprocessor *CurrentPreprocessor;
- const LangOptions *LangOpts;
- SourceManager *SrcManager;
- unsigned ActiveSourceFiles;
- DirectiveStatus Status;
- ExpectedData ED;
-
- void CheckDiagnostics();
- void setSourceManager(SourceManager &SM) {
- assert((!SrcManager || SrcManager == &SM) && "SourceManager changed!");
- SrcManager = &SM;
- }
-
- // These facilities are used for validation in debug builds.
- class UnparsedFileStatus {
- llvm::PointerIntPair<const FileEntry *, 1, bool> Data;
- public:
- UnparsedFileStatus(const FileEntry *File, bool FoundDirectives)
- : Data(File, FoundDirectives) {}
- const FileEntry *getFile() const { return Data.getPointer(); }
- bool foundDirectives() const { return Data.getInt(); }
- };
- typedef llvm::DenseMap<FileID, const FileEntry *> ParsedFilesMap;
- typedef llvm::DenseMap<FileID, UnparsedFileStatus> UnparsedFilesMap;
- ParsedFilesMap ParsedFiles;
- UnparsedFilesMap UnparsedFiles;
-
-public:
- /// Create a new verifying diagnostic client, which will issue errors to
- /// the currently-attached diagnostic client when a diagnostic does not match
- /// what is expected (as indicated in the source file).
- VerifyDiagnosticConsumer(DiagnosticsEngine &Diags);
- ~VerifyDiagnosticConsumer() override;
-
- void BeginSourceFile(const LangOptions &LangOpts,
- const Preprocessor *PP) override;
-
- void EndSourceFile() override;
-
- enum ParsedStatus {
- /// File has been processed via HandleComment.
- IsParsed,
-
- /// File has diagnostics and may have directives.
- IsUnparsed,
-
- /// File has diagnostics but guaranteed no directives.
- IsUnparsedNoDirectives
- };
-
- /// \brief Update lists of parsed and unparsed files.
- void UpdateParsedFileStatus(SourceManager &SM, FileID FID, ParsedStatus PS);
-
- bool HandleComment(Preprocessor &PP, SourceRange Comment) override;
-
- void HandleDiagnostic(DiagnosticsEngine::Level DiagLevel,
- const Diagnostic &Info) override;
-};
-
-} // end namspace clang
-
-#endif
OpenPOWER on IntegriCloud