| // RUN: %target-sil-opt -enable-sil-verify-all %s |
| |
| // This file contains a collection of tests that ensure that the verifier does |
| // not fail on specific segments of code. The idea is to ensure that changing |
| // the verifier does not cause these to start asserting. When one adds a new |
| // check to the verifier, add a test case to make sure normal cases do not |
| // crash. |
| |
| sil_stage canonical |
| |
| import Builtin |
| |
| protocol P { |
| } |
| |
| sil @generic_user : $@convention(thin) <τ_0_0 where τ_0_0 : P> (@inout_aliasable τ_0_0) -> () |
| |
| sil @open_existential_immutable_access_to_inout_aliasable : $@convention(thin) (@in_guaranteed P) -> () { |
| bb0(%0 : $*P): |
| %1 = open_existential_addr immutable_access %0 : $*P to $*@opened("4E16CBC0-FD9F-11E8-A311-D0817AD9F6DD") P |
| %2 = function_ref @generic_user : $@convention(thin) <τ_0_0 where τ_0_0 : P> (@inout_aliasable τ_0_0) -> () |
| apply %2<@opened("4E16CBC0-FD9F-11E8-A311-D0817AD9F6DD") P>(%1) : $@convention(thin) <τ_0_0 where τ_0_0 : P> (@inout_aliasable τ_0_0) -> () |
| %9999 = tuple() |
| return %9999 : $() |
| } |