mirror of
https://github.com/apple/swift.git
synced 2025-12-21 12:14:44 +01:00
The pattern:
struct X { friend struct Y; }; struct Y {};
is fairly common. But before this commit we would crash while attempting
to add "Y" as a child of "X". This commit simply checks if the child
record is a declaration or definition. If the former, it bails (and the
"child" record will be imported where it's defined).
96 lines
2.3 KiB
Swift
96 lines
2.3 KiB
Swift
// RUN: %target-swift-ide-test -print-module -module-to-print=NestedRecords -I %S/Inputs -source-filename=x -enable-cxx-interop | %FileCheck %s
|
|
|
|
// CHECK: struct S1 {
|
|
// CHECK: struct S2 {
|
|
// CHECK: var A: Bool
|
|
// CHECK: }
|
|
// CHECK: }
|
|
|
|
// CHECK: struct S3 {
|
|
// CHECK: struct S4 {
|
|
// CHECK: }
|
|
// CHECK: }
|
|
|
|
// CHECK: struct U1 {
|
|
// CHECK: struct U2 {
|
|
// CHECK: }
|
|
// CHECK: }
|
|
|
|
// CHECK: struct U3 {
|
|
// CHECK: struct E1 : Equatable, RawRepresentable {
|
|
// CHECK: typealias RawValue = {{UInt32|Int32}}
|
|
// CHECK: }
|
|
// CHECK: }
|
|
|
|
// CHECK: struct U4 {
|
|
// CHECK: struct S5 {
|
|
// CHECK: }
|
|
// CHECK: }
|
|
|
|
// CHECK: struct S6 {
|
|
// CHECK: struct E3 : Equatable, RawRepresentable {
|
|
// CHECK: typealias RawValue = {{UInt32|Int32}}
|
|
// CHECK: }
|
|
// CHECK: init()
|
|
// CHECK: }
|
|
|
|
// CHECK: struct S7 {
|
|
// CHECK: struct U5 {
|
|
// CHECK: struct U6 {
|
|
// CHECK: }
|
|
// CHECK: }
|
|
// CHECK: }
|
|
|
|
// CHECK: struct S8 {
|
|
// CHECK: struct S9 {
|
|
// CHECK: struct U7 {
|
|
// CHECK: }
|
|
// CHECK: }
|
|
// CHECK: }
|
|
|
|
// CHECK: struct S10 {
|
|
// CHECK: struct U8 {
|
|
// CHECK: struct E4 : Equatable, RawRepresentable {
|
|
// CHECK: typealias RawValue = {{UInt32|Int32}}
|
|
// CHECK: }
|
|
// CHECK: }
|
|
// CHECK: }
|
|
|
|
// CHECK: struct HasForwardDeclaredNestedType {
|
|
// CHECK: struct ForwardDeclaredType {
|
|
// CHECK: init()
|
|
// CHECK: }
|
|
// CHECK: struct NormalSubType {
|
|
// CHECK: init()
|
|
// CHECK: }
|
|
// CHECK: init()
|
|
// CHECK: }
|
|
|
|
// CHECK: struct HasForwardDeclaredTemplateChild {
|
|
// CHECK: struct ForwardDeclaredClassTemplate<T> {
|
|
// CHECK: }
|
|
// CHECK: struct DeclaresForwardDeclaredClassTemplateFriend {
|
|
// CHECK: init()
|
|
// CHECK: }
|
|
// CHECK: init()
|
|
// CHECK: }
|
|
|
|
// CHECK: extension NestedDeclIsAFirstForwardDeclaration {
|
|
// CHECK: struct ForwardDeclaresFriend {
|
|
// CHECK: init()
|
|
// CHECK: }
|
|
// CHECK: struct ForwardDeclaredFriend {
|
|
// CHECK: init()
|
|
// CHECK: }
|
|
// CHECK: static func takesFriend(_ b: NestedDeclIsAFirstForwardDeclaration.ForwardDeclaredFriend)
|
|
// CHECK: struct HasNestedForwardDeclaration {
|
|
// CHECK: struct IsNestedForwardDeclaration {
|
|
// CHECK: var a: Int32
|
|
// CHECK: init()
|
|
// CHECK: init(a: Int32)
|
|
// CHECK: }
|
|
// CHECK: init()
|
|
// CHECK: }
|
|
// CHECK: static func takesHasNestedForwardDeclaration(_: NestedDeclIsAFirstForwardDeclaration.HasNestedForwardDeclaration)
|
|
// CHECK: }
|