Files
swift-mirror/test/Interop/Cxx/class/conforms-to-errors.swift

161 lines
8.8 KiB
Swift

// RUN: rm -rf %t
// RUN: split-file %s %t
// RUN: not %target-swift-frontend -typecheck -I %t/Inputs %t/test.swift -enable-experimental-cxx-interop -module-name SwiftTest 2>&1 | %FileCheck %s
//--- Inputs/module.modulemap
module Test {
header "test.h"
requires cplusplus
}
//--- Inputs/test.h
struct __attribute__((swift_attr("conforms_to:X"))) CInv {};
struct __attribute__((swift_attr("conforms_to:Mod.X"))) CModInv {};
struct __attribute__((swift_attr("conforms_to:SwiftTest.X"))) CX {};
struct __attribute__((swift_attr("conforms_to:SwiftTest.A"))) CA {};
struct __attribute__((swift_attr("conforms_to:SwiftTest.B"))) CB {};
struct __attribute__((swift_attr("conforms_to:X")))
__attribute__((swift_attr("conforms_to:X"))) CXX {};
struct __attribute__((swift_attr("conforms_to:X")))
__attribute__((swift_attr("conforms_to:Mod.X"))) CXModX {};
struct __attribute__((swift_attr("conforms_to:X")))
__attribute__((swift_attr("conforms_to:SwiftTest.X"))) CXTextX {};
struct __attribute__((swift_attr("conforms_to:X")))
__attribute__((swift_attr("conforms_to:SwiftTest.A"))) CXA {};
struct __attribute__((swift_attr("conforms_to:X")))
__attribute__((swift_attr("conforms_to:SwiftTest.B"))) CXB {};
struct __attribute__((swift_attr("conforms_to:X")))
__attribute__((swift_attr("conforms_to:SwiftTest.C"))) CXC {};
struct __attribute__((swift_attr("conforms_to:Mod.X")))
__attribute__((swift_attr("conforms_to:Mod.X"))) CModXModX {};
struct __attribute__((swift_attr("conforms_to:Mod.X")))
__attribute__((swift_attr("conforms_to:SwiftTest.X"))) CModXTestX {};
struct __attribute__((swift_attr("conforms_to:Mod.X")))
__attribute__((swift_attr("conforms_to:SwiftTest.A"))) CModXA {};
struct __attribute__((swift_attr("conforms_to:Mod.X")))
__attribute__((swift_attr("conforms_to:SwiftTest.B"))) CModXB {};
struct __attribute__((swift_attr("conforms_to:Mod.X")))
__attribute__((swift_attr("conforms_to:SwiftTest.C"))) CModXC {};
struct __attribute__((swift_attr("conforms_to:SwiftTest.X")))
__attribute__((swift_attr("conforms_to:SwiftTest.X"))) CTestXTextX {};
struct __attribute__((swift_attr("conforms_to:SwiftTest.X")))
__attribute__((swift_attr("conforms_to:SwiftTest.A"))) CTextXA {};
struct __attribute__((swift_attr("conforms_to:SwiftTest.X")))
__attribute__((swift_attr("conforms_to:SwiftTest.B"))) CTextXB {};
struct __attribute__((swift_attr("conforms_to:SwiftTest.X")))
__attribute__((swift_attr("conforms_to:SwiftTest.C"))) CTextXC {};
struct __attribute__((swift_attr("conforms_to:SwiftTest.A")))
__attribute__((swift_attr("conforms_to:SwiftTest.A"))) CAA {};
struct __attribute__((swift_attr("conforms_to:SwiftTest.A")))
__attribute__((swift_attr("conforms_to:SwiftTest.B"))) CAB {};
struct __attribute__((swift_attr("conforms_to:SwiftTest.A")))
__attribute__((swift_attr("conforms_to:SwiftTest.C"))) CAC {};
struct __attribute__((swift_attr("conforms_to:SwiftTest.B")))
__attribute__((swift_attr("conforms_to:SwiftTest.B"))) CBB {};
struct __attribute__((swift_attr("conforms_to:SwiftTest.B")))
__attribute__((swift_attr("conforms_to:SwiftTest.C"))) CBC {};
struct __attribute__((swift_attr("conforms_to:SwiftTest.C")))
__attribute__((swift_attr("conforms_to:SwiftTest.C"))) CCC {};
struct __attribute__((swift_attr("conforms_to:SwiftTest.D"))) CD {};
struct __attribute__((swift_attr("conforms_to:SwiftTest.D"))) CDD: CD {};
struct __attribute__((swift_attr("conforms_to:SwiftTest.D"))) CD2 {};
struct CCDCD2 : CD, CD2 {};
struct __attribute__((swift_attr("conforms_to:SwiftTest.D")))
__attribute__((swift_attr("conforms_to:SwiftTest.E"))) CDE {};
//--- test.swift
import Test
struct B {}
protocol A {}
protocol A {}
protocol C {}
protocol D {}
protocol E: D {}
// CHECK: error: expected module name and protocol name separated by '.' in protocol conformance; 'X' is invalid
// CHECK: module 'Mod' in specified protocol conformance 'Mod.X' is not found; did you mean to import it first?
// CHECK: error: protocol 'X' in specified protocol conformance is not found in module 'SwiftTest'
// CHECK: error: ambiguous reference to protocol 'A' in specified protocol conformance; module 'SwiftTest' contains multiple protocols named 'A'
// CHECK: error: struct 'B' referenced in protocol conformance 'SwiftTest.B' is not a protocol
func test(_ inv: CInv, _ invMod: CModInv, _ x: CX, _ a: CA, _ b: CB) {}
// CHECK: error: expected module name and protocol name separated by '.' in protocol conformance; 'X' is invalid
// CHECK: error: expected module name and protocol name separated by '.' in protocol conformance; 'X' is invalid
// CHECK: error: expected module name and protocol name separated by '.' in protocol conformance; 'X' is invalid
// CHECK: module 'Mod' in specified protocol conformance 'Mod.X' is not found; did you mean to import it first?
// CHECK: error: expected module name and protocol name separated by '.' in protocol conformance; 'X' is invalid
// CHECK: error: protocol 'X' in specified protocol conformance is not found in module 'SwiftTest'
// CHECK: error: expected module name and protocol name separated by '.' in protocol conformance; 'X' is invalid
// CHECK: error: ambiguous reference to protocol 'A' in specified protocol conformance; module 'SwiftTest' contains multiple protocols named 'A'
// CHECK: error: expected module name and protocol name separated by '.' in protocol conformance; 'X' is invalid
// CHECK: error: struct 'B' referenced in protocol conformance 'SwiftTest.B' is not a protocol
// CHECK: error: expected module name and protocol name separated by '.' in protocol conformance; 'X' is invalid
func test(_ xx: CXX, _ xModx: CXModX, _ xTextX: CXTextX, _ cxa: CXA, _ cxb: CXB, _ cxc: CXC) {}
// CHECK: module 'Mod' in specified protocol conformance 'Mod.X' is not found; did you mean to import it first?
// CHECK: module 'Mod' in specified protocol conformance 'Mod.X' is not found; did you mean to import it first?
// CHECK: module 'Mod' in specified protocol conformance 'Mod.X' is not found; did you mean to import it first?
// CHECK: error: protocol 'X' in specified protocol conformance is not found in module 'SwiftTest'
// CHECK: module 'Mod' in specified protocol conformance 'Mod.X' is not found; did you mean to import it first?
// CHECK: error: ambiguous reference to protocol 'A' in specified protocol conformance; module 'SwiftTest' contains multiple protocols named 'A'
// CHECK: module 'Mod' in specified protocol conformance 'Mod.X' is not found; did you mean to import it first?
// CHECK: error: struct 'B' referenced in protocol conformance 'SwiftTest.B' is not a protocol
// CHECK: module 'Mod' in specified protocol conformance 'Mod.X' is not found; did you mean to import it first?
func test(_ modXModX: CModXModX, _ modXTestX: CModXTestX, _ modXA: CModXA, _ modXB: CModXB, _ modXC: CModXC) {}
// CHECK: error: protocol 'X' in specified protocol conformance is not found in module 'SwiftTest'
// CHECK: error: protocol 'X' in specified protocol conformance is not found in module 'SwiftTest'
// CHECK: error: protocol 'X' in specified protocol conformance is not found in module 'SwiftTest'
// CHECK: error: ambiguous reference to protocol 'A' in specified protocol conformance; module 'SwiftTest' contains multiple protocols named 'A'
// CHECK: error: protocol 'X' in specified protocol conformance is not found in module 'SwiftTest'
// CHECK: error: struct 'B' referenced in protocol conformance 'SwiftTest.B' is not a protocol
// CHECK: error: protocol 'X' in specified protocol conformance is not found in module 'SwiftTest'
func test(_ testXTextX: CTestXTextX, _ textXA: CTextXA, _ textXB: CTextXB, _ textXC: CTextXC) {}
// CHECK: error: ambiguous reference to protocol 'A' in specified protocol conformance; module 'SwiftTest' contains multiple protocols named 'A'
// CHECK: error: ambiguous reference to protocol 'A' in specified protocol conformance; module 'SwiftTest' contains multiple protocols named 'A'
// CHECK: error: ambiguous reference to protocol 'A' in specified protocol conformance; module 'SwiftTest' contains multiple protocols named 'A'
// CHECK: error: struct 'B' referenced in protocol conformance 'SwiftTest.B' is not a protocol
// CHECK: error: ambiguous reference to protocol 'A' in specified protocol conformance; module 'SwiftTest' contains multiple protocols named 'A'
func test(_ aa: CAA, _ ab: CAB, _ ac: CAC) {}
// CHECK: error: struct 'B' referenced in protocol conformance 'SwiftTest.B' is not a protocol
func test(_ bb: CBB, _ bc: CBC) {}
// CHECK: error: redundant conformance of 'CCC' to protocol 'SwiftTest.C'
func test(_ cc: CCC) {}
// CHECK-NOT: error: redundant conformance of 'CDD' to protocol 'SwiftTest.D'
// CHECK-NOT: error: redundant conformance of 'CCDCD2' to protocol 'SwiftTest.D'
// CHECK-NOT: error: redundant conformance of 'CDE' to protocol 'SwiftTest.D'
func test(_ dd: CDD, _ dd2: CCDCD2, de: CDE) {}