Lines Matching refs:Opts
777 static void GenerateAnalyzerArgs(AnalyzerOptions &Opts,
780 const AnalyzerOptions *AnalyzerOpts = &Opts;
793 if (Opts.AnalysisStoreOpt != RegionStoreModel) {
794 switch (Opts.AnalysisStoreOpt) {
805 if (Opts.AnalysisConstraintsOpt != RangeConstraintsModel) {
806 switch (Opts.AnalysisConstraintsOpt) {
817 if (Opts.AnalysisDiagOpt != PD_HTML) {
818 switch (Opts.AnalysisDiagOpt) {
829 if (Opts.AnalysisPurgeOpt != PurgeStmt) {
830 switch (Opts.AnalysisPurgeOpt) {
841 if (Opts.InliningMode != NoRedundancy) {
842 switch (Opts.InliningMode) {
853 for (const auto &CP : Opts.CheckersAndPackages) {
862 for (const auto &C : Opts.Config) {
875 static bool ParseAnalyzerArgs(AnalyzerOptions &Opts, ArgList &Args,
879 AnalyzerOptions *AnalyzerOpts = &Opts;
903 Opts.AnalysisStoreOpt = Value;
918 Opts.AnalysisConstraintsOpt = Value;
933 Opts.AnalysisDiagOpt = Value;
948 Opts.AnalysisPurgeOpt = Value;
963 Opts.InliningMode = Value;
967 Opts.CheckersAndPackages.clear();
978 Opts.CheckersAndPackages.emplace_back(std::string(CheckerOrPackage),
1007 if (!key.contains(":") && Opts.isUnknownAnalyzerConfig(key)) {
1008 if (Opts.ShouldEmitErrorsOnInvalidConfigValue)
1014 Opts.Config[key] = std::string(val);
1018 if (Opts.ShouldEmitErrorsOnInvalidConfigValue)
1019 parseAnalyzerConfigs(Opts, &Diags);
1021 parseAnalyzerConfigs(Opts, nullptr);
1023 llvm::raw_string_ostream os(Opts.FullCompilerInvocation);
1286 static void setPGOUseInstrumentor(CodeGenOptions &Opts,
1292 Opts.setProfileUse(CodeGenOptions::ProfileClangInstr);
1299 Opts.setProfileUse(CodeGenOptions::ProfileCSIRInstr);
1301 Opts.setProfileUse(CodeGenOptions::ProfileIRInstr);
1303 Opts.setProfileUse(CodeGenOptions::ProfileClangInstr);
1307 const CodeGenOptions &Opts, SmallVectorImpl<const char *> &Args,
1310 const CodeGenOptions &CodeGenOpts = Opts;
1312 if (Opts.OptimizationLevel == 0)
1315 GenerateArg(Args, OPT_O, Twine(Opts.OptimizationLevel), SA);
1328 if (Opts.OptimizationLevel > 0) {
1329 if (Opts.Inlining == CodeGenOptions::NormalInlining)
1331 else if (Opts.Inlining == CodeGenOptions::OnlyHintInlining)
1333 else if (Opts.Inlining == CodeGenOptions::OnlyAlwaysInlining)
1337 if (Opts.DirectAccessExternalData && LangOpts->PICLevel != 0)
1339 else if (!Opts.DirectAccessExternalData && LangOpts->PICLevel == 0)
1343 switch (Opts.DebugInfo) {
1372 if (Opts.DebugInfo == codegenoptions::DebugInfoConstructor)
1375 for (const auto &Prefix : Opts.DebugPrefixMap)
1379 for (const auto &Prefix : Opts.CoveragePrefixMap)
1383 if (Opts.NewStructPathTBAA)
1386 if (Opts.OptimizeSize == 1)
1388 else if (Opts.OptimizeSize == 2)
1396 if (Opts.UnrollLoops && Opts.OptimizationLevel <= 1)
1398 else if (!Opts.UnrollLoops && Opts.OptimizationLevel > 1)
1401 if (!Opts.BinutilsVersion.empty())
1402 GenerateArg(Args, OPT_fbinutils_version_EQ, Opts.BinutilsVersion, SA);
1404 if (Opts.DebugNameTable ==
1407 else if (Opts.DebugNameTable ==
1415 if (Opts.TimePasses) {
1416 if (Opts.TimePassesPerRun)
1422 if (Opts.PrepareForLTO && !Opts.PrepareForThinLTO)
1425 if (Opts.PrepareForThinLTO)
1428 if (!Opts.ThinLTOIndexFile.empty())
1429 GenerateArg(Args, OPT_fthinlto_index_EQ, Opts.ThinLTOIndexFile, SA);
1431 if (Opts.SaveTempsFilePrefix == OutputFile)
1435 if (!Opts.MemoryProfileOutput.empty()) {
1436 if (Opts.MemoryProfileOutput == MemProfileBasename) {
1440 Opts.MemoryProfileOutput.size() - MemProfileBasename.size();
1442 Opts.MemoryProfileOutput.substr(0, ArgLength), SA);
1446 if (memcmp(Opts.CoverageVersion, "408*", 4) != 0)
1448 StringRef(Opts.CoverageVersion, 4), SA);
1454 if (Opts.XRayInstrumentationBundle.Mask != XRayInstrKind::All) {
1456 serializeXRayInstrumentationBundle(Opts.XRayInstrumentationBundle);
1461 if (Opts.CFProtectionReturn && Opts.CFProtectionBranch)
1463 else if (Opts.CFProtectionReturn)
1465 else if (Opts.CFProtectionBranch)
1468 for (const auto &F : Opts.LinkBitcodeFiles) {
1479 if (Opts.ExplicitEmulatedTLS) {
1481 Args, Opts.EmulatedTLS ? OPT_femulated_tls : OPT_fno_emulated_tls, SA);
1484 if (Opts.FPDenormalMode != llvm::DenormalMode::getIEEE())
1485 GenerateArg(Args, OPT_fdenormal_fp_math_EQ, Opts.FPDenormalMode.str(), SA);
1487 if (Opts.FP32DenormalMode != llvm::DenormalMode::getIEEE())
1488 GenerateArg(Args, OPT_fdenormal_fp_math_f32_EQ, Opts.FP32DenormalMode.str(),
1491 if (Opts.StructReturnConvention == CodeGenOptions::SRCK_OnStack) {
1495 } else if (Opts.StructReturnConvention == CodeGenOptions::SRCK_InRegs) {
1501 if (Opts.EnableAIXExtendedAltivecABI)
1504 if (!Opts.OptRecordPasses.empty())
1505 GenerateArg(Args, OPT_opt_record_passes, Opts.OptRecordPasses, SA);
1507 if (!Opts.OptRecordFormat.empty())
1508 GenerateArg(Args, OPT_opt_record_format, Opts.OptRecordFormat, SA);
1511 Opts.OptimizationRemark);
1514 Opts.OptimizationRemarkMissed);
1517 Opts.OptimizationRemarkAnalysis);
1520 Opts.DiagnosticsHotnessThreshold
1521 ? Twine(*Opts.DiagnosticsHotnessThreshold)
1525 for (StringRef Sanitizer : serializeSanitizerKinds(Opts.SanitizeRecover))
1528 for (StringRef Sanitizer : serializeSanitizerKinds(Opts.SanitizeTrap))
1531 if (!Opts.EmitVersionIdentMetadata)
1534 switch (Opts.FiniteLoops) {
1546 bool CompilerInvocation::ParseCodeGenArgs(CodeGenOptions &Opts, ArgList &Args,
1564 Opts.OptimizationLevel = OptimizationLevel;
1568 CodeGenOptions &CodeGenOpts = Opts;
1586 Opts.setInlining((Opts.OptimizationLevel == 0)
1594 if (Opts.OptimizationLevel > 0) {
1597 Opts.setInlining(CodeGenOptions::NormalInlining);
1599 Opts.setInlining(CodeGenOptions::OnlyHintInlining);
1601 Opts.setInlining(CodeGenOptions::OnlyAlwaysInlining);
1607 Opts.DirectAccessExternalData =
1626 Opts.setDebugInfo(static_cast<codegenoptions::DebugInfoKind>(Val));
1632 if (Opts.getDebugInfo() == codegenoptions::LimitedDebugInfo)
1633 Opts.setDebugInfo(codegenoptions::DebugInfoConstructor);
1637 Opts.DebugPrefixMap.insert(
1643 Opts.CoveragePrefixMap.insert(
1652 if (Opts.OptimizationLevel > 0 && Opts.hasReducedDebugInfo() &&
1654 Opts.EmitCallSiteInfo = true;
1656 if (!Opts.EnableDIPreservationVerify && Opts.DIBugsReportFilePath.size()) {
1658 << Opts.DIBugsReportFilePath;
1659 Opts.DIBugsReportFilePath = "";
1662 Opts.NewStructPathTBAA = !Args.hasArg(OPT_no_struct_path_tbaa) &&
1664 Opts.OptimizeSize = getOptimizationLevelSize(Args);
1665 Opts.SimplifyLibCalls = !LangOpts->NoBuiltin;
1666 if (Opts.SimplifyLibCalls)
1667 Opts.NoBuiltinFuncs = LangOpts->NoBuiltinFuncs;
1668 Opts.UnrollLoops =
1670 (Opts.OptimizationLevel > 1));
1671 Opts.BinutilsVersion =
1674 Opts.DebugNameTable = static_cast<unsigned>(
1681 if (!Opts.ProfileInstrumentUsePath.empty())
1682 setPGOUseInstrumentor(Opts, Opts.ProfileInstrumentUsePath);
1685 Opts.TimePasses = true;
1689 if (Opts.LegacyPassManager)
1695 Opts.TimePassesPerRun = false;
1697 Opts.TimePassesPerRun = true;
1704 Opts.PrepareForLTO = Args.hasArg(OPT_flto, OPT_flto_EQ);
1705 Opts.PrepareForThinLTO = false;
1709 Opts.PrepareForThinLTO = true;
1717 Opts.ThinLTOIndexFile =
1721 Opts.SaveTempsFilePrefix =
1732 Opts.MemoryProfileOutput = std::string(Path);
1734 Opts.MemoryProfileOutput = MemProfileBasename;
1736 memcpy(Opts.CoverageVersion, "408*", 4);
1737 if (Opts.EmitGcovArcs || Opts.EmitGcovNotes) {
1745 memcpy(Opts.CoverageVersion, CoverageVersion.data(), 4);
1764 Opts.CmdArgs.insert(Opts.CmdArgs.end(), ArgStr.begin(), ArgStr.end());
1766 Opts.CmdArgs.push_back('\0');
1773 Opts.XRayInstrumentationBundle.Mask = XRayInstrKind::All;
1777 Diags, Opts.XRayInstrumentationBundle);
1782 Opts.CFProtectionReturn = 1;
1783 Opts.CFProtectionBranch = 1;
1785 Opts.CFProtectionReturn = 1;
1787 Opts.CFProtectionBranch = 1;
1803 Opts.LinkBitcodeFiles.push_back(F);
1808 Opts.ExplicitEmulatedTLS = true;
1821 Opts.FPDenormalMode = llvm::parseDenormalFPAttribute(Val);
1822 if (!Opts.FPDenormalMode.isValid())
1828 Opts.FP32DenormalMode = llvm::parseDenormalFPAttribute(Val);
1829 if (!Opts.FP32DenormalMode.isValid())
1847 Opts.setStructReturnConvention(CodeGenOptions::SRCK_OnStack);
1851 Opts.setStructReturnConvention(CodeGenOptions::SRCK_InRegs);
1867 Opts.EnableAIXExtendedAltivecABI = 1;
1873 if (!Opts.OptRecordFile.empty())
1877 Opts.OptRecordPasses = A->getValue();
1882 Opts.OptRecordFormat = A->getValue();
1886 Opts.OptimizationRemark =
1889 Opts.OptimizationRemarkMissed =
1892 Opts.OptimizationRemarkAnalysis = ParseOptimizationRemark(
1895 NeedLocTracking |= Opts.OptimizationRemark.hasValidPattern() ||
1896 Opts.OptimizationRemarkMissed.hasValidPattern() ||
1897 Opts.OptimizationRemarkAnalysis.hasValidPattern();
1899 bool UsingSampleProfile = !Opts.SampleProfileFile.empty();
1901 (Opts.getProfileUse() != CodeGenOptions::ProfileNone);
1903 if (Opts.DiagnosticsWithHotness && !UsingProfile &&
1919 Opts.DiagnosticsHotnessThreshold = *ResultOrErr;
1920 if ((!Opts.DiagnosticsHotnessThreshold.hasValue() ||
1921 Opts.DiagnosticsHotnessThreshold.getValue() > 0) &&
1934 if (!Opts.StackUsageOutput.empty())
1939 if (NeedLocTracking && Opts.getDebugInfo() == codegenoptions::NoDebugInfo)
1940 Opts.setDebugInfo(codegenoptions::LocTrackingOnly);
1946 Opts.SanitizeRecover);
1949 Opts.SanitizeTrap);
1951 Opts.EmitVersionIdentMetadata = Args.hasFlag(OPT_Qy, OPT_Qn, true);
1954 Opts.FiniteLoops = CodeGenOptions::FiniteLoopsKind::Always;
1956 Opts.FiniteLoops = CodeGenOptions::FiniteLoopsKind::Never;
1958 Opts.EmitIEEENaNCompliantInsts =
1960 if (!Opts.EmitIEEENaNCompliantInsts && !LangOptsRef.NoHonorNaNs)
1967 GenerateDependencyOutputArgs(const DependencyOutputOptions &Opts,
1970 const DependencyOutputOptions &DependencyOutputOpts = Opts;
1982 if (Opts.ShowIncludesDest != ShowIncludesDestination::None)
1985 for (const auto &Dep : Opts.ExtraDeps) {
2005 static bool ParseDependencyOutputArgs(DependencyOutputOptions &Opts,
2011 DependencyOutputOptions &DependencyOutputOpts = Opts;
2028 Opts.ShowIncludesDest = ShowIncludesDestination::Stderr;
2030 Opts.ShowIncludesDest = ShowIncludesDestination::Stdout;
2032 Opts.ShowIncludesDest = ShowIncludesDestination::None;
2042 Opts.ExtraDeps.emplace_back(std::string(Val), EDK_SanitizeIgnorelist);
2044 if (Opts.IncludeSystemHeaders) {
2048 Opts.ExtraDeps.emplace_back(std::string(Val), EDK_SanitizeIgnorelist);
2055 Opts.ExtraDeps.emplace_back(Filename, EDK_ProfileList);
2059 Opts.ExtraDeps.emplace_back(A->getValue(), EDK_DepFileEntry);
2065 Opts.ExtraDeps.emplace_back(std::string(Val), EDK_ModuleFile);
2122 static void GenerateFileSystemArgs(const FileSystemOptions &Opts,
2125 const FileSystemOptions &FileSystemOpts = Opts;
2139 static bool ParseFileSystemArgs(FileSystemOptions &Opts, const ArgList &Args,
2143 FileSystemOptions &FileSystemOpts = Opts;
2159 static void GenerateMigratorArgs(const MigratorOptions &Opts,
2162 const MigratorOptions &MigratorOpts = Opts;
2175 static bool ParseMigratorArgs(MigratorOptions &Opts, const ArgList &Args,
2179 MigratorOptions &MigratorOpts = Opts;
2196 const DiagnosticOptions &Opts, SmallVectorImpl<const char *> &Args,
2198 const DiagnosticOptions *DiagnosticOpts = &Opts;
2210 if (!Opts.DiagnosticSerializationFile.empty())
2212 Opts.DiagnosticSerializationFile, SA);
2214 if (Opts.ShowColors)
2217 if (Opts.VerifyDiagnostics &&
2218 llvm::is_contained(Opts.VerifyPrefixes, "expected"))
2221 for (const auto &Prefix : Opts.VerifyPrefixes)
2225 DiagnosticLevelMask VIU = Opts.getVerifyIgnoreUnexpected();
2241 for (const auto &Warning : Opts.Warnings) {
2248 for (const auto &Remark : Opts.Remarks) {
2261 bool clang::ParseDiagnosticArgs(DiagnosticOptions &Opts, ArgList &Args,
2275 DiagnosticOptions *DiagnosticOpts = &Opts;
2288 llvm::sys::Process::UseANSIEscapeCodes(Opts.UseANSIEscapeCodes);
2292 Opts.DiagnosticSerializationFile = A->getValue();
2293 Opts.ShowColors = parseShowColorsArgs(Args, DefaultDiagColor);
2295 Opts.VerifyDiagnostics = Args.hasArg(OPT_verify) || Args.hasArg(OPT_verify_EQ);
2296 Opts.VerifyPrefixes = Args.getAllArgValues(OPT_verify_EQ);
2298 Opts.VerifyPrefixes.push_back("expected");
2301 if (!checkVerifyPrefixes(Opts.VerifyPrefixes, *Diags))
2302 Opts.VerifyDiagnostics = false;
2304 llvm::sort(Opts.VerifyPrefixes);
2311 Opts.setVerifyIgnoreUnexpected(DiagMask);
2312 if (Opts.TabStop == 0 || Opts.TabStop > DiagnosticOptions::MaxTabStop) {
2313 Opts.TabStop = DiagnosticOptions::DefaultTabStop;
2315 << Opts.TabStop << DiagnosticOptions::DefaultTabStop;
2318 addDiagnosticArgs(Args, OPT_W_Group, OPT_W_value_Group, Opts.Warnings);
2319 addDiagnosticArgs(Args, OPT_R_Group, OPT_R_value_Group, Opts.Remarks);
2424 static void GenerateFrontendArgs(const FrontendOptions &Opts,
2428 const FrontendOptions &FrontendOpts = Opts;
2441 getProgramActionOpt(Opts.ProgramAction);
2450 assert(Opts.ProgramAction == frontend::PluginAction &&
2453 GenerateArg(Args, OPT_plugin, Opts.ActionName, SA);
2458 if (Opts.ProgramAction == frontend::ASTDump) {
2463 if (Opts.ASTDumpFormat != ADOF_Default) {
2465 switch (Opts.ASTDumpFormat) {
2473 if (Opts.ASTDumpAll)
2475 if (Opts.ASTDumpDecls)
2478 if (Opts.ASTDumpAll)
2480 if (Opts.ASTDumpDecls)
2486 if (Opts.ProgramAction == frontend::FixIt && !Opts.FixItSuffix.empty()) {
2488 GenerateArg(Args, OPT_fixit_EQ, Opts.FixItSuffix, SA);
2494 for (const auto &PluginArgs : Opts.PluginArgs) {
2502 for (const auto &Ext : Opts.ModuleFileExtensions)
2506 if (!Opts.CodeCompletionAt.FileName.empty())
2507 GenerateArg(Args, OPT_code_completion_at, Opts.CodeCompletionAt.ToString(),
2510 for (const auto &Plugin : Opts.Plugins)
2515 for (const auto &ModuleFile : Opts.ModuleFiles)
2518 if (Opts.AuxTargetCPU.hasValue())
2519 GenerateArg(Args, OPT_aux_target_cpu, *Opts.AuxTargetCPU, SA);
2521 if (Opts.AuxTargetFeatures.hasValue())
2522 for (const auto &Feature : *Opts.AuxTargetFeatures)
2526 StringRef Preprocessed = Opts.DashX.isPreprocessed() ? "-cpp-output" : "";
2528 Opts.DashX.getFormat() == InputKind::ModuleMap ? "-module-map" : "";
2532 switch (Opts.DashX.getLanguage()) {
2564 assert(Opts.DashX.getFormat() == InputKind::Precompiled &&
2577 for (const auto &Input : Opts.Inputs)
2581 static bool ParseFrontendArgs(FrontendOptions &Opts, ArgList &Args,
2585 FrontendOptions &FrontendOpts = Opts;
2598 Opts.ProgramAction = frontend::ParseSyntaxOnly;
2612 Opts.ASTDumpFormat = static_cast<ASTDumpOutputFormat>(Val);
2616 Opts.ASTDumpFormat = ADOF_Default;
2621 Opts.FixItSuffix = A->getValue();
2650 Opts.ProgramAction = *ProgramAction;
2654 Opts.Plugins.emplace_back(A->getValue(0));
2655 Opts.ProgramAction = frontend::PluginAction;
2656 Opts.ActionName = A->getValue();
2659 Opts.PluginArgs[AA->getValue(0)].emplace_back(AA->getValue(1));
2676 Opts.ModuleFileExtensions.push_back(
2682 Opts.CodeCompletionAt =
2684 if (Opts.CodeCompletionAt.FileName.empty())
2689 Opts.Plugins = Args.getAllArgValues(OPT_load);
2690 Opts.ASTDumpDecls = Args.hasArg(OPT_ast_dump, OPT_ast_dump_EQ);
2691 Opts.ASTDumpAll = Args.hasArg(OPT_ast_dump_all, OPT_ast_dump_all_EQ);
2696 Opts.ModuleFiles.push_back(std::string(Val));
2699 if (Opts.ProgramAction != frontend::GenerateModule && Opts.IsSystemModule)
2704 Opts.AuxTargetCPU = std::string(Args.getLastArgValue(OPT_aux_target_cpu));
2706 Opts.AuxTargetFeatures = Args.getAllArgValues(OPT_aux_target_feature);
2708 if (Opts.ARCMTAction != FrontendOptions::ARCMT_None &&
2709 Opts.ObjCMTAction != FrontendOptions::ObjCMT_None) {
2769 Opts.Inputs.clear();
2788 if (Opts.ProgramAction == frontend::GenerateModule &&
2791 IsSystem = Opts.IsSystemModule;
2794 Opts.Inputs.emplace_back(std::move(Inputs[i]), IK, IsSystem);
2797 Opts.DashX = DashX;
2809 static void GenerateHeaderSearchArgs(HeaderSearchOptions &Opts,
2812 const HeaderSearchOptions *HeaderSearchOpts = &Opts;
2824 if (Opts.UseLibcxx)
2827 if (!Opts.ModuleCachePath.empty())
2828 GenerateArg(Args, OPT_fmodules_cache_path, Opts.ModuleCachePath, SA);
2830 for (const auto &File : Opts.PrebuiltModuleFiles)
2833 for (const auto &Path : Opts.PrebuiltModulePaths)
2836 for (const auto &Macro : Opts.ModulesIgnoreMacros)
2848 auto It = Opts.UserEntries.begin();
2849 auto End = Opts.UserEntries.end();
2925 for (const auto &P : Opts.SystemHeaderPrefixes) {
2931 for (const std::string &F : Opts.VFSOverlayFiles)
2935 static bool ParseHeaderSearchArgs(HeaderSearchOptions &Opts, ArgList &Args,
2940 HeaderSearchOptions *HeaderSearchOpts = &Opts;
2954 Opts.UseLibcxx = (strcmp(A->getValue(), "libc++") == 0);
2965 Opts.ModuleCachePath = std::string(P.str());
2972 Opts.PrebuiltModuleFiles.insert(
2977 Opts.AddPrebuiltModulePath(A->getValue());
2981 Opts.ModulesIgnoreMacros.insert(
3004 llvm::sys::path::append(Buffer, Opts.Sysroot,
3009 Opts.AddPath(Path, Group, IsFramework,
3021 Opts.AddPath(Prefix.str() + A->getValue(), frontend::After, false, true);
3023 Opts.AddPath(Prefix.str() + A->getValue(), frontend::Angled, false, true);
3027 Opts.AddPath(A->getValue(), frontend::After, false, true);
3029 Opts.AddPath(A->getValue(), frontend::Quoted, false, true);
3031 Opts.AddPath(A->getValue(), frontend::System, false,
3034 Opts.AddPath(A->getValue(), frontend::System, true, true);
3036 Opts.AddPath(A->getValue(), frontend::System, /*IsFramework=*/true,
3041 Opts.AddPath(A->getValue(), frontend::CSystem, false, true);
3043 Opts.AddPath(A->getValue(), frontend::CXXSystem, false, true);
3045 Opts.AddPath(A->getValue(), frontend::ObjCSystem, false,true);
3047 Opts.AddPath(A->getValue(), frontend::ObjCXXSystem, false, true);
3055 Opts.AddPath(A->getValue(), Group, false, true);
3061 Opts.AddSystemHeaderPrefix(
3065 Opts.AddVFSOverlayFile(A->getValue());
3070 void CompilerInvocation::setLangDefaults(LangOptions &Opts, InputKind IK,
3082 Opts.AsmPreprocessor = 1;
3084 Opts.ObjC = 1;
3139 Opts.LangStd = LangStd;
3140 Opts.LineComment = Std.hasLineComments();
3141 Opts.C99 = Std.isC99();
3142 Opts.C11 = Std.isC11();
3143 Opts.C17 = Std.isC17();
3144 Opts.C2x = Std.isC2x();
3145 Opts.CPlusPlus = Std.isCPlusPlus();
3146 Opts.CPlusPlus11 = Std.isCPlusPlus11();
3147 Opts.CPlusPlus14 = Std.isCPlusPlus14();
3148 Opts.CPlusPlus17 = Std.isCPlusPlus17();
3149 Opts.CPlusPlus20 = Std.isCPlusPlus20();
3150 Opts.CPlusPlus2b = Std.isCPlusPlus2b();
3151 Opts.GNUMode = Std.isGNUMode();
3152 Opts.GNUCVersion = 0;
3153 Opts.HexFloats = Std.hasHexFloats();
3154 Opts.ImplicitInt = Std.hasImplicitInt();
3156 Opts.CPlusPlusModules = Opts.CPlusPlus20;
3159 Opts.OpenCL = Std.isOpenCL();
3161 Opts.OpenCLVersion = 100;
3163 Opts.OpenCLVersion = 110;
3165 Opts.OpenCLVersion = 120;
3167 Opts.OpenCLVersion = 200;
3169 Opts.OpenCLVersion = 300;
3171 Opts.OpenCLCPlusPlusVersion = 100;
3174 if (Opts.OpenCL) {
3175 Opts.AltiVec = 0;
3176 Opts.ZVector = 0;
3177 Opts.setDefaultFPContractMode(LangOptions::FPM_On);
3178 Opts.OpenCLCPlusPlus = Opts.CPlusPlus;
3179 Opts.OpenCLPipe = Opts.OpenCLCPlusPlus || Opts.OpenCLVersion == 200;
3180 Opts.OpenCLGenericAddressSpace =
3181 Opts.OpenCLCPlusPlus || Opts.OpenCLVersion == 200;
3184 if (Opts.IncludeDefaultHeader) {
3185 if (Opts.DeclareOpenCLBuiltins) {
3194 Opts.HIP = IK.getLanguage() == Language::HIP;
3195 Opts.CUDA = IK.getLanguage() == Language::CUDA || Opts.HIP;
3196 if (Opts.HIP) {
3205 Opts.setDefaultFPContractMode(LangOptions::FPM_FastHonorPragmas);
3206 } else if (Opts.CUDA) {
3208 Opts.setDefaultFPContractMode(LangOptions::FPM_Fast);
3211 Opts.RenderScript = IK.getLanguage() == Language::RenderScript;
3214 Opts.Bool = Opts.OpenCL || Opts.CPlusPlus;
3217 Opts.Half = Opts.OpenCL;
3295 void CompilerInvocation::GenerateLangArgs(const LangOptions &Opts,
3301 if (Opts.ObjCAutoRefCount)
3303 if (Opts.PICLevel != 0)
3304 GenerateArg(Args, OPT_pic_level, Twine(Opts.PICLevel), SA);
3305 if (Opts.PIE)
3307 for (StringRef Sanitizer : serializeSanitizerKinds(Opts.Sanitize))
3314 switch (Opts.LangStd) {
3328 auto LangStandard = LangStandard::getLangStandardForKind(Opts.LangStd);
3331 if (Opts.IncludeDefaultHeader)
3333 if (Opts.DeclareOpenCLBuiltins)
3336 const LangOptions *LangOpts = &Opts;
3351 if (Opts.ObjC) {
3352 GenerateArg(Args, OPT_fobjc_runtime_EQ, Opts.ObjCRuntime.getAsString(), SA);
3354 if (Opts.GC == LangOptions::GCOnly)
3356 else if (Opts.GC == LangOptions::HybridGC)
3358 else if (Opts.ObjCAutoRefCount == 1)
3361 if (Opts.ObjCWeakRuntime)
3364 if (Opts.ObjCWeak)
3367 if (Opts.ObjCSubscriptingLegacyRuntime)
3371 if (Opts.GNUCVersion != 0) {
3372 unsigned Major = Opts.GNUCVersion / 100 / 100;
3373 unsigned Minor = (Opts.GNUCVersion / 100) % 100;
3374 unsigned Patch = Opts.GNUCVersion % 100;
3379 if (Opts.IgnoreXCOFFVisibility)
3382 if (Opts.SignedOverflowBehavior == LangOptions::SOB_Trapping) {
3384 GenerateArg(Args, OPT_ftrapv_handler, Opts.OverflowHandler, SA);
3385 } else if (Opts.SignedOverflowBehavior == LangOptions::SOB_Defined) {
3389 if (Opts.MSCompatibilityVersion != 0) {
3390 unsigned Major = Opts.MSCompatibilityVersion / 10000000;
3391 unsigned Minor = (Opts.MSCompatibilityVersion / 100000) % 100;
3392 unsigned Subminor = Opts.MSCompatibilityVersion % 100000;
3397 if ((!Opts.GNUMode && !Opts.MSVCCompat && !Opts.CPlusPlus17) || T.isOSzOS()) {
3398 if (!Opts.Trigraphs)
3401 if (Opts.Trigraphs)
3405 if (Opts.Blocks && !(Opts.OpenCL && Opts.OpenCLVersion == 200))
3408 if (Opts.ConvergentFunctions &&
3409 !(Opts.OpenCL || (Opts.CUDA && Opts.CUDAIsDevice) || Opts.SYCLIsDevice))
3412 if (Opts.NoBuiltin && !Opts.Freestanding)
3415 if (!Opts.NoBuiltin)
3416 for (const auto &Func : Opts.NoBuiltinFuncs)
3419 if (Opts.LongDoubleSize == 128)
3421 else if (Opts.LongDoubleSize == 64)
3428 if (Opts.OpenMP && !Opts.OpenMPSimd) {
3431 if (Opts.OpenMP != 50)
3432 GenerateArg(Args, OPT_fopenmp_version_EQ, Twine(Opts.OpenMP), SA);
3434 if (!Opts.OpenMPUseTLS)
3437 if (Opts.OpenMPIsDevice)
3440 if (Opts.OpenMPIRBuilder)
3444 if (Opts.OpenMPSimd) {
3447 if (Opts.OpenMP != 50)
3448 GenerateArg(Args, OPT_fopenmp_version_EQ, Twine(Opts.OpenMP), SA);
3451 if (Opts.OpenMPCUDANumSMs != 0)
3453 Twine(Opts.OpenMPCUDANumSMs), SA);
3455 if (Opts.OpenMPCUDABlocksPerSM != 0)
3457 Twine(Opts.OpenMPCUDABlocksPerSM), SA);
3459 if (Opts.OpenMPCUDAReductionBufNum != 1024)
3461 Twine(Opts.OpenMPCUDAReductionBufNum), SA);
3463 if (!Opts.OMPTargetTriples.empty()) {
3467 Opts.OMPTargetTriples, OS,
3472 if (!Opts.OMPHostIRFile.empty())
3473 GenerateArg(Args, OPT_fopenmp_host_ir_file_path, Opts.OMPHostIRFile, SA);
3475 if (Opts.OpenMPCUDAMode)
3478 if (Opts.OpenMPCUDATargetParallel)
3481 if (Opts.OpenMPCUDAForceFullRuntime)
3487 if (Opts.DefaultFPContractMode == LangOptions::FPM_Fast)
3489 else if (Opts.DefaultFPContractMode == LangOptions::FPM_On)
3491 else if (Opts.DefaultFPContractMode == LangOptions::FPM_Off)
3493 else if (Opts.DefaultFPContractMode == LangOptions::FPM_FastHonorPragmas)
3496 for (StringRef Sanitizer : serializeSanitizerKinds(Opts.Sanitize))
3500 for (const std::string &F : Opts.NoSanitizeFiles)
3503 if (Opts.getClangABICompat() == LangOptions::ClangABI::Ver3_8)
3505 else if (Opts.getClangABICompat() == LangOptions::ClangABI::Ver4)
3507 else if (Opts.getClangABICompat() == LangOptions::ClangABI::Ver6)
3509 else if (Opts.getClangABICompat() == LangOptions::ClangABI::Ver7)
3511 else if (Opts.getClangABICompat() == LangOptions::ClangABI::Ver9)
3513 else if (Opts.getClangABICompat() == LangOptions::ClangABI::Ver11)
3515 else if (Opts.getClangABICompat() == LangOptions::ClangABI::Ver12)
3518 if (Opts.getSignReturnAddressScope() ==
3521 else if (Opts.getSignReturnAddressScope() ==
3525 if (Opts.getSignReturnAddressKey() ==
3529 if (Opts.CXXABI)
3530 GenerateArg(Args, OPT_fcxx_abi_EQ, TargetCXXABI::getSpelling(*Opts.CXXABI),
3534 bool CompilerInvocation::ParseLangArgs(LangOptions &Opts, ArgList &Args,
3546 Opts.ObjCAutoRefCount = 1;
3549 Opts.PICLevel = getLastArgIntValue(Args, OPT_pic_level, 0, Diags);
3550 Opts.PIE = Args.hasArg(OPT_pic_is_pie);
3552 Diags, Opts.Sanitize);
3624 Opts.IncludeDefaultHeader = Args.hasArg(OPT_finclude_default_header);
3625 Opts.DeclareOpenCLBuiltins = Args.hasArg(OPT_fdeclare_opencl_builtins);
3627 CompilerInvocation::setLangDefaults(Opts, IK, T, Includes, LangStd);
3631 LangOptions *LangOpts = &Opts;
3647 Opts.CFProtectionBranch = 1;
3658 Opts.setSYCLVersion(LangOptions::SYCL_Default);
3661 if (Opts.ObjC) {
3664 if (Opts.ObjCRuntime.tryParse(value))
3669 Opts.setGC(LangOptions::GCOnly);
3671 Opts.setGC(LangOptions::HybridGC);
3673 Opts.ObjCAutoRefCount = 1;
3674 if (!Opts.ObjCRuntime.allowsARC())
3683 Opts.ObjCWeakRuntime = 1;
3685 Opts.ObjCWeakRuntime = Opts.ObjCRuntime.allowsWeak();
3691 assert(!Opts.ObjCWeak);
3692 } else if (Opts.getGC() != LangOptions::NonGC) {
3694 } else if (!Opts.ObjCWeakRuntime) {
3697 Opts.ObjCWeak = 1;
3699 } else if (Opts.ObjCAutoRefCount) {
3700 Opts.ObjCWeak = Opts.ObjCWeakRuntime;
3704 Opts.ObjCSubscriptingLegacyRuntime =
3705 (Opts.ObjCRuntime.getKind() == ObjCRuntime::FragileMacOSX);
3720 Opts.GNUCVersion = Major * 100 * 100 + Minor * 100 + Patch;
3745 Opts.IgnoreXCOFFVisibility = 1;
3748 Opts.setSignedOverflowBehavior(LangOptions::SOB_Trapping);
3750 Opts.OverflowHandler =
3754 Opts.setSignedOverflowBehavior(LangOptions::SOB_Defined);
3756 Opts.MSCompatibilityVersion = 0;
3762 Opts.MSCompatibilityVersion = VT.getMajor() * 10000000 +
3771 Opts.Trigraphs =
3772 (!Opts.GNUMode && !Opts.MSVCCompat && !Opts.CPlusPlus17) || T.isOSzOS();
3773 Opts.Trigraphs =
3774 Args.hasFlag(OPT_ftrigraphs, OPT_fno_trigraphs, Opts.Trigraphs);
3776 Opts.Blocks = Args.hasArg(OPT_fblocks) || (Opts.OpenCL
3777 && Opts.OpenCLVersion == 200);
3779 Opts.ConvergentFunctions = Opts.OpenCL || (Opts.CUDA && Opts.CUDAIsDevice) ||
3780 Opts.SYCLIsDevice ||
3783 Opts.NoBuiltin = Args.hasArg(OPT_fno_builtin) || Opts.Freestanding;
3784 if (!Opts.NoBuiltin)
3785 getAllNoBuiltinFuncValues(Args, Opts.NoBuiltinFuncs);
3786 Opts.LongDoubleSize = Args.hasArg(OPT_mlong_double_128)
3789 if (Opts.FastRelaxedMath)
3790 Opts.setDefaultFPContractMode(LangOptions::FPM_Fast);
3791 llvm::sort(Opts.ModuleFeatures);
3795 if (Opts.getDefaultCallingConv() != LangOptions::DCC_None)
3803 Opts.setDefaultCallingConv(LangOptions::DCC_StdCall);
3808 Opts.OpenMP = Args.hasArg(OPT_fopenmp) ? 50 : 0;
3813 Opts.OpenMPSimd = !Opts.OpenMP && IsSimdSpecified;
3814 Opts.OpenMPUseTLS =
3815 Opts.OpenMP && !Args.hasArg(options::OPT_fnoopenmp_use_tls);
3816 Opts.OpenMPIsDevice =
3817 Opts.OpenMP && Args.hasArg(options::OPT_fopenmp_is_device);
3818 Opts.OpenMPIRBuilder =
3819 Opts.OpenMP && Args.hasArg(options::OPT_fopenmp_enable_irbuilder);
3821 Opts.OpenMPIsDevice || Args.hasArg(options::OPT_fopenmp_targets_EQ);
3823 Opts.ConvergentFunctions = Opts.ConvergentFunctions || Opts.OpenMPIsDevice;
3825 if (Opts.OpenMP || Opts.OpenMPSimd) {
3828 (IsSimdSpecified || IsTargetSpecified) ? 50 : Opts.OpenMP, Diags))
3829 Opts.OpenMP = Version;
3832 if (!Opts.OpenMPIsDevice) {
3847 if ((Opts.OpenMPIsDevice && (T.isNVPTX() || T.isAMDGCN())) ||
3848 Opts.OpenCLCPlusPlus) {
3849 Opts.Exceptions = 0;
3850 Opts.CXXExceptions = 0;
3852 if (Opts.OpenMPIsDevice && T.isNVPTX()) {
3853 Opts.OpenMPCUDANumSMs =
3855 Opts.OpenMPCUDANumSMs, Diags);
3856 Opts.OpenMPCUDABlocksPerSM =
3858 Opts.OpenMPCUDABlocksPerSM, Diags);
3859 Opts.OpenMPCUDAReductionBufNum = getLastArgIntValue(
3861 Opts.OpenMPCUDAReductionBufNum, Diags);
3891 Opts.OMPTargetTriples.push_back(TT);
3898 Opts.OMPHostIRFile = A->getValue();
3899 if (!llvm::sys::fs::exists(Opts.OMPHostIRFile))
3901 << Opts.OMPHostIRFile;
3905 Opts.OpenMPCUDAMode = Opts.OpenMPIsDevice && (T.isNVPTX() || T.isAMDGCN()) &&
3910 Opts.OpenMPCUDATargetParallel =
3911 Opts.OpenMPIsDevice && (T.isNVPTX() || T.isAMDGCN()) &&
3915 Opts.OpenMPCUDAForceFullRuntime =
3916 Opts.OpenMPIsDevice && (T.isNVPTX() || T.isAMDGCN()) &&
3922 Opts.Optimize = Opt != 0;
3923 Opts.OptimizeSize = OptSize != 0;
3928 Opts.NoInlineDefine = !Opts.Optimize;
3933 Opts.NoInlineDefine = true;
3938 Opts.setDefaultFPContractMode(LangOptions::FPM_Fast);
3940 Opts.setDefaultFPContractMode(LangOptions::FPM_On);
3942 Opts.setDefaultFPContractMode(LangOptions::FPM_Off);
3944 Opts.setDefaultFPContractMode(LangOptions::FPM_FastHonorPragmas);
3951 Diags, Opts.Sanitize);
3952 Opts.NoSanitizeFiles = Args.getAllArgValues(OPT_fsanitize_ignorelist_EQ);
3955 Opts.NoSanitizeFiles.insert(Opts.NoSanitizeFiles.end(),
3960 Opts.setClangABICompat(LangOptions::ClangABI::Latest);
3977 Opts.setClangABICompat(LangOptions::ClangABI::Ver3_8);
3979 Opts.setClangABICompat(LangOptions::ClangABI::Ver4);
3981 Opts.setClangABICompat(LangOptions::ClangABI::Ver6);
3983 Opts.setClangABICompat(LangOptions::ClangABI::Ver7);
3985 Opts.setClangABICompat(LangOptions::ClangABI::Ver9);
3987 Opts.setClangABICompat(LangOptions::ClangABI::Ver11);
3989 Opts.setClangABICompat(LangOptions::ClangABI::Ver12);
4000 Opts.setSignReturnAddressScope(
4003 Opts.setSignReturnAddressScope(
4006 Opts.setSignReturnAddressScope(
4016 Opts.setSignReturnAddressKey(
4019 Opts.setSignReturnAddressKey(
4038 Opts.CXXABI = Kind;
4089 static void GeneratePreprocessorArgs(PreprocessorOptions &Opts,
4095 PreprocessorOptions *PreprocessorOpts = &Opts;
4108 if (Opts.PCHWithHdrStop && !Opts.PCHWithHdrStopCreate)
4111 for (const auto &D : Opts.DeserializedPCHDeclsToErrorOn)
4114 for (const auto &MP : Opts.MacroPrefixMap)
4117 if (Opts.PrecompiledPreambleBytes != std::make_pair(0u, false))
4119 Twine(Opts.PrecompiledPreambleBytes.first) + "," +
4120 (Opts.PrecompiledPreambleBytes.second ? "1" : "0"),
4123 for (const auto &M : Opts.Macros) {
4139 for (const auto &I : Opts.Includes) {
4150 for (const auto &CI : Opts.ChainedIncludes)
4153 for (const auto &RF : Opts.RemappedFiles)
4160 static bool ParsePreprocessorArgs(PreprocessorOptions &Opts, ArgList &Args,
4166 PreprocessorOptions *PreprocessorOpts = &Opts;
4179 Opts.PCHWithHdrStop = Args.hasArg(OPT_pch_through_hdrstop_create) ||
4183 Opts.DeserializedPCHDeclsToErrorOn.insert(A->getValue());
4187 Opts.MacroPrefixMap.insert(
4202 Opts.PrecompiledPreambleBytes.first = Bytes;
4203 Opts.PrecompiledPreambleBytes.second = (EndOfLine != 0);
4211 Opts.addMacroDef("__CET__=1");
4213 Opts.addMacroDef("__CET__=2");
4215 Opts.addMacroDef("__CET__=3");
4221 Opts.addMacroDef(A->getValue());
4223 Opts.addMacroUndef(A->getValue());
4228 Opts.Includes.emplace_back(A->getValue());
4231 Opts.ChainedIncludes.emplace_back(A->getValue());
4241 Opts.addRemappedFile(Split.first, Split.second);
4248 Opts.LexEditorPlaceholders = false;
4254 const PreprocessorOutputOptions &Opts, SmallVectorImpl<const char *> &Args,
4256 const PreprocessorOutputOptions &PreprocessorOutputOpts = Opts;
4269 bool Generate_dM = isStrictlyPreprocessorAction(Action) && !Opts.ShowCPP;
4272 if (!Generate_dM && Opts.ShowMacros)
4276 static bool ParsePreprocessorOutputArgs(PreprocessorOutputOptions &Opts,
4281 PreprocessorOutputOptions &PreprocessorOutputOpts = Opts;
4294 Opts.ShowCPP = isStrictlyPreprocessorAction(Action) && !Args.hasArg(OPT_dM);
4295 Opts.ShowMacros = Args.hasArg(OPT_dM) || Args.hasArg(OPT_dD);
4300 static void GenerateTargetArgs(const TargetOptions &Opts,
4303 const TargetOptions *TargetOpts = &Opts;
4315 if (!Opts.SDKVersion.empty())
4316 GenerateArg(Args, OPT_target_sdk_version_EQ, Opts.SDKVersion.getAsString(),
4320 static bool ParseTargetArgs(TargetOptions &Opts, ArgList &Args,
4324 TargetOptions *TargetOpts = &Opts;
4343 Opts.SDKVersion = Version;
4355 const OptTable &Opts = getDriverOptTable();
4358 InputArgList Args = Opts.ParseArgs(CommandLineArgs, MissingArgIndex,
4371 if (Opts.findNearest(ArgString, Nearest, IncludedFlagsBitmask) > 1)