Model patterns as constant values (#5385)

This will enable us to simplify support for parameter and return
patterns in import, which operates primarily on constants.
This commit is contained in:
Geoff Romer
2025-04-30 22:32:41 +00:00
committed by GitHub
parent 500cf63d0d
commit 34887403ab
550 changed files with 6425 additions and 6416 deletions
@@ -39,10 +39,10 @@ fn F(n: i32, a: array(i32, n)*);
// CHECK:STDOUT: }
// CHECK:STDOUT: %Core.import = import Core
// CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] {
// CHECK:STDOUT: %n.patt: %pattern_type.7ce = binding_pattern n
// CHECK:STDOUT: %n.param_patt: %pattern_type.7ce = value_param_pattern %n.patt, call_param0
// CHECK:STDOUT: %a.patt: <error> = binding_pattern a
// CHECK:STDOUT: %a.param_patt: <error> = value_param_pattern %a.patt, call_param1
// CHECK:STDOUT: %n.patt: %pattern_type.7ce = binding_pattern n [concrete]
// CHECK:STDOUT: %n.param_patt: %pattern_type.7ce = value_param_pattern %n.patt, call_param0 [concrete]
// CHECK:STDOUT: %a.patt: <error> = binding_pattern a [concrete]
// CHECK:STDOUT: %a.param_patt: <error> = value_param_pattern %a.patt, call_param1 [concrete]
// CHECK:STDOUT: } {
// CHECK:STDOUT: %n.param: %i32 = value_param call_param0
// CHECK:STDOUT: %.loc15_9: type = splice_block %i32.loc15_9 [concrete = constants.%i32] {
@@ -42,10 +42,10 @@ fn F(n: i32, n: i32);
// CHECK:STDOUT: }
// CHECK:STDOUT: %Core.import = import Core
// CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] {
// CHECK:STDOUT: %n.patt.loc18_6: %pattern_type.7ce = binding_pattern n
// CHECK:STDOUT: %n.param_patt.loc18_7: %pattern_type.7ce = value_param_pattern %n.patt.loc18_6, call_param0
// CHECK:STDOUT: %n.patt.loc18_14: %pattern_type.7ce = binding_pattern n
// CHECK:STDOUT: %n.param_patt.loc18_15: %pattern_type.7ce = value_param_pattern %n.patt.loc18_14, call_param1
// CHECK:STDOUT: %n.patt.loc18_6: %pattern_type.7ce = binding_pattern n [concrete]
// CHECK:STDOUT: %n.param_patt.loc18_7: %pattern_type.7ce = value_param_pattern %n.patt.loc18_6, call_param0 [concrete]
// CHECK:STDOUT: %n.patt.loc18_14: %pattern_type.7ce = binding_pattern n [concrete]
// CHECK:STDOUT: %n.param_patt.loc18_15: %pattern_type.7ce = value_param_pattern %n.patt.loc18_14, call_param1 [concrete]
// CHECK:STDOUT: } {
// CHECK:STDOUT: %n.param.loc18_7: %i32 = value_param call_param0
// CHECK:STDOUT: %.loc18_9: type = splice_block %i32.loc18_9 [concrete = constants.%i32] {
+66 -66
View File
@@ -299,10 +299,10 @@ import library "extern_api";
// CHECK:STDOUT: %Core.import = import Core
// CHECK:STDOUT: %A.decl: %A.type = fn_decl @A [concrete = constants.%A] {} {}
// CHECK:STDOUT: %B.decl: %B.type = fn_decl @B [concrete = constants.%B] {
// CHECK:STDOUT: %b.patt: %pattern_type.7ce = binding_pattern b
// CHECK:STDOUT: %b.param_patt: %pattern_type.7ce = value_param_pattern %b.patt, call_param0
// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern
// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param1
// CHECK:STDOUT: %b.patt: %pattern_type.7ce = binding_pattern b [concrete]
// CHECK:STDOUT: %b.param_patt: %pattern_type.7ce = value_param_pattern %b.patt, call_param0 [concrete]
// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern [concrete]
// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param1 [concrete]
// CHECK:STDOUT: } {
// CHECK:STDOUT: %int_32.loc5_17: Core.IntLiteral = int_value 32 [concrete = constants.%int_32]
// CHECK:STDOUT: %i32.loc5_17: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32]
@@ -316,10 +316,10 @@ import library "extern_api";
// CHECK:STDOUT: %return: ref %i32 = return_slot %return.param
// CHECK:STDOUT: }
// CHECK:STDOUT: %C.decl: %C.type = fn_decl @C [concrete = constants.%C] {
// CHECK:STDOUT: %c.patt: %pattern_type.b74 = binding_pattern c
// CHECK:STDOUT: %c.param_patt: %pattern_type.b74 = value_param_pattern %c.patt, call_param0
// CHECK:STDOUT: %return.patt: %pattern_type.688 = return_slot_pattern
// CHECK:STDOUT: %return.param_patt: %pattern_type.688 = out_param_pattern %return.patt, call_param1
// CHECK:STDOUT: %c.patt: %pattern_type.b74 = binding_pattern c [concrete]
// CHECK:STDOUT: %c.param_patt: %pattern_type.b74 = value_param_pattern %c.patt, call_param0 [concrete]
// CHECK:STDOUT: %return.patt: %pattern_type.688 = return_slot_pattern [concrete]
// CHECK:STDOUT: %return.param_patt: %pattern_type.688 = out_param_pattern %return.patt, call_param1 [concrete]
// CHECK:STDOUT: } {
// CHECK:STDOUT: %int_32.loc6_25: Core.IntLiteral = int_value 32 [concrete = constants.%int_32]
// CHECK:STDOUT: %i32.loc6_25: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32]
@@ -395,10 +395,10 @@ import library "extern_api";
// CHECK:STDOUT: %Core.import = import Core
// CHECK:STDOUT: %A.decl: %A.type = fn_decl @A [concrete = constants.%A] {} {}
// CHECK:STDOUT: %B.decl: %B.type = fn_decl @B [concrete = constants.%B] {
// CHECK:STDOUT: %b.patt: %pattern_type.7ce = binding_pattern b
// CHECK:STDOUT: %b.param_patt: %pattern_type.7ce = value_param_pattern %b.patt, call_param0
// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern
// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param1
// CHECK:STDOUT: %b.patt: %pattern_type.7ce = binding_pattern b [concrete]
// CHECK:STDOUT: %b.param_patt: %pattern_type.7ce = value_param_pattern %b.patt, call_param0 [concrete]
// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern [concrete]
// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param1 [concrete]
// CHECK:STDOUT: } {
// CHECK:STDOUT: %int_32.loc5_52: Core.IntLiteral = int_value 32 [concrete = constants.%int_32]
// CHECK:STDOUT: %i32.loc5_52: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32]
@@ -412,10 +412,10 @@ import library "extern_api";
// CHECK:STDOUT: %return: ref %i32 = return_slot %return.param
// CHECK:STDOUT: }
// CHECK:STDOUT: %C.decl: %C.type = fn_decl @C [concrete = constants.%C] {
// CHECK:STDOUT: %c.patt: %pattern_type.b74 = binding_pattern c
// CHECK:STDOUT: %c.param_patt: %pattern_type.b74 = value_param_pattern %c.patt, call_param0
// CHECK:STDOUT: %return.patt: %pattern_type.688 = return_slot_pattern
// CHECK:STDOUT: %return.param_patt: %pattern_type.688 = out_param_pattern %return.patt, call_param1
// CHECK:STDOUT: %c.patt: %pattern_type.b74 = binding_pattern c [concrete]
// CHECK:STDOUT: %c.param_patt: %pattern_type.b74 = value_param_pattern %c.patt, call_param0 [concrete]
// CHECK:STDOUT: %return.patt: %pattern_type.688 = return_slot_pattern [concrete]
// CHECK:STDOUT: %return.param_patt: %pattern_type.688 = out_param_pattern %return.patt, call_param1 [concrete]
// CHECK:STDOUT: } {
// CHECK:STDOUT: %int_32.loc6_60: Core.IntLiteral = int_value 32 [concrete = constants.%int_32]
// CHECK:STDOUT: %i32.loc6_60: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32]
@@ -521,8 +521,8 @@ import library "extern_api";
// CHECK:STDOUT: %Core.import = import Core
// CHECK:STDOUT: %default.import = import <none>
// CHECK:STDOUT: name_binding_decl {
// CHECK:STDOUT: %a.patt: %pattern_type.cb1 = binding_pattern a
// CHECK:STDOUT: %.loc6_1: %pattern_type.cb1 = var_pattern %a.patt
// CHECK:STDOUT: %a.patt: %pattern_type.cb1 = binding_pattern a [concrete]
// CHECK:STDOUT: %.loc6_1: %pattern_type.cb1 = var_pattern %a.patt [concrete]
// CHECK:STDOUT: }
// CHECK:STDOUT: %a.var: ref %empty_tuple.type = var a
// CHECK:STDOUT: %.loc6_9.1: type = splice_block %.loc6_9.3 [concrete = constants.%empty_tuple.type] {
@@ -531,8 +531,8 @@ import library "extern_api";
// CHECK:STDOUT: }
// CHECK:STDOUT: %a: ref %empty_tuple.type = bind_name a, %a.var
// CHECK:STDOUT: name_binding_decl {
// CHECK:STDOUT: %b.patt: %pattern_type.7ce = binding_pattern b
// CHECK:STDOUT: %.loc7_1: %pattern_type.7ce = var_pattern %b.patt
// CHECK:STDOUT: %b.patt: %pattern_type.7ce = binding_pattern b [concrete]
// CHECK:STDOUT: %.loc7_1: %pattern_type.7ce = var_pattern %b.patt [concrete]
// CHECK:STDOUT: }
// CHECK:STDOUT: %b.var: ref %i32 = var b
// CHECK:STDOUT: %.loc7_8: type = splice_block %i32.loc7 [concrete = constants.%i32] {
@@ -541,8 +541,8 @@ import library "extern_api";
// CHECK:STDOUT: }
// CHECK:STDOUT: %b: ref %i32 = bind_name b, %b.var
// CHECK:STDOUT: name_binding_decl {
// CHECK:STDOUT: %c.patt: %pattern_type.688 = binding_pattern c
// CHECK:STDOUT: %.loc8_1: %pattern_type.688 = var_pattern %c.patt
// CHECK:STDOUT: %c.patt: %pattern_type.688 = binding_pattern c [concrete]
// CHECK:STDOUT: %.loc8_1: %pattern_type.688 = var_pattern %c.patt [concrete]
// CHECK:STDOUT: }
// CHECK:STDOUT: %c.var: ref %struct_type.c = var c
// CHECK:STDOUT: %.loc8_16: type = splice_block %struct_type.c [concrete = constants.%struct_type.c] {
@@ -552,8 +552,8 @@ import library "extern_api";
// CHECK:STDOUT: }
// CHECK:STDOUT: %c: ref %struct_type.c = bind_name c, %c.var
// CHECK:STDOUT: name_binding_decl {
// CHECK:STDOUT: %d.patt: %pattern_type.cb1 = binding_pattern d
// CHECK:STDOUT: %.loc9_1: %pattern_type.cb1 = var_pattern %d.patt
// CHECK:STDOUT: %d.patt: %pattern_type.cb1 = binding_pattern d [concrete]
// CHECK:STDOUT: %.loc9_1: %pattern_type.cb1 = var_pattern %d.patt [concrete]
// CHECK:STDOUT: }
// CHECK:STDOUT: %d.var: ref %empty_tuple.type = var d
// CHECK:STDOUT: %.loc9_9.1: type = splice_block %.loc9_9.3 [concrete = constants.%empty_tuple.type] {
@@ -562,8 +562,8 @@ import library "extern_api";
// CHECK:STDOUT: }
// CHECK:STDOUT: %d: ref %empty_tuple.type = bind_name d, %d.var
// CHECK:STDOUT: name_binding_decl {
// CHECK:STDOUT: %e.patt: %pattern_type.cb1 = binding_pattern e
// CHECK:STDOUT: %.loc10_1: %pattern_type.cb1 = var_pattern %e.patt
// CHECK:STDOUT: %e.patt: %pattern_type.cb1 = binding_pattern e [concrete]
// CHECK:STDOUT: %.loc10_1: %pattern_type.cb1 = var_pattern %e.patt [concrete]
// CHECK:STDOUT: }
// CHECK:STDOUT: %e.var: ref %empty_tuple.type = var e
// CHECK:STDOUT: %.loc10_9.1: type = splice_block %.loc10_9.3 [concrete = constants.%empty_tuple.type] {
@@ -722,8 +722,8 @@ import library "extern_api";
// CHECK:STDOUT: %D.decl: %D.type = fn_decl @D [concrete = constants.%D] {} {}
// CHECK:STDOUT: %E.decl: %E.type = fn_decl @E [concrete = constants.%E] {} {}
// CHECK:STDOUT: name_binding_decl {
// CHECK:STDOUT: %a.patt: %pattern_type.cb1 = binding_pattern a
// CHECK:STDOUT: %.loc52_1: %pattern_type.cb1 = var_pattern %a.patt
// CHECK:STDOUT: %a.patt: %pattern_type.cb1 = binding_pattern a [concrete]
// CHECK:STDOUT: %.loc52_1: %pattern_type.cb1 = var_pattern %a.patt [concrete]
// CHECK:STDOUT: }
// CHECK:STDOUT: %a.var: ref %empty_tuple.type = var a
// CHECK:STDOUT: %.loc52_9.1: type = splice_block %.loc52_9.3 [concrete = constants.%empty_tuple.type] {
@@ -732,8 +732,8 @@ import library "extern_api";
// CHECK:STDOUT: }
// CHECK:STDOUT: %a: ref %empty_tuple.type = bind_name a, %a.var
// CHECK:STDOUT: name_binding_decl {
// CHECK:STDOUT: %b.patt: %pattern_type.7ce = binding_pattern b
// CHECK:STDOUT: %.loc53_1: %pattern_type.7ce = var_pattern %b.patt
// CHECK:STDOUT: %b.patt: %pattern_type.7ce = binding_pattern b [concrete]
// CHECK:STDOUT: %.loc53_1: %pattern_type.7ce = var_pattern %b.patt [concrete]
// CHECK:STDOUT: }
// CHECK:STDOUT: %b.var: ref %i32 = var b
// CHECK:STDOUT: %.loc53_8: type = splice_block %i32.loc53 [concrete = constants.%i32] {
@@ -742,8 +742,8 @@ import library "extern_api";
// CHECK:STDOUT: }
// CHECK:STDOUT: %b: ref %i32 = bind_name b, %b.var
// CHECK:STDOUT: name_binding_decl {
// CHECK:STDOUT: %c.patt: %pattern_type.688 = binding_pattern c
// CHECK:STDOUT: %.loc54_1: %pattern_type.688 = var_pattern %c.patt
// CHECK:STDOUT: %c.patt: %pattern_type.688 = binding_pattern c [concrete]
// CHECK:STDOUT: %.loc54_1: %pattern_type.688 = var_pattern %c.patt [concrete]
// CHECK:STDOUT: }
// CHECK:STDOUT: %c.var: ref %struct_type.c = var c
// CHECK:STDOUT: %.loc54_16: type = splice_block %struct_type.c [concrete = constants.%struct_type.c] {
@@ -753,8 +753,8 @@ import library "extern_api";
// CHECK:STDOUT: }
// CHECK:STDOUT: %c: ref %struct_type.c = bind_name c, %c.var
// CHECK:STDOUT: name_binding_decl {
// CHECK:STDOUT: %d.patt: %pattern_type.cb1 = binding_pattern d
// CHECK:STDOUT: %.loc55_1: %pattern_type.cb1 = var_pattern %d.patt
// CHECK:STDOUT: %d.patt: %pattern_type.cb1 = binding_pattern d [concrete]
// CHECK:STDOUT: %.loc55_1: %pattern_type.cb1 = var_pattern %d.patt [concrete]
// CHECK:STDOUT: }
// CHECK:STDOUT: %d.var: ref %empty_tuple.type = var d
// CHECK:STDOUT: %.loc55_9.1: type = splice_block %.loc55_9.3 [concrete = constants.%empty_tuple.type] {
@@ -763,8 +763,8 @@ import library "extern_api";
// CHECK:STDOUT: }
// CHECK:STDOUT: %d: ref %empty_tuple.type = bind_name d, %d.var
// CHECK:STDOUT: name_binding_decl {
// CHECK:STDOUT: %e.patt: %pattern_type.cb1 = binding_pattern e
// CHECK:STDOUT: %.loc56_1: %pattern_type.cb1 = var_pattern %e.patt
// CHECK:STDOUT: %e.patt: %pattern_type.cb1 = binding_pattern e [concrete]
// CHECK:STDOUT: %.loc56_1: %pattern_type.cb1 = var_pattern %e.patt [concrete]
// CHECK:STDOUT: }
// CHECK:STDOUT: %e.var: ref %empty_tuple.type = var e
// CHECK:STDOUT: %.loc56_9.1: type = splice_block %.loc56_9.3 [concrete = constants.%empty_tuple.type] {
@@ -923,8 +923,8 @@ import library "extern_api";
// CHECK:STDOUT: %D.decl: %D.type = fn_decl @D [concrete = constants.%D] {} {}
// CHECK:STDOUT: %E.decl: %E.type = fn_decl @E [concrete = constants.%E] {} {}
// CHECK:STDOUT: name_binding_decl {
// CHECK:STDOUT: %a.patt: %pattern_type.cb1 = binding_pattern a
// CHECK:STDOUT: %.loc12_1: %pattern_type.cb1 = var_pattern %a.patt
// CHECK:STDOUT: %a.patt: %pattern_type.cb1 = binding_pattern a [concrete]
// CHECK:STDOUT: %.loc12_1: %pattern_type.cb1 = var_pattern %a.patt [concrete]
// CHECK:STDOUT: }
// CHECK:STDOUT: %a.var: ref %empty_tuple.type = var a
// CHECK:STDOUT: %.loc12_9.1: type = splice_block %.loc12_9.3 [concrete = constants.%empty_tuple.type] {
@@ -933,8 +933,8 @@ import library "extern_api";
// CHECK:STDOUT: }
// CHECK:STDOUT: %a: ref %empty_tuple.type = bind_name a, %a.var
// CHECK:STDOUT: name_binding_decl {
// CHECK:STDOUT: %b.patt: %pattern_type.501 = binding_pattern b
// CHECK:STDOUT: %.loc13_1: %pattern_type.501 = var_pattern %b.patt
// CHECK:STDOUT: %b.patt: %pattern_type.501 = binding_pattern b [concrete]
// CHECK:STDOUT: %.loc13_1: %pattern_type.501 = var_pattern %b.patt [concrete]
// CHECK:STDOUT: }
// CHECK:STDOUT: %b.var: ref %i32 = var b
// CHECK:STDOUT: %.loc13_8: type = splice_block %i32.loc13 [concrete = constants.%i32] {
@@ -943,8 +943,8 @@ import library "extern_api";
// CHECK:STDOUT: }
// CHECK:STDOUT: %b: ref %i32 = bind_name b, %b.var
// CHECK:STDOUT: name_binding_decl {
// CHECK:STDOUT: %c.patt: %pattern_type.f5f = binding_pattern c
// CHECK:STDOUT: %.loc14_1: %pattern_type.f5f = var_pattern %c.patt
// CHECK:STDOUT: %c.patt: %pattern_type.f5f = binding_pattern c [concrete]
// CHECK:STDOUT: %.loc14_1: %pattern_type.f5f = var_pattern %c.patt [concrete]
// CHECK:STDOUT: }
// CHECK:STDOUT: %c.var: ref %struct_type.c = var c
// CHECK:STDOUT: %.loc14_16: type = splice_block %struct_type.c [concrete = constants.%struct_type.c] {
@@ -954,8 +954,8 @@ import library "extern_api";
// CHECK:STDOUT: }
// CHECK:STDOUT: %c: ref %struct_type.c = bind_name c, %c.var
// CHECK:STDOUT: name_binding_decl {
// CHECK:STDOUT: %d.patt: %pattern_type.cb1 = binding_pattern d
// CHECK:STDOUT: %.loc15_1: %pattern_type.cb1 = var_pattern %d.patt
// CHECK:STDOUT: %d.patt: %pattern_type.cb1 = binding_pattern d [concrete]
// CHECK:STDOUT: %.loc15_1: %pattern_type.cb1 = var_pattern %d.patt [concrete]
// CHECK:STDOUT: }
// CHECK:STDOUT: %d.var: ref %empty_tuple.type = var d
// CHECK:STDOUT: %.loc15_9.1: type = splice_block %.loc15_9.3 [concrete = constants.%empty_tuple.type] {
@@ -964,8 +964,8 @@ import library "extern_api";
// CHECK:STDOUT: }
// CHECK:STDOUT: %d: ref %empty_tuple.type = bind_name d, %d.var
// CHECK:STDOUT: name_binding_decl {
// CHECK:STDOUT: %e.patt: %pattern_type.cb1 = binding_pattern e
// CHECK:STDOUT: %.loc16_1: %pattern_type.cb1 = var_pattern %e.patt
// CHECK:STDOUT: %e.patt: %pattern_type.cb1 = binding_pattern e [concrete]
// CHECK:STDOUT: %.loc16_1: %pattern_type.cb1 = var_pattern %e.patt [concrete]
// CHECK:STDOUT: }
// CHECK:STDOUT: %e.var: ref %empty_tuple.type = var e
// CHECK:STDOUT: %.loc16_9.1: type = splice_block %.loc16_9.3 [concrete = constants.%empty_tuple.type] {
@@ -1098,8 +1098,8 @@ import library "extern_api";
// CHECK:STDOUT: %Core.import = import Core
// CHECK:STDOUT: %default.import = import <none>
// CHECK:STDOUT: name_binding_decl {
// CHECK:STDOUT: %a.patt: %pattern_type.cb1 = binding_pattern a
// CHECK:STDOUT: %.loc52_1: %pattern_type.cb1 = var_pattern %a.patt
// CHECK:STDOUT: %a.patt: %pattern_type.cb1 = binding_pattern a [concrete]
// CHECK:STDOUT: %.loc52_1: %pattern_type.cb1 = var_pattern %a.patt [concrete]
// CHECK:STDOUT: }
// CHECK:STDOUT: %a.var: ref %empty_tuple.type = var a
// CHECK:STDOUT: %.loc52_9.1: type = splice_block %.loc52_9.3 [concrete = constants.%empty_tuple.type] {
@@ -1108,8 +1108,8 @@ import library "extern_api";
// CHECK:STDOUT: }
// CHECK:STDOUT: %a: ref %empty_tuple.type = bind_name a, %a.var
// CHECK:STDOUT: name_binding_decl {
// CHECK:STDOUT: %b.patt: %pattern_type.7ce = binding_pattern b
// CHECK:STDOUT: %.loc53_1: %pattern_type.7ce = var_pattern %b.patt
// CHECK:STDOUT: %b.patt: %pattern_type.7ce = binding_pattern b [concrete]
// CHECK:STDOUT: %.loc53_1: %pattern_type.7ce = var_pattern %b.patt [concrete]
// CHECK:STDOUT: }
// CHECK:STDOUT: %b.var: ref %i32 = var b
// CHECK:STDOUT: %.loc53_8: type = splice_block %i32.loc53 [concrete = constants.%i32] {
@@ -1118,8 +1118,8 @@ import library "extern_api";
// CHECK:STDOUT: }
// CHECK:STDOUT: %b: ref %i32 = bind_name b, %b.var
// CHECK:STDOUT: name_binding_decl {
// CHECK:STDOUT: %c.patt: %pattern_type.688 = binding_pattern c
// CHECK:STDOUT: %.loc54_1: %pattern_type.688 = var_pattern %c.patt
// CHECK:STDOUT: %c.patt: %pattern_type.688 = binding_pattern c [concrete]
// CHECK:STDOUT: %.loc54_1: %pattern_type.688 = var_pattern %c.patt [concrete]
// CHECK:STDOUT: }
// CHECK:STDOUT: %c.var: ref %struct_type.c = var c
// CHECK:STDOUT: %.loc54_16: type = splice_block %struct_type.c [concrete = constants.%struct_type.c] {
@@ -1129,8 +1129,8 @@ import library "extern_api";
// CHECK:STDOUT: }
// CHECK:STDOUT: %c: ref %struct_type.c = bind_name c, %c.var
// CHECK:STDOUT: name_binding_decl {
// CHECK:STDOUT: %d.patt: %pattern_type.cb1 = binding_pattern d
// CHECK:STDOUT: %.loc55_1: %pattern_type.cb1 = var_pattern %d.patt
// CHECK:STDOUT: %d.patt: %pattern_type.cb1 = binding_pattern d [concrete]
// CHECK:STDOUT: %.loc55_1: %pattern_type.cb1 = var_pattern %d.patt [concrete]
// CHECK:STDOUT: }
// CHECK:STDOUT: %d.var: ref %empty_tuple.type = var d
// CHECK:STDOUT: %.loc55_9.1: type = splice_block %.loc55_9.3 [concrete = constants.%empty_tuple.type] {
@@ -1139,8 +1139,8 @@ import library "extern_api";
// CHECK:STDOUT: }
// CHECK:STDOUT: %d: ref %empty_tuple.type = bind_name d, %d.var
// CHECK:STDOUT: name_binding_decl {
// CHECK:STDOUT: %e.patt: %pattern_type.cb1 = binding_pattern e
// CHECK:STDOUT: %.loc56_1: %pattern_type.cb1 = var_pattern %e.patt
// CHECK:STDOUT: %e.patt: %pattern_type.cb1 = binding_pattern e [concrete]
// CHECK:STDOUT: %.loc56_1: %pattern_type.cb1 = var_pattern %e.patt [concrete]
// CHECK:STDOUT: }
// CHECK:STDOUT: %e.var: ref %empty_tuple.type = var e
// CHECK:STDOUT: %.loc56_9.1: type = splice_block %.loc56_9.3 [concrete = constants.%empty_tuple.type] {
@@ -1273,8 +1273,8 @@ import library "extern_api";
// CHECK:STDOUT: %Core.import = import Core
// CHECK:STDOUT: %default.import = import <none>
// CHECK:STDOUT: name_binding_decl {
// CHECK:STDOUT: %a.patt: %pattern_type.cb1 = binding_pattern a
// CHECK:STDOUT: %.loc52_1: %pattern_type.cb1 = var_pattern %a.patt
// CHECK:STDOUT: %a.patt: %pattern_type.cb1 = binding_pattern a [concrete]
// CHECK:STDOUT: %.loc52_1: %pattern_type.cb1 = var_pattern %a.patt [concrete]
// CHECK:STDOUT: }
// CHECK:STDOUT: %a.var: ref %empty_tuple.type = var a
// CHECK:STDOUT: %.loc52_9.1: type = splice_block %.loc52_9.3 [concrete = constants.%empty_tuple.type] {
@@ -1283,8 +1283,8 @@ import library "extern_api";
// CHECK:STDOUT: }
// CHECK:STDOUT: %a: ref %empty_tuple.type = bind_name a, %a.var
// CHECK:STDOUT: name_binding_decl {
// CHECK:STDOUT: %b.patt: %pattern_type.7ce = binding_pattern b
// CHECK:STDOUT: %.loc53_1: %pattern_type.7ce = var_pattern %b.patt
// CHECK:STDOUT: %b.patt: %pattern_type.7ce = binding_pattern b [concrete]
// CHECK:STDOUT: %.loc53_1: %pattern_type.7ce = var_pattern %b.patt [concrete]
// CHECK:STDOUT: }
// CHECK:STDOUT: %b.var: ref %i32 = var b
// CHECK:STDOUT: %.loc53_8: type = splice_block %i32.loc53 [concrete = constants.%i32] {
@@ -1293,8 +1293,8 @@ import library "extern_api";
// CHECK:STDOUT: }
// CHECK:STDOUT: %b: ref %i32 = bind_name b, %b.var
// CHECK:STDOUT: name_binding_decl {
// CHECK:STDOUT: %c.patt: %pattern_type.688 = binding_pattern c
// CHECK:STDOUT: %.loc54_1: %pattern_type.688 = var_pattern %c.patt
// CHECK:STDOUT: %c.patt: %pattern_type.688 = binding_pattern c [concrete]
// CHECK:STDOUT: %.loc54_1: %pattern_type.688 = var_pattern %c.patt [concrete]
// CHECK:STDOUT: }
// CHECK:STDOUT: %c.var: ref %struct_type.c = var c
// CHECK:STDOUT: %.loc54_16: type = splice_block %struct_type.c [concrete = constants.%struct_type.c] {
@@ -1304,8 +1304,8 @@ import library "extern_api";
// CHECK:STDOUT: }
// CHECK:STDOUT: %c: ref %struct_type.c = bind_name c, %c.var
// CHECK:STDOUT: name_binding_decl {
// CHECK:STDOUT: %d.patt: %pattern_type.cb1 = binding_pattern d
// CHECK:STDOUT: %.loc55_1: %pattern_type.cb1 = var_pattern %d.patt
// CHECK:STDOUT: %d.patt: %pattern_type.cb1 = binding_pattern d [concrete]
// CHECK:STDOUT: %.loc55_1: %pattern_type.cb1 = var_pattern %d.patt [concrete]
// CHECK:STDOUT: }
// CHECK:STDOUT: %d.var: ref %empty_tuple.type = var d
// CHECK:STDOUT: %.loc55_9.1: type = splice_block %.loc55_9.3 [concrete = constants.%empty_tuple.type] {
@@ -1314,8 +1314,8 @@ import library "extern_api";
// CHECK:STDOUT: }
// CHECK:STDOUT: %d: ref %empty_tuple.type = bind_name d, %d.var
// CHECK:STDOUT: name_binding_decl {
// CHECK:STDOUT: %e.patt: %pattern_type.cb1 = binding_pattern e
// CHECK:STDOUT: %.loc56_1: %pattern_type.cb1 = var_pattern %e.patt
// CHECK:STDOUT: %e.patt: %pattern_type.cb1 = binding_pattern e [concrete]
// CHECK:STDOUT: %.loc56_1: %pattern_type.cb1 = var_pattern %e.patt [concrete]
// CHECK:STDOUT: }
// CHECK:STDOUT: %e.var: ref %empty_tuple.type = var e
// CHECK:STDOUT: %.loc56_9.1: type = splice_block %.loc56_9.3 [concrete = constants.%empty_tuple.type] {
@@ -129,32 +129,32 @@ fn CallFAndGIncomplete() {
// CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {}
// CHECK:STDOUT: %D.decl.loc5: type = class_decl @D [concrete = constants.%D] {} {}
// CHECK:STDOUT: %ReturnCUnused.decl: %ReturnCUnused.type = fn_decl @ReturnCUnused [concrete = constants.%ReturnCUnused] {
// CHECK:STDOUT: %return.patt: %pattern_type.c48 = return_slot_pattern
// CHECK:STDOUT: %return.param_patt: %pattern_type.c48 = out_param_pattern %return.patt, call_param0
// CHECK:STDOUT: %return.patt: %pattern_type.c48 = return_slot_pattern [concrete]
// CHECK:STDOUT: %return.param_patt: %pattern_type.c48 = out_param_pattern %return.patt, call_param0 [concrete]
// CHECK:STDOUT: } {
// CHECK:STDOUT: %C.ref: type = name_ref C, file.%C.decl [concrete = constants.%C]
// CHECK:STDOUT: %return.param: ref %C = out_param call_param0
// CHECK:STDOUT: %return: ref %C = return_slot %return.param
// CHECK:STDOUT: }
// CHECK:STDOUT: %ReturnCUsed.decl: %ReturnCUsed.type = fn_decl @ReturnCUsed [concrete = constants.%ReturnCUsed] {
// CHECK:STDOUT: %return.patt: %pattern_type.c48 = return_slot_pattern
// CHECK:STDOUT: %return.param_patt: %pattern_type.c48 = out_param_pattern %return.patt, call_param0
// CHECK:STDOUT: %return.patt: %pattern_type.c48 = return_slot_pattern [concrete]
// CHECK:STDOUT: %return.param_patt: %pattern_type.c48 = out_param_pattern %return.patt, call_param0 [concrete]
// CHECK:STDOUT: } {
// CHECK:STDOUT: %C.ref: type = name_ref C, file.%C.decl [concrete = constants.%C]
// CHECK:STDOUT: %return.param: ref %C = out_param call_param0
// CHECK:STDOUT: %return: ref %C = return_slot %return.param
// CHECK:STDOUT: }
// CHECK:STDOUT: %ReturnDUnused.decl: %ReturnDUnused.type = fn_decl @ReturnDUnused [concrete = constants.%ReturnDUnused] {
// CHECK:STDOUT: %return.patt: %pattern_type.510 = return_slot_pattern
// CHECK:STDOUT: %return.param_patt: %pattern_type.510 = out_param_pattern %return.patt, call_param0
// CHECK:STDOUT: %return.patt: %pattern_type.510 = return_slot_pattern [concrete]
// CHECK:STDOUT: %return.param_patt: %pattern_type.510 = out_param_pattern %return.patt, call_param0 [concrete]
// CHECK:STDOUT: } {
// CHECK:STDOUT: %D.ref: type = name_ref D, file.%D.decl.loc5 [concrete = constants.%D]
// CHECK:STDOUT: %return.param: ref %D = out_param call_param0
// CHECK:STDOUT: %return: ref %D = return_slot %return.param
// CHECK:STDOUT: }
// CHECK:STDOUT: %ReturnDUsed.decl: %ReturnDUsed.type = fn_decl @ReturnDUsed [concrete = constants.%ReturnDUsed] {
// CHECK:STDOUT: %return.patt: %pattern_type.510 = return_slot_pattern
// CHECK:STDOUT: %return.param_patt: %pattern_type.510 = out_param_pattern %return.patt, call_param0
// CHECK:STDOUT: %return.patt: %pattern_type.510 = return_slot_pattern [concrete]
// CHECK:STDOUT: %return.param_patt: %pattern_type.510 = out_param_pattern %return.patt, call_param0 [concrete]
// CHECK:STDOUT: } {
// CHECK:STDOUT: %D.ref: type = name_ref D, file.%D.decl.loc5 [concrete = constants.%D]
// CHECK:STDOUT: %return.param: ref %D = out_param call_param0
@@ -95,8 +95,8 @@ var f: () = F();
// CHECK:STDOUT: }
// CHECK:STDOUT: %default.import = import <none>
// CHECK:STDOUT: name_binding_decl {
// CHECK:STDOUT: %f.patt: %pattern_type = binding_pattern f
// CHECK:STDOUT: %.loc6_1: %pattern_type = var_pattern %f.patt
// CHECK:STDOUT: %f.patt: %pattern_type = binding_pattern f [concrete]
// CHECK:STDOUT: %.loc6_1: %pattern_type = var_pattern %f.patt [concrete]
// CHECK:STDOUT: }
// CHECK:STDOUT: %f.var: ref %empty_tuple.type = var f
// CHECK:STDOUT: %.loc6_9.1: type = splice_block %.loc6_9.3 [concrete = constants.%empty_tuple.type] {
@@ -117,8 +117,8 @@ extern library "basic" fn F();
// CHECK:STDOUT: }
// CHECK:STDOUT: %default.import = import <none>
// CHECK:STDOUT: name_binding_decl {
// CHECK:STDOUT: %x.patt: %pattern_type = binding_pattern x
// CHECK:STDOUT: %.loc4_1: %pattern_type = var_pattern %x.patt
// CHECK:STDOUT: %x.patt: %pattern_type = binding_pattern x [concrete]
// CHECK:STDOUT: %.loc4_1: %pattern_type = var_pattern %x.patt [concrete]
// CHECK:STDOUT: }
// CHECK:STDOUT: %x.var: ref %empty_tuple.type = var x
// CHECK:STDOUT: %.loc4_9.1: type = splice_block %.loc4_9.3 [concrete = constants.%empty_tuple.type] {
@@ -195,8 +195,8 @@ extern library "basic" fn F();
// CHECK:STDOUT: class @C {
// CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] {} {}
// CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] {
// CHECK:STDOUT: %self.patt: %pattern_type = binding_pattern self
// CHECK:STDOUT: %self.param_patt: %pattern_type = value_param_pattern %self.patt, call_param0
// CHECK:STDOUT: %self.patt: %pattern_type = binding_pattern self [concrete]
// CHECK:STDOUT: %self.param_patt: %pattern_type = value_param_pattern %self.patt, call_param0 [concrete]
// CHECK:STDOUT: } {
// CHECK:STDOUT: %self.param: %C = value_param call_param0
// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C]
@@ -30,13 +30,13 @@ fn F((a: {}, b: {}), c: {});
// CHECK:STDOUT: .F = %F.decl
// CHECK:STDOUT: }
// CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] {
// CHECK:STDOUT: %a.patt: %pattern_type.a96 = binding_pattern a
// CHECK:STDOUT: %a.param_patt: %pattern_type.a96 = value_param_pattern %a.patt, call_param<none>
// CHECK:STDOUT: %b.patt: %pattern_type.a96 = binding_pattern b
// CHECK:STDOUT: %b.param_patt: %pattern_type.a96 = value_param_pattern %b.patt, call_param<none>
// CHECK:STDOUT: %.loc15_19: %pattern_type.de4 = tuple_pattern (%a.param_patt, %b.param_patt)
// CHECK:STDOUT: %c.patt: %pattern_type.a96 = binding_pattern c
// CHECK:STDOUT: %c.param_patt: %pattern_type.a96 = value_param_pattern %c.patt, call_param0
// CHECK:STDOUT: %a.patt: %pattern_type.a96 = binding_pattern a [concrete]
// CHECK:STDOUT: %a.param_patt: %pattern_type.a96 = value_param_pattern %a.patt, call_param<none> [concrete]
// CHECK:STDOUT: %b.patt: %pattern_type.a96 = binding_pattern b [concrete]
// CHECK:STDOUT: %b.param_patt: %pattern_type.a96 = value_param_pattern %b.patt, call_param<none> [concrete]
// CHECK:STDOUT: %.loc15_19: %pattern_type.de4 = tuple_pattern (%a.param_patt, %b.param_patt) [concrete]
// CHECK:STDOUT: %c.patt: %pattern_type.a96 = binding_pattern c [concrete]
// CHECK:STDOUT: %c.param_patt: %pattern_type.a96 = value_param_pattern %c.patt, call_param0 [concrete]
// CHECK:STDOUT: } {
// CHECK:STDOUT: %c.param: %empty_struct_type = value_param call_param0
// CHECK:STDOUT: %.loc15_26.1: type = splice_block %.loc15_26.3 [concrete = constants.%empty_struct_type] {
@@ -90,8 +90,8 @@ fn E() {}
// CHECK:STDOUT: %A.decl.loc11: %A.type = fn_decl @A [concrete = constants.%A] {} {}
// CHECK:STDOUT: %A.decl.loc19: %A.type = fn_decl @A [concrete = constants.%A] {} {}
// CHECK:STDOUT: %B.decl.loc21: %B.type = fn_decl @B [concrete = constants.%B] {
// CHECK:STDOUT: %x.patt: %pattern_type = binding_pattern x
// CHECK:STDOUT: %x.param_patt: %pattern_type = value_param_pattern %x.patt, call_param0
// CHECK:STDOUT: %x.patt: %pattern_type = binding_pattern x [concrete]
// CHECK:STDOUT: %x.param_patt: %pattern_type = value_param_pattern %x.patt, call_param0 [concrete]
// CHECK:STDOUT: } {
// CHECK:STDOUT: %x.param.loc21: %empty_tuple.type = value_param call_param0
// CHECK:STDOUT: %.loc21_10.1: type = splice_block %.loc21_10.3 [concrete = constants.%empty_tuple.type] {
@@ -101,8 +101,8 @@ fn E() {}
// CHECK:STDOUT: %x.loc21: %empty_tuple.type = bind_name x, %x.param.loc21
// CHECK:STDOUT: }
// CHECK:STDOUT: %B.decl.loc29: %B.type = fn_decl @B [concrete = constants.%B] {
// CHECK:STDOUT: %x.patt: %pattern_type = binding_pattern x
// CHECK:STDOUT: %x.param_patt: %pattern_type = value_param_pattern %x.patt, call_param0
// CHECK:STDOUT: %x.patt: %pattern_type = binding_pattern x [concrete]
// CHECK:STDOUT: %x.param_patt: %pattern_type = value_param_pattern %x.patt, call_param0 [concrete]
// CHECK:STDOUT: } {
// CHECK:STDOUT: %x.param.loc29: %empty_tuple.type = value_param call_param0
// CHECK:STDOUT: %.loc29_10.1: type = splice_block %.loc29_10.3 [concrete = constants.%empty_tuple.type] {
@@ -113,8 +113,8 @@ fn E() {}
// CHECK:STDOUT: }
// CHECK:STDOUT: %C.decl.loc31: %C.type.de0bfe.1 = fn_decl @C.1 [concrete = constants.%C.1b0370.1] {} {}
// CHECK:STDOUT: %C.decl.loc39: %C.type.de0bfe.2 = fn_decl @C.2 [concrete = constants.%C.1b0370.2] {
// CHECK:STDOUT: %x.patt: %pattern_type = binding_pattern x
// CHECK:STDOUT: %x.param_patt: %pattern_type = value_param_pattern %x.patt, call_param0
// CHECK:STDOUT: %x.patt: %pattern_type = binding_pattern x [concrete]
// CHECK:STDOUT: %x.param_patt: %pattern_type = value_param_pattern %x.patt, call_param0 [concrete]
// CHECK:STDOUT: } {
// CHECK:STDOUT: %x.param: %empty_tuple.type = value_param call_param0
// CHECK:STDOUT: %.loc39_10.1: type = splice_block %.loc39_10.3 [concrete = constants.%empty_tuple.type] {
@@ -126,8 +126,8 @@ fn A {
// CHECK:STDOUT: .A = %A.decl
// CHECK:STDOUT: }
// CHECK:STDOUT: %A.decl: %A.type = fn_decl @A [concrete = constants.%A] {
// CHECK:STDOUT: %return.patt: %pattern_type = return_slot_pattern
// CHECK:STDOUT: %return.param_patt: %pattern_type = out_param_pattern %return.patt, call_param0
// CHECK:STDOUT: %return.patt: %pattern_type = return_slot_pattern [concrete]
// CHECK:STDOUT: %return.param_patt: %pattern_type = out_param_pattern %return.patt, call_param0 [concrete]
// CHECK:STDOUT: } {
// CHECK:STDOUT: %.loc7_10.1: %empty_tuple.type = tuple_literal ()
// CHECK:STDOUT: %.loc7_10.2: type = converted %.loc7_10.1, constants.%empty_tuple.type [concrete = constants.%empty_tuple.type]
@@ -152,8 +152,8 @@ fn A {
// CHECK:STDOUT: .A = %A.decl
// CHECK:STDOUT: }
// CHECK:STDOUT: %A.decl: %A.type = fn_decl @A [concrete = constants.%A] {
// CHECK:STDOUT: %return.patt: %pattern_type = return_slot_pattern
// CHECK:STDOUT: %return.param_patt: %pattern_type = out_param_pattern %return.patt, call_param0
// CHECK:STDOUT: %return.patt: %pattern_type = return_slot_pattern [concrete]
// CHECK:STDOUT: %return.param_patt: %pattern_type = out_param_pattern %return.patt, call_param0 [concrete]
// CHECK:STDOUT: } {
// CHECK:STDOUT: %.loc7_12.1: %empty_tuple.type = tuple_literal ()
// CHECK:STDOUT: %.loc7_12.2: type = converted %.loc7_12.1, constants.%empty_tuple.type [concrete = constants.%empty_tuple.type]
@@ -40,8 +40,8 @@ fn G(a: i32);
// CHECK:STDOUT: }
// CHECK:STDOUT: %Core.import = import Core
// CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] {
// CHECK:STDOUT: %a.patt: %pattern_type.7ce = binding_pattern a
// CHECK:STDOUT: %a.param_patt: %pattern_type.7ce = value_param_pattern %a.patt, call_param0
// CHECK:STDOUT: %a.patt: %pattern_type.7ce = binding_pattern a [concrete]
// CHECK:STDOUT: %a.param_patt: %pattern_type.7ce = value_param_pattern %a.patt, call_param0 [concrete]
// CHECK:STDOUT: } {
// CHECK:STDOUT: %a.param: %i32 = value_param call_param0
// CHECK:STDOUT: %.loc11: type = splice_block %i32 [concrete = constants.%i32] {
@@ -51,8 +51,8 @@ fn G(a: i32);
// CHECK:STDOUT: %a: %i32 = bind_name a, %a.param
// CHECK:STDOUT: }
// CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] {
// CHECK:STDOUT: %a.patt: %pattern_type.7ce = binding_pattern a
// CHECK:STDOUT: %a.param_patt: %pattern_type.7ce = value_param_pattern %a.patt, call_param0
// CHECK:STDOUT: %a.patt: %pattern_type.7ce = binding_pattern a [concrete]
// CHECK:STDOUT: %a.param_patt: %pattern_type.7ce = value_param_pattern %a.patt, call_param0 [concrete]
// CHECK:STDOUT: } {
// CHECK:STDOUT: %a.param: %i32 = value_param call_param0
// CHECK:STDOUT: %.loc13: type = splice_block %i32 [concrete = constants.%i32] {