mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
[interop][SwiftToCxx] Ignore delayedMembers in C++ (#70939)
[interop][SwiftToCxx] Ignore delayedMembers in C++ This fixes a bug where an ObjC @interface declaration is emitted for a class that has a member that isn't emitted. Resolves rdar://119835836
This commit is contained in:
@@ -130,7 +130,7 @@ class ModuleWriter {
|
||||
llvm::DenseMap<const TypeDecl *, std::pair<EmissionState, bool>> seenTypes;
|
||||
llvm::DenseSet<const clang::Type *> seenClangTypes;
|
||||
std::vector<const Decl *> declsToWrite;
|
||||
DelayedMemberSet delayedMembers;
|
||||
DelayedMemberSet objcDelayedMembers;
|
||||
CxxDeclEmissionScope topLevelEmissionScope;
|
||||
PrimitiveTypeMapping typeMapping;
|
||||
std::string outOfLineDefinitions;
|
||||
@@ -147,7 +147,7 @@ public:
|
||||
OutputLanguageMode outputLang)
|
||||
: os(os), imports(imports), M(mod),
|
||||
outOfLineDefinitionsOS(outOfLineDefinitions),
|
||||
printer(M, os, prologueOS, outOfLineDefinitionsOS, delayedMembers,
|
||||
printer(M, os, prologueOS, outOfLineDefinitionsOS, objcDelayedMembers,
|
||||
topLevelEmissionScope, typeMapping, interopContext, access,
|
||||
requiresExposedAttribute, exposedModules, outputLang),
|
||||
outputLangMode(outputLang) {}
|
||||
@@ -440,7 +440,7 @@ public:
|
||||
|
||||
if (needsToBeIndividuallyDelayed) {
|
||||
assert(isa<ClassDecl>(container));
|
||||
delayedMembers.insert(VD);
|
||||
objcDelayedMembers.insert(VD);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -796,16 +796,18 @@ public:
|
||||
}
|
||||
}
|
||||
|
||||
if (!delayedMembers.empty()) {
|
||||
auto groupBegin = delayedMembers.begin();
|
||||
for (auto i = groupBegin, e = delayedMembers.end(); i != e; ++i) {
|
||||
if ((*i)->getDeclContext() != (*groupBegin)->getDeclContext()) {
|
||||
printer.printAdHocCategory(make_range(groupBegin, i));
|
||||
groupBegin = i;
|
||||
if (outputLangMode == OutputLanguageMode::ObjC)
|
||||
if (!objcDelayedMembers.empty()) {
|
||||
auto groupBegin = objcDelayedMembers.begin();
|
||||
for (auto i = groupBegin, e = objcDelayedMembers.end(); i != e; ++i) {
|
||||
if ((*i)->getDeclContext() != (*groupBegin)->getDeclContext()) {
|
||||
printer.printAdHocCategory(make_range(groupBegin, i));
|
||||
groupBegin = i;
|
||||
}
|
||||
}
|
||||
printer.printAdHocCategory(
|
||||
make_range(groupBegin, objcDelayedMembers.end()));
|
||||
}
|
||||
printer.printAdHocCategory(make_range(groupBegin, delayedMembers.end()));
|
||||
}
|
||||
|
||||
// Print any out of line definitions.
|
||||
os << outOfLineDefinitionsOS.str();
|
||||
|
||||
Reference in New Issue
Block a user