mirror of
https://github.com/carbon-language/carbon-lang.git
synced 2026-10-05 22:02:55 +01:00
Initial support for binding patterns in SemIR (#4221)
Introduces the `BindingPattern` and `SymbolicBindingPattern` insts, and a separate stack of pattern blocks that they are emitted into. The intent is to generate the corresponding pattern-matching insts (like `BindName`) from them in a separate pass, but that is deferred to future PRs. See [here](https://docs.google.com/document/d/1U_vQH17V893J9aF1LJXUnFYBNSs2MjKl4bJPaWCB2zo/edit?usp=sharing&resourcekey=0-w0xGYZ0An31Kpz-wvzSXwQ) for the design this is based on, but note that during review we have chosen to deviate from that design by putting the patterns in separate blocks, and omitting the "forward references" from a `BindingPattern` to its corresponding `BindName`. This in turn necessitates having separate inst kinds for symbolic and non-symbolic binding patterns. --------- Co-authored-by: Jon Ross-Perkins <jperkins@google.com>
This commit is contained in:
co-authored by
Jon Ross-Perkins
parent
87678cc374
commit
dc32aa2690
+113
-85
@@ -160,26 +160,30 @@ fn CallImplicitNotDeducible() {
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %Core.import = import Core
|
||||
// CHECK:STDOUT: %ExplicitGenericParam.decl: %ExplicitGenericParam.type = fn_decl @ExplicitGenericParam [template = constants.%ExplicitGenericParam] {
|
||||
// CHECK:STDOUT: %T.loc4_25.1: type = param T, runtime_param<invalid>
|
||||
// CHECK:STDOUT: @ExplicitGenericParam.%T.loc4: type = bind_symbolic_name T 0, %T.loc4_25.1 [symbolic = @ExplicitGenericParam.%T.1 (constants.%T)]
|
||||
// CHECK:STDOUT: %T.ref.loc4: type = name_ref T, @ExplicitGenericParam.%T.loc4 [symbolic = @ExplicitGenericParam.%T.1 (constants.%T)]
|
||||
// CHECK:STDOUT: %.loc4: type = ptr_type %T [symbolic = @ExplicitGenericParam.%.1 (constants.%.1)]
|
||||
// CHECK:STDOUT: @ExplicitGenericParam.%return: ref @ExplicitGenericParam.%.1 (%.1) = var <return slot>
|
||||
// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T 0
|
||||
// CHECK:STDOUT: } {
|
||||
// CHECK:STDOUT: %T.param: type = param T, runtime_param<invalid>
|
||||
// CHECK:STDOUT: %T.loc4: type = bind_symbolic_name T 0, %T.param [symbolic = %T.1 (constants.%T)]
|
||||
// CHECK:STDOUT: %T.ref: type = name_ref T, %T.loc4 [symbolic = %T.1 (constants.%T)]
|
||||
// CHECK:STDOUT: %.loc4: type = ptr_type %T [symbolic = %.1 (constants.%.1)]
|
||||
// CHECK:STDOUT: %return: ref @ExplicitGenericParam.%.1 (%.1) = var <return slot>
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %CallExplicitGenericParam.decl: %CallExplicitGenericParam.type = fn_decl @CallExplicitGenericParam [template = constants.%CallExplicitGenericParam] {
|
||||
// CHECK:STDOUT: %int.make_type_32: init type = call constants.%Int32() [template = i32]
|
||||
// CHECK:STDOUT: %.loc6_37.1: type = value_of_initializer %int.make_type_32 [template = i32]
|
||||
// CHECK:STDOUT: %.loc6_37.2: type = converted %int.make_type_32, %.loc6_37.1 [template = i32]
|
||||
// CHECK:STDOUT: %CallExplicitGenericParam.decl: %CallExplicitGenericParam.type = fn_decl @CallExplicitGenericParam [template = constants.%CallExplicitGenericParam] {} {
|
||||
// CHECK:STDOUT: %int.make_type_32.loc6: init type = call constants.%Int32() [template = i32]
|
||||
// CHECK:STDOUT: %.loc6_37.1: type = value_of_initializer %int.make_type_32.loc6 [template = i32]
|
||||
// CHECK:STDOUT: %.loc6_37.2: type = converted %int.make_type_32.loc6, %.loc6_37.1 [template = i32]
|
||||
// CHECK:STDOUT: %.loc6_37.3: type = ptr_type i32 [template = constants.%.3]
|
||||
// CHECK:STDOUT: @CallExplicitGenericParam.%return: ref %.3 = var <return slot>
|
||||
// CHECK:STDOUT: %return: ref %.3 = var <return slot>
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %CallExplicitGenericParamWithGenericArg.decl: %CallExplicitGenericParamWithGenericArg.type = fn_decl @CallExplicitGenericParamWithGenericArg [template = constants.%CallExplicitGenericParamWithGenericArg] {
|
||||
// CHECK:STDOUT: %T.loc10_43.1: type = param T, runtime_param<invalid>
|
||||
// CHECK:STDOUT: @CallExplicitGenericParamWithGenericArg.%T.loc10: type = bind_symbolic_name T 0, %T.loc10_43.1 [symbolic = @CallExplicitGenericParamWithGenericArg.%T.1 (constants.%T)]
|
||||
// CHECK:STDOUT: %T.ref.loc10: type = name_ref T, @CallExplicitGenericParamWithGenericArg.%T.loc10 [symbolic = @CallExplicitGenericParamWithGenericArg.%T.1 (constants.%T)]
|
||||
// CHECK:STDOUT: %.loc10_62: type = struct_type {.a: %T} [symbolic = @CallExplicitGenericParamWithGenericArg.%.1 (constants.%.4)]
|
||||
// CHECK:STDOUT: %.loc10_63: type = ptr_type %.4 [symbolic = @CallExplicitGenericParamWithGenericArg.%.2 (constants.%.5)]
|
||||
// CHECK:STDOUT: @CallExplicitGenericParamWithGenericArg.%return: ref @CallExplicitGenericParamWithGenericArg.%.2 (%.5) = var <return slot>
|
||||
// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T 0
|
||||
// CHECK:STDOUT: } {
|
||||
// CHECK:STDOUT: %T.param: type = param T, runtime_param<invalid>
|
||||
// CHECK:STDOUT: %T.loc10: type = bind_symbolic_name T 0, %T.param [symbolic = %T.1 (constants.%T)]
|
||||
// CHECK:STDOUT: %T.ref.loc10: type = name_ref T, %T.loc10 [symbolic = %T.1 (constants.%T)]
|
||||
// CHECK:STDOUT: %.loc10_62: type = struct_type {.a: %T} [symbolic = %.1 (constants.%.4)]
|
||||
// CHECK:STDOUT: %.loc10_63: type = ptr_type %.4 [symbolic = %.2 (constants.%.5)]
|
||||
// CHECK:STDOUT: %return: ref @CallExplicitGenericParamWithGenericArg.%.2 (%.5) = var <return slot>
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
@@ -195,9 +199,9 @@ fn CallImplicitNotDeducible() {
|
||||
// CHECK:STDOUT: fn @CallExplicitGenericParam() -> %.3 {
|
||||
// CHECK:STDOUT: !entry:
|
||||
// CHECK:STDOUT: %ExplicitGenericParam.ref: %ExplicitGenericParam.type = name_ref ExplicitGenericParam, file.%ExplicitGenericParam.decl [template = constants.%ExplicitGenericParam]
|
||||
// CHECK:STDOUT: %int.make_type_32: init type = call constants.%Int32() [template = i32]
|
||||
// CHECK:STDOUT: %.loc7_30.1: type = value_of_initializer %int.make_type_32 [template = i32]
|
||||
// CHECK:STDOUT: %.loc7_30.2: type = converted %int.make_type_32, %.loc7_30.1 [template = i32]
|
||||
// CHECK:STDOUT: %int.make_type_32.loc7: init type = call constants.%Int32() [template = i32]
|
||||
// CHECK:STDOUT: %.loc7_30.1: type = value_of_initializer %int.make_type_32.loc7 [template = i32]
|
||||
// CHECK:STDOUT: %.loc7_30.2: type = converted %int.make_type_32.loc7, %.loc7_30.1 [template = i32]
|
||||
// CHECK:STDOUT: %ExplicitGenericParam.call: init %.3 = call %ExplicitGenericParam.ref()
|
||||
// CHECK:STDOUT: %.loc7_35.1: %.3 = value_of_initializer %ExplicitGenericParam.call
|
||||
// CHECK:STDOUT: %.loc7_35.2: %.3 = converted %ExplicitGenericParam.call, %.loc7_35.1
|
||||
@@ -214,7 +218,7 @@ fn CallImplicitNotDeducible() {
|
||||
// CHECK:STDOUT: fn(%T.loc10: type) -> @CallExplicitGenericParamWithGenericArg.%.2 (%.5) {
|
||||
// CHECK:STDOUT: !entry:
|
||||
// CHECK:STDOUT: %ExplicitGenericParam.ref: %ExplicitGenericParam.type = name_ref ExplicitGenericParam, file.%ExplicitGenericParam.decl [template = constants.%ExplicitGenericParam]
|
||||
// CHECK:STDOUT: %T.ref: type = name_ref T, %T.loc10 [symbolic = %T.1 (constants.%T)]
|
||||
// CHECK:STDOUT: %T.ref.loc11: type = name_ref T, %T.loc10 [symbolic = %T.1 (constants.%T)]
|
||||
// CHECK:STDOUT: %.loc11_37: type = struct_type {.a: %T} [symbolic = %.1 (constants.%.4)]
|
||||
// CHECK:STDOUT: %ExplicitGenericParam.call: init @CallExplicitGenericParamWithGenericArg.%.2 (%.5) = call %ExplicitGenericParam.ref()
|
||||
// CHECK:STDOUT: %.loc11_39.1: @CallExplicitGenericParamWithGenericArg.%.2 (%.5) = value_of_initializer %ExplicitGenericParam.call
|
||||
@@ -285,28 +289,33 @@ fn CallImplicitNotDeducible() {
|
||||
// CHECK:STDOUT: .CallExplicitAndAlsoDeduced = %CallExplicitAndAlsoDeduced.decl
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %Core.import = import Core
|
||||
// CHECK:STDOUT: %A.decl: type = class_decl @A [template = constants.%A] {}
|
||||
// CHECK:STDOUT: %A.decl: type = class_decl @A [template = constants.%A] {} {}
|
||||
// CHECK:STDOUT: %ExplicitAndAlsoDeduced.decl: %ExplicitAndAlsoDeduced.type = fn_decl @ExplicitAndAlsoDeduced [template = constants.%ExplicitAndAlsoDeduced] {
|
||||
// CHECK:STDOUT: %T.loc6_27.1: type = param T, runtime_param<invalid>
|
||||
// CHECK:STDOUT: @ExplicitAndAlsoDeduced.%T.loc6: type = bind_symbolic_name T 0, %T.loc6_27.1 [symbolic = @ExplicitAndAlsoDeduced.%T.1 (constants.%T)]
|
||||
// CHECK:STDOUT: %T.ref.loc6_40: type = name_ref T, @ExplicitAndAlsoDeduced.%T.loc6 [symbolic = @ExplicitAndAlsoDeduced.%T.1 (constants.%T)]
|
||||
// CHECK:STDOUT: %x.loc6_37.1: @ExplicitAndAlsoDeduced.%T.1 (%T) = param x, runtime_param0
|
||||
// CHECK:STDOUT: @ExplicitAndAlsoDeduced.%x: @ExplicitAndAlsoDeduced.%T.1 (%T) = bind_name x, %x.loc6_37.1
|
||||
// CHECK:STDOUT: %T.ref.loc6_46: type = name_ref T, @ExplicitAndAlsoDeduced.%T.loc6 [symbolic = @ExplicitAndAlsoDeduced.%T.1 (constants.%T)]
|
||||
// CHECK:STDOUT: %.loc6: type = ptr_type %T [symbolic = @ExplicitAndAlsoDeduced.%.1 (constants.%.3)]
|
||||
// CHECK:STDOUT: @ExplicitAndAlsoDeduced.%return: ref @ExplicitAndAlsoDeduced.%.1 (%.3) = var <return slot>
|
||||
// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T 0
|
||||
// CHECK:STDOUT: %x.patt: @ExplicitAndAlsoDeduced.%T.1 (%T) = binding_pattern x
|
||||
// CHECK:STDOUT: } {
|
||||
// CHECK:STDOUT: %T.param: type = param T, runtime_param<invalid>
|
||||
// CHECK:STDOUT: %T.loc6: type = bind_symbolic_name T 0, %T.param [symbolic = %T.1 (constants.%T)]
|
||||
// CHECK:STDOUT: %T.ref.loc6_40: type = name_ref T, %T.loc6 [symbolic = %T.1 (constants.%T)]
|
||||
// CHECK:STDOUT: %x.param: @ExplicitAndAlsoDeduced.%T.1 (%T) = param x, runtime_param0
|
||||
// CHECK:STDOUT: %x: @ExplicitAndAlsoDeduced.%T.1 (%T) = bind_name x, %x.param
|
||||
// CHECK:STDOUT: %T.ref.loc6_46: type = name_ref T, %T.loc6 [symbolic = %T.1 (constants.%T)]
|
||||
// CHECK:STDOUT: %.loc6: type = ptr_type %T [symbolic = %.1 (constants.%.3)]
|
||||
// CHECK:STDOUT: %return: ref @ExplicitAndAlsoDeduced.%.1 (%.3) = var <return slot>
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %CallExplicitAndAlsoDeduced.decl: %CallExplicitAndAlsoDeduced.type = fn_decl @CallExplicitAndAlsoDeduced [template = constants.%CallExplicitAndAlsoDeduced] {
|
||||
// CHECK:STDOUT: %n.patt: i32 = binding_pattern n
|
||||
// CHECK:STDOUT: } {
|
||||
// CHECK:STDOUT: %int.make_type_32.loc9_34: init type = call constants.%Int32() [template = i32]
|
||||
// CHECK:STDOUT: %.loc9_34.1: type = value_of_initializer %int.make_type_32.loc9_34 [template = i32]
|
||||
// CHECK:STDOUT: %.loc9_34.2: type = converted %int.make_type_32.loc9_34, %.loc9_34.1 [template = i32]
|
||||
// CHECK:STDOUT: %n.loc9_31.1: i32 = param n, runtime_param0
|
||||
// CHECK:STDOUT: @CallExplicitAndAlsoDeduced.%n: i32 = bind_name n, %n.loc9_31.1
|
||||
// CHECK:STDOUT: %n.param: i32 = param n, runtime_param0
|
||||
// CHECK:STDOUT: %n: i32 = bind_name n, %n.param
|
||||
// CHECK:STDOUT: %int.make_type_32.loc9_42: init type = call constants.%Int32() [template = i32]
|
||||
// CHECK:STDOUT: %.loc9_45.1: type = value_of_initializer %int.make_type_32.loc9_42 [template = i32]
|
||||
// CHECK:STDOUT: %.loc9_45.2: type = converted %int.make_type_32.loc9_42, %.loc9_45.1 [template = i32]
|
||||
// CHECK:STDOUT: %.loc9_45.3: type = ptr_type i32 [template = constants.%.5]
|
||||
// CHECK:STDOUT: @CallExplicitAndAlsoDeduced.%return: ref %.5 = var <return slot>
|
||||
// CHECK:STDOUT: %return: ref %.5 = var <return slot>
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
@@ -377,26 +386,31 @@ fn CallImplicitNotDeducible() {
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %Core.import = import Core
|
||||
// CHECK:STDOUT: %ImplicitGenericParam.decl: %ImplicitGenericParam.type = fn_decl @ImplicitGenericParam [template = constants.%ImplicitGenericParam] {
|
||||
// CHECK:STDOUT: %T.loc4_25.1: type = param T, runtime_param<invalid>
|
||||
// CHECK:STDOUT: @ImplicitGenericParam.%T.loc4: type = bind_symbolic_name T 0, %T.loc4_25.1 [symbolic = @ImplicitGenericParam.%T.1 (constants.%T)]
|
||||
// CHECK:STDOUT: %T.ref.loc4_38: type = name_ref T, @ImplicitGenericParam.%T.loc4 [symbolic = @ImplicitGenericParam.%T.1 (constants.%T)]
|
||||
// CHECK:STDOUT: %x.loc4_35.1: @ImplicitGenericParam.%T.1 (%T) = param x, runtime_param0
|
||||
// CHECK:STDOUT: @ImplicitGenericParam.%x: @ImplicitGenericParam.%T.1 (%T) = bind_name x, %x.loc4_35.1
|
||||
// CHECK:STDOUT: %T.ref.loc4_44: type = name_ref T, @ImplicitGenericParam.%T.loc4 [symbolic = @ImplicitGenericParam.%T.1 (constants.%T)]
|
||||
// CHECK:STDOUT: %.loc4: type = ptr_type %T [symbolic = @ImplicitGenericParam.%.1 (constants.%.1)]
|
||||
// CHECK:STDOUT: @ImplicitGenericParam.%return: ref @ImplicitGenericParam.%.1 (%.1) = var <return slot>
|
||||
// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T 0
|
||||
// CHECK:STDOUT: %x.patt: @ImplicitGenericParam.%T.1 (%T) = binding_pattern x
|
||||
// CHECK:STDOUT: } {
|
||||
// CHECK:STDOUT: %T.param: type = param T, runtime_param<invalid>
|
||||
// CHECK:STDOUT: %T.loc4: type = bind_symbolic_name T 0, %T.param [symbolic = %T.1 (constants.%T)]
|
||||
// CHECK:STDOUT: %T.ref.loc4_38: type = name_ref T, %T.loc4 [symbolic = %T.1 (constants.%T)]
|
||||
// CHECK:STDOUT: %x.param: @ImplicitGenericParam.%T.1 (%T) = param x, runtime_param0
|
||||
// CHECK:STDOUT: %x: @ImplicitGenericParam.%T.1 (%T) = bind_name x, %x.param
|
||||
// CHECK:STDOUT: %T.ref.loc4_44: type = name_ref T, %T.loc4 [symbolic = %T.1 (constants.%T)]
|
||||
// CHECK:STDOUT: %.loc4: type = ptr_type %T [symbolic = %.1 (constants.%.1)]
|
||||
// CHECK:STDOUT: %return: ref @ImplicitGenericParam.%.1 (%.1) = var <return slot>
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %CallImplicitGenericParam.decl: %CallImplicitGenericParam.type = fn_decl @CallImplicitGenericParam [template = constants.%CallImplicitGenericParam] {
|
||||
// CHECK:STDOUT: %n.patt: i32 = binding_pattern n
|
||||
// CHECK:STDOUT: } {
|
||||
// CHECK:STDOUT: %int.make_type_32.loc6_32: init type = call constants.%Int32() [template = i32]
|
||||
// CHECK:STDOUT: %.loc6_32.1: type = value_of_initializer %int.make_type_32.loc6_32 [template = i32]
|
||||
// CHECK:STDOUT: %.loc6_32.2: type = converted %int.make_type_32.loc6_32, %.loc6_32.1 [template = i32]
|
||||
// CHECK:STDOUT: %n.loc6_29.1: i32 = param n, runtime_param0
|
||||
// CHECK:STDOUT: @CallImplicitGenericParam.%n: i32 = bind_name n, %n.loc6_29.1
|
||||
// CHECK:STDOUT: %n.param: i32 = param n, runtime_param0
|
||||
// CHECK:STDOUT: %n: i32 = bind_name n, %n.param
|
||||
// CHECK:STDOUT: %int.make_type_32.loc6_40: init type = call constants.%Int32() [template = i32]
|
||||
// CHECK:STDOUT: %.loc6_43.1: type = value_of_initializer %int.make_type_32.loc6_40 [template = i32]
|
||||
// CHECK:STDOUT: %.loc6_43.2: type = converted %int.make_type_32.loc6_40, %.loc6_43.1 [template = i32]
|
||||
// CHECK:STDOUT: %.loc6_43.3: type = ptr_type i32 [template = constants.%.3]
|
||||
// CHECK:STDOUT: @CallImplicitGenericParam.%return: ref %.3 = var <return slot>
|
||||
// CHECK:STDOUT: %return: ref %.3 = var <return slot>
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
@@ -478,30 +492,36 @@ fn CallImplicitNotDeducible() {
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %Core.import = import Core
|
||||
// CHECK:STDOUT: %TupleParam.decl: %TupleParam.type = fn_decl @TupleParam [template = constants.%TupleParam] {
|
||||
// CHECK:STDOUT: %T.loc4_15.1: type = param T, runtime_param<invalid>
|
||||
// CHECK:STDOUT: @TupleParam.%T.loc4: type = bind_symbolic_name T 0, %T.loc4_15.1 [symbolic = @TupleParam.%T.1 (constants.%T)]
|
||||
// CHECK:STDOUT: %T.ref.loc4: type = name_ref T, @TupleParam.%T.loc4 [symbolic = @TupleParam.%T.1 (constants.%T)]
|
||||
// CHECK:STDOUT: %int.make_type_32.loc4: init type = call constants.%Int32() [template = i32]
|
||||
// CHECK:STDOUT: %.loc4_35.1: %.2 = tuple_literal (%T.ref.loc4, %int.make_type_32.loc4)
|
||||
// CHECK:STDOUT: %.loc4_35.2: type = value_of_initializer %int.make_type_32.loc4 [template = i32]
|
||||
// CHECK:STDOUT: %.loc4_35.3: type = converted %int.make_type_32.loc4, %.loc4_35.2 [template = i32]
|
||||
// CHECK:STDOUT: %.loc4_35.4: type = converted %.loc4_35.1, constants.%.3 [symbolic = @TupleParam.%.1 (constants.%.3)]
|
||||
// CHECK:STDOUT: %x.loc4_25.1: @TupleParam.%.1 (%.3) = param x, runtime_param0
|
||||
// CHECK:STDOUT: @TupleParam.%x: @TupleParam.%.1 (%.3) = bind_name x, %x.loc4_25.1
|
||||
// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T 0
|
||||
// CHECK:STDOUT: %x.patt: @TupleParam.%.1 (%.3) = binding_pattern x
|
||||
// CHECK:STDOUT: } {
|
||||
// CHECK:STDOUT: %T.param: type = param T, runtime_param<invalid>
|
||||
// CHECK:STDOUT: %T.loc4: type = bind_symbolic_name T 0, %T.param [symbolic = %T.1 (constants.%T)]
|
||||
// CHECK:STDOUT: %T.ref: type = name_ref T, %T.loc4 [symbolic = %T.1 (constants.%T)]
|
||||
// CHECK:STDOUT: %int.make_type_32: init type = call constants.%Int32() [template = i32]
|
||||
// CHECK:STDOUT: %.loc4_35.1: %.2 = tuple_literal (%T.ref, %int.make_type_32)
|
||||
// CHECK:STDOUT: %.loc4_35.2: type = value_of_initializer %int.make_type_32 [template = i32]
|
||||
// CHECK:STDOUT: %.loc4_35.3: type = converted %int.make_type_32, %.loc4_35.2 [template = i32]
|
||||
// CHECK:STDOUT: %.loc4_35.4: type = converted %.loc4_35.1, constants.%.3 [symbolic = %.1 (constants.%.3)]
|
||||
// CHECK:STDOUT: %x.param: @TupleParam.%.1 (%.3) = param x, runtime_param0
|
||||
// CHECK:STDOUT: %x: @TupleParam.%.1 (%.3) = bind_name x, %x.param
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %CallTupleParam.decl: %CallTupleParam.type = fn_decl @CallTupleParam [template = constants.%CallTupleParam] {}
|
||||
// CHECK:STDOUT: %CallTupleParam.decl: %CallTupleParam.type = fn_decl @CallTupleParam [template = constants.%CallTupleParam] {} {}
|
||||
// CHECK:STDOUT: %StructParam.decl: %StructParam.type = fn_decl @StructParam [template = constants.%StructParam] {
|
||||
// CHECK:STDOUT: %T.loc17_16.1: type = param T, runtime_param<invalid>
|
||||
// CHECK:STDOUT: @StructParam.%T.loc17: type = bind_symbolic_name T 0, %T.loc17_16.1 [symbolic = @StructParam.%T.1 (constants.%T)]
|
||||
// CHECK:STDOUT: %T.ref.loc17: type = name_ref T, @StructParam.%T.loc17 [symbolic = @StructParam.%T.1 (constants.%T)]
|
||||
// CHECK:STDOUT: %int.make_type_32.loc17: init type = call constants.%Int32() [template = i32]
|
||||
// CHECK:STDOUT: %.loc17_41.1: type = value_of_initializer %int.make_type_32.loc17 [template = i32]
|
||||
// CHECK:STDOUT: %.loc17_41.2: type = converted %int.make_type_32.loc17, %.loc17_41.1 [template = i32]
|
||||
// CHECK:STDOUT: %.loc17_44: type = struct_type {.a: %T, .b: i32} [symbolic = @StructParam.%.1 (constants.%.7)]
|
||||
// CHECK:STDOUT: %x.loc17_26.1: @StructParam.%.1 (%.7) = param x, runtime_param0
|
||||
// CHECK:STDOUT: @StructParam.%x: @StructParam.%.1 (%.7) = bind_name x, %x.loc17_26.1
|
||||
// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T 0
|
||||
// CHECK:STDOUT: %x.patt: @StructParam.%.1 (%.7) = binding_pattern x
|
||||
// CHECK:STDOUT: } {
|
||||
// CHECK:STDOUT: %T.param: type = param T, runtime_param<invalid>
|
||||
// CHECK:STDOUT: %T.loc17: type = bind_symbolic_name T 0, %T.param [symbolic = %T.1 (constants.%T)]
|
||||
// CHECK:STDOUT: %T.ref: type = name_ref T, %T.loc17 [symbolic = %T.1 (constants.%T)]
|
||||
// CHECK:STDOUT: %int.make_type_32: init type = call constants.%Int32() [template = i32]
|
||||
// CHECK:STDOUT: %.loc17_41.1: type = value_of_initializer %int.make_type_32 [template = i32]
|
||||
// CHECK:STDOUT: %.loc17_41.2: type = converted %int.make_type_32, %.loc17_41.1 [template = i32]
|
||||
// CHECK:STDOUT: %.loc17_44: type = struct_type {.a: %T, .b: i32} [symbolic = %.1 (constants.%.7)]
|
||||
// CHECK:STDOUT: %x.param: @StructParam.%.1 (%.7) = param x, runtime_param0
|
||||
// CHECK:STDOUT: %x: @StructParam.%.1 (%.7) = bind_name x, %x.param
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %CallStructParam.decl: %CallStructParam.type = fn_decl @CallStructParam [template = constants.%CallStructParam] {}
|
||||
// CHECK:STDOUT: %CallStructParam.decl: %CallStructParam.type = fn_decl @CallStructParam [template = constants.%CallStructParam] {} {}
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn @Int32() -> type = "int.make_type_32";
|
||||
@@ -582,17 +602,21 @@ fn CallImplicitNotDeducible() {
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %Core.import = import Core
|
||||
// CHECK:STDOUT: %ImplicitNotDeducible.decl: %ImplicitNotDeducible.type = fn_decl @ImplicitNotDeducible [template = constants.%ImplicitNotDeducible] {
|
||||
// CHECK:STDOUT: %T.loc6_25.1: type = param T, runtime_param<invalid>
|
||||
// CHECK:STDOUT: @ImplicitNotDeducible.%T.loc6: type = bind_symbolic_name T 0, %T.loc6_25.1 [symbolic = @ImplicitNotDeducible.%T.1 (constants.%T)]
|
||||
// CHECK:STDOUT: %U.loc6_35.1: type = param U, runtime_param<invalid>
|
||||
// CHECK:STDOUT: @ImplicitNotDeducible.%U.loc6: type = bind_symbolic_name U 1, %U.loc6_35.1 [symbolic = @ImplicitNotDeducible.%U.1 (constants.%U)]
|
||||
// CHECK:STDOUT: %T.ref: type = name_ref T, @ImplicitNotDeducible.%T.loc6 [symbolic = @ImplicitNotDeducible.%T.1 (constants.%T)]
|
||||
// CHECK:STDOUT: %x.loc6_45.1: @ImplicitNotDeducible.%T.1 (%T) = param x, runtime_param0
|
||||
// CHECK:STDOUT: @ImplicitNotDeducible.%x: @ImplicitNotDeducible.%T.1 (%T) = bind_name x, %x.loc6_45.1
|
||||
// CHECK:STDOUT: %U.ref: type = name_ref U, @ImplicitNotDeducible.%U.loc6 [symbolic = @ImplicitNotDeducible.%U.1 (constants.%U)]
|
||||
// CHECK:STDOUT: @ImplicitNotDeducible.%return: ref @ImplicitNotDeducible.%U.1 (%U) = var <return slot>
|
||||
// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T 0
|
||||
// CHECK:STDOUT: %U.patt: type = symbolic_binding_pattern U 1
|
||||
// CHECK:STDOUT: %x.patt: @ImplicitNotDeducible.%T.1 (%T) = binding_pattern x
|
||||
// CHECK:STDOUT: } {
|
||||
// CHECK:STDOUT: %T.param: type = param T, runtime_param<invalid>
|
||||
// CHECK:STDOUT: %T.loc6: type = bind_symbolic_name T 0, %T.param [symbolic = %T.1 (constants.%T)]
|
||||
// CHECK:STDOUT: %U.param: type = param U, runtime_param<invalid>
|
||||
// CHECK:STDOUT: %U.loc6: type = bind_symbolic_name U 1, %U.param [symbolic = %U.1 (constants.%U)]
|
||||
// CHECK:STDOUT: %T.ref: type = name_ref T, %T.loc6 [symbolic = %T.1 (constants.%T)]
|
||||
// CHECK:STDOUT: %x.param: @ImplicitNotDeducible.%T.1 (%T) = param x, runtime_param0
|
||||
// CHECK:STDOUT: %x: @ImplicitNotDeducible.%T.1 (%T) = bind_name x, %x.param
|
||||
// CHECK:STDOUT: %U.ref: type = name_ref U, %U.loc6 [symbolic = %U.1 (constants.%U)]
|
||||
// CHECK:STDOUT: %return: ref @ImplicitNotDeducible.%U.1 (%U) = var <return slot>
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %CallImplicitNotDeducible.decl: %CallImplicitNotDeducible.type = fn_decl @CallImplicitNotDeducible [template = constants.%CallImplicitNotDeducible] {}
|
||||
// CHECK:STDOUT: %CallImplicitNotDeducible.decl: %CallImplicitNotDeducible.type = fn_decl @CallImplicitNotDeducible [template = constants.%CallImplicitNotDeducible] {} {}
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: generic fn @ImplicitNotDeducible(%T.loc6: type, %U.loc6: type) {
|
||||
@@ -649,18 +673,22 @@ fn CallImplicitNotDeducible() {
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %Core.import = import Core
|
||||
// CHECK:STDOUT: %ImplicitNotDeducible.decl: %ImplicitNotDeducible.type = fn_decl @ImplicitNotDeducible [template = constants.%ImplicitNotDeducible] {
|
||||
// CHECK:STDOUT: %T.loc4_25.1: type = param T, runtime_param<invalid>
|
||||
// CHECK:STDOUT: @ImplicitNotDeducible.%T.loc4: type = bind_symbolic_name T 0, %T.loc4_25.1 [symbolic = @ImplicitNotDeducible.%T.1 (constants.%T)]
|
||||
// CHECK:STDOUT: %T.ref.loc4_38: type = name_ref T, @ImplicitNotDeducible.%T.loc4 [symbolic = @ImplicitNotDeducible.%T.1 (constants.%T)]
|
||||
// CHECK:STDOUT: %x.loc4_35.1: @ImplicitNotDeducible.%T.1 (%T) = param x, runtime_param0
|
||||
// CHECK:STDOUT: @ImplicitNotDeducible.%x: @ImplicitNotDeducible.%T.1 (%T) = bind_name x, %x.loc4_35.1
|
||||
// CHECK:STDOUT: %T.ref.loc4_44: type = name_ref T, @ImplicitNotDeducible.%T.loc4 [symbolic = @ImplicitNotDeducible.%T.1 (constants.%T)]
|
||||
// CHECK:STDOUT: %y.loc4_41.1: @ImplicitNotDeducible.%T.1 (%T) = param y, runtime_param1
|
||||
// CHECK:STDOUT: @ImplicitNotDeducible.%y: @ImplicitNotDeducible.%T.1 (%T) = bind_name y, %y.loc4_41.1
|
||||
// CHECK:STDOUT: %T.ref.loc4_50: type = name_ref T, @ImplicitNotDeducible.%T.loc4 [symbolic = @ImplicitNotDeducible.%T.1 (constants.%T)]
|
||||
// CHECK:STDOUT: @ImplicitNotDeducible.%return: ref @ImplicitNotDeducible.%T.1 (%T) = var <return slot>
|
||||
// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T 0
|
||||
// CHECK:STDOUT: %x.patt: @ImplicitNotDeducible.%T.1 (%T) = binding_pattern x
|
||||
// CHECK:STDOUT: %y.patt: @ImplicitNotDeducible.%T.1 (%T) = binding_pattern y
|
||||
// CHECK:STDOUT: } {
|
||||
// CHECK:STDOUT: %T.param: type = param T, runtime_param<invalid>
|
||||
// CHECK:STDOUT: %T.loc4: type = bind_symbolic_name T 0, %T.param [symbolic = %T.1 (constants.%T)]
|
||||
// CHECK:STDOUT: %T.ref.loc4_38: type = name_ref T, %T.loc4 [symbolic = %T.1 (constants.%T)]
|
||||
// CHECK:STDOUT: %x.param: @ImplicitNotDeducible.%T.1 (%T) = param x, runtime_param0
|
||||
// CHECK:STDOUT: %x: @ImplicitNotDeducible.%T.1 (%T) = bind_name x, %x.param
|
||||
// CHECK:STDOUT: %T.ref.loc4_44: type = name_ref T, %T.loc4 [symbolic = %T.1 (constants.%T)]
|
||||
// CHECK:STDOUT: %y.param: @ImplicitNotDeducible.%T.1 (%T) = param y, runtime_param1
|
||||
// CHECK:STDOUT: %y: @ImplicitNotDeducible.%T.1 (%T) = bind_name y, %y.param
|
||||
// CHECK:STDOUT: %T.ref.loc4_50: type = name_ref T, %T.loc4 [symbolic = %T.1 (constants.%T)]
|
||||
// CHECK:STDOUT: %return: ref @ImplicitNotDeducible.%T.1 (%T) = var <return slot>
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %CallImplicitNotDeducible.decl: %CallImplicitNotDeducible.type = fn_decl @CallImplicitNotDeducible [template = constants.%CallImplicitNotDeducible] {}
|
||||
// CHECK:STDOUT: %CallImplicitNotDeducible.decl: %CallImplicitNotDeducible.type = fn_decl @CallImplicitNotDeducible [template = constants.%CallImplicitNotDeducible] {} {}
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: generic fn @ImplicitNotDeducible(%T.loc4: type) {
|
||||
|
||||
@@ -46,19 +46,22 @@ fn F(N:! i32, a: [i32; N]*);
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %Core.import = import Core
|
||||
// CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [template = constants.%F] {
|
||||
// CHECK:STDOUT: %N.patt: i32 = symbolic_binding_pattern N 0
|
||||
// CHECK:STDOUT: %a.patt: <error> = binding_pattern a
|
||||
// CHECK:STDOUT: } {
|
||||
// CHECK:STDOUT: %int.make_type_32.loc14_10: init type = call constants.%Int32() [template = i32]
|
||||
// CHECK:STDOUT: %.loc14_10.1: type = value_of_initializer %int.make_type_32.loc14_10 [template = i32]
|
||||
// CHECK:STDOUT: %.loc14_10.2: type = converted %int.make_type_32.loc14_10, %.loc14_10.1 [template = i32]
|
||||
// CHECK:STDOUT: %N.loc14_6.1: i32 = param N, runtime_param<invalid>
|
||||
// CHECK:STDOUT: @F.%N.loc14: i32 = bind_symbolic_name N 0, %N.loc14_6.1 [symbolic = @F.%N.1 (constants.%N)]
|
||||
// CHECK:STDOUT: %N.param: i32 = param N, runtime_param<invalid>
|
||||
// CHECK:STDOUT: %N.loc14: i32 = bind_symbolic_name N 0, %N.param [symbolic = %N.1 (constants.%N)]
|
||||
// CHECK:STDOUT: %int.make_type_32.loc14_19: init type = call constants.%Int32() [template = i32]
|
||||
// CHECK:STDOUT: %N.ref: i32 = name_ref N, @F.%N.loc14 [symbolic = @F.%N.1 (constants.%N)]
|
||||
// CHECK:STDOUT: %N.ref: i32 = name_ref N, %N.loc14 [symbolic = %N.1 (constants.%N)]
|
||||
// CHECK:STDOUT: %.loc14_19.1: type = value_of_initializer %int.make_type_32.loc14_19 [template = i32]
|
||||
// CHECK:STDOUT: %.loc14_19.2: type = converted %int.make_type_32.loc14_19, %.loc14_19.1 [template = i32]
|
||||
// CHECK:STDOUT: %.loc14_25: type = array_type %N.ref, i32 [template = <error>]
|
||||
// CHECK:STDOUT: %.loc14_26: type = ptr_type <error> [template = <error>]
|
||||
// CHECK:STDOUT: %a.loc14_15.1: <error> = param a, runtime_param0
|
||||
// CHECK:STDOUT: @F.%a: <error> = bind_name a, %a.loc14_15.1
|
||||
// CHECK:STDOUT: %a.param: <error> = param a, runtime_param0
|
||||
// CHECK:STDOUT: %a: <error> = bind_name a, %a.param
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
|
||||
@@ -81,41 +81,52 @@ fn CallSpecific(x: C) -> C {
|
||||
// CHECK:STDOUT: .CallSpecific = %CallSpecific.decl
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %Function.decl: %Function.type = fn_decl @Function [template = constants.%Function] {
|
||||
// CHECK:STDOUT: %T.loc4_13.1: type = param T, runtime_param<invalid>
|
||||
// CHECK:STDOUT: @Function.%T.loc4: type = bind_symbolic_name T 0, %T.loc4_13.1 [symbolic = @Function.%T.1 (constants.%T)]
|
||||
// CHECK:STDOUT: %T.ref.loc4_26: type = name_ref T, @Function.%T.loc4 [symbolic = @Function.%T.1 (constants.%T)]
|
||||
// CHECK:STDOUT: %x.loc4_23.1: @Function.%T.1 (%T) = param x, runtime_param0
|
||||
// CHECK:STDOUT: @Function.%x: @Function.%T.1 (%T) = bind_name x, %x.loc4_23.1
|
||||
// CHECK:STDOUT: %T.ref.loc4_32: type = name_ref T, @Function.%T.loc4 [symbolic = @Function.%T.1 (constants.%T)]
|
||||
// CHECK:STDOUT: @Function.%return: ref @Function.%T.1 (%T) = var <return slot>
|
||||
// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T 0
|
||||
// CHECK:STDOUT: %x.patt: @Function.%T.1 (%T) = binding_pattern x
|
||||
// CHECK:STDOUT: } {
|
||||
// CHECK:STDOUT: %T.param: type = param T, runtime_param<invalid>
|
||||
// CHECK:STDOUT: %T.loc4: type = bind_symbolic_name T 0, %T.param [symbolic = %T.1 (constants.%T)]
|
||||
// CHECK:STDOUT: %T.ref.loc4_26: type = name_ref T, %T.loc4 [symbolic = %T.1 (constants.%T)]
|
||||
// CHECK:STDOUT: %x.param: @Function.%T.1 (%T) = param x, runtime_param0
|
||||
// CHECK:STDOUT: %x: @Function.%T.1 (%T) = bind_name x, %x.param
|
||||
// CHECK:STDOUT: %T.ref.loc4_32: type = name_ref T, %T.loc4 [symbolic = %T.1 (constants.%T)]
|
||||
// CHECK:STDOUT: %return: ref @Function.%T.1 (%T) = var <return slot>
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %CallGeneric.decl: %CallGeneric.type = fn_decl @CallGeneric [template = constants.%CallGeneric] {
|
||||
// CHECK:STDOUT: %T.loc8_16.1: type = param T, runtime_param<invalid>
|
||||
// CHECK:STDOUT: @CallGeneric.%T.loc8: type = bind_symbolic_name T 0, %T.loc8_16.1 [symbolic = @CallGeneric.%T.1 (constants.%T)]
|
||||
// CHECK:STDOUT: %T.ref.loc8_29: type = name_ref T, @CallGeneric.%T.loc8 [symbolic = @CallGeneric.%T.1 (constants.%T)]
|
||||
// CHECK:STDOUT: %x.loc8_26.1: @CallGeneric.%T.1 (%T) = param x, runtime_param0
|
||||
// CHECK:STDOUT: @CallGeneric.%x: @CallGeneric.%T.1 (%T) = bind_name x, %x.loc8_26.1
|
||||
// CHECK:STDOUT: %T.ref.loc8_35: type = name_ref T, @CallGeneric.%T.loc8 [symbolic = @CallGeneric.%T.1 (constants.%T)]
|
||||
// CHECK:STDOUT: @CallGeneric.%return: ref @CallGeneric.%T.1 (%T) = var <return slot>
|
||||
// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T 0
|
||||
// CHECK:STDOUT: %x.patt: @CallGeneric.%T.1 (%T) = binding_pattern x
|
||||
// CHECK:STDOUT: } {
|
||||
// CHECK:STDOUT: %T.param: type = param T, runtime_param<invalid>
|
||||
// CHECK:STDOUT: %T.loc8: type = bind_symbolic_name T 0, %T.param [symbolic = %T.1 (constants.%T)]
|
||||
// CHECK:STDOUT: %T.ref.loc8_29: type = name_ref T, %T.loc8 [symbolic = %T.1 (constants.%T)]
|
||||
// CHECK:STDOUT: %x.param: @CallGeneric.%T.1 (%T) = param x, runtime_param0
|
||||
// CHECK:STDOUT: %x: @CallGeneric.%T.1 (%T) = bind_name x, %x.param
|
||||
// CHECK:STDOUT: %T.ref.loc8_35: type = name_ref T, %T.loc8 [symbolic = %T.1 (constants.%T)]
|
||||
// CHECK:STDOUT: %return: ref @CallGeneric.%T.1 (%T) = var <return slot>
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %CallGenericPtr.decl: %CallGenericPtr.type = fn_decl @CallGenericPtr [template = constants.%CallGenericPtr] {
|
||||
// CHECK:STDOUT: %T.loc12_19.1: type = param T, runtime_param<invalid>
|
||||
// CHECK:STDOUT: @CallGenericPtr.%T.loc12: type = bind_symbolic_name T 0, %T.loc12_19.1 [symbolic = @CallGenericPtr.%T.1 (constants.%T)]
|
||||
// CHECK:STDOUT: %T.ref.loc12_32: type = name_ref T, @CallGenericPtr.%T.loc12 [symbolic = @CallGenericPtr.%T.1 (constants.%T)]
|
||||
// CHECK:STDOUT: %.loc12_33: type = ptr_type %T [symbolic = @CallGenericPtr.%.1 (constants.%.2)]
|
||||
// CHECK:STDOUT: %x.loc12_29.1: @CallGenericPtr.%.1 (%.2) = param x, runtime_param0
|
||||
// CHECK:STDOUT: @CallGenericPtr.%x: @CallGenericPtr.%.1 (%.2) = bind_name x, %x.loc12_29.1
|
||||
// CHECK:STDOUT: %T.ref.loc12_39: type = name_ref T, @CallGenericPtr.%T.loc12 [symbolic = @CallGenericPtr.%T.1 (constants.%T)]
|
||||
// CHECK:STDOUT: %.loc12_40: type = ptr_type %T [symbolic = @CallGenericPtr.%.1 (constants.%.2)]
|
||||
// CHECK:STDOUT: @CallGenericPtr.%return: ref @CallGenericPtr.%.1 (%.2) = var <return slot>
|
||||
// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T 0
|
||||
// CHECK:STDOUT: %x.patt: @CallGenericPtr.%.1 (%.2) = binding_pattern x
|
||||
// CHECK:STDOUT: } {
|
||||
// CHECK:STDOUT: %T.param: type = param T, runtime_param<invalid>
|
||||
// CHECK:STDOUT: %T.loc12: type = bind_symbolic_name T 0, %T.param [symbolic = %T.1 (constants.%T)]
|
||||
// CHECK:STDOUT: %T.ref.loc12_32: type = name_ref T, %T.loc12 [symbolic = %T.1 (constants.%T)]
|
||||
// CHECK:STDOUT: %.loc12_33: type = ptr_type %T [symbolic = %.1 (constants.%.2)]
|
||||
// CHECK:STDOUT: %x.param: @CallGenericPtr.%.1 (%.2) = param x, runtime_param0
|
||||
// CHECK:STDOUT: %x: @CallGenericPtr.%.1 (%.2) = bind_name x, %x.param
|
||||
// CHECK:STDOUT: %T.ref.loc12_39: type = name_ref T, %T.loc12 [symbolic = %T.1 (constants.%T)]
|
||||
// CHECK:STDOUT: %.loc12_40: type = ptr_type %T [symbolic = %.1 (constants.%.2)]
|
||||
// CHECK:STDOUT: %return: ref @CallGenericPtr.%.1 (%.2) = var <return slot>
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %C.decl: type = class_decl @C [template = constants.%C] {}
|
||||
// CHECK:STDOUT: %C.decl: type = class_decl @C [template = constants.%C] {} {}
|
||||
// CHECK:STDOUT: %CallSpecific.decl: %CallSpecific.type = fn_decl @CallSpecific [template = constants.%CallSpecific] {
|
||||
// CHECK:STDOUT: %C.ref.loc18_20: type = name_ref C, %C.decl [template = constants.%C]
|
||||
// CHECK:STDOUT: %x.loc18_17.1: %C = param x, runtime_param0
|
||||
// CHECK:STDOUT: @CallSpecific.%x: %C = bind_name x, %x.loc18_17.1
|
||||
// CHECK:STDOUT: %C.ref.loc18_26: type = name_ref C, %C.decl [template = constants.%C]
|
||||
// CHECK:STDOUT: @CallSpecific.%return: ref %C = var <return slot>
|
||||
// CHECK:STDOUT: %x.patt: %C = binding_pattern x
|
||||
// CHECK:STDOUT: } {
|
||||
// CHECK:STDOUT: %C.ref.loc18_20: type = name_ref C, file.%C.decl [template = constants.%C]
|
||||
// CHECK:STDOUT: %x.param: %C = param x, runtime_param0
|
||||
// CHECK:STDOUT: %x: %C = bind_name x, %x.param
|
||||
// CHECK:STDOUT: %C.ref.loc18_26: type = name_ref C, file.%C.decl [template = constants.%C]
|
||||
// CHECK:STDOUT: %return: ref %C = var <return slot>
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
@@ -146,7 +157,7 @@ fn CallSpecific(x: C) -> C {
|
||||
// CHECK:STDOUT: fn(%T.loc8: type, %x: @CallGeneric.%T.1 (%T)) -> @CallGeneric.%T.1 (%T) {
|
||||
// CHECK:STDOUT: !entry:
|
||||
// CHECK:STDOUT: %Function.ref: %Function.type = name_ref Function, file.%Function.decl [template = constants.%Function]
|
||||
// CHECK:STDOUT: %T.ref: type = name_ref T, %T.loc8 [symbolic = %T.1 (constants.%T)]
|
||||
// CHECK:STDOUT: %T.ref.loc9: type = name_ref T, %T.loc8 [symbolic = %T.1 (constants.%T)]
|
||||
// CHECK:STDOUT: %x.ref: @CallGeneric.%T.1 (%T) = name_ref x, %x
|
||||
// CHECK:STDOUT: %Function.call: init @CallGeneric.%T.1 (%T) = call %Function.ref(%x.ref)
|
||||
// CHECK:STDOUT: %.loc9_24.1: @CallGeneric.%T.1 (%T) = value_of_initializer %Function.call
|
||||
@@ -164,7 +175,7 @@ fn CallSpecific(x: C) -> C {
|
||||
// CHECK:STDOUT: fn(%T.loc12: type, %x: @CallGenericPtr.%.1 (%.2)) -> @CallGenericPtr.%.1 (%.2) {
|
||||
// CHECK:STDOUT: !entry:
|
||||
// CHECK:STDOUT: %Function.ref: %Function.type = name_ref Function, file.%Function.decl [template = constants.%Function]
|
||||
// CHECK:STDOUT: %T.ref: type = name_ref T, %T.loc12 [symbolic = %T.1 (constants.%T)]
|
||||
// CHECK:STDOUT: %T.ref.loc13: type = name_ref T, %T.loc12 [symbolic = %T.1 (constants.%T)]
|
||||
// CHECK:STDOUT: %.loc13_20: type = ptr_type %T [symbolic = %.1 (constants.%.2)]
|
||||
// CHECK:STDOUT: %x.ref: @CallGenericPtr.%.1 (%.2) = name_ref x, %x
|
||||
// CHECK:STDOUT: %Function.call: init @CallGenericPtr.%.1 (%.2) = call %Function.ref(%x.ref)
|
||||
@@ -177,7 +188,7 @@ fn CallSpecific(x: C) -> C {
|
||||
// CHECK:STDOUT: fn @CallSpecific(%x: %C) -> %return: %C {
|
||||
// CHECK:STDOUT: !entry:
|
||||
// CHECK:STDOUT: %Function.ref: %Function.type = name_ref Function, file.%Function.decl [template = constants.%Function]
|
||||
// CHECK:STDOUT: %C.ref: type = name_ref C, file.%C.decl [template = constants.%C]
|
||||
// CHECK:STDOUT: %C.ref.loc19: type = name_ref C, file.%C.decl [template = constants.%C]
|
||||
// CHECK:STDOUT: %x.ref: %C = name_ref x, %x
|
||||
// CHECK:STDOUT: %.loc18: ref %C = splice_block %return {}
|
||||
// CHECK:STDOUT: %Function.call: init %C = call %Function.ref(%x.ref) to %.loc18
|
||||
@@ -234,41 +245,52 @@ fn CallSpecific(x: C) -> C {
|
||||
// CHECK:STDOUT: .CallSpecific = %CallSpecific.decl
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %Function.decl: %Function.type = fn_decl @Function [template = constants.%Function] {
|
||||
// CHECK:STDOUT: %T.loc4_13.1: type = param T, runtime_param<invalid>
|
||||
// CHECK:STDOUT: @Function.%T.loc4: type = bind_symbolic_name T 0, %T.loc4_13.1 [symbolic = @Function.%T.1 (constants.%T)]
|
||||
// CHECK:STDOUT: %T.ref.loc4_26: type = name_ref T, @Function.%T.loc4 [symbolic = @Function.%T.1 (constants.%T)]
|
||||
// CHECK:STDOUT: %x.loc4_23.1: @Function.%T.1 (%T) = param x, runtime_param0
|
||||
// CHECK:STDOUT: @Function.%x: @Function.%T.1 (%T) = bind_name x, %x.loc4_23.1
|
||||
// CHECK:STDOUT: %T.ref.loc4_32: type = name_ref T, @Function.%T.loc4 [symbolic = @Function.%T.1 (constants.%T)]
|
||||
// CHECK:STDOUT: @Function.%return: ref @Function.%T.1 (%T) = var <return slot>
|
||||
// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T 0
|
||||
// CHECK:STDOUT: %x.patt: @Function.%T.1 (%T) = binding_pattern x
|
||||
// CHECK:STDOUT: } {
|
||||
// CHECK:STDOUT: %T.param: type = param T, runtime_param<invalid>
|
||||
// CHECK:STDOUT: %T.loc4: type = bind_symbolic_name T 0, %T.param [symbolic = %T.1 (constants.%T)]
|
||||
// CHECK:STDOUT: %T.ref.loc4_26: type = name_ref T, %T.loc4 [symbolic = %T.1 (constants.%T)]
|
||||
// CHECK:STDOUT: %x.param: @Function.%T.1 (%T) = param x, runtime_param0
|
||||
// CHECK:STDOUT: %x: @Function.%T.1 (%T) = bind_name x, %x.param
|
||||
// CHECK:STDOUT: %T.ref.loc4_32: type = name_ref T, %T.loc4 [symbolic = %T.1 (constants.%T)]
|
||||
// CHECK:STDOUT: %return: ref @Function.%T.1 (%T) = var <return slot>
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %CallGeneric.decl: %CallGeneric.type = fn_decl @CallGeneric [template = constants.%CallGeneric] {
|
||||
// CHECK:STDOUT: %T.loc8_16.1: type = param T, runtime_param<invalid>
|
||||
// CHECK:STDOUT: @CallGeneric.%T.loc8: type = bind_symbolic_name T 0, %T.loc8_16.1 [symbolic = @CallGeneric.%T.1 (constants.%T)]
|
||||
// CHECK:STDOUT: %T.ref.loc8_29: type = name_ref T, @CallGeneric.%T.loc8 [symbolic = @CallGeneric.%T.1 (constants.%T)]
|
||||
// CHECK:STDOUT: %x.loc8_26.1: @CallGeneric.%T.1 (%T) = param x, runtime_param0
|
||||
// CHECK:STDOUT: @CallGeneric.%x: @CallGeneric.%T.1 (%T) = bind_name x, %x.loc8_26.1
|
||||
// CHECK:STDOUT: %T.ref.loc8_35: type = name_ref T, @CallGeneric.%T.loc8 [symbolic = @CallGeneric.%T.1 (constants.%T)]
|
||||
// CHECK:STDOUT: @CallGeneric.%return: ref @CallGeneric.%T.1 (%T) = var <return slot>
|
||||
// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T 0
|
||||
// CHECK:STDOUT: %x.patt: @CallGeneric.%T.1 (%T) = binding_pattern x
|
||||
// CHECK:STDOUT: } {
|
||||
// CHECK:STDOUT: %T.param: type = param T, runtime_param<invalid>
|
||||
// CHECK:STDOUT: %T.loc8: type = bind_symbolic_name T 0, %T.param [symbolic = %T.1 (constants.%T)]
|
||||
// CHECK:STDOUT: %T.ref.loc8_29: type = name_ref T, %T.loc8 [symbolic = %T.1 (constants.%T)]
|
||||
// CHECK:STDOUT: %x.param: @CallGeneric.%T.1 (%T) = param x, runtime_param0
|
||||
// CHECK:STDOUT: %x: @CallGeneric.%T.1 (%T) = bind_name x, %x.param
|
||||
// CHECK:STDOUT: %T.ref.loc8_35: type = name_ref T, %T.loc8 [symbolic = %T.1 (constants.%T)]
|
||||
// CHECK:STDOUT: %return: ref @CallGeneric.%T.1 (%T) = var <return slot>
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %CallGenericPtr.decl: %CallGenericPtr.type = fn_decl @CallGenericPtr [template = constants.%CallGenericPtr] {
|
||||
// CHECK:STDOUT: %T.loc12_19.1: type = param T, runtime_param<invalid>
|
||||
// CHECK:STDOUT: @CallGenericPtr.%T.loc12: type = bind_symbolic_name T 0, %T.loc12_19.1 [symbolic = @CallGenericPtr.%T.1 (constants.%T)]
|
||||
// CHECK:STDOUT: %T.ref.loc12_32: type = name_ref T, @CallGenericPtr.%T.loc12 [symbolic = @CallGenericPtr.%T.1 (constants.%T)]
|
||||
// CHECK:STDOUT: %.loc12_33: type = ptr_type %T [symbolic = @CallGenericPtr.%.1 (constants.%.2)]
|
||||
// CHECK:STDOUT: %x.loc12_29.1: @CallGenericPtr.%.1 (%.2) = param x, runtime_param0
|
||||
// CHECK:STDOUT: @CallGenericPtr.%x: @CallGenericPtr.%.1 (%.2) = bind_name x, %x.loc12_29.1
|
||||
// CHECK:STDOUT: %T.ref.loc12_39: type = name_ref T, @CallGenericPtr.%T.loc12 [symbolic = @CallGenericPtr.%T.1 (constants.%T)]
|
||||
// CHECK:STDOUT: %.loc12_40: type = ptr_type %T [symbolic = @CallGenericPtr.%.1 (constants.%.2)]
|
||||
// CHECK:STDOUT: @CallGenericPtr.%return: ref @CallGenericPtr.%.1 (%.2) = var <return slot>
|
||||
// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T 0
|
||||
// CHECK:STDOUT: %x.patt: @CallGenericPtr.%.1 (%.2) = binding_pattern x
|
||||
// CHECK:STDOUT: } {
|
||||
// CHECK:STDOUT: %T.param: type = param T, runtime_param<invalid>
|
||||
// CHECK:STDOUT: %T.loc12: type = bind_symbolic_name T 0, %T.param [symbolic = %T.1 (constants.%T)]
|
||||
// CHECK:STDOUT: %T.ref.loc12_32: type = name_ref T, %T.loc12 [symbolic = %T.1 (constants.%T)]
|
||||
// CHECK:STDOUT: %.loc12_33: type = ptr_type %T [symbolic = %.1 (constants.%.2)]
|
||||
// CHECK:STDOUT: %x.param: @CallGenericPtr.%.1 (%.2) = param x, runtime_param0
|
||||
// CHECK:STDOUT: %x: @CallGenericPtr.%.1 (%.2) = bind_name x, %x.param
|
||||
// CHECK:STDOUT: %T.ref.loc12_39: type = name_ref T, %T.loc12 [symbolic = %T.1 (constants.%T)]
|
||||
// CHECK:STDOUT: %.loc12_40: type = ptr_type %T [symbolic = %.1 (constants.%.2)]
|
||||
// CHECK:STDOUT: %return: ref @CallGenericPtr.%.1 (%.2) = var <return slot>
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %C.decl: type = class_decl @C [template = constants.%C] {}
|
||||
// CHECK:STDOUT: %C.decl: type = class_decl @C [template = constants.%C] {} {}
|
||||
// CHECK:STDOUT: %CallSpecific.decl: %CallSpecific.type = fn_decl @CallSpecific [template = constants.%CallSpecific] {
|
||||
// CHECK:STDOUT: %C.ref.loc18_20: type = name_ref C, %C.decl [template = constants.%C]
|
||||
// CHECK:STDOUT: %x.loc18_17.1: %C = param x, runtime_param0
|
||||
// CHECK:STDOUT: @CallSpecific.%x: %C = bind_name x, %x.loc18_17.1
|
||||
// CHECK:STDOUT: %C.ref.loc18_26: type = name_ref C, %C.decl [template = constants.%C]
|
||||
// CHECK:STDOUT: @CallSpecific.%return: ref %C = var <return slot>
|
||||
// CHECK:STDOUT: %x.patt: %C = binding_pattern x
|
||||
// CHECK:STDOUT: } {
|
||||
// CHECK:STDOUT: %C.ref.loc18_20: type = name_ref C, file.%C.decl [template = constants.%C]
|
||||
// CHECK:STDOUT: %x.param: %C = param x, runtime_param0
|
||||
// CHECK:STDOUT: %x: %C = bind_name x, %x.param
|
||||
// CHECK:STDOUT: %C.ref.loc18_26: type = name_ref C, file.%C.decl [template = constants.%C]
|
||||
// CHECK:STDOUT: %return: ref %C = var <return slot>
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
|
||||
+7
-4
@@ -32,10 +32,13 @@ fn F(T:! type, U:! type) {
|
||||
// CHECK:STDOUT: .F = %F.decl
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [template = constants.%F] {
|
||||
// CHECK:STDOUT: %T.loc11_6.1: type = param T, runtime_param<invalid>
|
||||
// CHECK:STDOUT: @F.%T.loc11: type = bind_symbolic_name T 0, %T.loc11_6.1 [symbolic = @F.%T.1 (constants.%T)]
|
||||
// CHECK:STDOUT: %U.loc11_16.1: type = param U, runtime_param<invalid>
|
||||
// CHECK:STDOUT: @F.%U.loc11: type = bind_symbolic_name U 1, %U.loc11_16.1 [symbolic = @F.%U.1 (constants.%U)]
|
||||
// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T 0
|
||||
// CHECK:STDOUT: %U.patt: type = symbolic_binding_pattern U 1
|
||||
// CHECK:STDOUT: } {
|
||||
// CHECK:STDOUT: %T.param: type = param T, runtime_param<invalid>
|
||||
// CHECK:STDOUT: %T.loc11: type = bind_symbolic_name T 0, %T.param [symbolic = %T.1 (constants.%T)]
|
||||
// CHECK:STDOUT: %U.param: type = param U, runtime_param<invalid>
|
||||
// CHECK:STDOUT: %U.loc11: type = bind_symbolic_name U 1, %U.param [symbolic = %U.1 (constants.%U)]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
|
||||
@@ -24,8 +24,10 @@ fn F(T:! type);
|
||||
// CHECK:STDOUT: .F = %F.decl
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [template = constants.%F] {
|
||||
// CHECK:STDOUT: %T.loc11_6.1: type = param T, runtime_param<invalid>
|
||||
// CHECK:STDOUT: @F.%T.loc11: type = bind_symbolic_name T 0, %T.loc11_6.1 [symbolic = @F.%T.1 (constants.%T)]
|
||||
// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T 0
|
||||
// CHECK:STDOUT: } {
|
||||
// CHECK:STDOUT: %T.param: type = param T, runtime_param<invalid>
|
||||
// CHECK:STDOUT: %T.loc11: type = bind_symbolic_name T 0, %T.param [symbolic = %T.1 (constants.%T)]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
|
||||
+13
-10
@@ -28,16 +28,19 @@ fn F(T:! type, p: T**) -> T* {
|
||||
// CHECK:STDOUT: .F = %F.decl
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [template = constants.%F] {
|
||||
// CHECK:STDOUT: %T.loc11_6.1: type = param T, runtime_param<invalid>
|
||||
// CHECK:STDOUT: @F.%T.loc11: type = bind_symbolic_name T 0, %T.loc11_6.1 [symbolic = @F.%T.1 (constants.%T)]
|
||||
// CHECK:STDOUT: %T.ref.loc11_19: type = name_ref T, @F.%T.loc11 [symbolic = @F.%T.1 (constants.%T)]
|
||||
// CHECK:STDOUT: %.loc11_20: type = ptr_type %T [symbolic = @F.%.1 (constants.%.1)]
|
||||
// CHECK:STDOUT: %.loc11_21: type = ptr_type %.1 [symbolic = @F.%.2 (constants.%.2)]
|
||||
// CHECK:STDOUT: %p.loc11_16.1: @F.%.2 (%.2) = param p, runtime_param0
|
||||
// CHECK:STDOUT: @F.%p: @F.%.2 (%.2) = bind_name p, %p.loc11_16.1
|
||||
// CHECK:STDOUT: %T.ref.loc11_27: type = name_ref T, @F.%T.loc11 [symbolic = @F.%T.1 (constants.%T)]
|
||||
// CHECK:STDOUT: %.loc11_28: type = ptr_type %T [symbolic = @F.%.1 (constants.%.1)]
|
||||
// CHECK:STDOUT: @F.%return: ref @F.%.1 (%.1) = var <return slot>
|
||||
// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T 0
|
||||
// CHECK:STDOUT: %p.patt: @F.%.2 (%.2) = binding_pattern p
|
||||
// CHECK:STDOUT: } {
|
||||
// CHECK:STDOUT: %T.param: type = param T, runtime_param<invalid>
|
||||
// CHECK:STDOUT: %T.loc11: type = bind_symbolic_name T 0, %T.param [symbolic = %T.1 (constants.%T)]
|
||||
// CHECK:STDOUT: %T.ref.loc11_19: type = name_ref T, %T.loc11 [symbolic = %T.1 (constants.%T)]
|
||||
// CHECK:STDOUT: %.loc11_20: type = ptr_type %T [symbolic = %.1 (constants.%.1)]
|
||||
// CHECK:STDOUT: %.loc11_21: type = ptr_type %.1 [symbolic = %.2 (constants.%.2)]
|
||||
// CHECK:STDOUT: %p.param: @F.%.2 (%.2) = param p, runtime_param0
|
||||
// CHECK:STDOUT: %p: @F.%.2 (%.2) = bind_name p, %p.param
|
||||
// CHECK:STDOUT: %T.ref.loc11_27: type = name_ref T, %T.loc11 [symbolic = %T.1 (constants.%T)]
|
||||
// CHECK:STDOUT: %.loc11_28: type = ptr_type %T [symbolic = %.1 (constants.%.1)]
|
||||
// CHECK:STDOUT: %return: ref @F.%.1 (%.1) = var <return slot>
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
|
||||
@@ -28,8 +28,10 @@ fn F(T:! type) {
|
||||
// CHECK:STDOUT: .F = %F.decl
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [template = constants.%F] {
|
||||
// CHECK:STDOUT: %T.loc11_6.1: type = param T, runtime_param<invalid>
|
||||
// CHECK:STDOUT: @F.%T.loc11: type = bind_symbolic_name T 0, %T.loc11_6.1 [symbolic = @F.%T.1 (constants.%T)]
|
||||
// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T 0
|
||||
// CHECK:STDOUT: } {
|
||||
// CHECK:STDOUT: %T.param: type = param T, runtime_param<invalid>
|
||||
// CHECK:STDOUT: %T.loc11: type = bind_symbolic_name T 0, %T.param [symbolic = %T.1 (constants.%T)]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
|
||||
+11
-8
@@ -27,13 +27,16 @@ fn F(T:! type, n: T) -> T {
|
||||
// CHECK:STDOUT: .F = %F.decl
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [template = constants.%F] {
|
||||
// CHECK:STDOUT: %T.loc11_6.1: type = param T, runtime_param<invalid>
|
||||
// CHECK:STDOUT: @F.%T.loc11: type = bind_symbolic_name T 0, %T.loc11_6.1 [symbolic = @F.%T.1 (constants.%T)]
|
||||
// CHECK:STDOUT: %T.ref.loc11_19: type = name_ref T, @F.%T.loc11 [symbolic = @F.%T.1 (constants.%T)]
|
||||
// CHECK:STDOUT: %n.loc11_16.1: @F.%T.1 (%T) = param n, runtime_param0
|
||||
// CHECK:STDOUT: @F.%n: @F.%T.1 (%T) = bind_name n, %n.loc11_16.1
|
||||
// CHECK:STDOUT: %T.ref.loc11_25: type = name_ref T, @F.%T.loc11 [symbolic = @F.%T.1 (constants.%T)]
|
||||
// CHECK:STDOUT: @F.%return: ref @F.%T.1 (%T) = var <return slot>
|
||||
// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T 0
|
||||
// CHECK:STDOUT: %n.patt: @F.%T.1 (%T) = binding_pattern n
|
||||
// CHECK:STDOUT: } {
|
||||
// CHECK:STDOUT: %T.param: type = param T, runtime_param<invalid>
|
||||
// CHECK:STDOUT: %T.loc11: type = bind_symbolic_name T 0, %T.param [symbolic = %T.1 (constants.%T)]
|
||||
// CHECK:STDOUT: %T.ref.loc11_19: type = name_ref T, %T.loc11 [symbolic = %T.1 (constants.%T)]
|
||||
// CHECK:STDOUT: %n.param: @F.%T.1 (%T) = param n, runtime_param0
|
||||
// CHECK:STDOUT: %n: @F.%T.1 (%T) = bind_name n, %n.param
|
||||
// CHECK:STDOUT: %T.ref.loc11_25: type = name_ref T, %T.loc11 [symbolic = %T.1 (constants.%T)]
|
||||
// CHECK:STDOUT: %return: ref @F.%T.1 (%T) = var <return slot>
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
@@ -44,7 +47,7 @@ fn F(T:! type, n: T) -> T {
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn(%T.loc11: type, %n: @F.%T.1 (%T)) -> @F.%T.1 (%T) {
|
||||
// CHECK:STDOUT: !entry:
|
||||
// CHECK:STDOUT: %T.ref: type = name_ref T, %T.loc11 [symbolic = %T.1 (constants.%T)]
|
||||
// CHECK:STDOUT: %T.ref.loc12: type = name_ref T, %T.loc11 [symbolic = %T.1 (constants.%T)]
|
||||
// CHECK:STDOUT: %n.ref: @F.%T.1 (%T) = name_ref n, %n
|
||||
// CHECK:STDOUT: %m: @F.%T.1 (%T) = bind_name m, %n.ref
|
||||
// CHECK:STDOUT: %m.ref: @F.%T.1 (%T) = name_ref m, %m
|
||||
|
||||
+75
-53
@@ -119,22 +119,26 @@ fn F(U:! type, T:! type) -> U* {
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %Core.import = import Core
|
||||
// CHECK:STDOUT: %F.decl.loc4: %F.type = fn_decl @F [template = constants.%F] {
|
||||
// CHECK:STDOUT: %T.loc4_6.1: type = param T, runtime_param<invalid>
|
||||
// CHECK:STDOUT: %T.loc4_6.2: type = bind_symbolic_name T 0, %T.loc4_6.1 [symbolic = @F.%T.1 (constants.%T)]
|
||||
// CHECK:STDOUT: %T.ref.loc4: type = name_ref T, %T.loc4_6.2 [symbolic = @F.%T.1 (constants.%T)]
|
||||
// CHECK:STDOUT: %.loc4: type = ptr_type %T [symbolic = @F.%.1 (constants.%.1)]
|
||||
// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T 0
|
||||
// CHECK:STDOUT: } {
|
||||
// CHECK:STDOUT: %T.param.loc4: type = param T, runtime_param<invalid>
|
||||
// CHECK:STDOUT: %T.loc4: type = bind_symbolic_name T 0, %T.param.loc4 [symbolic = %T.1 (constants.%T)]
|
||||
// CHECK:STDOUT: %T.ref.loc4: type = name_ref T, %T.loc4 [symbolic = %T.1 (constants.%T)]
|
||||
// CHECK:STDOUT: %.loc4: type = ptr_type %T [symbolic = %.1 (constants.%.1)]
|
||||
// CHECK:STDOUT: %return.var.loc4: ref @F.%.1 (%.1) = var <return slot>
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %F.decl.loc6: %F.type = fn_decl @F [template = constants.%F] {
|
||||
// CHECK:STDOUT: %T.loc6_6.1: type = param T, runtime_param<invalid>
|
||||
// CHECK:STDOUT: @F.%T.loc6: type = bind_symbolic_name T 0, %T.loc6_6.1 [symbolic = constants.%T]
|
||||
// CHECK:STDOUT: %T.ref.loc6: type = name_ref T, @F.%T.loc6 [symbolic = constants.%T]
|
||||
// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T 0
|
||||
// CHECK:STDOUT: } {
|
||||
// CHECK:STDOUT: %T.param.loc6: type = param T, runtime_param<invalid>
|
||||
// CHECK:STDOUT: %T.loc6: type = bind_symbolic_name T 0, %T.param.loc6 [symbolic = constants.%T]
|
||||
// CHECK:STDOUT: %T.ref.loc6: type = name_ref T, %T.loc6 [symbolic = constants.%T]
|
||||
// CHECK:STDOUT: %.loc6: type = ptr_type %T [symbolic = constants.%.1]
|
||||
// CHECK:STDOUT: @F.%return: ref %.1 = var <return slot>
|
||||
// CHECK:STDOUT: %return: ref %.1 = var <return slot>
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: generic fn @F(file.%T.loc4_6.2: type) {
|
||||
// CHECK:STDOUT: generic fn @F(%T.loc4: type) {
|
||||
// CHECK:STDOUT: %T.1: type = bind_symbolic_name T 0 [symbolic = %T.1 (constants.%T)]
|
||||
// CHECK:STDOUT: %.1: type = ptr_type @F.%T.1 (%T) [symbolic = %.1 (constants.%.1)]
|
||||
// CHECK:STDOUT:
|
||||
@@ -143,7 +147,7 @@ fn F(U:! type, T:! type) -> U* {
|
||||
// CHECK:STDOUT: fn(%T.loc6: type) -> %.1 {
|
||||
// CHECK:STDOUT: !entry:
|
||||
// CHECK:STDOUT: %F.ref: %F.type = name_ref F, file.%F.decl.loc4 [template = constants.%F]
|
||||
// CHECK:STDOUT: %T.ref: type = name_ref T, %T.loc6 [symbolic = %T.1 (constants.%T)]
|
||||
// CHECK:STDOUT: %T.ref.loc7: type = name_ref T, %T.loc6 [symbolic = %T.1 (constants.%T)]
|
||||
// CHECK:STDOUT: %F.call: init @F.%.1 (%.1) = call %F.ref()
|
||||
// CHECK:STDOUT: %.loc7_14.1: @F.%.1 (%.1) = value_of_initializer %F.call
|
||||
// CHECK:STDOUT: %.loc7_14.2: @F.%.1 (%.1) = converted %F.call, %.loc7_14.1
|
||||
@@ -190,22 +194,28 @@ fn F(U:! type, T:! type) -> U* {
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %Core.import = import Core
|
||||
// CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [template = constants.%F] {
|
||||
// CHECK:STDOUT: %T.loc4_6.1: type = param T, runtime_param<invalid>
|
||||
// CHECK:STDOUT: @F.%T.loc4: type = bind_symbolic_name T 0, %T.loc4_6.1 [symbolic = @F.%T.1 (constants.%T)]
|
||||
// CHECK:STDOUT: %U.loc4_16.1: type = param U, runtime_param<invalid>
|
||||
// CHECK:STDOUT: @F.%U.loc4: type = bind_symbolic_name U 1, %U.loc4_16.1 [symbolic = @F.%U.1 (constants.%U)]
|
||||
// CHECK:STDOUT: %T.ref: type = name_ref T, @F.%T.loc4 [symbolic = @F.%T.1 (constants.%T)]
|
||||
// CHECK:STDOUT: %.loc4: type = ptr_type %T [symbolic = @F.%.1 (constants.%.1)]
|
||||
// CHECK:STDOUT: @F.%return: ref @F.%.1 (%.1) = var <return slot>
|
||||
// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T 0
|
||||
// CHECK:STDOUT: %U.patt: type = symbolic_binding_pattern U 1
|
||||
// CHECK:STDOUT: } {
|
||||
// CHECK:STDOUT: %T.param: type = param T, runtime_param<invalid>
|
||||
// CHECK:STDOUT: %T.loc4: type = bind_symbolic_name T 0, %T.param [symbolic = %T.1 (constants.%T)]
|
||||
// CHECK:STDOUT: %U.param: type = param U, runtime_param<invalid>
|
||||
// CHECK:STDOUT: %U.loc4: type = bind_symbolic_name U 1, %U.param [symbolic = %U.1 (constants.%U)]
|
||||
// CHECK:STDOUT: %T.ref: type = name_ref T, %T.loc4 [symbolic = %T.1 (constants.%T)]
|
||||
// CHECK:STDOUT: %.loc4: type = ptr_type %T [symbolic = %.1 (constants.%.1)]
|
||||
// CHECK:STDOUT: %return: ref @F.%.1 (%.1) = var <return slot>
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %.decl: %.type = fn_decl @.1 [template = constants.%.4] {
|
||||
// CHECK:STDOUT: %T.loc13_6.1: type = param T, runtime_param<invalid>
|
||||
// CHECK:STDOUT: @.1.%T.loc13: type = bind_symbolic_name T 0, %T.loc13_6.1 [symbolic = @.1.%T.1 (constants.%T)]
|
||||
// CHECK:STDOUT: %U.loc13_16.1: type = param U, runtime_param<invalid>
|
||||
// CHECK:STDOUT: @.1.%U.loc13: type = bind_symbolic_name U 1, %U.loc13_16.1 [symbolic = @.1.%U.1 (constants.%U)]
|
||||
// CHECK:STDOUT: %U.ref: type = name_ref U, @.1.%U.loc13 [symbolic = @.1.%U.1 (constants.%U)]
|
||||
// CHECK:STDOUT: %.loc13: type = ptr_type %U [symbolic = @.1.%.1 (constants.%.3)]
|
||||
// CHECK:STDOUT: @.1.%return: ref @.1.%.1 (%.3) = var <return slot>
|
||||
// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T 0
|
||||
// CHECK:STDOUT: %U.patt: type = symbolic_binding_pattern U 1
|
||||
// CHECK:STDOUT: } {
|
||||
// CHECK:STDOUT: %T.param: type = param T, runtime_param<invalid>
|
||||
// CHECK:STDOUT: %T.loc13: type = bind_symbolic_name T 0, %T.param [symbolic = %T.1 (constants.%T)]
|
||||
// CHECK:STDOUT: %U.param: type = param U, runtime_param<invalid>
|
||||
// CHECK:STDOUT: %U.loc13: type = bind_symbolic_name U 1, %U.param [symbolic = %U.1 (constants.%U)]
|
||||
// CHECK:STDOUT: %U.ref: type = name_ref U, %U.loc13 [symbolic = %U.1 (constants.%U)]
|
||||
// CHECK:STDOUT: %.loc13: type = ptr_type %U [symbolic = %.1 (constants.%.3)]
|
||||
// CHECK:STDOUT: %return: ref @.1.%.1 (%.3) = var <return slot>
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
@@ -280,22 +290,28 @@ fn F(U:! type, T:! type) -> U* {
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %Core.import = import Core
|
||||
// CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [template = constants.%F] {
|
||||
// CHECK:STDOUT: %T.loc4_6.1: type = param T, runtime_param<invalid>
|
||||
// CHECK:STDOUT: @F.%T.loc4: type = bind_symbolic_name T 0, %T.loc4_6.1 [symbolic = @F.%T.1 (constants.%T.1)]
|
||||
// CHECK:STDOUT: %U.loc4_16.1: type = param U, runtime_param<invalid>
|
||||
// CHECK:STDOUT: @F.%U.loc4: type = bind_symbolic_name U 1, %U.loc4_16.1 [symbolic = @F.%U.1 (constants.%U.1)]
|
||||
// CHECK:STDOUT: %T.ref.loc4: type = name_ref T, @F.%T.loc4 [symbolic = @F.%T.1 (constants.%T.1)]
|
||||
// CHECK:STDOUT: %.loc4: type = ptr_type %T.1 [symbolic = @F.%.1 (constants.%.1)]
|
||||
// CHECK:STDOUT: @F.%return: ref @F.%.1 (%.1) = var <return slot>
|
||||
// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T 0
|
||||
// CHECK:STDOUT: %U.patt: type = symbolic_binding_pattern U 1
|
||||
// CHECK:STDOUT: } {
|
||||
// CHECK:STDOUT: %T.param: type = param T, runtime_param<invalid>
|
||||
// CHECK:STDOUT: %T.loc4: type = bind_symbolic_name T 0, %T.param [symbolic = %T.1 (constants.%T.1)]
|
||||
// CHECK:STDOUT: %U.param: type = param U, runtime_param<invalid>
|
||||
// CHECK:STDOUT: %U.loc4: type = bind_symbolic_name U 1, %U.param [symbolic = %U.1 (constants.%U.1)]
|
||||
// CHECK:STDOUT: %T.ref: type = name_ref T, %T.loc4 [symbolic = %T.1 (constants.%T.1)]
|
||||
// CHECK:STDOUT: %.loc4: type = ptr_type %T.1 [symbolic = %.1 (constants.%.1)]
|
||||
// CHECK:STDOUT: %return: ref @F.%.1 (%.1) = var <return slot>
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %.decl: %.type = fn_decl @.1 [template = constants.%.4] {
|
||||
// CHECK:STDOUT: %U.loc13_6.1: type = param U, runtime_param<invalid>
|
||||
// CHECK:STDOUT: @.1.%U.loc13: type = bind_symbolic_name U 0, %U.loc13_6.1 [symbolic = @.1.%U.1 (constants.%U.2)]
|
||||
// CHECK:STDOUT: %T.loc13_16.1: type = param T, runtime_param<invalid>
|
||||
// CHECK:STDOUT: @.1.%T.loc13: type = bind_symbolic_name T 1, %T.loc13_16.1 [symbolic = @.1.%T.1 (constants.%T.2)]
|
||||
// CHECK:STDOUT: %T.ref.loc13: type = name_ref T, @.1.%T.loc13 [symbolic = @.1.%T.1 (constants.%T.2)]
|
||||
// CHECK:STDOUT: %.loc13: type = ptr_type %T.2 [symbolic = @.1.%.1 (constants.%.3)]
|
||||
// CHECK:STDOUT: @.1.%return: ref @.1.%.1 (%.3) = var <return slot>
|
||||
// CHECK:STDOUT: %U.patt: type = symbolic_binding_pattern U 0
|
||||
// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T 1
|
||||
// CHECK:STDOUT: } {
|
||||
// CHECK:STDOUT: %U.param: type = param U, runtime_param<invalid>
|
||||
// CHECK:STDOUT: %U.loc13: type = bind_symbolic_name U 0, %U.param [symbolic = %U.1 (constants.%U.2)]
|
||||
// CHECK:STDOUT: %T.param: type = param T, runtime_param<invalid>
|
||||
// CHECK:STDOUT: %T.loc13: type = bind_symbolic_name T 1, %T.param [symbolic = %T.1 (constants.%T.2)]
|
||||
// CHECK:STDOUT: %T.ref.loc13: type = name_ref T, %T.loc13 [symbolic = %T.1 (constants.%T.2)]
|
||||
// CHECK:STDOUT: %.loc13: type = ptr_type %T.2 [symbolic = %.1 (constants.%.3)]
|
||||
// CHECK:STDOUT: %return: ref @.1.%.1 (%.3) = var <return slot>
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
@@ -317,7 +333,7 @@ fn F(U:! type, T:! type) -> U* {
|
||||
// CHECK:STDOUT: fn(%U.loc13: type, %T.loc13: type) -> @.1.%.1 (%.3) {
|
||||
// CHECK:STDOUT: !entry:
|
||||
// CHECK:STDOUT: %F.ref: %F.type = name_ref F, file.%F.decl [template = constants.%F]
|
||||
// CHECK:STDOUT: %T.ref: type = name_ref T, %T.loc13 [symbolic = %T.1 (constants.%T.2)]
|
||||
// CHECK:STDOUT: %T.ref.loc21: type = name_ref T, %T.loc13 [symbolic = %T.1 (constants.%T.2)]
|
||||
// CHECK:STDOUT: return <error>
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: }
|
||||
@@ -370,22 +386,28 @@ fn F(U:! type, T:! type) -> U* {
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %Core.import = import Core
|
||||
// CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [template = constants.%F] {
|
||||
// CHECK:STDOUT: %T.loc4_6.1: type = param T, runtime_param<invalid>
|
||||
// CHECK:STDOUT: @F.%T.loc4: type = bind_symbolic_name T 0, %T.loc4_6.1 [symbolic = @F.%T.1 (constants.%T.1)]
|
||||
// CHECK:STDOUT: %U.loc4_16.1: type = param U, runtime_param<invalid>
|
||||
// CHECK:STDOUT: @F.%U.loc4: type = bind_symbolic_name U 1, %U.loc4_16.1 [symbolic = @F.%U.1 (constants.%U.1)]
|
||||
// CHECK:STDOUT: %T.ref: type = name_ref T, @F.%T.loc4 [symbolic = @F.%T.1 (constants.%T.1)]
|
||||
// CHECK:STDOUT: %.loc4: type = ptr_type %T.1 [symbolic = @F.%.1 (constants.%.1)]
|
||||
// CHECK:STDOUT: @F.%return: ref @F.%.1 (%.1) = var <return slot>
|
||||
// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T 0
|
||||
// CHECK:STDOUT: %U.patt: type = symbolic_binding_pattern U 1
|
||||
// CHECK:STDOUT: } {
|
||||
// CHECK:STDOUT: %T.param: type = param T, runtime_param<invalid>
|
||||
// CHECK:STDOUT: %T.loc4: type = bind_symbolic_name T 0, %T.param [symbolic = %T.1 (constants.%T.1)]
|
||||
// CHECK:STDOUT: %U.param: type = param U, runtime_param<invalid>
|
||||
// CHECK:STDOUT: %U.loc4: type = bind_symbolic_name U 1, %U.param [symbolic = %U.1 (constants.%U.1)]
|
||||
// CHECK:STDOUT: %T.ref: type = name_ref T, %T.loc4 [symbolic = %T.1 (constants.%T.1)]
|
||||
// CHECK:STDOUT: %.loc4: type = ptr_type %T.1 [symbolic = %.1 (constants.%.1)]
|
||||
// CHECK:STDOUT: %return: ref @F.%.1 (%.1) = var <return slot>
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %.decl: %.type = fn_decl @.1 [template = constants.%.4] {
|
||||
// CHECK:STDOUT: %U.loc13_6.1: type = param U, runtime_param<invalid>
|
||||
// CHECK:STDOUT: @.1.%U.loc13: type = bind_symbolic_name U 0, %U.loc13_6.1 [symbolic = @.1.%U.1 (constants.%U.2)]
|
||||
// CHECK:STDOUT: %T.loc13_16.1: type = param T, runtime_param<invalid>
|
||||
// CHECK:STDOUT: @.1.%T.loc13: type = bind_symbolic_name T 1, %T.loc13_16.1 [symbolic = @.1.%T.1 (constants.%T.2)]
|
||||
// CHECK:STDOUT: %U.ref: type = name_ref U, @.1.%U.loc13 [symbolic = @.1.%U.1 (constants.%U.2)]
|
||||
// CHECK:STDOUT: %.loc13: type = ptr_type %U.2 [symbolic = @.1.%.1 (constants.%.3)]
|
||||
// CHECK:STDOUT: @.1.%return: ref @.1.%.1 (%.3) = var <return slot>
|
||||
// CHECK:STDOUT: %U.patt: type = symbolic_binding_pattern U 0
|
||||
// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T 1
|
||||
// CHECK:STDOUT: } {
|
||||
// CHECK:STDOUT: %U.param: type = param U, runtime_param<invalid>
|
||||
// CHECK:STDOUT: %U.loc13: type = bind_symbolic_name U 0, %U.param [symbolic = %U.1 (constants.%U.2)]
|
||||
// CHECK:STDOUT: %T.param: type = param T, runtime_param<invalid>
|
||||
// CHECK:STDOUT: %T.loc13: type = bind_symbolic_name T 1, %T.param [symbolic = %T.1 (constants.%T.2)]
|
||||
// CHECK:STDOUT: %U.ref: type = name_ref U, %U.loc13 [symbolic = %U.1 (constants.%U.2)]
|
||||
// CHECK:STDOUT: %.loc13: type = ptr_type %U.2 [symbolic = %.1 (constants.%.3)]
|
||||
// CHECK:STDOUT: %return: ref @.1.%.1 (%.3) = var <return slot>
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
|
||||
+19
-17
@@ -81,24 +81,26 @@ fn G() {
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %Core.import = import Core
|
||||
// CHECK:STDOUT: %Wrap.decl: %Wrap.type = class_decl @Wrap [template = constants.%Wrap.1] {
|
||||
// CHECK:STDOUT: %T.loc11_12.1: type = param T, runtime_param<invalid>
|
||||
// CHECK:STDOUT: %T.loc11_12.2: type = bind_symbolic_name T 0, %T.loc11_12.1 [symbolic = @Wrap.%T (constants.%T)]
|
||||
// CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T 0
|
||||
// CHECK:STDOUT: } {
|
||||
// CHECK:STDOUT: %T.param: type = param T, runtime_param<invalid>
|
||||
// CHECK:STDOUT: %T.loc11: type = bind_symbolic_name T 0, %T.param [symbolic = %T.1 (constants.%T)]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %C.decl: type = class_decl @C [template = constants.%C] {}
|
||||
// CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [template = constants.%G] {}
|
||||
// CHECK:STDOUT: %C.decl: type = class_decl @C [template = constants.%C] {} {}
|
||||
// CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [template = constants.%G] {} {}
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: generic class @Wrap(file.%T.loc11_12.2: type) {
|
||||
// CHECK:STDOUT: %T: type = bind_symbolic_name T 0 [symbolic = %T (constants.%T)]
|
||||
// CHECK:STDOUT: generic class @Wrap(%T.loc11: type) {
|
||||
// CHECK:STDOUT: %T.1: type = bind_symbolic_name T 0 [symbolic = %T.1 (constants.%T)]
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT: %Make.type: type = fn_type @Make, @Wrap(%T) [symbolic = %Make.type (constants.%Make.type.1)]
|
||||
// CHECK:STDOUT: %Make.type: type = fn_type @Make, @Wrap(%T.1) [symbolic = %Make.type (constants.%Make.type.1)]
|
||||
// CHECK:STDOUT: %Make: @Wrap.%Make.type (%Make.type.1) = struct_value () [symbolic = %Make (constants.%Make.1)]
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: class {
|
||||
// CHECK:STDOUT: %Make.decl: @Wrap.%Make.type (%Make.type.1) = fn_decl @Make [symbolic = %Make (constants.%Make.1)] {
|
||||
// CHECK:STDOUT: %T.ref: type = name_ref T, file.%T.loc11_12.2 [symbolic = @Make.%T (constants.%T)]
|
||||
// CHECK:STDOUT: %return.var: ref @Make.%T (%T) = var <return slot>
|
||||
// CHECK:STDOUT: %Make.decl: @Wrap.%Make.type (%Make.type.1) = fn_decl @Make [symbolic = @Wrap.%Make (constants.%Make.1)] {} {
|
||||
// CHECK:STDOUT: %T.ref: type = name_ref T, @Wrap.%T.loc11 [symbolic = %T (constants.%T)]
|
||||
// CHECK:STDOUT: %return: ref @Make.%T (%T) = var <return slot>
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %.loc13: <witness> = complete_type_witness %.2 [template = constants.%.3]
|
||||
// CHECK:STDOUT:
|
||||
@@ -122,7 +124,7 @@ fn G() {
|
||||
// CHECK:STDOUT: .arr = %.loc15_18
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: generic fn @Make(file.%T.loc11_12.2: type) {
|
||||
// CHECK:STDOUT: generic fn @Make(@Wrap.%T.loc11: type) {
|
||||
// CHECK:STDOUT: %T: type = bind_symbolic_name T 0 [symbolic = %T (constants.%T)]
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn() -> @Make.%T (%T);
|
||||
@@ -173,19 +175,19 @@ fn G() {
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific @Wrap(constants.%T) {
|
||||
// CHECK:STDOUT: %T => constants.%T
|
||||
// CHECK:STDOUT: %T.1 => constants.%T
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific @Make(constants.%T) {
|
||||
// CHECK:STDOUT: %T => constants.%T
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific @Wrap(@Wrap.%T) {
|
||||
// CHECK:STDOUT: %T => constants.%T
|
||||
// CHECK:STDOUT: specific @Wrap(@Wrap.%T.1) {
|
||||
// CHECK:STDOUT: %T.1 => constants.%T
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific @Wrap(i32) {
|
||||
// CHECK:STDOUT: %T => i32
|
||||
// CHECK:STDOUT: %T.1 => i32
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT: %Make.type => constants.%Make.type.2
|
||||
@@ -197,7 +199,7 @@ fn G() {
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific @Wrap(constants.%.1) {
|
||||
// CHECK:STDOUT: %T => constants.%.1
|
||||
// CHECK:STDOUT: %T.1 => constants.%.1
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT: %Make.type => constants.%Make.type.3
|
||||
@@ -209,7 +211,7 @@ fn G() {
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific @Wrap(constants.%C) {
|
||||
// CHECK:STDOUT: %T => constants.%C
|
||||
// CHECK:STDOUT: %T.1 => constants.%C
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT: %Make.type => constants.%Make.type.4
|
||||
|
||||
Reference in New Issue
Block a user