@@ -1078,6 +1078,13 @@ bool DeclAttribute::printImpl(ASTPrinter &Printer, const PrintOptions &Options,
10781078 }
10791079 break ;
10801080 }
1081+ case DeclAttrKind::OriginallyDefinedIn: {
1082+ auto Attr = cast<OriginallyDefinedInAttr>(this );
1083+ auto Name = D->getDeclContext ()->getParentModule ()->getName ().str ();
1084+ if (Options.IsForSwiftInterface && Attr->ManglingModuleName == Name)
1085+ return false ;
1086+ break ;
1087+ }
10811088 default :
10821089 break ;
10831090 }
@@ -1175,8 +1182,12 @@ bool DeclAttribute::printImpl(ASTPrinter &Printer, const PrintOptions &Options,
11751182 Printer.printAttrName (" @_originallyDefinedIn" );
11761183 Printer << " (module: " ;
11771184 auto Attr = cast<OriginallyDefinedInAttr>(this );
1178- Printer << " \" " << Attr->OriginalModuleName << " \" , " ;
1179- Printer << platformString (Attr->Platform ) << " " <<
1185+ Printer << " \" " << Attr->ManglingModuleName ;
1186+ ASSERT (!Attr->ManglingModuleName .empty ());
1187+ ASSERT (!Attr->LinkerModuleName .empty ());
1188+ if (Attr->LinkerModuleName != Attr->ManglingModuleName )
1189+ Printer << " ;" << Attr->LinkerModuleName ;
1190+ Printer << " \" , " << platformString (Attr->Platform ) << " " <<
11801191 Attr->MovedVersion .getAsString ();
11811192 Printer << " )" ;
11821193 break ;
@@ -2235,12 +2246,39 @@ AvailableAttr *AvailableAttr::clone(ASTContext &C, bool implicit) const {
22352246 implicit ? SourceRange () : ObsoletedRange, implicit, isSPI ());
22362247}
22372248
2249+ static StringRef getManglingModuleName (StringRef OriginalModuleName) {
2250+ auto index = OriginalModuleName.find (" ;" );
2251+ return index == StringRef::npos
2252+ ? OriginalModuleName
2253+ : OriginalModuleName.slice (0 , index);
2254+ }
2255+
2256+ static StringRef getLinkerModuleName (StringRef OriginalModuleName) {
2257+ auto index = OriginalModuleName.find (" ;" );
2258+ return index == StringRef::npos
2259+ ? OriginalModuleName
2260+ : OriginalModuleName.slice (index + 1 , OriginalModuleName.size ());
2261+ }
2262+
2263+ OriginallyDefinedInAttr::OriginallyDefinedInAttr (
2264+ SourceLoc AtLoc, SourceRange Range,
2265+ StringRef OriginalModuleName,
2266+ PlatformKind Platform,
2267+ const llvm::VersionTuple MovedVersion, bool Implicit)
2268+ : DeclAttribute(DeclAttrKind::OriginallyDefinedIn, AtLoc, Range,
2269+ Implicit),
2270+ ManglingModuleName(getManglingModuleName(OriginalModuleName)),
2271+ LinkerModuleName(getLinkerModuleName(OriginalModuleName)),
2272+ Platform(Platform),
2273+ MovedVersion(MovedVersion) {}
2274+
22382275std::optional<OriginallyDefinedInAttr::ActiveVersion>
22392276OriginallyDefinedInAttr::isActivePlatform (const ASTContext &ctx) const {
22402277 OriginallyDefinedInAttr::ActiveVersion Result;
22412278 Result.Platform = Platform;
22422279 Result.Version = MovedVersion;
2243- Result.ModuleName = OriginalModuleName;
2280+ Result.ManglingModuleName = ManglingModuleName;
2281+ Result.LinkerModuleName = LinkerModuleName;
22442282 if (isPlatformActive (Platform, ctx.LangOpts , /* TargetVariant*/ false )) {
22452283 return Result;
22462284 }
@@ -2260,7 +2298,7 @@ OriginallyDefinedInAttr *OriginallyDefinedInAttr::clone(ASTContext &C,
22602298 bool implicit) const {
22612299 return new (C) OriginallyDefinedInAttr (
22622300 implicit ? SourceLoc () : AtLoc, implicit ? SourceRange () : getRange (),
2263- OriginalModuleName , Platform, MovedVersion, implicit);
2301+ ManglingModuleName, LinkerModuleName , Platform, MovedVersion, implicit);
22642302}
22652303
22662304bool AvailableAttr::isUnconditionallyUnavailable () const {
0 commit comments