mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
These APIs are from the Swift 1.2 => Swift 2.0 transition, and are not relevant anymore. Removing them reduces the surface area of the library that needs to be reviewed.
134 lines
5.6 KiB
Plaintext
134 lines
5.6 KiB
Plaintext
// RUN: rm -rf %t && mkdir -p %t && %S/../../utils/gyb %s -o %t/main.swift
|
|
// RUN: %S/../../utils/line-directive %t/main.swift -- %target-swift-frontend -parse -verify %t/main.swift
|
|
|
|
func testUnaryMinusInUnsigned() {
|
|
var a: UInt8 = -(1) // expected-error {{}} expected-note * {{}}
|
|
|
|
var b: UInt16 = -(1) // expected-error {{}} expected-note * {{}}
|
|
|
|
var c: UInt32 = -(1) // expected-error {{}} expected-note * {{}}
|
|
|
|
var d: UInt64 = -(1) // expected-error {{}} expected-note * {{}}
|
|
}
|
|
|
|
// Int and UInt are not identical to any fixed-size integer type
|
|
var i : Int = 0
|
|
var i64 : Int64 = i // expected-error {{}}
|
|
var i32 : Int32 = i // expected-error {{}}
|
|
var i16 : Int16 = i // expected-error {{}}
|
|
var i8 : Int8 = i // expected-error {{}}
|
|
|
|
var u : UInt = 0
|
|
var u64 : UInt64 = u // expected-error {{}}
|
|
var u32 : UInt32 = u // expected-error {{}}
|
|
var u16 : UInt16 = u // expected-error {{}}
|
|
var u8 : UInt8 = u // expected-error {{}}
|
|
|
|
func expectSameType<T>(_: T.Type, _: T.Type) {}
|
|
|
|
func test_truncatingBitPatternAPIIsStableAcrossPlatforms() {
|
|
// Audit and update this test when adding new integer types.
|
|
expectSameType(Int64.self, IntMax.self)
|
|
expectSameType(UInt64.self, UIntMax.self)
|
|
|
|
_ = UInt8(truncatingBitPattern: UInt(0))
|
|
_ = UInt16(truncatingBitPattern: UInt(0))
|
|
_ = UInt32(truncatingBitPattern: UInt(0))
|
|
UInt64(truncatingBitPattern: UInt(0)) // expected-error {{extraneous argument label 'truncatingBitPattern:' in call}}
|
|
UInt(truncatingBitPattern: UInt(0)) // expected-error {{}} expected-note * {{}}
|
|
|
|
_ = Int8(truncatingBitPattern: UInt(0))
|
|
_ = Int16(truncatingBitPattern: UInt(0))
|
|
_ = Int32(truncatingBitPattern: UInt(0))
|
|
Int64(truncatingBitPattern: UInt(0)) // expected-error {{extraneous argument label 'truncatingBitPattern:' in call}}
|
|
Int(truncatingBitPattern: UInt(0)) // expected-error {{}} expected-note * {{}}
|
|
|
|
_ = UInt8(truncatingBitPattern: Int(0))
|
|
_ = UInt16(truncatingBitPattern: Int(0))
|
|
_ = UInt32(truncatingBitPattern: Int(0))
|
|
UInt64(truncatingBitPattern: Int(0)) // expected-error {{extraneous argument label 'truncatingBitPattern:' in call}}
|
|
UInt(truncatingBitPattern: Int(0)) // expected-error {{}} expected-note * {{}}
|
|
|
|
_ = Int8(truncatingBitPattern: Int(0))
|
|
_ = Int16(truncatingBitPattern: Int(0))
|
|
_ = Int32(truncatingBitPattern: Int(0))
|
|
Int64(truncatingBitPattern: Int(0)) // expected-error {{}} expected-note * {{}}
|
|
Int(truncatingBitPattern: Int(0)) // expected-error {{}} expected-note * {{}}
|
|
|
|
UInt(truncatingBitPattern: UInt8(0)) // expected-error {{}} expected-note * {{}}
|
|
UInt(truncatingBitPattern: UInt16(0)) // expected-error {{}} expected-note * {{}}
|
|
UInt(truncatingBitPattern: UInt32(0)) // expected-error {{}} expected-note * {{}}
|
|
_ = UInt(truncatingBitPattern: UInt64(0))
|
|
|
|
Int(truncatingBitPattern: UInt8(0)) // expected-error {{}} expected-note * {{}}
|
|
Int(truncatingBitPattern: UInt16(0)) // expected-error {{}} expected-note * {{}}
|
|
Int(truncatingBitPattern: UInt32(0)) // expected-error {{}} expected-note * {{}}
|
|
_ = Int(truncatingBitPattern: UInt64(0))
|
|
|
|
UInt(truncatingBitPattern: Int8(0)) // expected-error {{}} expected-note * {{}}
|
|
UInt(truncatingBitPattern: Int16(0)) // expected-error {{}} expected-note * {{}}
|
|
UInt(truncatingBitPattern: Int32(0)) // expected-error {{}} expected-note * {{}}
|
|
_ = UInt(truncatingBitPattern: Int64(0))
|
|
|
|
Int(truncatingBitPattern: Int8(0)) // expected-error {{}} expected-note * {{}}
|
|
Int(truncatingBitPattern: Int16(0)) // expected-error {{}} expected-note * {{}}
|
|
Int(truncatingBitPattern: Int32(0)) // expected-error {{}} expected-note * {{}}
|
|
_ = Int(truncatingBitPattern: Int64(0))
|
|
}
|
|
|
|
func testMixedSignArithmetic() {
|
|
// Ensure that the generic arithmetic operators for Strideable don't
|
|
// allow mixed-sign arithmetic to compile. We create a deliberate
|
|
// ambiguity in these cases.
|
|
% for T in "UInt UInt64 UInt32 UInt16 UInt8".split():
|
|
if true {
|
|
typealias Stride = ${T}.Stride
|
|
${T}(1) + 0 // OK
|
|
0 + ${T}(1) // OK
|
|
${T}(1) + Stride(0) // expected-error {{}} // ambiguous use of operator '+'
|
|
Stride(1) + ${T}(0) // expected-error {{}} // ambiguous use of operator '+'
|
|
${T}(1) - Stride(0) // expected-error {{}} // ambiguous use of operator '-'
|
|
var x: ${T} = 0
|
|
x += 1 // OK
|
|
x += Stride(1) // expected-error {{}} // ambiguous use of operator '+='
|
|
x -= Stride(1) // expected-error {{}} // ambiguous use of operator '-='
|
|
|
|
(x - x) as Stride // expected-error {{}} // ambiguous use of operator '-'
|
|
|
|
//===------------------------------------------------------------------===//
|
|
// The following errors are different because they're not being
|
|
// disabled by the ambiguity trick.
|
|
//===------------------------------------------------------------------===//
|
|
|
|
(x + x) as Stride // expected-error {{}} // not convertible to 'Stride'
|
|
Stride(1) - ${T}(0) // expected-error {{}} expected-note {{}}
|
|
|
|
// These tests are expected to start failing when we get improved diagnostics.
|
|
var y: Stride = 0
|
|
y += ${T}(1) // expected-error {{}}
|
|
y -= ${T}(1) // expected-error {{}}
|
|
}
|
|
% end
|
|
}
|
|
|
|
func testOps<T : IntegerArithmeticType>(x: T, _ y: T) -> T {
|
|
let a = x + y
|
|
let s = x - y
|
|
let m = x * y
|
|
let d = x / y
|
|
let r = x % y
|
|
return a + s + m + d + r
|
|
}
|
|
|
|
let s_ops: Int = testOps(5, 2)
|
|
let u_ops: UInt = testOps(5, 2)
|
|
let s8_ops: Int8 = testOps(5, 2)
|
|
let u8_ops: UInt8 = testOps(5, 2)
|
|
let s16_ops: Int16 = testOps(5, 2)
|
|
let u16_ops: UInt16 = testOps(5, 2)
|
|
let s32_ops: Int32 = testOps(5, 2)
|
|
let u32_ops: UInt32 = testOps(5, 2)
|
|
let s64_ops: Int64 = testOps(5, 2)
|
|
let u64_ops: UInt64 = testOps(5, 2)
|
|
|