2020#include  " PrintSwiftToClangCoreScaffold.h" 
2121#include  " SwiftToClangInteropContext.h" 
2222
23+ #include  " swift/AST/AttrKind.h" 
2324#include  " swift/AST/Decl.h" 
2425#include  " swift/AST/DiagnosticsSema.h" 
2526#include  " swift/AST/ExistentialLayout.h" 
@@ -1151,35 +1152,43 @@ class ModuleWriter {
11511152};
11521153} //  end anonymous namespace
11531154
1154- static  AccessLevel getRequiredAccess (const  ModuleDecl &M) {
1155+ static  AccessLevel getRequiredAccess (const  ModuleDecl &M,
1156+                                      std::optional<AccessLevel> minAccess) {
1157+   if  (minAccess)
1158+     return  *minAccess;
11551159  return  M.isExternallyConsumed () ? AccessLevel::Public : AccessLevel::Internal;
11561160}
11571161
11581162void  swift::printModuleContentsAsObjC (
11591163    raw_ostream &os, llvm::SmallPtrSetImpl<ImportModuleTy> &imports,
1160-     ModuleDecl &M, SwiftToClangInteropContext &interopContext) {
1164+     ModuleDecl &M, SwiftToClangInteropContext &interopContext,
1165+     std::optional<AccessLevel> minAccess) {
11611166  llvm::raw_null_ostream prologueOS;
11621167  llvm::StringSet<> exposedModules;
1163-   ModuleWriter (os, prologueOS, imports, M, interopContext, getRequiredAccess (M),
1168+   ModuleWriter (os, prologueOS, imports, M, interopContext,
1169+                getRequiredAccess (M, minAccess),
11641170               /* requiresExposedAttribute=*/ false , exposedModules,
11651171               OutputLanguageMode::ObjC)
11661172      .write ();
11671173}
11681174
11691175void  swift::printModuleContentsAsC (
11701176    raw_ostream &os, llvm::SmallPtrSetImpl<ImportModuleTy> &imports,
1171-     ModuleDecl &M, SwiftToClangInteropContext &interopContext) {
1177+     ModuleDecl &M, SwiftToClangInteropContext &interopContext,
1178+     std::optional<AccessLevel> minAccess) {
11721179  llvm::raw_null_ostream prologueOS;
11731180  llvm::StringSet<> exposedModules;
1174-   ModuleWriter (os, prologueOS, imports, M, interopContext, getRequiredAccess (M),
1181+   ModuleWriter (os, prologueOS, imports, M, interopContext,
1182+                getRequiredAccess (M, minAccess),
11751183               /* requiresExposedAttribute=*/ false , exposedModules,
11761184               OutputLanguageMode::C)
11771185      .write ();
11781186}
11791187
11801188EmittedClangHeaderDependencyInfo swift::printModuleContentsAsCxx (
11811189    raw_ostream &os, ModuleDecl &M, SwiftToClangInteropContext &interopContext,
1182-     bool  requiresExposedAttribute, llvm::StringSet<> &exposedModules) {
1190+     AccessLevel minAccess, bool  requiresExposedAttribute,
1191+     llvm::StringSet<> &exposedModules) {
11831192  std::string moduleContentsBuf;
11841193  llvm::raw_string_ostream moduleOS{moduleContentsBuf};
11851194  std::string modulePrologueBuf;
@@ -1197,8 +1206,8 @@ EmittedClangHeaderDependencyInfo swift::printModuleContentsAsCxx(
11971206
11981207  //  FIXME: Use getRequiredAccess once @expose is supported.
11991208  ModuleWriter writer (moduleOS, prologueOS, info.imports , M, interopContext,
1200-                       AccessLevel::Public , requiresExposedAttribute,
1201-                       exposedModules,  OutputLanguageMode::Cxx);
1209+                       minAccess , requiresExposedAttribute, exposedModules ,
1210+                       OutputLanguageMode::Cxx);
12021211  writer.write ();
12031212  info.dependsOnStandardLibrary  = writer.isStdlibRequired ();
12041213  if  (M.isStdlibModule ()) {
0 commit comments