// RUN: %empty-directory(%t) // RUN: %target-build-swift %s -o %t/a.out // RUN: %target-codesign %t/a.out // RUN: env %env-SWIFT_DEBUG_VALIDATE_EXTERNAL_GENERIC_METADATA_BUILDER=2 %target-run %t/a.out 2>&1 | %FileCheck %s // The builder doesn't yet know how to look up symbols on Windows. // UNSUPPORTED: OS=windows-msvc // REQUIRES: executable_test // UNSUPPORTED: use_os_stdlib // UNSUPPORTED: back_deployment_runtime // Validation gets confused by ARM64e, temporarily disable the test there until // we've fixed that. rdar://121029024 // UNSUPPORTED: CPU=arm64e struct ConcreteEmpty {} struct ConcreteFields { var a: Int var b: String var c: Double } struct Empty {} struct OneField { var field: T } struct DerivedField { var field: OneField } struct MultipleGenericTypes { var t: T var u: OneField var v: DerivedField } struct Nested1 { struct Nested2 { struct Nested3 { var t: T var u: U var v: V var w: W var x: X var y: Y } } } // Force the given metadata to be instantiated. Print the identifier as a side // effect that requires instantiation and can't be optimized away. func testMetadata(_ t: Any.Type, line: UInt = #line) { print("line \(line) - \(t) \(ObjectIdentifier(t))") } testMetadata(Empty.self) testMetadata(Empty.self) testMetadata(Empty>>.self) testMetadata(Empty>>.self) // CHECK: Validated generic metadata builder on Empty // CHECK: Validated generic metadata builder on Empty // CHECK: Validated generic metadata builder on Empty>> // CHECK: Validated generic metadata builder on Empty>> testMetadata(OneField.self) testMetadata(OneField.self) testMetadata(OneField>>.self) testMetadata(OneField>>.self) // CHECK: Validated generic metadata builder on OneField // CHECK: Validated generic metadata builder on OneField // CHECK: Validated generic metadata builder on OneField>> // CHECK: Validated generic metadata builder on OneField>> testMetadata(DerivedField.self) testMetadata(DerivedField.self) testMetadata(DerivedField>>.self) testMetadata(DerivedField>>.self) // CHECK: Validated generic metadata builder on DerivedField // CHECK: Validated generic metadata builder on DerivedField // CHECK: Validated generic metadata builder on DerivedField>> // CHECK: Validated generic metadata builder on DerivedField>> testMetadata(DerivedField>.self) testMetadata(DerivedField>.self) // CHECK: Validated generic metadata builder on DerivedField> // CHECK: Validated generic metadata builder on DerivedField> testMetadata(MultipleGenericTypes.self) testMetadata(MultipleGenericTypes, OneField, Empty, String>.self) testMetadata(Nested1, DerivedField>.Nested2.Nested3, OneField>>.self) // CHECK: Validated generic metadata builder on MultipleGenericTypes // CHECK: Validated generic metadata builder on MultipleGenericTypes, OneField, Empty, String> // CHECK: Validated generic metadata builder on Nested3, OneField