mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
Most tests were using %swift or similar substitutions, which did not include the target triple and SDK. The driver was defaulting to the host OS. Thus, we could not run the tests when the standard library was not built for OS X. Swift SVN r24504
122 lines
3.6 KiB
Swift
122 lines
3.6 KiB
Swift
// RUN: %target-parse-verify-swift
|
|
|
|
protocol P1 {
|
|
subscript (i: Int) -> Int { get } // expected-note{{protocol requires subscript with type '(Int) -> Int'}}
|
|
}
|
|
|
|
class C1 : P1 {
|
|
subscript (i: Int) -> Int {
|
|
get {
|
|
return i
|
|
}
|
|
set {}
|
|
}
|
|
}
|
|
|
|
struct S1 : P1 {
|
|
subscript (i: Int) -> Int {
|
|
get {
|
|
return i
|
|
}
|
|
set {}
|
|
}
|
|
}
|
|
|
|
struct S1Error : P1 { // expected-error{{type 'S1Error' does not conform to protocol 'P1'}}
|
|
subscript (i: Int) -> Double { // expected-note{{candidate has non-matching type '(Int) -> Double'}}
|
|
get {
|
|
return Double(i)
|
|
}
|
|
set {}
|
|
}
|
|
}
|
|
|
|
|
|
//===----------------------------------------------------------------------===//
|
|
// Get-only property requirements
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
protocol PropertyGet {
|
|
var x : Int { get } // expected-note {{protocol requires property 'x' with type 'Int'}}
|
|
}
|
|
|
|
class PropertyGet_Stored : PropertyGet {
|
|
var x : Int = 0 // ok
|
|
}
|
|
|
|
class PropertyGet_Immutable : PropertyGet {
|
|
let x : Int = 0 // ok.
|
|
}
|
|
|
|
class PropertyGet_ComputedGetSet : PropertyGet {
|
|
var x : Int { get { return 0 } set {} } // ok
|
|
}
|
|
|
|
class PropertyGet_ComputedGet : PropertyGet {
|
|
var x : Int { return 0 } // ok
|
|
}
|
|
|
|
struct PropertyGet_StaticVar : PropertyGet { // expected-error {{type 'PropertyGet_StaticVar' does not conform to protocol 'PropertyGet'}}
|
|
static var x : Int = 42 // expected-note {{candidate operates on a type, not an instance as required}}
|
|
}
|
|
|
|
//===----------------------------------------------------------------------===//
|
|
// Get-Set property requirements
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
protocol PropertyGetSet {
|
|
var x : Int { get set } // expected-note 2{{protocol requires property 'x' with type 'Int'}}
|
|
}
|
|
|
|
class PropertyGetSet_Stored : PropertyGetSet {
|
|
var x : Int = 0 // ok
|
|
}
|
|
|
|
class PropertyGetSet_Immutable : PropertyGetSet { // expected-error {{type 'PropertyGetSet_Immutable' does not conform to protocol 'PropertyGetSet'}}
|
|
let x : Int = 0 // expected-note {{candidate is not settable, but protocol requires it}}
|
|
}
|
|
|
|
class PropertyGetSet_ComputedGetSet : PropertyGetSet {
|
|
var x : Int { get { return 42 } set {} } // ok
|
|
}
|
|
|
|
class PropertyGetSet_ComputedGet : PropertyGetSet { // expected-error {{type 'PropertyGetSet_ComputedGet' does not conform to protocol 'PropertyGetSet'}}
|
|
var x : Int { return 42 } // expected-note {{candidate is not settable, but protocol requires it}}
|
|
}
|
|
|
|
//===----------------------------------------------------------------------===//
|
|
// Get-only subscript requirements
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
|
|
protocol SubscriptGet {
|
|
subscript(a : Int) -> Int { get }
|
|
}
|
|
|
|
class SubscriptGet_Get : SubscriptGet {
|
|
subscript(a : Int) -> Int { return 0 } // ok
|
|
}
|
|
|
|
class SubscriptGet_GetSet : SubscriptGet {
|
|
subscript(a : Int) -> Int { get { return 42 } set {} } // ok
|
|
}
|
|
|
|
|
|
//===----------------------------------------------------------------------===//
|
|
// Get-set subscript requirements
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
|
|
protocol SubscriptGetSet {
|
|
subscript(a : Int) -> Int { get set } // expected-note {{protocol requires subscript with type '(Int) -> Int'}}
|
|
}
|
|
|
|
class SubscriptGetSet_Get : SubscriptGetSet { // expected-error {{type 'SubscriptGetSet_Get' does not conform to protocol 'SubscriptGetSet'}}
|
|
subscript(a : Int) -> Int { return 0 } // expected-note {{candidate is not settable, but protocol requires it}}
|
|
}
|
|
|
|
class SubscriptGetSet_GetSet : SubscriptGetSet {
|
|
subscript(a : Int) -> Int { get { return 42 } set {} } // ok
|
|
}
|
|
|