[cfe-commits] r86612 - in /cfe/trunk: include/clang/Frontend/CompilerInvocation.h tools/clang-cc/clang-cc.cpp
Daniel Dunbar
daniel at zuster.org
Mon Nov 9 14:46:18 PST 2009
Author: ddunbar
Date: Mon Nov 9 16:46:17 2009
New Revision: 86612
URL: http://llvm.org/viewvc/llvm-project?rev=86612&view=rev
Log:
Move LangOptions, HeaderSearchOptions, and the target feature map into
CompilerInvocation.
Modified:
cfe/trunk/include/clang/Frontend/CompilerInvocation.h
cfe/trunk/tools/clang-cc/clang-cc.cpp
Modified: cfe/trunk/include/clang/Frontend/CompilerInvocation.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Frontend/CompilerInvocation.h?rev=86612&r1=86611&r2=86612&view=diff
==============================================================================
--- cfe/trunk/include/clang/Frontend/CompilerInvocation.h (original)
+++ cfe/trunk/include/clang/Frontend/CompilerInvocation.h Mon Nov 9 16:46:17 2009
@@ -10,7 +10,10 @@
#ifndef LLVM_CLANG_FRONTEND_COMPILERINVOCATION_H_
#define LLVM_CLANG_FRONTEND_COMPILERINVOCATION_H_
+#include "clang/Basic/LangOptions.h"
#include "clang/Frontend/DiagnosticOptions.h"
+#include "clang/Frontend/HeaderSearchOptions.h"
+#include "llvm/ADT/StringMap.h"
#include <string>
namespace clang {
@@ -26,16 +29,39 @@
/// invocations which have no output.
std::string OutputFile;
- DiagnosticOptions Diags;
-
+ /// Options controlling the diagnostic engine.
+ DiagnosticOptions DiagOpts;
+
+ /// Set of target-specific code generation features to enable/disable.
+ llvm::StringMap<bool> TargetFeatures;
+
+ /// Options controlling the language variant.
+ LangOptions LangOpts;
+
+ /// Options controlling the #include directive.
+ HeaderSearchOptions HeaderSearchOpts;
+
public:
CompilerInvocation() {}
std::string &getOutputFile() { return OutputFile; }
const std::string &getOutputFile() const { return OutputFile; }
- DiagnosticOptions &getDiagnosticOpts() { return Diags; }
- const DiagnosticOptions &getDiagnosticOpts() const { return Diags; }
+ DiagnosticOptions &getDiagnosticOpts() { return DiagOpts; }
+ const DiagnosticOptions &getDiagnosticOpts() const { return DiagOpts; }
+
+ llvm::StringMap<bool> &getTargetFeatures() { return TargetFeatures; }
+ const llvm::StringMap<bool> &getTargetFeatures() const {
+ return TargetFeatures;
+ }
+
+ LangOptions &getLangOpts() { return LangOpts; }
+ const LangOptions &getLangOpts() const { return LangOpts; }
+
+ HeaderSearchOptions &getHeaderSearchOpts() { return HeaderSearchOpts; }
+ const HeaderSearchOptions &getHeaderSearchOpts() const {
+ return HeaderSearchOpts;
+ }
};
} // end namespace clang
Modified: cfe/trunk/tools/clang-cc/clang-cc.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/tools/clang-cc/clang-cc.cpp?rev=86612&r1=86611&r2=86612&view=diff
==============================================================================
--- cfe/trunk/tools/clang-cc/clang-cc.cpp (original)
+++ cfe/trunk/tools/clang-cc/clang-cc.cpp Mon Nov 9 16:46:17 2009
@@ -1041,11 +1041,10 @@
/// InitializeIncludePaths - Process the -I options and set them in the
/// HeaderSearch object.
-void InitializeIncludePaths(const char *Argv0, HeaderSearch &Headers,
- FileManager &FM, const LangOptions &Lang,
- llvm::Triple &triple) {
- HeaderSearchOptions Opts(isysroot);
-
+static void InitializeIncludePaths(HeaderSearchOptions &Opts,
+ const char *Argv0,
+ const LangOptions &Lang) {
+ Opts.Sysroot = isysroot;
Opts.Verbose = Verbose;
// Handle -I... and -F... options, walking the lists in parallel.
@@ -1142,9 +1141,6 @@
Opts.BuiltinIncludePath = GetBuiltinIncludePath(Argv0);
Opts.UseStandardIncludes = !nostdinc;
-
- // Apply all the options to the header search object.
- ApplyHeaderSearchOptions(Opts, Headers, Lang, triple);
}
void InitializePreprocessorOptions(PreprocessorOptions &InitOpts) {
@@ -1295,7 +1291,7 @@
/// ComputeTargetFeatures - Recompute the target feature list to only
/// be the list of things that are enabled, based on the target cpu
/// and feature list.
-static void ComputeFeatureMap(const TargetInfo &Target,
+static void ComputeFeatureMap(TargetInfo &Target,
llvm::StringMap<bool> &Features) {
assert(Features.empty() && "invalid map");
@@ -1661,7 +1657,6 @@
ProgActions PA,
llvm::OwningPtr<llvm::raw_ostream> &OS,
llvm::sys::Path &OutPath,
- const llvm::StringMap<bool> &Features,
llvm::LLVMContext& Context) {
switch (PA) {
default:
@@ -1709,7 +1704,8 @@
}
CompileOptions Opts;
- InitializeCompileOptions(Opts, PP.getLangOptions(), Features);
+ InitializeCompileOptions(Opts, PP.getLangOptions(),
+ CompOpts.getTargetFeatures());
return CreateBackendConsumer(Act, PP.getDiagnostics(), PP.getLangOptions(),
Opts, InFile, OS.get(), Context);
}
@@ -1730,7 +1726,6 @@
static void ProcessInputFile(const CompilerInvocation &CompOpts,
Preprocessor &PP, const std::string &InFile,
ProgActions PA,
- const llvm::StringMap<bool> &Features,
llvm::LLVMContext& Context) {
llvm::OwningPtr<llvm::raw_ostream> OS;
llvm::OwningPtr<ASTConsumer> Consumer;
@@ -1742,7 +1737,7 @@
switch (PA) {
default:
Consumer.reset(CreateConsumerAction(CompOpts, PP, InFile, PA, OS, OutPath,
- Features, Context));
+ Context));
if (!Consumer.get()) {
PP.getDiagnostics().Report(FullSourceLoc(),
@@ -2077,7 +2072,6 @@
///
static void ProcessASTInputFile(const CompilerInvocation &CompOpts,
const std::string &InFile, ProgActions PA,
- const llvm::StringMap<bool> &Features,
Diagnostic &Diags, FileManager &FileMgr,
llvm::LLVMContext& Context) {
std::string Error;
@@ -2093,8 +2087,7 @@
llvm::sys::Path OutPath;
llvm::OwningPtr<ASTConsumer> Consumer(CreateConsumerAction(CompOpts, PP,
InFile, PA, OS,
- OutPath, Features,
- Context));
+ OutPath, Context));
if (!Consumer.get()) {
Diags.Report(FullSourceLoc(), diag::err_fe_invalid_ast_action);
@@ -2196,11 +2189,30 @@
}
static void ConstructCompilerInvocation(CompilerInvocation &Opts,
+ const char *Argv0,
const DiagnosticOptions &DiagOpts,
- const TargetInfo &Target) {
+ TargetInfo &Target,
+ LangKind LK) {
Opts.getDiagnosticOpts() = DiagOpts;
Opts.getOutputFile() = OutputFile;
+
+ // Compute the feature set, which may effect the language.
+ ComputeFeatureMap(Target, Opts.getTargetFeatures());
+
+ // Initialize language options.
+ LangOptions LangInfo;
+
+ // FIXME: These aren't used during operations on ASTs. Split onto a separate
+ // code path to make this obvious.
+ if (LK != langkind_ast) {
+ InitializeLangOptions(Opts.getLangOpts(), LK);
+ InitializeLanguageStandard(Opts.getLangOpts(), LK, Target,
+ Opts.getTargetFeatures());
+ }
+
+ // Initialize the header search options.
+ InitializeIncludePaths(Opts.getHeaderSearchOpts(), Argv0, Opts.getLangOpts());
}
int main(int argc, char **argv) {
@@ -2297,7 +2309,7 @@
// Now that we have initialized the diagnostics engine and the target, finish
// setting up the compiler invocation.
CompilerInvocation CompOpts;
- ConstructCompilerInvocation(CompOpts, DiagOpts, *Target);
+ ConstructCompilerInvocation(CompOpts, argv[0], DiagOpts, *Target, LK);
// Create the source manager.
SourceManager SourceMgr;
@@ -2305,17 +2317,13 @@
// Create a file manager object to provide access to and cache the filesystem.
FileManager FileMgr;
- // Compute the feature set, unfortunately this effects the language!
- llvm::StringMap<bool> Features;
- ComputeFeatureMap(*Target, Features);
-
for (unsigned i = 0, e = InputFilenames.size(); i != e; ++i) {
const std::string &InFile = InputFilenames[i];
// AST inputs are handled specially.
if (LK == langkind_ast) {
- ProcessASTInputFile(CompOpts, InFile, ProgAction, Features,
- Diags, FileMgr, Context);
+ ProcessASTInputFile(CompOpts, InFile, ProgAction, Diags, FileMgr,
+ Context);
continue;
}
@@ -2323,19 +2331,16 @@
if (i)
SourceMgr.clearIDTables();
- // Initialize language options, inferring file types from input filenames.
- LangOptions LangInfo;
- InitializeLangOptions(LangInfo, LK);
- InitializeLanguageStandard(LangInfo, LK, *Target, Features);
-
// Process the -I options and set them in the HeaderInfo.
HeaderSearch HeaderInfo(FileMgr);
-
- InitializeIncludePaths(argv[0], HeaderInfo, FileMgr, LangInfo, Triple);
+ // Apply all the options to the header search object.
+ ApplyHeaderSearchOptions(CompOpts.getHeaderSearchOpts(), HeaderInfo,
+ CompOpts.getLangOpts(), Triple);
// Set up the preprocessor with these options.
- llvm::OwningPtr<Preprocessor> PP(CreatePreprocessor(Diags, LangInfo,
+ llvm::OwningPtr<Preprocessor> PP(CreatePreprocessor(Diags,
+ CompOpts.getLangOpts(),
*Target, SourceMgr,
HeaderInfo));
@@ -2369,8 +2374,8 @@
}
// Process the source file.
- Diags.getClient()->BeginSourceFile(LangInfo);
- ProcessInputFile(CompOpts, *PP, InFile, ProgAction, Features, Context);
+ Diags.getClient()->BeginSourceFile(CompOpts.getLangOpts());
+ ProcessInputFile(CompOpts, *PP, InFile, ProgAction, Context);
Diags.getClient()->EndSourceFile();
HeaderInfo.ClearFileInfo();
More information about the cfe-commits
mailing list