| // RUN: %target-swift-frontend -O -emit-sil -primary-file %s | %FileCheck %s |
| |
| // Check that this file can be compiled using -O at all (it used to crash due to a bug in the SILCloner) |
| // Check that it can be compiled correctly. |
| |
| // Protocol lookup for metatypes. |
| protocol StaticFoo { |
| static func foo() -> String |
| } |
| |
| class StaticBar { |
| // Check that the cast is not folded as a failing cast. |
| // CHECK-LABEL: sil hidden [noinline] @_T015protocol_lookup9StaticBarC12mightHaveFoo{{[_0-9a-zA-Z]*}}FZ |
| // Check that the cast was not eliminated. |
| // CHECK: checked_cast_br |
| @inline(never) |
| class func mightHaveFoo() -> String { |
| if let selfAsFoo = self as? StaticFoo.Type { |
| return selfAsFoo.foo() |
| } else { |
| return "no Foo for you" |
| } |
| } |
| } |
| |
| class StaticWibble : StaticBar, StaticFoo { |
| static func foo() -> String { return "StaticWibble.foo" } |
| } |
| |
| // CHECK: StaticWibble.foo |
| print(StaticWibble.mightHaveFoo()) |
| |