diff options
author | Egor Zhdan <e_zhdan@apple.com> | 2023-11-02 12:39:55 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-11-02 12:39:55 +0000 |
commit | f1c9a1c3a590970ba88e28a58d0f3622e8c2c415 (patch) | |
tree | 17d197874fc8e37eff87a943361fd0af6e4fb5d3 /clang/lib/Frontend/CompilerInvocation.cpp | |
parent | 98da18344eed96cabfd2214131185686b1983412 (diff) | |
download | llvm-f1c9a1c3a590970ba88e28a58d0f3622e8c2c415.zip llvm-f1c9a1c3a590970ba88e28a58d0f3622e8c2c415.tar.gz llvm-f1c9a1c3a590970ba88e28a58d0f3622e8c2c415.tar.bz2 |
Revert "Revert "[APINotes] Upstream APINotesOptions""
This re-lands https://github.com/llvm/llvm-project/pull/70827 while
preventing the assertion failure that occurred when generating
`ASTNodeAPI.json` on non-Apple platforms.
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); |