aboutsummaryrefslogtreecommitdiff
path: root/clang/lib/Frontend/CompilerInvocation.cpp
diff options
context:
space:
mode:
authorEgor Zhdan <e_zhdan@apple.com>2023-11-02 12:39:55 +0000
committerGitHub <noreply@github.com>2023-11-02 12:39:55 +0000
commitf1c9a1c3a590970ba88e28a58d0f3622e8c2c415 (patch)
tree17d197874fc8e37eff87a943361fd0af6e4fb5d3 /clang/lib/Frontend/CompilerInvocation.cpp
parent98da18344eed96cabfd2214131185686b1983412 (diff)
downloadllvm-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.cpp19
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);