Skip to content

Commit 07e54bf

Browse files
authored
Merge pull request swiftlang#41890 from hyp/dev/unify-header
Revert "Merge pull request swiftlang#41831 from hyp/unify-header"
2 parents 5361369 + 4c9582c commit 07e54bf

29 files changed

+220
-157
lines changed

include/swift/AST/DiagnosticsFrontend.def

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,9 @@ ERROR(error_mode_cannot_emit_dependencies,none,
118118
ERROR(error_mode_cannot_emit_reference_dependencies,none,
119119
"this mode does not support emitting reference dependency files", ())
120120
ERROR(error_mode_cannot_emit_header,none,
121-
"this mode does not support emitting Objective-C or C++ headers", ())
121+
"this mode does not support emitting Objective-C headers", ())
122+
ERROR(error_mode_cannot_emit_cxx_header,none,
123+
"this mode does not support emitting C++ headers", ())
122124
ERROR(error_mode_cannot_emit_loaded_module_trace,none,
123125
"this mode does not support emitting the loaded module trace", ())
124126
ERROR(error_mode_cannot_emit_module,none,

include/swift/Basic/FileTypes.def

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,8 @@ TYPE("raw-sib", RawSIB, "sib", "")
5959
TYPE("llvm-ir", LLVM_IR, "ll", "")
6060
TYPE("llvm-bc", LLVM_BC, "bc", "")
6161
TYPE("diagnostics", SerializedDiagnostics, "dia", "")
62-
TYPE("clang-header", ClangHeader, "h", "")
62+
TYPE("objc-header", ObjCHeader, "h", "")
63+
TYPE("cxx-header", CXXHeader, "h", "")
6364
TYPE("swift-dependencies", SwiftDeps, "swiftdeps", "")
6465
TYPE("external-swift-dependencies", ExternalSwiftDeps, "swiftdeps.external", "")
6566
TYPE("remap", Remapping, "remap", "")

include/swift/Basic/SupplementaryOutputPaths.h

Lines changed: 21 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -20,17 +20,27 @@
2020

2121
namespace swift {
2222
struct SupplementaryOutputPaths {
23-
/// The path to which we should emit a header file that exposes the Swift
24-
/// declarations to C, Objective-C and C++ clients for the module.
23+
/// The path to which we should emit an Objective-C header for the module.
2524
///
2625
/// Currently only makes sense when the compiler has whole module knowledge.
2726
/// The modes for which it makes sense incuide both WMO and the "merge
2827
/// modules" job that happens after the normal compilation jobs. That's where
2928
/// the header is emitted in single-file mode, since it needs whole-module
3029
/// information.
3130
///
32-
/// \sa swift::printAsClangHeader
33-
std::string ClangHeaderOutputPath;
31+
/// \sa swift::printAsObjC
32+
std::string ObjCHeaderOutputPath;
33+
34+
/// The path to which we should emit a C++ header for the module.
35+
///
36+
/// Currently only makes sense when the compiler has whole module knowledge.
37+
/// The modes for which it makes sense include both WMO and the "merge
38+
/// modules" job that happens after the normal compilation jobs. That's where
39+
/// the header is emitted in single-file mode, since it needs whole-module
40+
/// information.
41+
///
42+
/// \sa swift::printAsCXX
43+
std::string CxxHeaderOutputPath;
3444

3545
/// The path to which we should emit a serialized module.
3646
/// It is valid whenever there are any inputs.
@@ -160,8 +170,10 @@ struct SupplementaryOutputPaths {
160170

161171
/// Apply a given function for each existing (non-empty string) supplementary output
162172
void forEachSetOutput(llvm::function_ref<void(const std::string&)> fn) const {
163-
if (!ClangHeaderOutputPath.empty())
164-
fn(ClangHeaderOutputPath);
173+
if (!ObjCHeaderOutputPath.empty())
174+
fn(ObjCHeaderOutputPath);
175+
if (!CxxHeaderOutputPath.empty())
176+
fn(CxxHeaderOutputPath);
165177
if (!ModuleOutputPath.empty())
166178
fn(ModuleOutputPath);
167179
if (!ModuleSourceInfoOutputPath.empty())
@@ -197,8 +209,9 @@ struct SupplementaryOutputPaths {
197209
}
198210

199211
bool empty() const {
200-
return ClangHeaderOutputPath.empty() && ModuleOutputPath.empty() &&
201-
ModuleDocOutputPath.empty() && DependenciesFilePath.empty() &&
212+
return ObjCHeaderOutputPath.empty() && CxxHeaderOutputPath.empty() &&
213+
ModuleOutputPath.empty() && ModuleDocOutputPath.empty() &&
214+
DependenciesFilePath.empty() &&
202215
ReferenceDependenciesFilePath.empty() &&
203216
SerializedDiagnosticsPath.empty() && LoadedModuleTracePath.empty() &&
204217
TBDPath.empty() && ModuleInterfaceOutputPath.empty() &&

include/swift/Frontend/Frontend.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -392,7 +392,8 @@ class CompilerInvocation {
392392

393393
std::string getOutputFilenameForAtMostOnePrimary() const;
394394
std::string getMainInputFilenameForDebugInfoForAtMostOnePrimary() const;
395-
std::string getClangHeaderOutputPathForAtMostOnePrimary() const;
395+
std::string getObjCHeaderOutputPathForAtMostOnePrimary() const;
396+
std::string getCxxHeaderOutputPathForAtMostOnePrimary() const;
396397
std::string getModuleOutputPathForAtMostOnePrimary() const;
397398
std::string
398399
getReferenceDependenciesFilePathForPrimary(StringRef filename) const;

include/swift/Frontend/FrontendInputsAndOutputs.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -249,7 +249,8 @@ class FrontendInputsAndOutputs {
249249

250250
bool hasDependenciesPath() const;
251251
bool hasReferenceDependenciesPath() const;
252-
bool hasClangHeaderOutputPath() const;
252+
bool hasObjCHeaderOutputPath() const;
253+
bool hasCxxHeaderOutputPath() const;
253254
bool hasLoadedModuleTracePath() const;
254255
bool hasModuleOutputPath() const;
255256
bool hasModuleDocOutputPath() const;

include/swift/Option/Options.td

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -532,11 +532,13 @@ def emit_objc_header_path : Separate<["-"], "emit-objc-header-path">,
532532
SupplementaryOutput]>,
533533
MetaVarName<"<path>">, HelpText<"Emit an Objective-C header file to <path>">;
534534

535-
def emit_clang_header_path : Separate<["-"], "emit-clang-header-path">,
536-
Flags<[FrontendOption, NoDriverOption, NoInteractiveOption, ArgumentIsPath,
535+
def emit_cxx_header : Flag<["-"], "emit-cxx-header">,
536+
Flags<[FrontendOption, NoInteractiveOption, SupplementaryOutput]>,
537+
HelpText<"Emit a C++ header file">;
538+
def emit_cxx_header_path : Separate<["-"], "emit-cxx-header-path">,
539+
Flags<[FrontendOption, NoInteractiveOption, ArgumentIsPath,
537540
SupplementaryOutput]>,
538-
HelpText<"Emit an Objective-C and C++ header file to <path>">,
539-
Alias<emit_objc_header_path>;
541+
MetaVarName<"<path>">, HelpText<"Emit a C++ header file to <path>">;
540542

541543
def static : Flag<["-"], "static">,
542544
Flags<[FrontendOption, ModuleInterfaceOption, NoInteractiveOption]>,

include/swift/PrintAsClang/PrintAsClang.h

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -21,18 +21,16 @@ namespace swift {
2121
class ModuleDecl;
2222
class ValueDecl;
2323

24-
/// Print the exposed declarations in a module into a Clang header.
24+
/// Print the Objective-C-compatible declarations in a module as a Clang
25+
/// header.
2526
///
26-
/// The Objective-C compatible declarations are printed into a block that
27-
/// ensures that those declarations are only usable when the header is
28-
/// compiled in Objective-C mode.
29-
/// The C++ compatible declarations are printed into a block that ensures
30-
/// that those declarations are only usable when the header is compiled in
31-
/// C++ mode.
27+
/// Returns true on error.
28+
bool printAsObjC(raw_ostream &out, ModuleDecl *M, StringRef bridgingHeader);
29+
30+
/// Print the C++-compatible declarations in a module as a Clang header.
3231
///
3332
/// Returns true on error.
34-
bool printAsClangHeader(raw_ostream &out, ModuleDecl *M,
35-
StringRef bridgingHeader);
33+
bool printAsCXX(raw_ostream &os, ModuleDecl *M);
3634
}
3735

3836
#endif

lib/Basic/FileTypes.cpp

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,8 @@ bool file_types::isTextual(ID Id) {
7373
case file_types::TY_ASTDump:
7474
case file_types::TY_RawSIL:
7575
case file_types::TY_LLVM_IR:
76-
case file_types::TY_ClangHeader:
76+
case file_types::TY_ObjCHeader:
77+
case file_types::TY_CXXHeader:
7778
case file_types::TY_AutolinkFile:
7879
case file_types::TY_ImportedModules:
7980
case file_types::TY_TBD:
@@ -131,7 +132,8 @@ bool file_types::isAfterLLVM(ID Id) {
131132
case file_types::TY_Dependencies:
132133
case file_types::TY_ASTDump:
133134
case file_types::TY_RawSIL:
134-
case file_types::TY_ClangHeader:
135+
case file_types::TY_ObjCHeader:
136+
case file_types::TY_CXXHeader:
135137
case file_types::TY_AutolinkFile:
136138
case file_types::TY_Image:
137139
case file_types::TY_dSYM:
@@ -181,7 +183,8 @@ bool file_types::isPartOfSwiftCompilation(ID Id) {
181183
case file_types::TY_LLVM_BC:
182184
case file_types::TY_Object:
183185
case file_types::TY_Dependencies:
184-
case file_types::TY_ClangHeader:
186+
case file_types::TY_ObjCHeader:
187+
case file_types::TY_CXXHeader:
185188
case file_types::TY_AutolinkFile:
186189
case file_types::TY_PCH:
187190
case file_types::TY_ImportedModules:

lib/Driver/Driver.cpp

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1981,7 +1981,8 @@ void Driver::buildActions(SmallVectorImpl<const Action *> &TopLevelActions,
19811981
if (Arg *A = Args.getLastArg(options::OPT_import_objc_header)) {
19821982
StringRef Value = A->getValue();
19831983
auto Ty = TC.lookupTypeForExtension(llvm::sys::path::extension(Value));
1984-
if (Ty == file_types::TY_ClangHeader) {
1984+
if (Ty == file_types::TY_ObjCHeader ||
1985+
Ty == file_types::TY_CXXHeader) {
19851986
auto *HeaderInput = C.createAction<InputAction>(*A, Ty);
19861987
StringRef PersistentPCHDir;
19871988
if (const Arg *A = Args.getLastArg(options::OPT_pch_output_dir)) {
@@ -2064,7 +2065,8 @@ void Driver::buildActions(SmallVectorImpl<const Action *> &TopLevelActions,
20642065
case file_types::TY_LLVM_IR:
20652066
case file_types::TY_LLVM_BC:
20662067
case file_types::TY_SerializedDiagnostics:
2067-
case file_types::TY_ClangHeader:
2068+
case file_types::TY_ObjCHeader:
2069+
case file_types::TY_CXXHeader:
20682070
case file_types::TY_ClangModuleFile:
20692071
case file_types::TY_SwiftDeps:
20702072
case file_types::TY_ExternalSwiftDeps:
@@ -3478,12 +3480,12 @@ void Driver::chooseObjectiveCHeaderOutputPath(Compilation &C,
34783480
StringRef workingDirectory,
34793481
CommandOutput *Output) const {
34803482

3481-
if (hasExistingAdditionalOutput(*Output, file_types::TY_ClangHeader))
3483+
if (hasExistingAdditionalOutput(*Output, file_types::TY_ObjCHeader))
34823484
return;
34833485

34843486
StringRef ObjCHeaderPath;
34853487
if (OutputMap) {
3486-
auto iter = OutputMap->find(file_types::TY_ClangHeader);
3488+
auto iter = OutputMap->find(file_types::TY_ObjCHeader);
34873489
if (iter != OutputMap->end())
34883490
ObjCHeaderPath = iter->second;
34893491
}
@@ -3493,13 +3495,13 @@ void Driver::chooseObjectiveCHeaderOutputPath(Compilation &C,
34933495
ObjCHeaderPath = A->getValue();
34943496

34953497
if (!ObjCHeaderPath.empty()) {
3496-
Output->setAdditionalOutputForType(file_types::TY_ClangHeader,
3498+
Output->setAdditionalOutputForType(file_types::TY_ObjCHeader,
34973499
ObjCHeaderPath);
34983500
} else {
34993501
// Put the header next to the primary output file.
35003502
// FIXME: That's not correct if the user /just/ passed -emit-header
35013503
// and not -emit-module.
3502-
addAuxiliaryOutput(C, *Output, file_types::TY_ClangHeader,
3504+
addAuxiliaryOutput(C, *Output, file_types::TY_ObjCHeader,
35033505
/*output file map*/ nullptr, workingDirectory);
35043506
}
35053507
}

lib/Driver/ToolChains.cpp

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -675,7 +675,8 @@ const char *ToolChain::JobContext::computeFrontendModeForCompile() const {
675675
case file_types::TY_Dependencies:
676676
case file_types::TY_SwiftModuleDocFile:
677677
case file_types::TY_SerializedDiagnostics:
678-
case file_types::TY_ClangHeader:
678+
case file_types::TY_ObjCHeader:
679+
case file_types::TY_CXXHeader:
679680
case file_types::TY_Image:
680681
case file_types::TY_SwiftDeps:
681682
case file_types::TY_ExternalSwiftDeps:
@@ -814,7 +815,7 @@ void ToolChain::JobContext::addFrontendSupplementaryOutputArguments(
814815
file_types::TY_SerializedDiagnostics,
815816
"-serialize-diagnostics-path");
816817

817-
if (addOutputsOfType(arguments, Output, Args, file_types::ID::TY_ClangHeader,
818+
if (addOutputsOfType(arguments, Output, Args, file_types::ID::TY_ObjCHeader,
818819
"-emit-objc-header-path")) {
819820
assert(OI.CompilerMode == OutputInfo::Mode::SingleCompile &&
820821
"The Swift tool should only emit an Obj-C header in single compile"
@@ -935,7 +936,8 @@ ToolChain::constructInvocation(const BackendJobAction &job,
935936
case file_types::TY_Dependencies:
936937
case file_types::TY_SwiftModuleDocFile:
937938
case file_types::TY_SerializedDiagnostics:
938-
case file_types::TY_ClangHeader:
939+
case file_types::TY_ObjCHeader:
940+
case file_types::TY_CXXHeader:
939941
case file_types::TY_Image:
940942
case file_types::TY_SwiftDeps:
941943
case file_types::TY_ExternalSwiftDeps:
@@ -1098,7 +1100,7 @@ ToolChain::constructInvocation(const MergeModuleJobAction &job,
10981100
file_types::TY_SerializedDiagnostics,
10991101
"-serialize-diagnostics-path");
11001102
addOutputsOfType(Arguments, context.Output, context.Args,
1101-
file_types::TY_ClangHeader, "-emit-objc-header-path");
1103+
file_types::TY_ObjCHeader, "-emit-objc-header-path");
11021104
addOutputsOfType(Arguments, context.Output, context.Args, file_types::TY_TBD,
11031105
"-emit-tbd-path");
11041106

@@ -1307,7 +1309,7 @@ ToolChain::constructInvocation(const GeneratePCHJobAction &job,
13071309
file_types::TY_SerializedDiagnostics,
13081310
"-serialize-diagnostics-path");
13091311

1310-
addInputsOfType(Arguments, context.InputActions, file_types::TY_ClangHeader);
1312+
addInputsOfType(Arguments, context.InputActions, file_types::TY_ObjCHeader);
13111313
context.Args.AddLastArg(Arguments, options::OPT_index_store_path);
13121314

13131315
if (job.isPersistentPCH()) {

lib/Frontend/ArgsToFrontendOptionsConverter.cpp

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -625,10 +625,15 @@ bool ArgsToFrontendOptionsConverter::checkUnusedSupplementaryOutputPaths()
625625
return true;
626626
}
627627
if (!FrontendOptions::canActionEmitClangHeader(Opts.RequestedAction) &&
628-
Opts.InputsAndOutputs.hasClangHeaderOutputPath()) {
628+
Opts.InputsAndOutputs.hasObjCHeaderOutputPath()) {
629629
Diags.diagnose(SourceLoc(), diag::error_mode_cannot_emit_header);
630630
return true;
631631
}
632+
if (!FrontendOptions::canActionEmitClangHeader(Opts.RequestedAction) &&
633+
Opts.InputsAndOutputs.hasCxxHeaderOutputPath()) {
634+
Diags.diagnose(SourceLoc(), diag::error_mode_cannot_emit_cxx_header);
635+
return true;
636+
}
632637
if (!FrontendOptions::canActionEmitLoadedModuleTrace(Opts.RequestedAction) &&
633638
Opts.InputsAndOutputs.hasLoadedModuleTracePath()) {
634639
Diags.diagnose(SourceLoc(),

lib/Frontend/ArgsToFrontendOutputsConverter.cpp

Lines changed: 30 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -308,8 +308,10 @@ Optional<std::vector<SupplementaryOutputPaths>>
308308
SupplementaryOutputPathsComputer::getSupplementaryOutputPathsFromArguments()
309309
const {
310310

311-
auto clangHeaderOutput = getSupplementaryFilenamesFromArguments(
311+
auto objCHeaderOutput = getSupplementaryFilenamesFromArguments(
312312
options::OPT_emit_objc_header_path);
313+
auto cxxHeaderOutput =
314+
getSupplementaryFilenamesFromArguments(options::OPT_emit_cxx_header_path);
313315
auto moduleOutput =
314316
getSupplementaryFilenamesFromArguments(options::OPT_emit_module_path);
315317
auto moduleDocOutput =
@@ -339,8 +341,8 @@ SupplementaryOutputPathsComputer::getSupplementaryOutputPathsFromArguments()
339341
options::OPT_emit_module_semantic_info_path);
340342
auto optRecordOutput = getSupplementaryFilenamesFromArguments(
341343
options::OPT_save_optimization_record_path);
342-
if (!clangHeaderOutput || !moduleOutput || !moduleDocOutput ||
343-
!dependenciesFile || !referenceDependenciesFile ||
344+
if (!objCHeaderOutput || !cxxHeaderOutput || !moduleOutput ||
345+
!moduleDocOutput || !dependenciesFile || !referenceDependenciesFile ||
344346
!serializedDiagnostics || !fixItsOutput || !loadedModuleTrace || !TBD ||
345347
!moduleInterfaceOutput || !privateModuleInterfaceOutput ||
346348
!moduleSourceInfoOutput || !moduleSummaryOutput || !abiDescriptorOutput ||
@@ -353,7 +355,8 @@ SupplementaryOutputPathsComputer::getSupplementaryOutputPathsFromArguments()
353355
InputsAndOutputs.countOfFilesProducingSupplementaryOutput();
354356
for (unsigned i = 0; i < N; ++i) {
355357
SupplementaryOutputPaths sop;
356-
sop.ClangHeaderOutputPath = (*clangHeaderOutput)[i];
358+
sop.ObjCHeaderOutputPath = (*objCHeaderOutput)[i];
359+
sop.CxxHeaderOutputPath = (*cxxHeaderOutput)[i];
357360
sop.ModuleOutputPath = (*moduleOutput)[i];
358361
sop.ModuleDocOutputPath = (*moduleDocOutput)[i];
359362
sop.DependenciesFilePath = (*dependenciesFile)[i];
@@ -434,9 +437,14 @@ SupplementaryOutputPathsComputer::computeOutputPathsForOneInput(
434437
// There is no non-path form of -emit-fixits-path
435438
auto fixItsOutputPath = pathsFromArguments.FixItsOutputPath;
436439

437-
auto clangHeaderOutputPath = determineSupplementaryOutputFilename(
438-
OPT_emit_objc_header, pathsFromArguments.ClangHeaderOutputPath,
439-
file_types::TY_ClangHeader, "",
440+
auto objcHeaderOutputPath = determineSupplementaryOutputFilename(
441+
OPT_emit_objc_header, pathsFromArguments.ObjCHeaderOutputPath,
442+
file_types::TY_ObjCHeader, "",
443+
defaultSupplementaryOutputPathExcludingExtension);
444+
445+
auto cxxHeaderOutputPath = determineSupplementaryOutputFilename(
446+
OPT_emit_cxx_header, pathsFromArguments.CxxHeaderOutputPath,
447+
file_types::TY_CXXHeader, "",
440448
defaultSupplementaryOutputPathExcludingExtension);
441449

442450
auto loadedModuleTracePath = determineSupplementaryOutputFilename(
@@ -492,7 +500,8 @@ SupplementaryOutputPathsComputer::computeOutputPathsForOneInput(
492500
defaultSupplementaryOutputPathExcludingExtension);
493501

494502
SupplementaryOutputPaths sop;
495-
sop.ClangHeaderOutputPath = clangHeaderOutputPath;
503+
sop.ObjCHeaderOutputPath = objcHeaderOutputPath;
504+
sop.CxxHeaderOutputPath = cxxHeaderOutputPath;
496505
sop.ModuleOutputPath = moduleOutputPath;
497506
sop.ModuleDocOutputPath = moduleDocOutputPath;
498507
sop.DependenciesFilePath = dependenciesFilePath;
@@ -577,7 +586,8 @@ createFromTypeToPathMap(const TypeToPathMap *map) {
577586
if (!map)
578587
return paths;
579588
const std::pair<file_types::ID, std::string &> typesAndStrings[] = {
580-
{file_types::TY_ClangHeader, paths.ClangHeaderOutputPath},
589+
{file_types::TY_ObjCHeader, paths.ObjCHeaderOutputPath},
590+
{file_types::TY_CXXHeader, paths.CxxHeaderOutputPath},
581591
{file_types::TY_SwiftModuleFile, paths.ModuleOutputPath},
582592
{file_types::TY_SwiftModuleDocFile, paths.ModuleDocOutputPath},
583593
{file_types::TY_SwiftSourceInfoFile, paths.ModuleSourceInfoOutputPath},
@@ -605,17 +615,17 @@ createFromTypeToPathMap(const TypeToPathMap *map) {
605615

606616
Optional<std::vector<SupplementaryOutputPaths>>
607617
SupplementaryOutputPathsComputer::readSupplementaryOutputFileMap() const {
608-
if (Arg *A = Args.getLastArg(options::OPT_emit_objc_header_path,
609-
options::OPT_emit_module_path,
610-
options::OPT_emit_module_doc_path,
611-
options::OPT_emit_dependencies_path,
612-
options::OPT_emit_reference_dependencies_path,
613-
options::OPT_serialize_diagnostics_path,
614-
options::OPT_emit_loaded_module_trace_path,
615-
options::OPT_emit_module_interface_path,
616-
options::OPT_emit_private_module_interface_path,
617-
options::OPT_emit_module_source_info_path,
618-
options::OPT_emit_tbd_path)) {
618+
if (Arg *A = Args.getLastArg(
619+
options::OPT_emit_objc_header_path, options::OPT_emit_cxx_header_path,
620+
options::OPT_emit_module_path, options::OPT_emit_module_doc_path,
621+
options::OPT_emit_dependencies_path,
622+
options::OPT_emit_reference_dependencies_path,
623+
options::OPT_serialize_diagnostics_path,
624+
options::OPT_emit_loaded_module_trace_path,
625+
options::OPT_emit_module_interface_path,
626+
options::OPT_emit_private_module_interface_path,
627+
options::OPT_emit_module_source_info_path,
628+
options::OPT_emit_tbd_path)) {
619629
Diags.diagnose(SourceLoc(),
620630
diag::error_cannot_have_supplementary_outputs,
621631
A->getSpelling(), "-supplementary-output-file-map");

0 commit comments

Comments
 (0)