Skip to content

Commit d2ec6b9

Browse files
committed
[Frontend] Forbid IR generation with -check-api-availability-only
1 parent 1a3f285 commit d2ec6b9

File tree

3 files changed

+19
-7
lines changed

3 files changed

+19
-7
lines changed

include/swift/AST/DiagnosticsFrontend.def

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -136,6 +136,9 @@ ERROR(error_mode_cannot_emit_module_semantic_info,none,
136136
ERROR(cannot_emit_ir_skipping_function_bodies,none,
137137
"the -experimental-skip-*-function-bodies* flags do not support "
138138
"emitting IR", ())
139+
ERROR(cannot_emit_ir_checking_api_availability_only,none,
140+
"the flag -check-api-availability-only does not support "
141+
"emitting IR", ())
139142

140143
WARNING(emit_reference_dependencies_without_primary_file,none,
141144
"ignoring -emit-reference-dependencies (requires -primary-file)", ())

lib/Frontend/ArgsToFrontendOptionsConverter.cpp

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -229,13 +229,19 @@ bool ArgsToFrontendOptionsConverter::convert(
229229
if (checkUnusedSupplementaryOutputPaths())
230230
return true;
231231

232-
if (FrontendOptions::doesActionGenerateIR(Opts.RequestedAction) &&
233-
(Args.hasArg(OPT_experimental_skip_non_inlinable_function_bodies) ||
234-
Args.hasArg(OPT_experimental_skip_all_function_bodies) ||
235-
Args.hasArg(
236-
OPT_experimental_skip_non_inlinable_function_bodies_without_types))) {
237-
Diags.diagnose(SourceLoc(), diag::cannot_emit_ir_skipping_function_bodies);
238-
return true;
232+
if (FrontendOptions::doesActionGenerateIR(Opts.RequestedAction)) {
233+
if (Args.hasArg(OPT_experimental_skip_non_inlinable_function_bodies) ||
234+
Args.hasArg(OPT_experimental_skip_all_function_bodies) ||
235+
Args.hasArg(
236+
OPT_experimental_skip_non_inlinable_function_bodies_without_types)) {
237+
Diags.diagnose(SourceLoc(), diag::cannot_emit_ir_skipping_function_bodies);
238+
return true;
239+
}
240+
241+
if (Args.hasArg(OPT_check_api_availability_only)) {
242+
Diags.diagnose(SourceLoc(), diag::cannot_emit_ir_checking_api_availability_only);
243+
return true;
244+
}
239245
}
240246

241247
if (const Arg *A = Args.getLastArg(OPT_module_abi_name))

test/Sema/api-availability-only.swift

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,9 @@
33

44
// RUN: %target-typecheck-verify-swift -module-name MyModule -target %target-cpu-apple-macosx10.15 -check-api-availability-only -enable-library-evolution
55

6+
// RUN: not %target-build-swift -emit-executable %s -g -o %t -emit-module -Xfrontend -check-api-availability-only 2>&1 | %FileCheck %s
7+
// CHECK: the flag -check-api-availability-only does not support emitting IR
8+
69
// REQUIRES: OS=macosx
710

811
@available(macOS 11.0, *)

0 commit comments

Comments
 (0)