diff options
Diffstat (limited to 'clang/lib/Frontend/CompilerInvocation.cpp')
-rw-r--r-- | clang/lib/Frontend/CompilerInvocation.cpp | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/clang/lib/Frontend/CompilerInvocation.cpp b/clang/lib/Frontend/CompilerInvocation.cpp index fd6c250..637c6a3 100644 --- a/clang/lib/Frontend/CompilerInvocation.cpp +++ b/clang/lib/Frontend/CompilerInvocation.cpp @@ -145,6 +145,7 @@ CompilerInvocationBase::CompilerInvocationBase() PPOpts(std::make_shared<PreprocessorOptions>()), AnalyzerOpts(llvm::makeIntrusiveRefCnt<AnalyzerOptions>()), MigratorOpts(std::make_shared<MigratorOptions>()), + APINotesOpts(std::make_shared<APINotesOptions>()), CodeGenOpts(std::make_shared<CodeGenOptions>()), FSOpts(std::make_shared<FileSystemOptions>()), FrontendOpts(std::make_shared<FrontendOptions>()), @@ -161,6 +162,7 @@ CompilerInvocationBase::deep_copy_assign(const CompilerInvocationBase &X) { PPOpts = make_shared_copy(X.getPreprocessorOpts()); AnalyzerOpts = makeIntrusiveRefCntCopy(X.getAnalyzerOpts()); MigratorOpts = make_shared_copy(X.getMigratorOpts()); + APINotesOpts = make_shared_copy(X.getAPINotesOpts()); CodeGenOpts = make_shared_copy(X.getCodeGenOpts()); FSOpts = make_shared_copy(X.getFileSystemOpts()); FrontendOpts = make_shared_copy(X.getFrontendOpts()); @@ -180,6 +182,7 @@ CompilerInvocationBase::shallow_copy_assign(const CompilerInvocationBase &X) { PPOpts = X.PPOpts; AnalyzerOpts = X.AnalyzerOpts; MigratorOpts = X.MigratorOpts; + APINotesOpts = X.APINotesOpts; CodeGenOpts = X.CodeGenOpts; FSOpts = X.FSOpts; FrontendOpts = X.FrontendOpts; @@ -233,6 +236,10 @@ MigratorOptions &CowCompilerInvocation::getMutMigratorOpts() { return ensureOwned(MigratorOpts); } +APINotesOptions &CowCompilerInvocation::getMutAPINotesOpts() { + return ensureOwned(APINotesOpts); +} + CodeGenOptions &CowCompilerInvocation::getMutCodeGenOpts() { return ensureOwned(CodeGenOpts); } @@ -3261,6 +3268,17 @@ static bool ParseHeaderSearchArgs(HeaderSearchOptions &Opts, ArgList &Args, return Diags.getNumErrors() == NumErrorsBefore; } +static void ParseAPINotesArgs(APINotesOptions &Opts, ArgList &Args, + DiagnosticsEngine &diags) { + if (const Arg *A = Args.getLastArg(OPT_fapinotes_swift_version)) { + if (Opts.SwiftVersion.tryParse(A->getValue())) + diags.Report(diag::err_drv_invalid_value) + << A->getAsString(Args) << A->getValue(); + } + for (const Arg *A : Args.filtered(OPT_iapinotes_modules)) + Opts.ModuleSearchPaths.push_back(A->getValue()); +} + /// Check if input file kind and language standard are compatible. static bool IsInputCompatibleWithStandard(InputKind IK, const LangStandard &S) { @@ -4538,6 +4556,7 @@ bool CompilerInvocation::CreateFromArgsImpl( llvm::Triple T(Res.getTargetOpts().Triple); ParseHeaderSearchArgs(Res.getHeaderSearchOpts(), Args, Diags, Res.getFileSystemOpts().WorkingDir); + ParseAPINotesArgs(Res.getAPINotesOpts(), Args, Diags); ParseLangArgs(LangOpts, Args, DashX, T, Res.getPreprocessorOpts().Includes, Diags); |