Files
swift-mirror/test/Unsafe/unsafe_nonstrict.swift
Doug Gregor f64516b01d [Strict memory safety] "unsafe" expression never propagates unsafe outward
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.
2025-07-16 12:44:08 -07:00

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
}