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 @@ -3473,6 +3473,11 @@ namespace {
3473
3473
}
3474
3474
}
3475
3475
3476
+ // If we've already imported this decl, skip it so we don't add the same
3477
+ // member twice.
3478
+ if (Impl.ImportedDecls .count ({nd->getCanonicalDecl (), getVersion ()}))
3479
+ continue ;
3480
+
3476
3481
auto member = Impl.importDecl (nd, getActiveSwiftVersion ());
3477
3482
if (!member) {
3478
3483
if (!isa<clang::TypeDecl>(nd) && !isa<clang::FunctionDecl>(nd)) {
@@ -3485,11 +3490,6 @@ namespace {
3485
3490
}
3486
3491
3487
3492
if (auto nestedType = dyn_cast<TypeDecl>(member)) {
3488
- // Only import definitions. Otherwise, we might add the same member
3489
- // twice.
3490
- if (auto tagDecl = dyn_cast<clang::TagDecl>(nd))
3491
- if (tagDecl->getDefinition () != tagDecl)
3492
- continue ;
3493
3493
nestedTypes.push_back (nestedType);
3494
3494
continue ;
3495
3495
}
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