blob: 7eb153171c1826dc94147533fc8ac2bdbc70999f [file] [log] [blame]
// RUN: %target-run-simple-swift | %FileCheck %s
// REQUIRES: executable_test
// REQUIRES: objc_interop
// rdar://problem/28022201 exposed an ABI mismatch bug between the C++ code
// in the runtime and standard library hook functions written in Swift, which
// led to dynamic cast operations on sets and dictionaries generating corrupt
// type metadata. Exercising this bug requires that the first instantiation of
// a specific dictionary type in the process be through a dynamic cast. We
// then bridge to ObjC, so that the resulting NSDictionary subclass is forced
// to recover the underlying Dictionary's generic environment from the
// corrupted class metadata instead of getting it passed in from the compiler.
import Foundation
let a: [String: Int] = ["foo": 1]
let b: Any = a
let c = b as? [String: Any]
let d = (c as AnyObject) as! NSDictionary
_ = d.object(forKey: "foo" as NSString)
// CHECK: ok
print("ok")