| // REQUIRES: objc_interop |
| // RUN: %empty-directory(%t) |
| // |
| // Check that bit-field accessors for external structs are only lazily (and not multiply) emitted: |
| // |
| // RUN: %target-swift-frontend -emit-sil -import-objc-header %S/Inputs/batch_mode_external_definitions.h -primary-file %S/Inputs/batch_mode_external_uses_1.swift -primary-file %S/Inputs/batch_mode_external_uses_2.swift > %t/two-primaries-neither-field.sil |
| // RUN: %target-swift-frontend -emit-sil -import-objc-header %S/Inputs/batch_mode_external_definitions.h -D FIELD1 -primary-file %S/Inputs/batch_mode_external_uses_1.swift -primary-file %S/Inputs/batch_mode_external_uses_2.swift > %t/two-primaries-field1.sil |
| // RUN: %target-swift-frontend -emit-sil -import-objc-header %S/Inputs/batch_mode_external_definitions.h -D FIELD2 -primary-file %S/Inputs/batch_mode_external_uses_1.swift -primary-file %S/Inputs/batch_mode_external_uses_2.swift > %t/two-primaries-field2.sil |
| // RUN: %target-swift-frontend -emit-sil -import-objc-header %S/Inputs/batch_mode_external_definitions.h -D FIELD1 -primary-file %S/Inputs/batch_mode_external_uses_2.swift -primary-file %S/Inputs/batch_mode_external_uses_1.swift > %t/two-primaries-field1-reorder.sil |
| // RUN: %target-swift-frontend -emit-sil -import-objc-header %S/Inputs/batch_mode_external_definitions.h -D FIELD2 -primary-file %S/Inputs/batch_mode_external_uses_2.swift -primary-file %S/Inputs/batch_mode_external_uses_1.swift > %t/two-primaries-field2-reorder.sil |
| // RUN: %target-swift-frontend -emit-sil -import-objc-header %S/Inputs/batch_mode_external_definitions.h -D FIELD1 -D FIELD2 -primary-file %S/Inputs/batch_mode_external_uses_1.swift -primary-file %S/Inputs/batch_mode_external_uses_2.swift > %t/two-primaries-both-fields.sil |
| // |
| // RUN: %FileCheck --check-prefix=CHECK-FIELD1-ONLY %s <%t/two-primaries-field1.sil |
| // RUN: %FileCheck --check-prefix=CHECK-FIELD2-ONLY %s <%t/two-primaries-field2.sil |
| // RUN: %FileCheck --check-prefix=CHECK-FIELD1-ONLY-REORDER %s <%t/two-primaries-field1-reorder.sil |
| // RUN: %FileCheck --check-prefix=CHECK-FIELD2-ONLY-REORDER %s <%t/two-primaries-field2-reorder.sil |
| // RUN: %FileCheck --check-prefix=CHECK-BOTH-FIELDS %s <%t/two-primaries-both-fields.sil |
| // RUN: %FileCheck --check-prefix=CHECK-NEITHER-FIELD %s <%t/two-primaries-neither-field.sil |
| // |
| // CHECK-FIELD1-ONLY: sil_stage canonical |
| // CHECK-FIELD1-ONLY: use_extern_struct_field_1 |
| // CHECK-FIELD1-ONLY: sil shared{{.*}}extern_struct$field$getter |
| // CHECK-FIELD1-ONLY-NOT: sil shared{{.*}}extern_struct$field$getter |
| // CHECK-FIELD1-ONLY: sil_stage canonical |
| // CHECK-FIELD1-ONLY-NOT: use_extern_struct_field_2 |
| // CHECK-FIELD1-ONLY-NOT: sil shared{{.*}}extern_struct$field$getter |
| // |
| // CHECK-FIELD1-ONLY-REORDER: sil_stage canonical |
| // CHECK-FIELD1-ONLY-REORDER-NOT: use_extern_struct_field_2 |
| // CHECK-FIELD1-ONLY-REORDER-NOT: sil shared{{.*}}extern_struct$field$getter |
| // CHECK-FIELD1-ONLY-REORDER: sil_stage canonical |
| // CHECK-FIELD1-ONLY-REORDER: use_extern_struct_field_1 |
| // CHECK-FIELD1-ONLY-REORDER: sil shared{{.*}}extern_struct$field$getter |
| // CHECK-FIELD1-ONLY-REORDER-NOT: sil shared{{.*}}extern_struct$field$getter |
| // |
| // CHECK-FIELD2-ONLY: sil_stage canonical |
| // CHECK-FIELD2-ONLY-NOT: use_extern_struct_field_1 |
| // CHECK-FIELD2-ONLY-NOT: sil shared{{.*}}extern_struct$field$getter |
| // CHECK-FIELD2-ONLY: sil_stage canonical |
| // CHECK-FIELD2-ONLY: use_extern_struct_field_2 |
| // CHECK-FIELD2-ONLY: sil shared{{.*}}extern_struct$field$getter |
| // CHECK-FIELD2-ONLY-NOT: sil shared{{.*}}extern_struct$field$getter |
| // |
| // CHECK-FIELD2-ONLY-REORDER: sil_stage canonical |
| // CHECK-FIELD2-ONLY-REORDER: use_extern_struct_field_2 |
| // CHECK-FIELD2-ONLY-REORDER: sil shared{{.*}}extern_struct$field$getter |
| // CHECK-FIELD2-ONLY-REORDER-NOT: sil shared{{.*}}extern_struct$field$getter |
| // CHECK-FIELD2-ONLY-REORDER: sil_stage canonical |
| // CHECK-FIELD2-ONLY-REORDER-NOT: use_extern_struct_field_1 |
| // CHECK-FIELD2-ONLY-REORDER-NOT: sil shared{{.*}}extern_struct$field$getter |
| // |
| // CHECK-BOTH-FIELDS: sil_stage canonical |
| // CHECK-BOTH-FIELDS: use_extern_struct_field_1 |
| // CHECK-BOTH-FIELDS: sil shared{{.*}}extern_struct$field$getter |
| // CHECK-BOTH-FIELDS-NOT: sil shared{{.*}}extern_struct$field$getter |
| // CHECK-BOTH-FIELDS: sil_stage canonical |
| // CHECK-BOTH-FIELDS: use_extern_struct_field_2 |
| // CHECK-BOTH-FIELDS: sil shared{{.*}}extern_struct$field$getter |
| // CHECK-BOTH-FIELDS-NOT: sil shared{{.*}}extern_struct$field$getter |
| // |
| // CHECK-NEITHER-FIELD: sil_stage canonical |
| // CHECK-NEITHER-FIELD-NOT: use_extern_struct_field_1 |
| // CHECK-NEITHER-FIELD-NOT: sil shared{{.*}}extern_struct$field$getter |
| // CHECK-NEITHER-FIELD: sil_stage canonical |
| // CHECK-NEITHER-FIELD-NOT: use_extern_struct_field_2 |
| // CHECK-NEITHER-FIELD-NOT: sil shared{{.*}}extern_struct$field$getter |
| // |
| |
| |
| // Check that RawRepresentable conformances for external enums are only lazily (and not multiply) emitted: |
| // |
| // RUN: %target-swift-frontend -emit-sil -import-objc-header %S/Inputs/batch_mode_external_definitions.h -primary-file %S/Inputs/batch_mode_external_uses_1.swift -primary-file %S/Inputs/batch_mode_external_uses_2.swift > %t/two-primaries-neither-rawrep.sil |
| // RUN: %target-swift-frontend -emit-sil -import-objc-header %S/Inputs/batch_mode_external_definitions.h -D RAWREP1 -primary-file %S/Inputs/batch_mode_external_uses_1.swift -primary-file %S/Inputs/batch_mode_external_uses_2.swift > %t/two-primaries-rawrep1.sil |
| // RUN: %target-swift-frontend -emit-sil -import-objc-header %S/Inputs/batch_mode_external_definitions.h -D RAWREP2 -primary-file %S/Inputs/batch_mode_external_uses_1.swift -primary-file %S/Inputs/batch_mode_external_uses_2.swift > %t/two-primaries-rawrep2.sil |
| // RUN: %target-swift-frontend -emit-sil -import-objc-header %S/Inputs/batch_mode_external_definitions.h -D RAWREP1 -primary-file %S/Inputs/batch_mode_external_uses_2.swift -primary-file %S/Inputs/batch_mode_external_uses_1.swift > %t/two-primaries-rawrep1-reorder.sil |
| // RUN: %target-swift-frontend -emit-sil -import-objc-header %S/Inputs/batch_mode_external_definitions.h -D RAWREP2 -primary-file %S/Inputs/batch_mode_external_uses_2.swift -primary-file %S/Inputs/batch_mode_external_uses_1.swift > %t/two-primaries-rawrep2-reorder.sil |
| // RUN: %target-swift-frontend -emit-sil -import-objc-header %S/Inputs/batch_mode_external_definitions.h -D RAWREP1 -D RAWREP2 -primary-file %S/Inputs/batch_mode_external_uses_1.swift -primary-file %S/Inputs/batch_mode_external_uses_2.swift > %t/two-primaries-both-rawreps.sil |
| // |
| // RUN: %FileCheck --check-prefix=CHECK-RAWREP1-ONLY %s <%t/two-primaries-rawrep1.sil |
| // RUN: %FileCheck --check-prefix=CHECK-RAWREP2-ONLY %s <%t/two-primaries-rawrep2.sil |
| // RUN: %FileCheck --check-prefix=CHECK-RAWREP1-ONLY-REORDER %s <%t/two-primaries-rawrep1-reorder.sil |
| // RUN: %FileCheck --check-prefix=CHECK-RAWREP2-ONLY-REORDER %s <%t/two-primaries-rawrep2-reorder.sil |
| // RUN: %FileCheck --check-prefix=CHECK-BOTH-RAWREPS %s <%t/two-primaries-both-rawreps.sil |
| // RUN: %FileCheck --check-prefix=CHECK-NEITHER-RAWREP %s <%t/two-primaries-neither-rawrep.sil |
| // |
| // CHECK-RAWREP1-ONLY: sil_stage canonical |
| // CHECK-RAWREP1-ONLY: take_rawrep_1 |
| // CHECK-RAWREP1-ONLY: sil shared{{.*}}SSo8ext_enumVSYSCSY8rawValuexSg03RawD0Qz_tcfCTW |
| // CHECK-RAWREP1-ONLY-NOT: sil shared{{.*}}SSo8ext_enumVSYSCsACP8rawValue0cF0QzvgTW |
| // CHECK-RAWREP1-ONLY: sil_witness_table{{.*}}ext_enum: RawRepresentable |
| // CHECK-RAWREP1-ONLY-NOT: sil_witness_table{{.*}}ext_enum: RawRepresentable |
| // CHECK-RAWREP1-ONLY: sil_stage canonical |
| // CHECK-RAWREP1-ONLY-NOT: take_rawrep_1 |
| // CHECK-RAWREP1-ONLY-NOT: sil shared{{.*}}SSo8ext_enumVSYSCsACP8rawValue0cF0QzvgTW |
| // CHECK-RAWREP1-ONLY-NOT: sil_witness_table{{.*}}ext_enum: RawRepresentable |
| // |
| // CHECK-RAWREP2-ONLY: sil_stage canonical |
| // CHECK-RAWREP2-ONLY-NOT: take_rawrep_2 |
| // CHECK-RAWREP2-ONLY-NOT: sil shared{{.*}}SSo8ext_enumVSYSCsACP8rawValue0cF0QzvgTW |
| // CHECK-RAWREP2-ONLY-NOT: sil_witness_table{{.*}}ext_enum: RawRepresentable |
| // CHECK-RAWREP2-ONLY: sil_stage canonical |
| // CHECK-RAWREP2-ONLY: take_rawrep_2 |
| // CHECK-RAWREP2-ONLY: sil shared{{.*}}SSo8ext_enumVSYSCSY8rawValuexSg03RawD0Qz_tcfCTW |
| // CHECK-RAWREP2-ONLY-NOT: sil shared{{.*}}SSo8ext_enumVSYSCsACP8rawValue0cF0QzvgTW |
| // CHECK-RAWREP2-ONLY: sil_witness_table{{.*}}ext_enum: RawRepresentable |
| // CHECK-RAWREP2-ONLY-NOT: sil_witness_table{{.*}}ext_enum: RawRepresentable |
| // |
| // CHECK-RAWREP1-ONLY-REORDER: sil_stage canonical |
| // CHECK-RAWREP1-ONLY-REORDER-NOT: take_rawrep_1 |
| // CHECK-RAWREP1-ONLY-REORDER-NOT: sil shared{{.*}}SSo8ext_enumVSYSCsACP8rawValue0cF0QzvgTW |
| // CHECK-RAWREP1-ONLY-REORDER-NOT: sil_witness_table{{.*}}ext_enum: RawRepresentable |
| // CHECK-RAWREP1-ONLY-REORDER: sil_stage canonical |
| // CHECK-RAWREP1-ONLY-REORDER: take_rawrep_1 |
| // CHECK-RAWREP1-ONLY-REORDER: sil shared{{.*}}SSo8ext_enumVSYSCSY8rawValuexSg03RawD0Qz_tcfCTW |
| // CHECK-RAWREP1-ONLY-REORDER-NOT: sil shared{{.*}}SSo8ext_enumVSYSCsACP8rawValue0cF0QzvgTW |
| // CHECK-RAWREP1-ONLY-REORDER: sil_witness_table{{.*}}ext_enum: RawRepresentable |
| // CHECK-RAWREP1-ONLY-REORDER-NOT: sil_witness_table{{.*}}ext_enum: RawRepresentable |
| // |
| // CHECK-RAWREP2-ONLY-REORDER: sil_stage canonical |
| // CHECK-RAWREP2-ONLY-REORDER: take_rawrep_2 |
| // CHECK-RAWREP2-ONLY-REORDER: sil shared{{.*}}SSo8ext_enumVSYSCSY8rawValuexSg03RawD0Qz_tcfCTW |
| // CHECK-RAWREP2-ONLY-REORDER-NOT: sil shared{{.*}}SSo8ext_enumVSYSCsACP8rawValue0cF0QzvgTW |
| // CHECK-RAWREP2-ONLY-REORDER: sil_witness_table{{.*}}ext_enum: RawRepresentable |
| // CHECK-RAWREP2-ONLY-REORDER-NOT: sil_witness_table{{.*}}ext_enum: RawRepresentable |
| // CHECK-RAWREP2-ONLY-REORDER: sil_stage canonical |
| // CHECK-RAWREP2-ONLY-REORDER-NOT: take_rawrep_2 |
| // CHECK-RAWREP2-ONLY-REORDER-NOT: sil shared{{.*}}SSo8ext_enumVSYSCsACP8rawValue0cF0QzvgTW |
| // CHECK-RAWREP2-ONLY-REORDER-NOT: sil_witness_table{{.*}}ext_enum: RawRepresentable |
| // |
| // CHECK-BOTH-RAWREPS: sil_stage canonical |
| // CHECK-BOTH-RAWREPS: take_rawrep_1 |
| // CHECK-BOTH-RAWREPS: sil shared{{.*}}SSo8ext_enumVSYSCSY8rawValuexSg03RawD0Qz_tcfCTW |
| // CHECK-BOTH-RAWREPS-NOT: sil shared{{.*}}SSo8ext_enumVSYSCsACP8rawValue0cF0QzvgTW |
| // CHECK-BOTH-RAWREPS: sil_witness_table{{.*}}ext_enum: RawRepresentable |
| // CHECK-BOTH-RAWREPS-NOT: sil_witness_table{{.*}}ext_enum: RawRepresentable |
| // CHECK-BOTH-RAWREPS: sil_stage canonical |
| // CHECK-BOTH-RAWREPS: take_rawrep_2 |
| // CHECK-BOTH-RAWREPS: sil shared{{.*}}SSo8ext_enumVSYSCSY8rawValuexSg03RawD0Qz_tcfCTW |
| // CHECK-BOTH-RAWREPS-NOT: sil shared{{.*}}SSo8ext_enumVSYSCSY8rawValuexSg03RawD0Qz_tcfCTW |
| // CHECK-BOTH-RAWREPS: sil_witness_table{{.*}}ext_enum: RawRepresentable |
| // CHECK-BOTH-RAWREPS-NOT: sil_witness_table{{.*}}ext_enum: RawRepresentable |
| // |
| // CHECK-NEITHER-RAWREP: sil_stage canonical |
| // CHECK-NEITHER-RAWREP-NOT: take_rawrep_1 |
| // CHECK-NEITHER-RAWREP-NOT: sil shared{{.*}}SSo8ext_enumVSYSCsACP8rawValue0cF0QzvgTW |
| // CHECK-NEITHER-RAWREP-NOT: sil_witness_table{{.*}}ext_enum: RawRepresentable |
| // CHECK-NEITHER-RAWREP: sil_stage canonical |
| // CHECK-NEITHER-RAWREP-NOT: take_rawrep_2 |
| // CHECK-NEITHER-RAWREP-NOT: sil shared{{.*}}SSo8ext_enumVSYSCsACP8rawValue0cF0QzvgTW |
| // CHECK-NEITHER-RAWREP-NOT: sil_witness_table{{.*}}ext_enum: RawRepresentable |
| |
| |
| // Check external inline functions are only lazily (and not multiply) emitted: |
| // |
| // RUN: %target-swift-frontend -emit-ir -import-objc-header %S/Inputs/batch_mode_external_definitions.h -primary-file %S/Inputs/batch_mode_external_uses_1.swift -primary-file %S/Inputs/batch_mode_external_uses_2.swift > %t/two-primaries-neither-func.ir |
| // RUN: %target-swift-frontend -emit-ir -import-objc-header %S/Inputs/batch_mode_external_definitions.h -D FUNC1 -primary-file %S/Inputs/batch_mode_external_uses_1.swift -primary-file %S/Inputs/batch_mode_external_uses_2.swift > %t/two-primaries-func1.ir |
| // RUN: %target-swift-frontend -emit-ir -import-objc-header %S/Inputs/batch_mode_external_definitions.h -D FUNC2 -primary-file %S/Inputs/batch_mode_external_uses_1.swift -primary-file %S/Inputs/batch_mode_external_uses_2.swift > %t/two-primaries-func2.ir |
| // RUN: %target-swift-frontend -emit-ir -import-objc-header %S/Inputs/batch_mode_external_definitions.h -D FUNC1 -primary-file %S/Inputs/batch_mode_external_uses_2.swift -primary-file %S/Inputs/batch_mode_external_uses_1.swift > %t/two-primaries-func1-reorder.ir |
| // RUN: %target-swift-frontend -emit-ir -import-objc-header %S/Inputs/batch_mode_external_definitions.h -D FUNC2 -primary-file %S/Inputs/batch_mode_external_uses_2.swift -primary-file %S/Inputs/batch_mode_external_uses_1.swift > %t/two-primaries-func2-reorder.ir |
| // RUN: %target-swift-frontend -emit-ir -import-objc-header %S/Inputs/batch_mode_external_definitions.h -D FUNC1 -D FUNC2 -primary-file %S/Inputs/batch_mode_external_uses_1.swift -primary-file %S/Inputs/batch_mode_external_uses_2.swift > %t/two-primaries-both-funcs.ir |
| // |
| // RUN: %FileCheck --check-prefix=CHECK-FUNC1-ONLY %s <%t/two-primaries-func1.ir |
| // RUN: %FileCheck --check-prefix=CHECK-FUNC2-ONLY %s <%t/two-primaries-func2.ir |
| // RUN: %FileCheck --check-prefix=CHECK-FUNC1-ONLY-REORDER %s <%t/two-primaries-func1-reorder.ir |
| // RUN: %FileCheck --check-prefix=CHECK-FUNC2-ONLY-REORDER %s <%t/two-primaries-func2-reorder.ir |
| // RUN: %FileCheck --check-prefix=CHECK-BOTH-FUNCS %s <%t/two-primaries-both-funcs.ir |
| // RUN: %FileCheck --check-prefix=CHECK-NEITHER-FUNC %s <%t/two-primaries-neither-func.ir |
| // |
| // CHECK-FUNC1-ONLY: ModuleID |
| // CHECK-FUNC1-ONLY: use_func_1 |
| // CHECK-FUNC1-ONLY: define internal i32 @extern_inline_function |
| // CHECK-FUNC1-ONLY-NOT: define internal i32 @extern_inline_function |
| // CHECK-FUNC1-ONLY: ModuleID |
| // CHECK-FUNC1-ONLY-NOT: use_func_1 |
| // CHECK-FUNC1-ONLY-NOT: define internal i32 @extern_inline_function |
| // |
| // CHECK-FUNC2-ONLY: ModuleID |
| // CHECK-FUNC2-ONLY-NOT: use_func_2 |
| // CHECK-FUNC2-ONLY-NOT: define internal i32 @extern_inline_function |
| // CHECK-FUNC2-ONLY: ModuleID |
| // CHECK-FUNC2-ONLY: use_func_2 |
| // CHECK-FUNC2-ONLY: define internal i32 @extern_inline_function |
| // CHECK-FUNC2-ONLY-NOT: define internal i32 @extern_inline_function |
| // |
| // CHECK-FUNC1-ONLY-REORDER: ModuleID |
| // CHECK-FUNC1-ONLY-REORDER-NOT: use_func_1 |
| // CHECK-FUNC1-ONLY-REORDER-NOT: define internal i32 @extern_inline_function |
| // CHECK-FUNC1-ONLY-REORDER: ModuleID |
| // CHECK-FUNC1-ONLY-REORDER: use_func_1 |
| // CHECK-FUNC1-ONLY-REORDER: define internal i32 @extern_inline_function |
| // CHECK-FUNC1-ONLY-REORDER-NOT: define internal i32 @extern_inline_function |
| // |
| // CHECK-FUNC2-ONLY-REORDER: ModuleID |
| // CHECK-FUNC2-ONLY-REORDER: use_func_2 |
| // CHECK-FUNC2-ONLY-REORDER: define internal i32 @extern_inline_function |
| // CHECK-FUNC2-ONLY-REORDER-NOT: define internal i32 @extern_inline_function |
| // CHECK-FUNC2-ONLY-REORDER: ModuleID |
| // CHECK-FUNC2-ONLY-REORDER-NOT: use_func_2 |
| // CHECK-FUNC2-ONLY-REORDER-NOT: define internal i32 @extern_inline_function |
| // |
| // CHECK-BOTH-FUNCS: ModuleID |
| // CHECK-BOTH-FUNCS: use_func_1 |
| // CHECK-BOTH-FUNCS: define internal i32 @extern_inline_function |
| // CHECK-BOTH-FUNCS-NOT: define internal i32 @extern_inline_function |
| // CHECK-BOTH-FUNCS: ModuleID |
| // CHECK-BOTH-FUNCS: use_func_2 |
| // CHECK-BOTH-FUNCS: define internal i32 @extern_inline_function |
| // CHECK-BOTH-FUNCS-NOT: define internal i32 @extern_inline_function |
| // |
| // CHECK-NEITHER-FUNC: ModuleID |
| // CHECK-NEITHER-FUNC-NOT: use_func_1 |
| // CHECK-NEITHER-FUNC-NOT: define internal i32 @extern_inline_function |
| // CHECK-NEITHER-FUNC: ModuleID |
| // CHECK-NEITHER-FUNC-NOT: use_func_2 |
| // CHECK-NEITHER-FUNC-NOT: define internal i32 @extern_inline_function |
| |