// RUN: %target-swift-emit-silgen -module-name checked_cast_br_anyobject -parse-as-library -Xllvm -sil-full-demangle -enforce-exclusivity=checked %s public struct BridgedSwiftObject { var swiftMetatype : UnsafeRawPointer var refCounts : Int64 } public typealias SwiftObject = UnsafeMutablePointer extension UnsafeMutablePointer where Pointee == BridgedSwiftObject { init(_ object: T) { let ptr = Unmanaged.passUnretained(object).toOpaque() self = ptr.bindMemory(to: BridgedSwiftObject.self, capacity: 1) } func getAs(_ objectType: T.Type) -> T { return Unmanaged.fromOpaque(self).takeUnretainedValue() } } extension Optional where Wrapped == UnsafeMutablePointer { func getAs(_ objectType: T.Type) -> T? { if let pointer = self { return Unmanaged.fromOpaque(pointer).takeUnretainedValue() } return nil } } public class Klass {} public class Klass2 {} // Make sure that we do not crash when emitting this code! public func getValue(_ obj: UnsafeMutablePointer) -> AnyObject { let v = obj.getAs(AnyObject.self) switch v { case let k as Klass: return k case let k as Klass2: return k default: fatalError("unknown type") } }