mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
In the effects checker, we were propagating the "has an unsafe use site" outside of an `unsafe` expression. The result of this is that we would not produce a warning for silly expressions like `unsafe unsafe ptr.pointee`, where the first (outer) `unsafe` is unnecessary. Stop propagating that bit so we properly diagnose the spurious "unsafe". Fixes issue #82315 / rdar://153672668.
26 lines
577 B
Swift
26 lines
577 B
Swift
// RUN: %target-typecheck-verify-swift
|
|
|
|
@unsafe func unsafeFunc() { }
|
|
|
|
@unsafe
|
|
struct UnsafeType { }
|
|
|
|
protocol P { }
|
|
|
|
struct X: @unsafe P { }
|
|
|
|
func acceptP<T: P>(_: T) { }
|
|
|
|
func testItAll(ut: UnsafeType, x: X, i: Int) {
|
|
_ = unsafe ut
|
|
unsafe acceptP(x)
|
|
_ = unsafe i // expected-warning{{no unsafe operations occur within 'unsafe' expression}}
|
|
}
|
|
|
|
func superDuperUnsafe(_ bytes: UnsafeRawBufferPointer) {
|
|
// expected-warning@+1{{no unsafe operations occur within 'unsafe' expression}}
|
|
let byte = unsafe unsafe bytes.first ?? 0
|
|
_ = byte
|
|
_ = unsafe bytes.first ?? 0
|
|
}
|