File tree Expand file tree Collapse file tree 3 files changed +27
-6
lines changed Expand file tree Collapse file tree 3 files changed +27
-6
lines changed Original file line number Diff line number Diff line change @@ -3371,6 +3371,11 @@ namespace {
3371
3371
}
3372
3372
}
3373
3373
3374
+ // If we've already imported this decl, skip it so we don't add the same
3375
+ // member twice.
3376
+ if (Impl.ImportedDecls .count ({nd->getCanonicalDecl (), getVersion ()}))
3377
+ continue ;
3378
+
3374
3379
auto member = Impl.importDecl (nd, getActiveSwiftVersion ());
3375
3380
if (!member) {
3376
3381
if (!isa<clang::TypeDecl>(nd) && !isa<clang::FunctionDecl>(nd)) {
@@ -3383,11 +3388,6 @@ namespace {
3383
3388
}
3384
3389
3385
3390
if (auto nestedType = dyn_cast<TypeDecl>(member)) {
3386
- // Only import definitions. Otherwise, we might add the same member
3387
- // twice.
3388
- if (auto tagDecl = dyn_cast<clang::TagDecl>(nd))
3389
- if (tagDecl->getDefinition () != tagDecl)
3390
- continue ;
3391
3391
nestedTypes.push_back (nestedType);
3392
3392
continue ;
3393
3393
}
Original file line number Diff line number Diff line change @@ -51,6 +51,18 @@ struct HasForwardDeclaredNestedType {
51
51
struct ForwardDeclaredType { };
52
52
};
53
53
54
+ struct HasForwardDeclaredTemplateChild {
55
+ template <class T > struct ForwardDeclaredClassTemplate ;
56
+
57
+ struct DeclaresForwardDeclaredClassTemplateFriend {
58
+ template <class T >
59
+ friend struct HasForwardDeclaredTemplateChild ::ForwardDeclaredClassTemplate;
60
+ };
61
+
62
+ template <class T > struct ForwardDeclaredClassTemplate { };
63
+ };
64
+
65
+
54
66
// TODO: Nested class templates (SR-13853).
55
67
56
68
#endif // TEST_INTEROP_CXX_CLASS_INPUTS_NESTED_RECORDS_H
Original file line number Diff line number Diff line change 57
57
// CHECK: }
58
58
59
59
// CHECK: struct HasForwardDeclaredNestedType {
60
+ // CHECK: struct ForwardDeclaredType {
61
+ // CHECK: init()
62
+ // CHECK: }
60
63
// CHECK: struct NormalSubType {
61
64
// CHECK: init()
62
65
// CHECK: }
63
- // CHECK: struct ForwardDeclaredType {
66
+ // CHECK: init()
67
+ // CHECK: }
68
+
69
+ // CHECK: struct HasForwardDeclaredTemplateChild {
70
+ // CHECK: struct ForwardDeclaredClassTemplate<T> {
71
+ // CHECK: }
72
+ // CHECK: struct DeclaresForwardDeclaredClassTemplateFriend {
64
73
// CHECK: init()
65
74
// CHECK: }
66
75
// CHECK: init()
You can’t perform that action at this time.
0 commit comments