@@ -1814,8 +1814,9 @@ void InterfaceSubContextDelegateImpl::inheritOptionsForBuildingInterface(
18141814}
18151815
18161816bool InterfaceSubContextDelegateImpl::extractSwiftInterfaceVersionAndArgs (
1817- CompilerInvocation &subInvocation, SwiftInterfaceInfo &interfaceInfo,
1818- StringRef interfacePath, SourceLoc diagnosticLoc) {
1817+ CompilerInvocation &subInvocation, DiagnosticEngine &subInstanceDiags,
1818+ SwiftInterfaceInfo &interfaceInfo, StringRef interfacePath,
1819+ SourceLoc diagnosticLoc) {
18191820 if (readSwiftInterfaceVersionAndArgs (SM, *Diags, ArgSaver, interfaceInfo,
18201821 interfacePath, diagnosticLoc,
18211822 subInvocation.getLangOptions ().Target ))
@@ -1833,7 +1834,7 @@ bool InterfaceSubContextDelegateImpl::extractSwiftInterfaceVersionAndArgs(
18331834 }
18341835
18351836 SmallString<32 > ExpectedModuleName = subInvocation.getModuleName ();
1836- if (subInvocation.parseArgs (interfaceInfo.Arguments , *Diags )) {
1837+ if (subInvocation.parseArgs (interfaceInfo.Arguments , subInstanceDiags )) {
18371838 return true ;
18381839 }
18391840
@@ -2238,11 +2239,25 @@ InterfaceSubContextDelegateImpl::runInSubCompilerInstance(StringRef moduleName,
22382239 subInvocation.getFrontendOptions ().InputsAndOutputs
22392240 .setMainAndSupplementaryOutputs (outputFiles, ModuleOutputPaths);
22402241
2242+ CompilerInstance subInstance;
2243+ ForwardingDiagnosticConsumer FDC (*Diags);
2244+ NullDiagnosticConsumer noopConsumer;
2245+ if (!silenceErrors) {
2246+ subInstance.addDiagnosticConsumer (&FDC);
2247+ } else {
2248+ subInstance.addDiagnosticConsumer (&noopConsumer);
2249+ }
2250+
2251+ // Eagerly suppress warnings if necessary, before parsing arguments.
2252+ if (subInvocation.getDiagnosticOptions ().SuppressWarnings )
2253+ subInstance.getDiags ().setSuppressWarnings (true );
2254+
22412255 SwiftInterfaceInfo interfaceInfo;
22422256 // Extract compiler arguments from the interface file and use them to configure
22432257 // the compiler invocation.
2244- if (extractSwiftInterfaceVersionAndArgs (subInvocation, interfaceInfo,
2245- interfacePath, diagLoc)) {
2258+ if (extractSwiftInterfaceVersionAndArgs (subInvocation, subInstance.getDiags (),
2259+ interfaceInfo, interfacePath,
2260+ diagLoc)) {
22462261 return std::make_error_code (std::errc::not_supported);
22472262 }
22482263
@@ -2254,21 +2269,12 @@ InterfaceSubContextDelegateImpl::runInSubCompilerInstance(StringRef moduleName,
22542269 subInvocation.getFrontendOptions ().StrictImplicitModuleContext =
22552270 StrictImplicitModuleContext;
22562271
2257- CompilerInstance subInstance;
22582272 SubCompilerInstanceInfo info;
22592273 info.Instance = &subInstance;
22602274 info.CompilerVersion = interfaceInfo.CompilerVersion ;
22612275
22622276 subInstance.getSourceMgr ().setFileSystem (SM.getFileSystem ());
22632277
2264- ForwardingDiagnosticConsumer FDC (*Diags);
2265- NullDiagnosticConsumer noopConsumer;
2266- if (!silenceErrors) {
2267- subInstance.addDiagnosticConsumer (&FDC);
2268- } else {
2269- subInstance.addDiagnosticConsumer (&noopConsumer);
2270- }
2271-
22722278 std::string InstanceSetupError;
22732279 if (subInstance.setup (subInvocation, InstanceSetupError)) {
22742280 return std::make_error_code (std::errc::not_supported);
0 commit comments