mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
* [CSDiagnostics] Handle arg to param generic when locator points to ConstraintLocator::GenericArgument * [test] Add SR-12242 test case * [CSDiagnostics] Handle arg to param on Generic mismatch as a fallback diagnostic * [CSDiagnostics] Make assign diagnostics in GenericMismatchFailure handle more cases * [test] Adding test cases for assign expr in GenericMismatch diagnostics * [CSDiagnostics] Improving inout to pointer argument conversions with optionals diagnostics
44 lines
2.1 KiB
Swift
44 lines
2.1 KiB
Swift
// RUN: %target-typecheck-verify-swift
|
|
|
|
func foo(_ a: [[UInt8]], _ p: [UnsafeRawPointer]) {
|
|
foo(a, a) // expect-warning {{all paths through this function will call itself}}
|
|
}
|
|
|
|
// rdar://problem/44658089
|
|
func takesPtr(_: UnsafePointer<UInt8>) {}
|
|
|
|
func takesDoubleOptionalPtr(_ x: UnsafeRawPointer??) {}
|
|
func takesMutableDoubleOptionalPtr(_ x: UnsafeMutableRawPointer??) {}
|
|
func takesMutableDoubleOptionalTypedPtr(_ x: UnsafeMutablePointer<Double>??) {}
|
|
|
|
func givesPtr(_ str: String) {
|
|
takesPtr(UnsafePointer(str)) // expected-warning {{initialization of 'UnsafePointer<UInt8>' results in a dangling pointer}}
|
|
// expected-note @-1 {{implicit argument conversion from 'String' to 'UnsafePointer<UInt8>' produces a pointer valid only for the duration of the call to 'init(_:)'}}
|
|
// expected-note@-2 {{use the 'withCString' method on String in order to explicitly convert argument to pointer valid for a defined scope}}
|
|
|
|
var i = 0
|
|
var d = 0.0
|
|
var arr = [1, 2, 3]
|
|
|
|
// SR-9090: Allow double optional promotion for pointer conversions.
|
|
takesDoubleOptionalPtr(&arr)
|
|
takesDoubleOptionalPtr(arr)
|
|
takesDoubleOptionalPtr(str)
|
|
takesMutableDoubleOptionalPtr(&i)
|
|
takesMutableDoubleOptionalPtr(&arr)
|
|
takesMutableDoubleOptionalTypedPtr(&d)
|
|
|
|
takesDoubleOptionalPtr(i) // expected-error {{cannot convert value of type 'Int' to expected argument type 'UnsafeRawPointer??'}}
|
|
takesMutableDoubleOptionalPtr(arr) // expected-error {{cannot convert value of type '[Int]' to expected argument type 'UnsafeMutableRawPointer??'}}
|
|
|
|
takesMutableDoubleOptionalTypedPtr(&i) // expected-error {{cannot convert value of type 'UnsafeMutablePointer<Int>' to expected argument type 'UnsafeMutablePointer<Double>??'}}
|
|
// expected-note@-1 {{arguments to generic parameter 'Pointee' ('Int' and 'Double') are expected to be equal}}
|
|
}
|
|
|
|
// SR12382
|
|
func SR12382(_ x: UnsafeMutablePointer<Double>??) {}
|
|
|
|
var i = 0
|
|
SR12382(&i) // expected-error {{cannot convert value of type 'UnsafeMutablePointer<Int>' to expected argument type 'UnsafeMutablePointer<Double>??'}}
|
|
// expected-note@-1 {{arguments to generic parameter 'Pointee' ('Int' and 'Double') are expected to be equal}}
|