126266885d6eba8ee197577dd42a8e68a0e4dd2e8Daniel Dunbar//===--- FrontendOptions.h --------------------------------------*- C++ -*-===// 226266885d6eba8ee197577dd42a8e68a0e4dd2e8Daniel Dunbar// 326266885d6eba8ee197577dd42a8e68a0e4dd2e8Daniel Dunbar// The LLVM Compiler Infrastructure 426266885d6eba8ee197577dd42a8e68a0e4dd2e8Daniel Dunbar// 526266885d6eba8ee197577dd42a8e68a0e4dd2e8Daniel Dunbar// This file is distributed under the University of Illinois Open Source 626266885d6eba8ee197577dd42a8e68a0e4dd2e8Daniel Dunbar// License. See LICENSE.TXT for details. 726266885d6eba8ee197577dd42a8e68a0e4dd2e8Daniel Dunbar// 826266885d6eba8ee197577dd42a8e68a0e4dd2e8Daniel Dunbar//===----------------------------------------------------------------------===// 926266885d6eba8ee197577dd42a8e68a0e4dd2e8Daniel Dunbar 1026266885d6eba8ee197577dd42a8e68a0e4dd2e8Daniel Dunbar#ifndef LLVM_CLANG_FRONTEND_FRONTENDOPTIONS_H 1126266885d6eba8ee197577dd42a8e68a0e4dd2e8Daniel Dunbar#define LLVM_CLANG_FRONTEND_FRONTENDOPTIONS_H 1226266885d6eba8ee197577dd42a8e68a0e4dd2e8Daniel Dunbar 13c86804bc9c3f1953520b59084c9ad75104aba123Daniel Dunbar#include "clang/Frontend/CommandLineSourceLoc.h" 14a4de17562d13d7a8188108243c4cfbd52f33229aPirama Arumuga Nainar#include "clang/Serialization/ModuleFileExtension.h" 15d99ef536b241071b6f4c01db6525dc03242ac30bDmitri Gribenko#include "clang/Sema/CodeCompleteOptions.h" 16fbe2fafe317a757031e4f24026a77dd305607d32Daniel Dunbar#include "llvm/ADT/StringRef.h" 1726266885d6eba8ee197577dd42a8e68a0e4dd2e8Daniel Dunbar#include <string> 1826266885d6eba8ee197577dd42a8e68a0e4dd2e8Daniel Dunbar#include <vector> 1926266885d6eba8ee197577dd42a8e68a0e4dd2e8Daniel Dunbar 208616f9af65b9a3662f2c9dfed38eeabc509f8446Argyrios Kyrtzidisnamespace llvm { 218616f9af65b9a3662f2c9dfed38eeabc509f8446Argyrios Kyrtzidisclass MemoryBuffer; 228616f9af65b9a3662f2c9dfed38eeabc509f8446Argyrios Kyrtzidis} 238616f9af65b9a3662f2c9dfed38eeabc509f8446Argyrios Kyrtzidis 2426266885d6eba8ee197577dd42a8e68a0e4dd2e8Daniel Dunbarnamespace clang { 2526266885d6eba8ee197577dd42a8e68a0e4dd2e8Daniel Dunbar 269a8a83b8fe5be9a4ca20ec6eeaafaf201ce594f9Daniel Dunbarnamespace frontend { 279a8a83b8fe5be9a4ca20ec6eeaafaf201ce594f9Daniel Dunbar enum ActionKind { 28171af64ef10ae816ed2a4f15f5d17aca1d71769fAlexander Kornienko ASTDeclList, ///< Parse ASTs and list Decl nodes. 299a8a83b8fe5be9a4ca20ec6eeaafaf201ce594f9Daniel Dunbar ASTDump, ///< Parse ASTs and dump them. 309a8a83b8fe5be9a4ca20ec6eeaafaf201ce594f9Daniel Dunbar ASTPrint, ///< Parse ASTs and print them. 319a8a83b8fe5be9a4ca20ec6eeaafaf201ce594f9Daniel Dunbar ASTView, ///< Parse ASTs and view them in Graphviz. 329a8a83b8fe5be9a4ca20ec6eeaafaf201ce594f9Daniel Dunbar DumpRawTokens, ///< Dump out raw tokens. 339a8a83b8fe5be9a4ca20ec6eeaafaf201ce594f9Daniel Dunbar DumpTokens, ///< Dump out preprocessed tokens. 349a8a83b8fe5be9a4ca20ec6eeaafaf201ce594f9Daniel Dunbar EmitAssembly, ///< Emit a .s file. 359a8a83b8fe5be9a4ca20ec6eeaafaf201ce594f9Daniel Dunbar EmitBC, ///< Emit a .bc file. 369a8a83b8fe5be9a4ca20ec6eeaafaf201ce594f9Daniel Dunbar EmitHTML, ///< Translate input source into HTML. 379a8a83b8fe5be9a4ca20ec6eeaafaf201ce594f9Daniel Dunbar EmitLLVM, ///< Emit a .ll file. 3832148cef25570a4fbe3ad0ec497ce3ae2cf1b774Daniel Dunbar EmitLLVMOnly, ///< Generate LLVM IR, but do not emit anything. 3932148cef25570a4fbe3ad0ec497ce3ae2cf1b774Daniel Dunbar EmitCodeGenOnly, ///< Generate machine code, but don't emit anything. 40da1573f95902a42aa4d11e8f45ab98ec7e27bc28Daniel Dunbar EmitObj, ///< Emit a .o file. 419a8a83b8fe5be9a4ca20ec6eeaafaf201ce594f9Daniel Dunbar FixIt, ///< Parse and apply any fixits to the source. 42467dc88512b4ba4bb16e274ea3771dc1415d31daDouglas Gregor GenerateModule, ///< Generate pre-compiled module. 439a8a83b8fe5be9a4ca20ec6eeaafaf201ce594f9Daniel Dunbar GeneratePCH, ///< Generate pre-compiled header. 449a8a83b8fe5be9a4ca20ec6eeaafaf201ce594f9Daniel Dunbar GeneratePTH, ///< Generate pre-tokenized header. 452758595023c5c7c0495f19260089f975022c50dcDaniel Dunbar InitOnly, ///< Only execute frontend initialization. 46c544ba09695e300f31355af342258bd57619e737Douglas Gregor ModuleFileInfo, ///< Dump information about a module file. 47651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines VerifyPCH, ///< Load and verify that a PCH file is usable. 489a8a83b8fe5be9a4ca20ec6eeaafaf201ce594f9Daniel Dunbar ParseSyntaxOnly, ///< Parse and perform semantic analysis. 49d10c5b88334d860d19284032a7126dc2219f57edDaniel Dunbar PluginAction, ///< Run a plugin action, \see ActionName. 509a8a83b8fe5be9a4ca20ec6eeaafaf201ce594f9Daniel Dunbar PrintDeclContext, ///< Print DeclContext and their Decls. 51f033f1da4a34f8df6e95e9929dc04ff54bb8fb01Douglas Gregor PrintPreamble, ///< Print the "preamble" of the input file 529a8a83b8fe5be9a4ca20ec6eeaafaf201ce594f9Daniel Dunbar PrintPreprocessedInput, ///< -E mode. 53809d1be9820039b4cf6efa48246a0d70ffa13394James Dennett RewriteMacros, ///< Expand macros but not \#includes. 549a8a83b8fe5be9a4ca20ec6eeaafaf201ce594f9Daniel Dunbar RewriteObjC, ///< ObjC->C Rewriter. 559a8a83b8fe5be9a4ca20ec6eeaafaf201ce594f9Daniel Dunbar RewriteTest, ///< Rewriter playground 569a8a83b8fe5be9a4ca20ec6eeaafaf201ce594f9Daniel Dunbar RunAnalysis, ///< Run one or more source code analyses. 5730660a898545416f0fea2d717f16f75640001e38Ted Kremenek MigrateSource, ///< Run migrator. 589a8a83b8fe5be9a4ca20ec6eeaafaf201ce594f9Daniel Dunbar RunPreprocessorOnly ///< Just lex, no output. 599a8a83b8fe5be9a4ca20ec6eeaafaf201ce594f9Daniel Dunbar }; 609a8a83b8fe5be9a4ca20ec6eeaafaf201ce594f9Daniel Dunbar} 619a8a83b8fe5be9a4ca20ec6eeaafaf201ce594f9Daniel Dunbar 621f6b2b5c82b2d2d3935b0db76352a04e9877b73fDouglas Gregorenum InputKind { 631f6b2b5c82b2d2d3935b0db76352a04e9877b73fDouglas Gregor IK_None, 641f6b2b5c82b2d2d3935b0db76352a04e9877b73fDouglas Gregor IK_Asm, 651f6b2b5c82b2d2d3935b0db76352a04e9877b73fDouglas Gregor IK_C, 661f6b2b5c82b2d2d3935b0db76352a04e9877b73fDouglas Gregor IK_CXX, 671f6b2b5c82b2d2d3935b0db76352a04e9877b73fDouglas Gregor IK_ObjC, 681f6b2b5c82b2d2d3935b0db76352a04e9877b73fDouglas Gregor IK_ObjCXX, 691f6b2b5c82b2d2d3935b0db76352a04e9877b73fDouglas Gregor IK_PreprocessedC, 701f6b2b5c82b2d2d3935b0db76352a04e9877b73fDouglas Gregor IK_PreprocessedCXX, 711f6b2b5c82b2d2d3935b0db76352a04e9877b73fDouglas Gregor IK_PreprocessedObjC, 721f6b2b5c82b2d2d3935b0db76352a04e9877b73fDouglas Gregor IK_PreprocessedObjCXX, 731f6b2b5c82b2d2d3935b0db76352a04e9877b73fDouglas Gregor IK_OpenCL, 741f6b2b5c82b2d2d3935b0db76352a04e9877b73fDouglas Gregor IK_CUDA, 753ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar IK_PreprocessedCuda, 761f6b2b5c82b2d2d3935b0db76352a04e9877b73fDouglas Gregor IK_AST, 771f6b2b5c82b2d2d3935b0db76352a04e9877b73fDouglas Gregor IK_LLVM_IR 781f6b2b5c82b2d2d3935b0db76352a04e9877b73fDouglas Gregor}; 791f6b2b5c82b2d2d3935b0db76352a04e9877b73fDouglas Gregor 801f6b2b5c82b2d2d3935b0db76352a04e9877b73fDouglas Gregor 811f6b2b5c82b2d2d3935b0db76352a04e9877b73fDouglas Gregor/// \brief An input file for the front end. 828616f9af65b9a3662f2c9dfed38eeabc509f8446Argyrios Kyrtzidisclass FrontendInputFile { 831f6b2b5c82b2d2d3935b0db76352a04e9877b73fDouglas Gregor /// \brief The file name, or "-" to read from standard input. 841f6b2b5c82b2d2d3935b0db76352a04e9877b73fDouglas Gregor std::string File; 851f6b2b5c82b2d2d3935b0db76352a04e9877b73fDouglas Gregor 868616f9af65b9a3662f2c9dfed38eeabc509f8446Argyrios Kyrtzidis llvm::MemoryBuffer *Buffer; 878616f9af65b9a3662f2c9dfed38eeabc509f8446Argyrios Kyrtzidis 881f6b2b5c82b2d2d3935b0db76352a04e9877b73fDouglas Gregor /// \brief The kind of input, e.g., C source, AST file, LLVM IR. 891f6b2b5c82b2d2d3935b0db76352a04e9877b73fDouglas Gregor InputKind Kind; 901f6b2b5c82b2d2d3935b0db76352a04e9877b73fDouglas Gregor 91a1f1fad8b60e1cb9d21a40a37f2e03150bcbeb6fDouglas Gregor /// \brief Whether we're dealing with a 'system' input (vs. a 'user' input). 92a1f1fad8b60e1cb9d21a40a37f2e03150bcbeb6fDouglas Gregor bool IsSystem; 938616f9af65b9a3662f2c9dfed38eeabc509f8446Argyrios Kyrtzidis 948616f9af65b9a3662f2c9dfed38eeabc509f8446Argyrios Kyrtzidispublic: 95a4de17562d13d7a8188108243c4cfbd52f33229aPirama Arumuga Nainar FrontendInputFile() : Buffer(nullptr), Kind(IK_None), IsSystem(false) { } 96a1f1fad8b60e1cb9d21a40a37f2e03150bcbeb6fDouglas Gregor FrontendInputFile(StringRef File, InputKind Kind, bool IsSystem = false) 976bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines : File(File.str()), Buffer(nullptr), Kind(Kind), IsSystem(IsSystem) { } 988616f9af65b9a3662f2c9dfed38eeabc509f8446Argyrios Kyrtzidis FrontendInputFile(llvm::MemoryBuffer *buffer, InputKind Kind, 998616f9af65b9a3662f2c9dfed38eeabc509f8446Argyrios Kyrtzidis bool IsSystem = false) 1008616f9af65b9a3662f2c9dfed38eeabc509f8446Argyrios Kyrtzidis : Buffer(buffer), Kind(Kind), IsSystem(IsSystem) { } 1018616f9af65b9a3662f2c9dfed38eeabc509f8446Argyrios Kyrtzidis 1028616f9af65b9a3662f2c9dfed38eeabc509f8446Argyrios Kyrtzidis InputKind getKind() const { return Kind; } 1038616f9af65b9a3662f2c9dfed38eeabc509f8446Argyrios Kyrtzidis bool isSystem() const { return IsSystem; } 1048616f9af65b9a3662f2c9dfed38eeabc509f8446Argyrios Kyrtzidis 1056bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines bool isEmpty() const { return File.empty() && Buffer == nullptr; } 1068616f9af65b9a3662f2c9dfed38eeabc509f8446Argyrios Kyrtzidis bool isFile() const { return !isBuffer(); } 1076bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines bool isBuffer() const { return Buffer != nullptr; } 1088616f9af65b9a3662f2c9dfed38eeabc509f8446Argyrios Kyrtzidis 1098616f9af65b9a3662f2c9dfed38eeabc509f8446Argyrios Kyrtzidis StringRef getFile() const { 1108616f9af65b9a3662f2c9dfed38eeabc509f8446Argyrios Kyrtzidis assert(isFile()); 1118616f9af65b9a3662f2c9dfed38eeabc509f8446Argyrios Kyrtzidis return File; 1128616f9af65b9a3662f2c9dfed38eeabc509f8446Argyrios Kyrtzidis } 1138616f9af65b9a3662f2c9dfed38eeabc509f8446Argyrios Kyrtzidis llvm::MemoryBuffer *getBuffer() const { 1148616f9af65b9a3662f2c9dfed38eeabc509f8446Argyrios Kyrtzidis assert(isBuffer()); 1158616f9af65b9a3662f2c9dfed38eeabc509f8446Argyrios Kyrtzidis return Buffer; 1168616f9af65b9a3662f2c9dfed38eeabc509f8446Argyrios Kyrtzidis } 1171f6b2b5c82b2d2d3935b0db76352a04e9877b73fDouglas Gregor}; 118d99ef536b241071b6f4c01db6525dc03242ac30bDmitri Gribenko 11926266885d6eba8ee197577dd42a8e68a0e4dd2e8Daniel Dunbar/// FrontendOptions - Options for controlling the behavior of the frontend. 12026266885d6eba8ee197577dd42a8e68a0e4dd2e8Daniel Dunbarclass FrontendOptions { 12126266885d6eba8ee197577dd42a8e68a0e4dd2e8Daniel Dunbarpublic: 122914474ca51d202369241a81013208833a6bb3f12Daniel Dunbar unsigned DisableFree : 1; ///< Disable memory freeing on exit. 123914474ca51d202369241a81013208833a6bb3f12Daniel Dunbar unsigned RelocatablePCH : 1; ///< When generating PCH files, 1243c7f4134603d04b44f997b43c0a9def270f25386Sebastian Redl /// instruct the AST writer to create 125914474ca51d202369241a81013208833a6bb3f12Daniel Dunbar /// relocatable PCH files. 1269b5e9ae08defd14441acca1d7d4502b933bf6c5aDaniel Dunbar unsigned ShowHelp : 1; ///< Show the -help text. 127914474ca51d202369241a81013208833a6bb3f12Daniel Dunbar unsigned ShowStats : 1; ///< Show frontend performance 128914474ca51d202369241a81013208833a6bb3f12Daniel Dunbar /// metrics and statistics. 129914474ca51d202369241a81013208833a6bb3f12Daniel Dunbar unsigned ShowTimers : 1; ///< Show timers for individual 130914474ca51d202369241a81013208833a6bb3f12Daniel Dunbar /// actions. 1319b5e9ae08defd14441acca1d7d4502b933bf6c5aDaniel Dunbar unsigned ShowVersion : 1; ///< Show the -version text. 1321450f265fcc84a7ca64dd9f3b8d4492c5bd55e23Nick Lewycky unsigned FixWhatYouCan : 1; ///< Apply fixes even if there are 1331450f265fcc84a7ca64dd9f3b8d4492c5bd55e23Nick Lewycky /// unfixable errors. 13461d679ab2831b161c857cf3f974312fbd4ef1efdArgyrios Kyrtzidis unsigned FixOnlyWarnings : 1; ///< Apply fixes only for warnings. 13561d679ab2831b161c857cf3f974312fbd4ef1efdArgyrios Kyrtzidis unsigned FixAndRecompile : 1; ///< Apply fixes and recompile. 13661d679ab2831b161c857cf3f974312fbd4ef1efdArgyrios Kyrtzidis unsigned FixToTemporaries : 1; ///< Apply fixes to temporary files. 1377ee2049278b98d42709380054eb83f4952af1200Argyrios Kyrtzidis unsigned ARCMTMigrateEmitARCErrors : 1; /// Emit ARC errors even if the 1387ee2049278b98d42709380054eb83f4952af1200Argyrios Kyrtzidis /// migrator can fix them 1396a91d385618ea4d28236c496f540a26877c95525Erik Verbruggen unsigned SkipFunctionBodies : 1; ///< Skip over function bodies to 1406a91d385618ea4d28236c496f540a26877c95525Erik Verbruggen /// speed up parsing in cases you do 1416a91d385618ea4d28236c496f540a26877c95525Erik Verbruggen /// not need them (e.g. with code 1426a91d385618ea4d28236c496f540a26877c95525Erik Verbruggen /// completion). 143f575d6e7c3b887ea4c5394d2c7e322c7a929a57eDouglas Gregor unsigned UseGlobalModuleIndex : 1; ///< Whether we can use the 144f575d6e7c3b887ea4c5394d2c7e322c7a929a57eDouglas Gregor ///< global module index if available. 145f575d6e7c3b887ea4c5394d2c7e322c7a929a57eDouglas Gregor unsigned GenerateGlobalModuleIndex : 1; ///< Whether we can generate the 146f575d6e7c3b887ea4c5394d2c7e322c7a929a57eDouglas Gregor ///< global module index if needed. 147176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines unsigned ASTDumpDecls : 1; ///< Whether we include declaration 148176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines ///< dumps in AST dumps. 149ab297ccbcc51d5197d4ddb4e99b7bc8868d38314Richard Smith unsigned ASTDumpLookups : 1; ///< Whether we include lookup table 150ab297ccbcc51d5197d4ddb4e99b7bc8868d38314Richard Smith ///< dumps in AST dumps. 151a4de17562d13d7a8188108243c4cfbd52f33229aPirama Arumuga Nainar unsigned BuildingImplicitModule : 1; ///< Whether we are performing an 152a4de17562d13d7a8188108243c4cfbd52f33229aPirama Arumuga Nainar ///< implicit module build. 153a4de17562d13d7a8188108243c4cfbd52f33229aPirama Arumuga Nainar unsigned ModulesEmbedAllFiles : 1; ///< Whether we should embed all used 154a4de17562d13d7a8188108243c4cfbd52f33229aPirama Arumuga Nainar ///< files into the PCM file. 155f575d6e7c3b887ea4c5394d2c7e322c7a929a57eDouglas Gregor 156d99ef536b241071b6f4c01db6525dc03242ac30bDmitri Gribenko CodeCompleteOptions CodeCompleteOpts; 157d99ef536b241071b6f4c01db6525dc03242ac30bDmitri Gribenko 158f85e193739c953358c865005855253af4f68a497John McCall enum { 159f85e193739c953358c865005855253af4f68a497John McCall ARCMT_None, 160f85e193739c953358c865005855253af4f68a497John McCall ARCMT_Check, 16169325d5b7cfecf1b3128745efc33612aedf1b8b4Argyrios Kyrtzidis ARCMT_Modify, 16269325d5b7cfecf1b3128745efc33612aedf1b8b4Argyrios Kyrtzidis ARCMT_Migrate 163f85e193739c953358c865005855253af4f68a497John McCall } ARCMTAction; 164f85e193739c953358c865005855253af4f68a497John McCall 16530660a898545416f0fea2d717f16f75640001e38Ted Kremenek enum { 16630660a898545416f0fea2d717f16f75640001e38Ted Kremenek ObjCMT_None = 0, 16730660a898545416f0fea2d717f16f75640001e38Ted Kremenek /// \brief Enable migration to modern ObjC literals. 16830660a898545416f0fea2d717f16f75640001e38Ted Kremenek ObjCMT_Literals = 0x1, 16930660a898545416f0fea2d717f16f75640001e38Ted Kremenek /// \brief Enable migration to modern ObjC subscripting. 170d412999a3da6387dbfaf00f7647132082e94310eFariborz Jahanian ObjCMT_Subscripting = 0x2, 1715b98aba1d74184923da32016c3abbc20e9a7686dFariborz Jahanian /// \brief Enable migration to modern ObjC readonly property. 172081099d302b79d1746c7a39da14e3265971eb718Fariborz Jahanian ObjCMT_ReadonlyProperty = 0x4, 173081099d302b79d1746c7a39da14e3265971eb718Fariborz Jahanian /// \brief Enable migration to modern ObjC readwrite property. 174081099d302b79d1746c7a39da14e3265971eb718Fariborz Jahanian ObjCMT_ReadwriteProperty = 0x8, 175081099d302b79d1746c7a39da14e3265971eb718Fariborz Jahanian /// \brief Enable migration to modern ObjC property. 176081099d302b79d1746c7a39da14e3265971eb718Fariborz Jahanian ObjCMT_Property = (ObjCMT_ReadonlyProperty | ObjCMT_ReadwriteProperty), 177081099d302b79d1746c7a39da14e3265971eb718Fariborz Jahanian /// \brief Enable annotation of ObjCMethods of all kinds. 178081099d302b79d1746c7a39da14e3265971eb718Fariborz Jahanian ObjCMT_Annotation = 0x10, 179081099d302b79d1746c7a39da14e3265971eb718Fariborz Jahanian /// \brief Enable migration of ObjC methods to 'instancetype'. 180081099d302b79d1746c7a39da14e3265971eb718Fariborz Jahanian ObjCMT_Instancetype = 0x20, 181081099d302b79d1746c7a39da14e3265971eb718Fariborz Jahanian /// \brief Enable migration to NS_ENUM/NS_OPTIONS macros. 182081099d302b79d1746c7a39da14e3265971eb718Fariborz Jahanian ObjCMT_NsMacros = 0x40, 183081099d302b79d1746c7a39da14e3265971eb718Fariborz Jahanian /// \brief Enable migration to add conforming protocols. 184081099d302b79d1746c7a39da14e3265971eb718Fariborz Jahanian ObjCMT_ProtocolConformance = 0x80, 18539ebb02cb0bd342ced56de6d19aa9992aa0371b8Fariborz Jahanian /// \brief prefer 'atomic' property over 'nonatomic'. 18639ebb02cb0bd342ced56de6d19aa9992aa0371b8Fariborz Jahanian ObjCMT_AtomicProperty = 0x100, 187cd569f2788ece55b9f790b6900164e2b2d5d966cFariborz Jahanian /// \brief annotate property with NS_RETURNS_INNER_POINTER 188cd569f2788ece55b9f790b6900164e2b2d5d966cFariborz Jahanian ObjCMT_ReturnsInnerPointerProperty = 0x200, 1895d2a20671954f55f765b96375e8bcd38367cb3baFariborz Jahanian /// \brief use NS_NONATOMIC_IOSONLY for property 'atomic' attribute 1905d2a20671954f55f765b96375e8bcd38367cb3baFariborz Jahanian ObjCMT_NsAtomicIOSOnlyProperty = 0x400, 191651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines /// \brief Enable inferring NS_DESIGNATED_INITIALIZER for ObjC methods. 192651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines ObjCMT_DesignatedInitializer = 0x800, 193176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines /// \brief Enable converting setter/getter expressions to property-dot syntx. 194176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines ObjCMT_PropertyDotSyntax = 0x1000, 195081099d302b79d1746c7a39da14e3265971eb718Fariborz Jahanian ObjCMT_MigrateDecls = (ObjCMT_ReadonlyProperty | ObjCMT_ReadwriteProperty | 196081099d302b79d1746c7a39da14e3265971eb718Fariborz Jahanian ObjCMT_Annotation | ObjCMT_Instancetype | 1975d2a20671954f55f765b96375e8bcd38367cb3baFariborz Jahanian ObjCMT_NsMacros | ObjCMT_ProtocolConformance | 198651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines ObjCMT_NsAtomicIOSOnlyProperty | 199651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines ObjCMT_DesignatedInitializer), 200176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines ObjCMT_MigrateAll = (ObjCMT_Literals | ObjCMT_Subscripting | 201176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines ObjCMT_MigrateDecls | ObjCMT_PropertyDotSyntax) 20230660a898545416f0fea2d717f16f75640001e38Ted Kremenek }; 20330660a898545416f0fea2d717f16f75640001e38Ted Kremenek unsigned ObjCMTAction; 2042c050f6a68c4f871d26be63f8d598f1b64a8e16fArgyrios Kyrtzidis std::string ObjCMTWhiteListPath; 20530660a898545416f0fea2d717f16f75640001e38Ted Kremenek 20630660a898545416f0fea2d717f16f75640001e38Ted Kremenek std::string MTMigrateDir; 2077ee2049278b98d42709380054eb83f4952af1200Argyrios Kyrtzidis std::string ARCMTMigrateReportOut; 20869325d5b7cfecf1b3128745efc33612aedf1b8b4Argyrios Kyrtzidis 209fbe2fafe317a757031e4f24026a77dd305607d32Daniel Dunbar /// The input files and their types. 2101f6b2b5c82b2d2d3935b0db76352a04e9877b73fDouglas Gregor std::vector<FrontendInputFile> Inputs; 21126266885d6eba8ee197577dd42a8e68a0e4dd2e8Daniel Dunbar 21226266885d6eba8ee197577dd42a8e68a0e4dd2e8Daniel Dunbar /// The output file, if any. 21326266885d6eba8ee197577dd42a8e68a0e4dd2e8Daniel Dunbar std::string OutputFile; 21426266885d6eba8ee197577dd42a8e68a0e4dd2e8Daniel Dunbar 215ba5f6eced29937e4e4851a2c0980744768413d66Nick Lewycky /// If given, the new suffix for fix-it rewritten files. 216ba5f6eced29937e4e4851a2c0980744768413d66Nick Lewycky std::string FixItSuffix; 217c86804bc9c3f1953520b59084c9ad75104aba123Daniel Dunbar 218e34a052d642ba7830174b1a51787251d7f704f80Alexander Kornienko /// If given, filter dumped AST Decl nodes by this substring. 219e34a052d642ba7830174b1a51787251d7f704f80Alexander Kornienko std::string ASTDumpFilter; 220e34a052d642ba7830174b1a51787251d7f704f80Alexander Kornienko 221914474ca51d202369241a81013208833a6bb3f12Daniel Dunbar /// If given, enable code completion at the provided location. 222914474ca51d202369241a81013208833a6bb3f12Daniel Dunbar ParsedSourceLocation CodeCompletionAt; 223914474ca51d202369241a81013208833a6bb3f12Daniel Dunbar 2249a8a83b8fe5be9a4ca20ec6eeaafaf201ce594f9Daniel Dunbar /// The frontend action to perform. 2259a8a83b8fe5be9a4ca20ec6eeaafaf201ce594f9Daniel Dunbar frontend::ActionKind ProgramAction; 2269a8a83b8fe5be9a4ca20ec6eeaafaf201ce594f9Daniel Dunbar 227d10c5b88334d860d19284032a7126dc2219f57edDaniel Dunbar /// The name of the action to run when using a plugin action. 228d10c5b88334d860d19284032a7126dc2219f57edDaniel Dunbar std::string ActionName; 229d10c5b88334d860d19284032a7126dc2219f57edDaniel Dunbar 230f25649c74397d2620e6ac61f1045261644707c80Nico Weber /// Args to pass to the plugin 2313177aae51a21f61ab483c52f97124bdb707da7f1Daniel Dunbar std::vector<std::string> PluginArgs; 2323177aae51a21f61ab483c52f97124bdb707da7f1Daniel Dunbar 2335aa74affa5d61d04c4b034b3722ca41aec0cba6eNico Weber /// The list of plugin actions to run in addition to the normal action. 2345aa74affa5d61d04c4b034b3722ca41aec0cba6eNico Weber std::vector<std::string> AddPluginActions; 2355aa74affa5d61d04c4b034b3722ca41aec0cba6eNico Weber 236f25649c74397d2620e6ac61f1045261644707c80Nico Weber /// Args to pass to the additional plugins 237f25649c74397d2620e6ac61f1045261644707c80Nico Weber std::vector<std::vector<std::string> > AddPluginArgs; 238f25649c74397d2620e6ac61f1045261644707c80Nico Weber 239efba227cc5459554eca466aafe786b5132dcb68cDaniel Dunbar /// The list of plugins to load. 240efba227cc5459554eca466aafe786b5132dcb68cDaniel Dunbar std::vector<std::string> Plugins; 241efba227cc5459554eca466aafe786b5132dcb68cDaniel Dunbar 242a4de17562d13d7a8188108243c4cfbd52f33229aPirama Arumuga Nainar /// The list of module file extensions. 243a4de17562d13d7a8188108243c4cfbd52f33229aPirama Arumuga Nainar std::vector<IntrusiveRefCntPtr<ModuleFileExtension>> ModuleFileExtensions; 244a4de17562d13d7a8188108243c4cfbd52f33229aPirama Arumuga Nainar 2450e2c34f92f00628d48968dfea096d36381f494cbStephen Hines /// \brief The list of module map files to load before processing the input. 2460e2c34f92f00628d48968dfea096d36381f494cbStephen Hines std::vector<std::string> ModuleMapFiles; 2470e2c34f92f00628d48968dfea096d36381f494cbStephen Hines 248176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines /// \brief The list of additional prebuilt module files to load before 249176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines /// processing the input. 250176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines std::vector<std::string> ModuleFiles; 251176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines 252a4de17562d13d7a8188108243c4cfbd52f33229aPirama Arumuga Nainar /// \brief The list of files to embed into the compiled module file. 253a4de17562d13d7a8188108243c4cfbd52f33229aPirama Arumuga Nainar std::vector<std::string> ModulesEmbedFiles; 254a4de17562d13d7a8188108243c4cfbd52f33229aPirama Arumuga Nainar 2559bed8798964d9f07599c2c9199701f86fbc70e20Douglas Gregor /// \brief The list of AST files to merge. 2569bed8798964d9f07599c2c9199701f86fbc70e20Douglas Gregor std::vector<std::string> ASTMergeFiles; 2579bed8798964d9f07599c2c9199701f86fbc70e20Douglas Gregor 2583f87fb08dd502309960646db01099fb4c1be9a7cDaniel Dunbar /// \brief A list of arguments to forward to LLVM's option processing; this 2593f87fb08dd502309960646db01099fb4c1be9a7cDaniel Dunbar /// should only be used for debugging and experimental features. 2603f87fb08dd502309960646db01099fb4c1be9a7cDaniel Dunbar std::vector<std::string> LLVMArgs; 2613f87fb08dd502309960646db01099fb4c1be9a7cDaniel Dunbar 262453dbcbe30093fbf947a0bec2fbd46e9694eafe9Douglas Gregor /// \brief File name of the file that will provide record layouts 263453dbcbe30093fbf947a0bec2fbd46e9694eafe9Douglas Gregor /// (in the format produced by -fdump-record-layouts). 264453dbcbe30093fbf947a0bec2fbd46e9694eafe9Douglas Gregor std::string OverrideRecordLayoutsFile; 265a4de17562d13d7a8188108243c4cfbd52f33229aPirama Arumuga Nainar 266a4de17562d13d7a8188108243c4cfbd52f33229aPirama Arumuga Nainar /// \brief Auxiliary triple for CUDA compilation. 267a4de17562d13d7a8188108243c4cfbd52f33229aPirama Arumuga Nainar std::string AuxTriple; 268a4de17562d13d7a8188108243c4cfbd52f33229aPirama Arumuga Nainar 26926266885d6eba8ee197577dd42a8e68a0e4dd2e8Daniel Dunbarpublic: 27096e12a264f9268a5fb73020a5d318474f0bfe429Richard Smith FrontendOptions() : 27196e12a264f9268a5fb73020a5d318474f0bfe429Richard Smith DisableFree(false), RelocatablePCH(false), ShowHelp(false), 27296e12a264f9268a5fb73020a5d318474f0bfe429Richard Smith ShowStats(false), ShowTimers(false), ShowVersion(false), 27396e12a264f9268a5fb73020a5d318474f0bfe429Richard Smith FixWhatYouCan(false), FixOnlyWarnings(false), FixAndRecompile(false), 27496e12a264f9268a5fb73020a5d318474f0bfe429Richard Smith FixToTemporaries(false), ARCMTMigrateEmitARCErrors(false), 27520c6f2eae500242d3aef5daaa55d440a0786a1fdDouglas Gregor SkipFunctionBodies(false), UseGlobalModuleIndex(true), 276176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines GenerateGlobalModuleIndex(true), ASTDumpDecls(false), ASTDumpLookups(false), 277a4de17562d13d7a8188108243c4cfbd52f33229aPirama Arumuga Nainar BuildingImplicitModule(false), ModulesEmbedAllFiles(false), 278a6b00fc97669aa25d89ae9f202b05dfadfd0e324Douglas Gregor ARCMTAction(ARCMT_None), ObjCMTAction(ObjCMT_None), 279a6b00fc97669aa25d89ae9f202b05dfadfd0e324Douglas Gregor ProgramAction(frontend::ParseSyntaxOnly) 28096e12a264f9268a5fb73020a5d318474f0bfe429Richard Smith {} 281fbe2fafe317a757031e4f24026a77dd305607d32Daniel Dunbar 282fbe2fafe317a757031e4f24026a77dd305607d32Daniel Dunbar /// getInputKindForExtension - Return the appropriate input kind for a file 283fbe2fafe317a757031e4f24026a77dd305607d32Daniel Dunbar /// extension. For example, "c" would return IK_C. 284fbe2fafe317a757031e4f24026a77dd305607d32Daniel Dunbar /// 285fbe2fafe317a757031e4f24026a77dd305607d32Daniel Dunbar /// \return The input kind for the extension, or IK_None if the extension is 286fbe2fafe317a757031e4f24026a77dd305607d32Daniel Dunbar /// not recognized. 287686775deca8b8685eb90801495880e3abdd844c2Chris Lattner static InputKind getInputKindForExtension(StringRef Extension); 28826266885d6eba8ee197577dd42a8e68a0e4dd2e8Daniel Dunbar}; 28926266885d6eba8ee197577dd42a8e68a0e4dd2e8Daniel Dunbar 29026266885d6eba8ee197577dd42a8e68a0e4dd2e8Daniel Dunbar} // end namespace clang 29126266885d6eba8ee197577dd42a8e68a0e4dd2e8Daniel Dunbar 29226266885d6eba8ee197577dd42a8e68a0e4dd2e8Daniel Dunbar#endif 293