| // RUN: %target-swift-frontend(mock-sdk: %clang-importer-sdk) -I %S/Inputs/custom-modules -enable-objc-interop -import-objc-header %S/Inputs/macros_redef.h -emit-silgen %s | %FileCheck -check-prefix=NEGATIVE %s |
| // RUN: %target-swift-frontend(mock-sdk: %clang-importer-sdk) -I %S/Inputs/custom-modules -enable-objc-interop -import-objc-header %S/Inputs/macros_redef.h -DCONFLICT -typecheck -verify %s |
| |
| // NEGATIVE-NOT: OLDTAG |
| |
| import MacrosRedefA |
| import MacrosRedefB |
| import MacrosDeliberateRedefA |
| import MacrosDeliberateRedefB |
| |
| #if CONFLICT |
| import MacrosRedefWithSubmodules |
| import MacrosRedefWithSubmodules.TheSubmodule |
| import MacrosRedefWithParallelSubmodules.A |
| import MacrosRedefWithParallelSubmodules.B |
| #else |
| import MacrosRedefWithSubmodules.TheSubmodule |
| import MacrosRedefWithParallelSubmodules.A |
| #endif |
| |
| func testFrameworkRedef() { |
| var s: String |
| s = REDEF_1 |
| #if CONFLICT |
| s = REDEF_2 // expected-error{{ambiguous use of 'REDEF_2'}} |
| #endif |
| } |
| |
| func testBridgingHeaderRedef() { |
| var s: String |
| s = BRIDGING_HEADER_1 |
| s = BRIDGING_HEADER_2 |
| _ = s |
| } |
| |
| func testSubmodules() { |
| var s: String |
| s = MRWS_REDEF_1 |
| s = MRWS_REDEF_2 |
| _ = s |
| } |
| |
| func testParallelSubmodules() { |
| var s: String |
| s = MRWPS_REDEF_1 |
| s = MRWPS_REDEF_2 // expected-error{{ambiguous use of 'MRWPS_REDEF_2'}} |
| _ = s |
| } |
| |
| func testDeliberateRedef() { |
| var s: String |
| s = MacrosDeliberateRedefA.MDR_REDEF_1 |
| s = MacrosDeliberateRedefB.MDR_REDEF_1 |
| s = MDR_REDEF_1 |
| |
| #if CONFLICT |
| // The first two lines ought to work even when SILGen-ing, but the two |
| // definitions of MDR_REDEF_2 end up getting the same mangled name. |
| s = MacrosDeliberateRedefA.MDR_REDEF_2 // ok |
| s = MacrosDeliberateRedefB.MDR_REDEF_2 // ok |
| s = MDR_REDEF_2 // expected-error{{ambiguous use of 'MDR_REDEF_2'}} |
| #endif |
| } |
| |