From: Richard Smith Date: Thu, 1 Nov 2012 03:48:49 +0000 (+0000) Subject: Remove CompilerInvocation::toArgs and clang -cc1test mode. These were untested X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=33fd55125878d51bf67025b23c18ed0d5d085d8c;p=platform%2Fupstream%2Fllvm.git Remove CompilerInvocation::toArgs and clang -cc1test mode. These were untested and apparently unused (and since they are untested, they're presumably also broken). llvm-svn: 167210 --- diff --git a/clang/include/clang/Frontend/CompilerInvocation.h b/clang/include/clang/Frontend/CompilerInvocation.h index bd5846b..1314956 100644 --- a/clang/include/clang/Frontend/CompilerInvocation.h +++ b/clang/include/clang/Frontend/CompilerInvocation.h @@ -145,10 +145,6 @@ public: /// executable), for finding the builtin compiler path. static std::string GetResourcesPath(const char *Argv0, void *MainAddr); - /// \brief Convert the CompilerInvocation to a list of strings suitable for - /// passing to CreateFromArgs. - void toArgs(std::vector &Res) const; - /// \brief Set language defaults for the given input language and /// language standard in the given LangOptions object. /// diff --git a/clang/lib/Frontend/CompilerInvocation.cpp b/clang/lib/Frontend/CompilerInvocation.cpp index 78dc0d5..ef808ad 100644 --- a/clang/lib/Frontend/CompilerInvocation.cpp +++ b/clang/lib/Frontend/CompilerInvocation.cpp @@ -49,914 +49,7 @@ CompilerInvocationBase::CompilerInvocationBase(const CompilerInvocationBase &X) PreprocessorOpts(new PreprocessorOptions(X.getPreprocessorOpts())) {} //===----------------------------------------------------------------------===// -// Utility functions. -//===----------------------------------------------------------------------===// - -static const char *getAnalysisStoreName(AnalysisStores Kind) { - switch (Kind) { - default: - llvm_unreachable("Unknown analysis store!"); -#define ANALYSIS_STORE(NAME, CMDFLAG, DESC, CREATFN) \ - case NAME##Model: return CMDFLAG; -#include "clang/StaticAnalyzer/Core/Analyses.def" - } -} - -static const char *getAnalysisConstraintName(AnalysisConstraints Kind) { - switch (Kind) { - default: - llvm_unreachable("Unknown analysis constraints!"); -#define ANALYSIS_CONSTRAINTS(NAME, CMDFLAG, DESC, CREATFN) \ - case NAME##Model: return CMDFLAG; -#include "clang/StaticAnalyzer/Core/Analyses.def" - } -} - -static const char *getAnalysisDiagClientName(AnalysisDiagClients Kind) { - switch (Kind) { - default: - llvm_unreachable("Unknown analysis client!"); -#define ANALYSIS_DIAGNOSTICS(NAME, CMDFLAG, DESC, CREATFN, AUTOCREATE) \ - case PD_##NAME: return CMDFLAG; -#include "clang/StaticAnalyzer/Core/Analyses.def" - } -} - -static const char *getAnalysisPurgeModeName(AnalysisPurgeMode Kind) { - switch (Kind) { - default: - llvm_unreachable("Unknown analysis purge mode!"); -#define ANALYSIS_PURGE(NAME, CMDFLAG, DESC) \ - case NAME: return CMDFLAG; -#include "clang/StaticAnalyzer/Core/Analyses.def" - } -} - -static const char *getAnalysisIPAModeName(AnalysisIPAMode Kind) { - switch (Kind) { - default: - llvm_unreachable("Unknown analysis ipa mode!"); -#define ANALYSIS_IPA(NAME, CMDFLAG, DESC) \ - case NAME: return CMDFLAG; -#include "clang/StaticAnalyzer/Core/Analyses.def" - } -} - -static const char * - getAnalysisInliningModeName(AnalysisInliningMode Kind) { - switch (Kind) { - default: - llvm_unreachable("Unknown analysis inlining mode!"); -#define ANALYSIS_INLINE_SELECTION(NAME, CMDFLAG, DESC) \ - case NAME: return CMDFLAG; -#include "clang/StaticAnalyzer/Core/Analyses.def" - } -} - -//===----------------------------------------------------------------------===// -// Serialization (to args) -//===----------------------------------------------------------------------===// - -namespace { - /// ToArgsList - Helper class to create a list of std::strings. - class ToArgsList { - std::vector &Res; - public: - explicit ToArgsList(std::vector &Res) : Res(Res) {} - - void push_back(StringRef Str) { - // Avoid creating a temporary string. - Res.push_back(std::string()); - Res.back().assign(Str.data(), Str.size()); - } - - void push_back(StringRef Str1, StringRef Str2) { - push_back(Str1); - push_back(Str2); - } - }; -} - -static void AnalyzerOptsToArgs(const AnalyzerOptions &Opts, ToArgsList &Res) { - if (Opts.ShowCheckerHelp) - Res.push_back("-analyzer-checker-help"); - if (Opts.AnalysisStoreOpt != RegionStoreModel) - Res.push_back("-analyzer-store", - getAnalysisStoreName(Opts.AnalysisStoreOpt)); - if (Opts.AnalysisConstraintsOpt != RangeConstraintsModel) - Res.push_back("-analyzer-constraints", - getAnalysisConstraintName(Opts.AnalysisConstraintsOpt)); - if (Opts.AnalysisDiagOpt != PD_HTML) - Res.push_back("-analyzer-output", - getAnalysisDiagClientName(Opts.AnalysisDiagOpt)); - if (Opts.AnalysisPurgeOpt != PurgeStmt) - Res.push_back("-analyzer-purge", - getAnalysisPurgeModeName(Opts.AnalysisPurgeOpt)); - if (!Opts.AnalyzeSpecificFunction.empty()) - Res.push_back("-analyze-function", Opts.AnalyzeSpecificFunction); - if (Opts.IPAMode != DynamicDispatchBifurcate) - Res.push_back("-analyzer-ipa", getAnalysisIPAModeName(Opts.IPAMode)); - if (Opts.InliningMode != NoRedundancy) - Res.push_back("-analyzer-inlining-mode", - getAnalysisInliningModeName(Opts.InliningMode)); - - if (Opts.AnalyzeAll) - Res.push_back("-analyzer-opt-analyze-headers"); - if (Opts.AnalyzerDisplayProgress) - Res.push_back("-analyzer-display-progress"); - if (Opts.AnalyzeNestedBlocks) - Res.push_back("-analyzer-opt-analyze-nested-blocks"); - if (Opts.eagerlyAssumeBinOpBifurcation) - Res.push_back("-analyzer-eagerly-assume"); - if (Opts.TrimGraph) - Res.push_back("-trim-egraph"); - if (Opts.visualizeExplodedGraphWithGraphViz) - Res.push_back("-analyzer-viz-egraph-graphviz"); - if (Opts.visualizeExplodedGraphWithUbiGraph) - Res.push_back("-analyzer-viz-egraph-ubigraph"); - if (Opts.NoRetryExhausted) - Res.push_back("-analyzer-disable-retry-exhausted"); - - for (unsigned i = 0, e = Opts.CheckersControlList.size(); i != e; ++i) { - const std::pair &opt = Opts.CheckersControlList[i]; - if (opt.second) - Res.push_back("-analyzer-disable-checker"); - else - Res.push_back("-analyzer-checker"); - Res.push_back(opt.first); - } -} - -static void CodeGenOptsToArgs(const CodeGenOptions &Opts, ToArgsList &Res) { - switch (Opts.getDebugInfo()) { - case CodeGenOptions::NoDebugInfo: - break; - case CodeGenOptions::DebugLineTablesOnly: - Res.push_back("-gline-tables-only"); - break; - case CodeGenOptions::LimitedDebugInfo: - Res.push_back("-g"); - Res.push_back("-flimit-debug-info"); - break; - case CodeGenOptions::FullDebugInfo: - Res.push_back("-g"); - Res.push_back("-fno-limit-debug-info"); - break; - } - if (Opts.DebugColumnInfo) - Res.push_back("-gcolumn-info"); - if (Opts.DisableLLVMOpts) - Res.push_back("-disable-llvm-optzns"); - if (Opts.DisableRedZone) - Res.push_back("-disable-red-zone"); - if (Opts.DisableTailCalls) - Res.push_back("-mdisable-tail-calls"); - if (!Opts.DebugCompilationDir.empty()) - Res.push_back("-fdebug-compilation-dir", Opts.DebugCompilationDir); - if (!Opts.DwarfDebugFlags.empty()) - Res.push_back("-dwarf-debug-flags", Opts.DwarfDebugFlags); - if (Opts.EmitGcovArcs) - Res.push_back("-femit-coverage-data"); - if (Opts.EmitGcovNotes) - Res.push_back("-femit-coverage-notes"); - if (Opts.EmitOpenCLArgMetadata) - Res.push_back("-cl-kernel-arg-info"); - if (!Opts.MergeAllConstants) - Res.push_back("-fno-merge-all-constants"); - if (Opts.NoCommon) - Res.push_back("-fno-common"); - if (Opts.ForbidGuardVariables) - Res.push_back("-fforbid-guard-variables"); - if (Opts.UseRegisterSizedBitfieldAccess) - Res.push_back("-fuse-register-sized-bitfield-access"); - if (Opts.NoImplicitFloat) - Res.push_back("-no-implicit-float"); - if (Opts.OmitLeafFramePointer) - Res.push_back("-momit-leaf-frame-pointer"); - if (Opts.OptimizeSize) { - assert(Opts.OptimizationLevel == 2 && "Invalid options!"); - Opts.OptimizeSize == 1 ? Res.push_back("-Os") : Res.push_back("-Oz"); - } else if (Opts.OptimizationLevel != 0) - Res.push_back("-O" + llvm::utostr(Opts.OptimizationLevel)); - if (!Opts.MainFileName.empty()) - Res.push_back("-main-file-name", Opts.MainFileName); - if (Opts.NoInfsFPMath) - Res.push_back("-menable-no-infinities"); - if (Opts.NoNaNsFPMath) - Res.push_back("-menable-no-nans"); - // SimplifyLibCalls is only derived. - // TimePasses is only derived. - // UnitAtATime is unused. - // Inlining is only derived. - - // UnrollLoops is derived, but also accepts an option, no - // harm in pushing it back here. - if (Opts.UnrollLoops) - Res.push_back("-funroll-loops"); - if (Opts.DataSections) - Res.push_back("-fdata-sections"); - if (Opts.FunctionSections) - Res.push_back("-ffunction-sections"); - if (Opts.AsmVerbose) - Res.push_back("-masm-verbose"); - if (!Opts.CodeModel.empty()) - Res.push_back("-mcode-model", Opts.CodeModel); - if (Opts.CUDAIsDevice) - Res.push_back("-fcuda-is-device"); - if (!Opts.CXAAtExit) - Res.push_back("-fno-use-cxa-atexit"); - if (Opts.CXXCtorDtorAliases) - Res.push_back("-mconstructor-aliases"); - if (Opts.ObjCAutoRefCountExceptions) - Res.push_back("-fobjc-arc-eh"); - if (!Opts.DebugPass.empty()) { - Res.push_back("-mdebug-pass", Opts.DebugPass); - } - if (Opts.DisableFPElim) - Res.push_back("-mdisable-fp-elim"); - if (!Opts.FloatABI.empty()) - Res.push_back("-mfloat-abi", Opts.FloatABI); - if (!Opts.LimitFloatPrecision.empty()) - Res.push_back("-mlimit-float-precision", Opts.LimitFloatPrecision); - if (Opts.NoZeroInitializedInBSS) - Res.push_back("-mno-zero-initialized-bss"); - switch (Opts.getObjCDispatchMethod()) { - case CodeGenOptions::Legacy: - break; - case CodeGenOptions::Mixed: - Res.push_back("-fobjc-dispatch-method=mixed"); - break; - case CodeGenOptions::NonLegacy: - Res.push_back("-fobjc-dispatch-method=non-legacy"); - break; - } - if (Opts.BoundsChecking > 0) - Res.push_back("-fbounds-checking=" + llvm::utostr(Opts.BoundsChecking)); - if (Opts.NumRegisterParameters) - Res.push_back("-mregparm", llvm::utostr(Opts.NumRegisterParameters)); - if (Opts.NoGlobalMerge) - Res.push_back("-mno-global-merge"); - if (Opts.NoExecStack) - Res.push_back("-mnoexecstack"); - if (Opts.RelaxAll) - Res.push_back("-mrelax-all"); - if (Opts.SaveTempLabels) - Res.push_back("-msave-temp-labels"); - if (Opts.NoDwarf2CFIAsm) - Res.push_back("-fno-dwarf2-cfi-asm"); - if (Opts.NoDwarfDirectoryAsm) - Res.push_back("-fno-dwarf-directory-asm"); - if (Opts.SoftFloat) - Res.push_back("-msoft-float"); - if (Opts.StrictEnums) - Res.push_back("-fstrict-enums"); - if (Opts.UnwindTables) - Res.push_back("-munwind-tables"); - if (Opts.RelocationModel != "pic") - Res.push_back("-mrelocation-model", Opts.RelocationModel); - if (!Opts.VerifyModule) - Res.push_back("-disable-llvm-verifier"); - for (unsigned i = 0, e = Opts.BackendOptions.size(); i != e; ++i) - Res.push_back("-backend-option", Opts.BackendOptions[i]); - - switch (Opts.getDefaultTLSModel()) { - case CodeGenOptions::GeneralDynamicTLSModel: - break; - case CodeGenOptions::LocalDynamicTLSModel: - Res.push_back("-ftls-model=local-dynamic"); - break; - case CodeGenOptions::InitialExecTLSModel: - Res.push_back("-ftls-model=initial-exec"); - break; - case CodeGenOptions::LocalExecTLSModel: - Res.push_back("-ftls-model=local-exec"); - break; - } -} - -static void DependencyOutputOptsToArgs(const DependencyOutputOptions &Opts, - ToArgsList &Res) { - if (Opts.IncludeSystemHeaders) - Res.push_back("-sys-header-deps"); - if (Opts.ShowHeaderIncludes) - Res.push_back("-H"); - if (!Opts.HeaderIncludeOutputFile.empty()) - Res.push_back("-header-include-file", Opts.HeaderIncludeOutputFile); - if (Opts.UsePhonyTargets) - Res.push_back("-MP"); - if (!Opts.OutputFile.empty()) - Res.push_back("-dependency-file", Opts.OutputFile); - for (unsigned i = 0, e = Opts.Targets.size(); i != e; ++i) - Res.push_back("-MT", Opts.Targets[i]); -} - -static void DiagnosticOptsToArgs(const DiagnosticOptions &Opts, - ToArgsList &Res) { - if (Opts.IgnoreWarnings) - Res.push_back("-w"); - if (Opts.NoRewriteMacros) - Res.push_back("-Wno-rewrite-macros"); - if (Opts.Pedantic) - Res.push_back("-pedantic"); - if (Opts.PedanticErrors) - Res.push_back("-pedantic-errors"); - if (!Opts.ShowColumn) - Res.push_back("-fno-show-column"); - if (!Opts.ShowLocation) - Res.push_back("-fno-show-source-location"); - if (!Opts.ShowCarets) - Res.push_back("-fno-caret-diagnostics"); - if (!Opts.ShowFixits) - Res.push_back("-fno-diagnostics-fixit-info"); - if (Opts.ShowSourceRanges) - Res.push_back("-fdiagnostics-print-source-range-info"); - if (Opts.ShowParseableFixits) - Res.push_back("-fdiagnostics-parseable-fixits"); - if (Opts.ShowColors) - Res.push_back("-fcolor-diagnostics"); - if (Opts.VerifyDiagnostics) - Res.push_back("-verify"); - if (Opts.ShowOptionNames) - Res.push_back("-fdiagnostics-show-option"); - if (Opts.ShowCategories == 1) - Res.push_back("-fdiagnostics-show-category=id"); - else if (Opts.ShowCategories == 2) - Res.push_back("-fdiagnostics-show-category=name"); - switch (Opts.getFormat()) { - case DiagnosticOptions::Clang: - Res.push_back("-fdiagnostics-format=clang"); break; - case DiagnosticOptions::Msvc: - Res.push_back("-fdiagnostics-format=msvc"); break; - case DiagnosticOptions::Vi: - Res.push_back("-fdiagnostics-format=vi"); break; - } - if (Opts.ErrorLimit) - Res.push_back("-ferror-limit", llvm::utostr(Opts.ErrorLimit)); - if (!Opts.DiagnosticLogFile.empty()) - Res.push_back("-diagnostic-log-file", Opts.DiagnosticLogFile); - if (Opts.MacroBacktraceLimit - != DiagnosticOptions::DefaultMacroBacktraceLimit) - Res.push_back("-fmacro-backtrace-limit", - llvm::utostr(Opts.MacroBacktraceLimit)); - if (Opts.TemplateBacktraceLimit - != DiagnosticOptions::DefaultTemplateBacktraceLimit) - Res.push_back("-ftemplate-backtrace-limit", - llvm::utostr(Opts.TemplateBacktraceLimit)); - if (Opts.ConstexprBacktraceLimit - != DiagnosticOptions::DefaultConstexprBacktraceLimit) - Res.push_back("-fconstexpr-backtrace-limit", - llvm::utostr(Opts.ConstexprBacktraceLimit)); - - if (Opts.TabStop != DiagnosticOptions::DefaultTabStop) - Res.push_back("-ftabstop", llvm::utostr(Opts.TabStop)); - if (Opts.MessageLength) - Res.push_back("-fmessage-length", llvm::utostr(Opts.MessageLength)); - if (!Opts.DumpBuildInformation.empty()) - Res.push_back("-dump-build-information", Opts.DumpBuildInformation); - for (unsigned i = 0, e = Opts.Warnings.size(); i != e; ++i) - Res.push_back("-W" + Opts.Warnings[i]); -} - -static const char *getInputKindName(InputKind Kind) { - switch (Kind) { - case IK_None: break; - case IK_AST: return "ast"; - case IK_Asm: return "assembler-with-cpp"; - case IK_C: return "c"; - case IK_CXX: return "c++"; - case IK_LLVM_IR: return "ir"; - case IK_ObjC: return "objective-c"; - case IK_ObjCXX: return "objective-c++"; - case IK_OpenCL: return "cl"; - case IK_CUDA: return "cuda"; - case IK_PreprocessedC: return "cpp-output"; - case IK_PreprocessedCXX: return "c++-cpp-output"; - case IK_PreprocessedObjC: return "objective-c-cpp-output"; - case IK_PreprocessedObjCXX:return "objective-c++-cpp-output"; - } - - llvm_unreachable("Unexpected language kind!"); -} - -static const char *getActionName(frontend::ActionKind Kind) { - switch (Kind) { - case frontend::PluginAction: - llvm_unreachable("Invalid kind!"); - - case frontend::ASTDeclList: return "-ast-list"; - case frontend::ASTDump: return "-ast-dump"; - case frontend::ASTDumpXML: return "-ast-dump-xml"; - case frontend::ASTPrint: return "-ast-print"; - case frontend::ASTView: return "-ast-view"; - case frontend::DumpRawTokens: return "-dump-raw-tokens"; - case frontend::DumpTokens: return "-dump-tokens"; - case frontend::EmitAssembly: return "-S"; - case frontend::EmitBC: return "-emit-llvm-bc"; - case frontend::EmitHTML: return "-emit-html"; - case frontend::EmitLLVM: return "-emit-llvm"; - case frontend::EmitLLVMOnly: return "-emit-llvm-only"; - case frontend::EmitCodeGenOnly: return "-emit-codegen-only"; - case frontend::EmitObj: return "-emit-obj"; - case frontend::FixIt: return "-fixit"; - case frontend::GenerateModule: return "-emit-module"; - case frontend::GeneratePCH: return "-emit-pch"; - case frontend::GeneratePTH: return "-emit-pth"; - case frontend::InitOnly: return "-init-only"; - case frontend::ParseSyntaxOnly: return "-fsyntax-only"; - case frontend::PrintDeclContext: return "-print-decl-contexts"; - case frontend::PrintPreamble: return "-print-preamble"; - case frontend::PrintPreprocessedInput: return "-E"; - case frontend::RewriteMacros: return "-rewrite-macros"; - case frontend::RewriteObjC: return "-rewrite-objc"; - case frontend::RewriteTest: return "-rewrite-test"; - case frontend::RunAnalysis: return "-analyze"; - case frontend::MigrateSource: return "-migrate"; - case frontend::RunPreprocessorOnly: return "-Eonly"; - } - - llvm_unreachable("Unexpected language kind!"); -} - -static void FileSystemOptsToArgs(const FileSystemOptions &Opts, ToArgsList &Res){ - if (!Opts.WorkingDir.empty()) - Res.push_back("-working-directory", Opts.WorkingDir); -} - -static void CodeCompleteOptionsToArgs(const CodeCompleteOptions &Opts, - ToArgsList &Res) { - if (Opts.IncludeMacros) - Res.push_back("-code-completion-macros"); - if (Opts.IncludeCodePatterns) - Res.push_back("-code-completion-patterns"); - if (!Opts.IncludeGlobals) - Res.push_back("-no-code-completion-globals"); - if (Opts.IncludeBriefComments) - Res.push_back("-code-completion-brief-comments"); -} - -static void FrontendOptsToArgs(const FrontendOptions &Opts, ToArgsList &Res) { - if (Opts.DisableFree) - Res.push_back("-disable-free"); - if (Opts.RelocatablePCH) - Res.push_back("-relocatable-pch"); - if (Opts.ShowHelp) - Res.push_back("-help"); - if (Opts.ShowStats) - Res.push_back("-print-stats"); - if (Opts.ShowTimers) - Res.push_back("-ftime-report"); - if (Opts.ShowVersion) - Res.push_back("-version"); - if (Opts.FixWhatYouCan) - Res.push_back("-fix-what-you-can"); - if (Opts.FixOnlyWarnings) - Res.push_back("-fix-only-warnings"); - if (Opts.FixAndRecompile) - Res.push_back("-fixit-recompile"); - if (Opts.FixToTemporaries) - Res.push_back("-fixit-to-temporary"); - switch (Opts.ARCMTAction) { - case FrontendOptions::ARCMT_None: - break; - case FrontendOptions::ARCMT_Check: - Res.push_back("-arcmt-check"); - break; - case FrontendOptions::ARCMT_Modify: - Res.push_back("-arcmt-modify"); - break; - case FrontendOptions::ARCMT_Migrate: - Res.push_back("-arcmt-migrate"); - break; - } - CodeCompleteOptionsToArgs(Opts.CodeCompleteOpts, Res); - if (!Opts.MTMigrateDir.empty()) - Res.push_back("-mt-migrate-directory", Opts.MTMigrateDir); - if (!Opts.ARCMTMigrateReportOut.empty()) - Res.push_back("-arcmt-migrate-report-output", Opts.ARCMTMigrateReportOut); - if (Opts.ARCMTMigrateEmitARCErrors) - Res.push_back("-arcmt-migrate-emit-errors"); - - if (Opts.ObjCMTAction & ~FrontendOptions::ObjCMT_Literals) - Res.push_back("-objcmt-migrate-literals"); - if (Opts.ObjCMTAction & ~FrontendOptions::ObjCMT_Subscripting) - Res.push_back("-objcmt-migrate-subscripting"); - - bool NeedLang = false; - for (unsigned i = 0, e = Opts.Inputs.size(); i != e; ++i) - if (FrontendOptions::getInputKindForExtension(Opts.Inputs[i].File) != - Opts.Inputs[i].Kind) - NeedLang = true; - if (NeedLang) - Res.push_back("-x", getInputKindName(Opts.Inputs[0].Kind)); - for (unsigned i = 0, e = Opts.Inputs.size(); i != e; ++i) { - assert((!NeedLang || Opts.Inputs[i].Kind == Opts.Inputs[0].Kind) && - "Unable to represent this input vector!"); - Res.push_back(Opts.Inputs[i].File); - } - - if (!Opts.OutputFile.empty()) - Res.push_back("-o", Opts.OutputFile); - if (!Opts.CodeCompletionAt.FileName.empty()) - Res.push_back("-code-completion-at", - Opts.CodeCompletionAt.FileName + ":" + - llvm::utostr(Opts.CodeCompletionAt.Line) + ":" + - llvm::utostr(Opts.CodeCompletionAt.Column)); - if (Opts.ProgramAction != frontend::PluginAction) - Res.push_back(getActionName(Opts.ProgramAction)); - if (!Opts.ActionName.empty()) { - Res.push_back("-plugin", Opts.ActionName); - for(unsigned i = 0, e = Opts.PluginArgs.size(); i != e; ++i) - Res.push_back("-plugin-arg-" + Opts.ActionName, Opts.PluginArgs[i]); - } - if (!Opts.ASTDumpFilter.empty()) - Res.push_back("-ast-dump-filter", Opts.ASTDumpFilter); - for (unsigned i = 0, e = Opts.Plugins.size(); i != e; ++i) - Res.push_back("-load", Opts.Plugins[i]); - for (unsigned i = 0, e = Opts.AddPluginActions.size(); i != e; ++i) { - Res.push_back("-add-plugin", Opts.AddPluginActions[i]); - for(unsigned ai = 0, ae = Opts.AddPluginArgs.size(); ai != ae; ++ai) - Res.push_back("-plugin-arg-" + Opts.AddPluginActions[i], - Opts.AddPluginArgs[i][ai]); - } - for (unsigned i = 0, e = Opts.ASTMergeFiles.size(); i != e; ++i) - Res.push_back("-ast-merge", Opts.ASTMergeFiles[i]); - for (unsigned i = 0, e = Opts.LLVMArgs.size(); i != e; ++i) - Res.push_back("-mllvm", Opts.LLVMArgs[i]); - if (!Opts.OverrideRecordLayoutsFile.empty()) - Res.push_back("-foverride-record-layout=" + Opts.OverrideRecordLayoutsFile); -} - -static void HeaderSearchOptsToArgs(const HeaderSearchOptions &Opts, - ToArgsList &Res) { - if (Opts.Sysroot != "/") { - Res.push_back("-isysroot"); - Res.push_back(Opts.Sysroot); - } - - /// User specified include entries. - for (unsigned i = 0, e = Opts.UserEntries.size(); i != e; ++i) { - const HeaderSearchOptions::Entry &E = Opts.UserEntries[i]; - if (E.IsFramework && (E.Group != frontend::Angled || !E.IsUserSupplied)) - llvm::report_fatal_error("Invalid option set!"); - if (E.IsUserSupplied) { - switch (E.Group) { - case frontend::After: - Res.push_back("-idirafter"); - break; - - case frontend::Quoted: - Res.push_back("-iquote"); - break; - - case frontend::System: - Res.push_back("-isystem"); - break; - - case frontend::IndexHeaderMap: - Res.push_back("-index-header-map"); - Res.push_back(E.IsFramework? "-F" : "-I"); - break; - - case frontend::CSystem: - Res.push_back("-c-isystem"); - break; - - case frontend::CXXSystem: - Res.push_back("-cxx-isystem"); - break; - - case frontend::ObjCSystem: - Res.push_back("-objc-isystem"); - break; - - case frontend::ObjCXXSystem: - Res.push_back("-objcxx-isystem"); - break; - - case frontend::Angled: - Res.push_back(E.IsFramework ? "-F" : "-I"); - break; - } - } else { - if (E.IsInternal) { - assert(E.Group == frontend::System && "Unexpected header search group"); - if (E.ImplicitExternC) - Res.push_back("-internal-externc-isystem"); - else - Res.push_back("-internal-isystem"); - } else { - if (E.Group != frontend::Angled && E.Group != frontend::System) - llvm::report_fatal_error("Invalid option set!"); - Res.push_back(E.Group == frontend::Angled ? "-iwithprefixbefore" : - "-iwithprefix"); - } - } - Res.push_back(E.Path); - } - - /// User-specified system header prefixes. - for (unsigned i = 0, e = Opts.SystemHeaderPrefixes.size(); i != e; ++i) { - if (Opts.SystemHeaderPrefixes[i].IsSystemHeader) - Res.push_back("-isystem-prefix"); - else - Res.push_back("-ino-system-prefix"); - - Res.push_back(Opts.SystemHeaderPrefixes[i].Prefix); - } - - if (!Opts.ResourceDir.empty()) - Res.push_back("-resource-dir", Opts.ResourceDir); - if (!Opts.ModuleCachePath.empty()) - Res.push_back("-fmodule-cache-path", Opts.ModuleCachePath); - if (!Opts.UseStandardSystemIncludes) - Res.push_back("-nostdsysteminc"); - if (!Opts.UseStandardCXXIncludes) - Res.push_back("-nostdinc++"); - if (Opts.UseLibcxx) - Res.push_back("-stdlib=libc++"); - if (Opts.Verbose) - Res.push_back("-v"); -} - -static void LangOptsToArgs(const LangOptions &Opts, ToArgsList &Res) { - LangOptions DefaultLangOpts; - - // FIXME: Need to set -std to get all the implicit options. - - // FIXME: We want to only pass options relative to the defaults, which - // requires constructing a target. :( - // - // It would be better to push the all target specific choices into the driver, - // so that everything below that was more uniform. - - if (Opts.Trigraphs) - Res.push_back("-trigraphs"); - // Implicit based on the input kind: - // AsmPreprocessor, CPlusPlus, ObjC1, ObjC2, OpenCL - // Implicit based on the input language standard: - // BCPLComment, C99, CPlusPlus0x, Digraphs, GNUInline, ImplicitInt, GNUMode - if (Opts.DollarIdents) - Res.push_back("-fdollars-in-identifiers"); - if (Opts.GNUMode && !Opts.GNUKeywords) - Res.push_back("-fno-gnu-keywords"); - if (!Opts.GNUMode && Opts.GNUKeywords) - Res.push_back("-fgnu-keywords"); - if (Opts.MicrosoftExt) - Res.push_back("-fms-extensions"); - if (Opts.MicrosoftMode) - Res.push_back("-fms-compatibility"); - if (Opts.MSCVersion != 0) - Res.push_back("-fmsc-version=" + llvm::utostr(Opts.MSCVersion)); - if (Opts.Borland) - Res.push_back("-fborland-extensions"); - if (Opts.ObjCDefaultSynthProperties) - Res.push_back("-fobjc-default-synthesize-properties"); - // NoInline is implicit. - if (!Opts.CXXOperatorNames) - Res.push_back("-fno-operator-names"); - if (Opts.PascalStrings) - Res.push_back("-fpascal-strings"); - if (Opts.CatchUndefined) - Res.push_back("-fcatch-undefined-behavior"); - if (Opts.AddressSanitizer) - Res.push_back("-faddress-sanitizer"); - if (Opts.ThreadSanitizer) - Res.push_back("-fthread-sanitizer"); - if (Opts.WritableStrings) - Res.push_back("-fwritable-strings"); - if (Opts.ConstStrings) - Res.push_back("-fconst-strings"); - if (!Opts.LaxVectorConversions) - Res.push_back("-fno-lax-vector-conversions"); - if (Opts.AltiVec) - Res.push_back("-faltivec"); - if (Opts.Exceptions) - Res.push_back("-fexceptions"); - if (Opts.ObjCExceptions) - Res.push_back("-fobjc-exceptions"); - if (Opts.CXXExceptions) - Res.push_back("-fcxx-exceptions"); - if (Opts.SjLjExceptions) - Res.push_back("-fsjlj-exceptions"); - if (Opts.TraditionalCPP) - Res.push_back("-traditional-cpp"); - if (!Opts.RTTI) - Res.push_back("-fno-rtti"); - if (Opts.MSBitfields) - Res.push_back("-mms-bitfields"); - if (Opts.Freestanding) - Res.push_back("-ffreestanding"); - if (Opts.NoBuiltin) - Res.push_back("-fno-builtin"); - if (!Opts.AssumeSaneOperatorNew) - Res.push_back("-fno-assume-sane-operator-new"); - if (!Opts.ThreadsafeStatics) - Res.push_back("-fno-threadsafe-statics"); - if (Opts.POSIXThreads) - Res.push_back("-pthread"); - if (Opts.Blocks) - Res.push_back("-fblocks"); - if (Opts.BlocksRuntimeOptional) - Res.push_back("-fblocks-runtime-optional"); - if (Opts.Modules) - Res.push_back("-fmodules"); - if (Opts.EmitAllDecls) - Res.push_back("-femit-all-decls"); - if (Opts.MathErrno) - Res.push_back("-fmath-errno"); - switch (Opts.getSignedOverflowBehavior()) { - case LangOptions::SOB_Undefined: break; - case LangOptions::SOB_Defined: Res.push_back("-fwrapv"); break; - case LangOptions::SOB_Trapping: - Res.push_back("-ftrapv"); - if (!Opts.OverflowHandler.empty()) - Res.push_back("-ftrapv-handler", Opts.OverflowHandler); - break; - } - switch (Opts.getFPContractMode()) { - case LangOptions::FPC_Off: Res.push_back("-ffp-contract=off"); break; - case LangOptions::FPC_On: Res.push_back("-ffp-contract=on"); break; - case LangOptions::FPC_Fast: Res.push_back("-ffp-contract=fast"); break; - } - if (Opts.HeinousExtensions) - Res.push_back("-fheinous-gnu-extensions"); - // Optimize is implicit. - // OptimizeSize is implicit. - if (Opts.FastMath) - Res.push_back("-ffast-math"); - if (Opts.Static) - Res.push_back("-static-define"); - if (Opts.DumpRecordLayoutsSimple) - Res.push_back("-fdump-record-layouts-simple"); - else if (Opts.DumpRecordLayouts) - Res.push_back("-fdump-record-layouts"); - if (Opts.DumpVTableLayouts) - Res.push_back("-fdump-vtable-layouts"); - if (Opts.NoBitFieldTypeAlign) - Res.push_back("-fno-bitfield-type-alignment"); - if (Opts.PICLevel) - Res.push_back("-pic-level", llvm::utostr(Opts.PICLevel)); - if (Opts.PIELevel) - Res.push_back("-pie-level", llvm::utostr(Opts.PIELevel)); - if (Opts.ObjCGCBitmapPrint) - Res.push_back("-print-ivar-layout"); - if (Opts.NoConstantCFStrings) - Res.push_back("-fno-constant-cfstrings"); - if (!Opts.AccessControl) - Res.push_back("-fno-access-control"); - if (!Opts.CharIsSigned) - Res.push_back("-fno-signed-char"); - if (Opts.CPlusPlus && !Opts.WChar) - Res.push_back("-fno-wchar"); - if (Opts.ShortWChar) - Res.push_back("-fshort-wchar"); - if (!Opts.ElideConstructors) - Res.push_back("-fno-elide-constructors"); - if (Opts.getGC() != LangOptions::NonGC) { - if (Opts.getGC() == LangOptions::HybridGC) { - Res.push_back("-fobjc-gc"); - } else { - assert(Opts.getGC() == LangOptions::GCOnly && "Invalid GC mode!"); - Res.push_back("-fobjc-gc-only"); - } - } - Res.push_back("-fobjc-runtime=" + Opts.ObjCRuntime.getAsString()); - if (Opts.ObjCAutoRefCount) - Res.push_back("-fobjc-arc"); - if (Opts.ObjCARCWeak) - Res.push_back("-fobjc-runtime-has-weak"); - if (!Opts.ObjCInferRelatedResultType) - Res.push_back("-fno-objc-infer-related-result-type"); - - if (Opts.AppleKext) - Res.push_back("-fapple-kext"); - - if (Opts.getVisibilityMode() != DefaultVisibility) { - Res.push_back("-fvisibility"); - if (Opts.getVisibilityMode() == HiddenVisibility) { - Res.push_back("hidden"); - } else { - assert(Opts.getVisibilityMode() == ProtectedVisibility && - "Invalid visibility!"); - Res.push_back("protected"); - } - } - if (Opts.InlineVisibilityHidden) - Res.push_back("-fvisibility-inlines-hidden"); - - if (Opts.getStackProtector() != 0) - Res.push_back("-stack-protector", llvm::utostr(Opts.getStackProtector())); - if (Opts.InstantiationDepth != DefaultLangOpts.InstantiationDepth) - Res.push_back("-ftemplate-depth", llvm::utostr(Opts.InstantiationDepth)); - if (Opts.ConstexprCallDepth != DefaultLangOpts.ConstexprCallDepth) - Res.push_back("-fconstexpr-depth", llvm::utostr(Opts.ConstexprCallDepth)); - if (!Opts.ObjCConstantStringClass.empty()) - Res.push_back("-fconstant-string-class", Opts.ObjCConstantStringClass); - if (Opts.FakeAddressSpaceMap) - Res.push_back("-ffake-address-space-map"); - if (Opts.ParseUnknownAnytype) - Res.push_back("-funknown-anytype"); - if (Opts.DebuggerSupport) - Res.push_back("-fdebugger-support"); - if (Opts.DebuggerCastResultToId) - Res.push_back("-fdebugger-cast-result-to-id"); - if (Opts.DebuggerObjCLiteral) - Res.push_back("-fdebugger-objc-literal"); - if (Opts.DelayedTemplateParsing) - Res.push_back("-fdelayed-template-parsing"); - if (Opts.Deprecated) - Res.push_back("-fdeprecated-macro"); - if (Opts.ApplePragmaPack) - Res.push_back("-fapple-pragma-pack"); - if (!Opts.CurrentModule.empty()) - Res.push_back("-fmodule-name=" + Opts.CurrentModule); -} - -static void PreprocessorOptsToArgs(const PreprocessorOptions &Opts, - ToArgsList &Res) { - for (unsigned i = 0, e = Opts.Macros.size(); i != e; ++i) - Res.push_back(std::string(Opts.Macros[i].second ? "-U" : "-D") + - Opts.Macros[i].first); - for (unsigned i = 0, e = Opts.Includes.size(); i != e; ++i) { - // FIXME: We need to avoid reincluding the implicit PCH and PTH includes. - Res.push_back("-include", Opts.Includes[i]); - } - for (unsigned i = 0, e = Opts.MacroIncludes.size(); i != e; ++i) - Res.push_back("-imacros", Opts.MacroIncludes[i]); - if (!Opts.UsePredefines) - Res.push_back("-undef"); - if (Opts.DetailedRecord) - Res.push_back("-detailed-preprocessing-record"); - if (!Opts.ImplicitPCHInclude.empty()) - Res.push_back("-include-pch", Opts.ImplicitPCHInclude); - if (!Opts.ImplicitPTHInclude.empty()) - Res.push_back("-include-pth", Opts.ImplicitPTHInclude); - if (!Opts.TokenCache.empty()) { - if (Opts.ImplicitPTHInclude.empty()) - Res.push_back("-token-cache", Opts.TokenCache); - else - assert(Opts.ImplicitPTHInclude == Opts.TokenCache && - "Unsupported option combination!"); - } - for (unsigned i = 0, e = Opts.ChainedIncludes.size(); i != e; ++i) - Res.push_back("-chain-include", Opts.ChainedIncludes[i]); - for (unsigned i = 0, e = Opts.RemappedFiles.size(); i != e; ++i) { - Res.push_back("-remap-file", Opts.RemappedFiles[i].first + ";" + - Opts.RemappedFiles[i].second); - } -} - -static void PreprocessorOutputOptsToArgs(const PreprocessorOutputOptions &Opts, - ToArgsList &Res) { - if (!Opts.ShowCPP && !Opts.ShowMacros) - llvm::report_fatal_error("Invalid option combination!"); - - if (Opts.ShowCPP && Opts.ShowMacros) - Res.push_back("-dD"); - else if (!Opts.ShowCPP && Opts.ShowMacros) - Res.push_back("-dM"); - - if (!Opts.ShowLineMarkers) - Res.push_back("-P"); - if (Opts.ShowComments) - Res.push_back("-C"); - if (Opts.ShowMacroComments) - Res.push_back("-CC"); -} - -static void TargetOptsToArgs(const TargetOptions &Opts, - ToArgsList &Res) { - Res.push_back("-triple"); - Res.push_back(Opts.Triple); - if (!Opts.CPU.empty()) - Res.push_back("-target-cpu", Opts.CPU); - if (!Opts.ABI.empty()) - Res.push_back("-target-abi", Opts.ABI); - if (!Opts.LinkerVersion.empty()) - Res.push_back("-target-linker-version", Opts.LinkerVersion); - if (!Opts.CXXABI.empty()) - Res.push_back("-cxx-abi", Opts.CXXABI); - for (unsigned i = 0, e = Opts.FeaturesAsWritten.size(); i != e; ++i) - Res.push_back("-target-feature", Opts.FeaturesAsWritten[i]); -} - -void CompilerInvocation::toArgs(std::vector &Res) const { - ToArgsList List(Res); - AnalyzerOptsToArgs(*getAnalyzerOpts(), List); - CodeGenOptsToArgs(getCodeGenOpts(), List); - DependencyOutputOptsToArgs(getDependencyOutputOpts(), List); - DiagnosticOptsToArgs(getDiagnosticOpts(), List); - FileSystemOptsToArgs(getFileSystemOpts(), List); - FrontendOptsToArgs(getFrontendOpts(), List); - HeaderSearchOptsToArgs(getHeaderSearchOpts(), List); - LangOptsToArgs(*getLangOpts(), List); - PreprocessorOptsToArgs(getPreprocessorOpts(), List); - PreprocessorOutputOptsToArgs(getPreprocessorOutputOpts(), List); - TargetOptsToArgs(getTargetOpts(), List); -} - -//===----------------------------------------------------------------------===// -// Deserialization (to args) +// Deserialization (from args) //===----------------------------------------------------------------------===// using namespace clang::driver; diff --git a/clang/tools/driver/cc1_main.cpp b/clang/tools/driver/cc1_main.cpp index 5ad7e00..f196856 100644 --- a/clang/tools/driver/cc1_main.cpp +++ b/clang/tools/driver/cc1_main.cpp @@ -47,88 +47,11 @@ static void LLVMErrorHandler(void *UserData, const std::string &Message) { exit(1); } -// FIXME: Define the need for this testing away. -static int cc1_test(DiagnosticsEngine &Diags, - const char **ArgBegin, const char **ArgEnd) { - using namespace clang::driver; - - llvm::errs() << "cc1 argv:"; - for (const char **i = ArgBegin; i != ArgEnd; ++i) - llvm::errs() << " \"" << *i << '"'; - llvm::errs() << "\n"; - - // Parse the arguments. - OptTable *Opts = createDriverOptTable(); - unsigned MissingArgIndex, MissingArgCount; - InputArgList *Args = Opts->ParseArgs(ArgBegin, ArgEnd, - MissingArgIndex, MissingArgCount); - - // Check for missing argument error. - if (MissingArgCount) - Diags.Report(clang::diag::err_drv_missing_argument) - << Args->getArgString(MissingArgIndex) << MissingArgCount; - - // Dump the parsed arguments. - llvm::errs() << "cc1 parsed options:\n"; - for (ArgList::const_iterator it = Args->begin(), ie = Args->end(); - it != ie; ++it) - (*it)->dump(); - - // Create a compiler invocation. - llvm::errs() << "cc1 creating invocation.\n"; - CompilerInvocation Invocation; - if (!CompilerInvocation::CreateFromArgs(Invocation, ArgBegin, ArgEnd, Diags)) - return 1; - - // Convert the invocation back to argument strings. - std::vector InvocationArgs; - Invocation.toArgs(InvocationArgs); - - // Dump the converted arguments. - SmallVector Invocation2Args; - llvm::errs() << "invocation argv :"; - for (unsigned i = 0, e = InvocationArgs.size(); i != e; ++i) { - Invocation2Args.push_back(InvocationArgs[i].c_str()); - llvm::errs() << " \"" << InvocationArgs[i] << '"'; - } - llvm::errs() << "\n"; - - // Convert those arguments to another invocation, and check that we got the - // same thing. - CompilerInvocation Invocation2; - if (!CompilerInvocation::CreateFromArgs(Invocation2, Invocation2Args.begin(), - Invocation2Args.end(), Diags)) - return 1; - - // FIXME: Implement CompilerInvocation comparison. - if (true) { - //llvm::errs() << "warning: Invocations differ!\n"; - - std::vector Invocation2Args; - Invocation2.toArgs(Invocation2Args); - llvm::errs() << "invocation2 argv:"; - for (unsigned i = 0, e = Invocation2Args.size(); i != e; ++i) - llvm::errs() << " \"" << Invocation2Args[i] << '"'; - llvm::errs() << "\n"; - } - - return 0; -} - int cc1_main(const char **ArgBegin, const char **ArgEnd, const char *Argv0, void *MainAddr) { OwningPtr Clang(new CompilerInstance()); IntrusiveRefCntPtr DiagID(new DiagnosticIDs()); - // Run clang -cc1 test. - if (ArgBegin != ArgEnd && StringRef(ArgBegin[0]) == "-cc1test") { - IntrusiveRefCntPtr DiagOpts = new DiagnosticOptions(); - DiagnosticsEngine Diags(DiagID, &*DiagOpts, - new TextDiagnosticPrinter(llvm::errs(), - &*DiagOpts)); - return cc1_test(Diags, ArgBegin + 1, ArgEnd); - } - // Initialize targets first, so that --version shows registered targets. llvm::InitializeAllTargets(); llvm::InitializeAllTargetMCs();