Skip to content

Commit 73ace80

Browse files
authored
Merge pull request #60907 from zoecarver/reference-types-in-namespace
[cxx-interop] Fix foreign reference types with reference counting that live in a namespace.
2 parents cf8f61d + 625760a commit 73ace80

File tree

4 files changed

+14
-8
lines changed

4 files changed

+14
-8
lines changed

lib/ClangImporter/ClangImporter.cpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6141,7 +6141,9 @@ CustomRefCountingOperationResult CustomRefCountingOperation::evaluate(
61416141
return {CustomRefCountingOperationResult::immortal, nullptr, name};
61426142

61436143
llvm::SmallVector<ValueDecl *, 1> results;
6144-
ctx.lookupInModule(swiftDecl->getParentModule(), name, results);
6144+
auto parentModule = ctx.getClangModuleLoader()->getWrapperForModule(
6145+
swiftDecl->getClangDecl()->getOwningModule());
6146+
ctx.lookupInModule(parentModule, name, results);
61456147

61466148
if (results.size() == 1)
61476149
return {CustomRefCountingOperationResult::foundOperation, results.front(),

test/Interop/Cxx/foreign-reference/Inputs/reference-counted.h

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@ SWIFT_BEGIN_NULLABILITY_ANNOTATIONS
1111

1212
static int finalLocalRefCount = 100;
1313

14+
namespace NS {
15+
1416
struct __attribute__((swift_attr("import_as_ref")))
1517
__attribute__((swift_attr("retain:LCRetain")))
1618
__attribute__((swift_attr("release:LCRelease"))) LocalCount {
@@ -21,8 +23,10 @@ __attribute__((swift_attr("release:LCRelease"))) LocalCount {
2123
}
2224
};
2325

24-
inline void LCRetain(LocalCount *x) { x->value++; }
25-
inline void LCRelease(LocalCount *x) {
26+
}
27+
28+
inline void LCRetain(NS::LocalCount *x) { x->value++; }
29+
inline void LCRelease(NS::LocalCount *x) {
2630
x->value--;
2731
finalLocalRefCount = x->value;
2832
}

test/Interop/Cxx/foreign-reference/reference-counted-silgen.swift

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,12 +20,12 @@ public func testTrivial() {
2020
}
2121

2222
// CHECK-LABEL: sil [ossa] @$s4main14testNonTrivialyyF : $@convention(thin) () -> ()
23-
// CHECK: copy_value %{{[0-9]+}} : $LocalCount
24-
// CHECK: copy_value %{{[0-9]+}} : $LocalCount
25-
// CHECK: copy_value %{{[0-9]+}} : $LocalCount
23+
// CHECK: copy_value %{{[0-9]+}} : $NS.LocalCount
24+
// CHECK: copy_value %{{[0-9]+}} : $NS.LocalCount
25+
// CHECK: copy_value %{{[0-9]+}} : $NS.LocalCount
2626
// CHECK: return
2727
// CHECK-LABEL: end sil function '$s4main14testNonTrivialyyF'
2828
public func testNonTrivial() {
29-
let x = LocalCount.create()
29+
let x = NS.LocalCount.create()
3030
let t = (x, x, x)
3131
}

test/Interop/Cxx/foreign-reference/reference-counted.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ public func blackHole<T>(_ _: T) { }
1616

1717
@inline(never)
1818
func localTest() {
19-
var x = LocalCount.create()
19+
var x = NS.LocalCount.create()
2020
expectEqual(x.value, 6) // This is 6 because of "var x" "x.value" * 2 and "(x, x, x)".
2121

2222
let t = (x, x, x)

0 commit comments

Comments
 (0)