mirror of
https://github.com/carbon-language/carbon-lang.git
synced 2026-11-15 20:28:12 +00:00
Support for terse => function bodies (#7895)
Treat the function as having a `-> auto` return type. Reject calls to functions that still have a non-deduced `-> auto` return type, and rewrite the function to have the actual return type once it is known. Assisted-by: Gemini via Antigravity
This commit is contained in:
1 parent
d08805f1a6
commit
b766aa4d16
30 files changed
+1323
-322
No files matched your search
+296
-61
@@ -31,6 +31,21 @@ fn TestIdentity() {
|
||||
//@dump-sem-ir-end
|
||||
}
|
||||
|
||||
// --- terse_identity.carbon
|
||||
library "[[@TEST_NAME]]";
|
||||
|
||||
fn TestTerse() {
|
||||
//@dump-sem-ir-begin
|
||||
alias terse_id_i32 = fn (x: i32) => x;
|
||||
let unused e: i32 = terse_id_i32(42);
|
||||
let unused f: i32 = (fn (x: i32) => x)(10);
|
||||
//@dump-sem-ir-end
|
||||
}
|
||||
|
||||
//@dump-sem-ir-begin
|
||||
alias terse_id_fn = fn (x: i32) => x;
|
||||
//@dump-sem-ir-end
|
||||
|
||||
// --- generic_identity.carbon
|
||||
library "[[@TEST_NAME]]";
|
||||
|
||||
@@ -87,6 +102,15 @@ fn TestDefaultArgument() {
|
||||
let _: i32 = with_default(8);
|
||||
}
|
||||
|
||||
// --- terse_with_default_arguments.carbon
|
||||
library "[[@TEST_NAME]]";
|
||||
|
||||
fn TestTerseWithDefaultArgument() {
|
||||
alias terse_with_default = fn (x: i32 = 7) => x;
|
||||
let _: i32 = terse_with_default();
|
||||
let _: i32 = terse_with_default(8);
|
||||
}
|
||||
|
||||
// --- nested.carbon
|
||||
library "[[@TEST_NAME]]";
|
||||
|
||||
@@ -98,6 +122,14 @@ fn TestNested() {
|
||||
let _: i32 = outer();
|
||||
}
|
||||
|
||||
// --- terse_nested.carbon
|
||||
library "[[@TEST_NAME]]";
|
||||
|
||||
fn TestTerseNested() {
|
||||
alias terse_outer = fn () => (fn (x: i32) => x)(3);
|
||||
let _: i32 = terse_outer();
|
||||
}
|
||||
|
||||
// --- control_flow.carbon
|
||||
library "[[@TEST_NAME]]";
|
||||
|
||||
@@ -118,9 +150,11 @@ library "[[@TEST_NAME]]";
|
||||
fn PassToGeneric[F: type](unused f: F) {}
|
||||
|
||||
alias id_fn = fn (x: i32) -> i32 { return x; };
|
||||
alias terse_id_fn = fn (x: i32) => x;
|
||||
|
||||
fn TestAsGenericArgument() {
|
||||
PassToGeneric(id_fn);
|
||||
PassToGeneric(terse_id_fn);
|
||||
}
|
||||
|
||||
// --- as_template_argument.carbon
|
||||
@@ -154,6 +188,7 @@ library "[[@TEST_NAME]]";
|
||||
|
||||
class InClass {
|
||||
var field: i32 = (fn (x: i32) -> i32 { return x; })(1);
|
||||
var terse_field: i32 = (fn (x: i32) => x)(1);
|
||||
}
|
||||
|
||||
// --- fail_self.carbon
|
||||
@@ -194,6 +229,12 @@ fn Outer() -> i32 {
|
||||
// CHECK:STDERR: fail_return.carbon:[[@LINE+2]]:4-10: note: there was no return type provided [ReturnTypeOmittedNote]
|
||||
// CHECK:STDERR:
|
||||
(fn () { return 1; });
|
||||
// CHECK:STDERR: fail_return.carbon:[[@LINE+2]]:10-15: error: cannot specify a return type with `=>` [ReturnTypeInTerseFunction]
|
||||
// CHECK:STDERR:
|
||||
(fn () -> i32 => 0);
|
||||
// CHECK:STDERR: fail_return.carbon:[[@LINE+2]]:20-36: error: cannot specify a return form with `=>` [ReturnTypeInTerseFunction]
|
||||
// CHECK:STDERR:
|
||||
(fn (ref x: i32) ->? form(ref i32) => x);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -213,6 +254,12 @@ fn F() {
|
||||
// CHECK:STDERR:
|
||||
return y;
|
||||
});
|
||||
// CHECK:STDERR: fail_unused.carbon:[[@LINE+5]]:8-13: warning: binding `x` unused [UnusedBinding]
|
||||
// CHECK:STDERR:
|
||||
// CHECK:STDERR: fail_unused.carbon:[[@LINE+3]]:23-28: error: variable `y` marked `unused` but used [UnusedButUsed]
|
||||
// CHECK:STDERR: fail_unused.carbon:[[@LINE+2]]:34: note: usage here [UnusedButUsedHere]
|
||||
// CHECK:STDERR:
|
||||
(fn (x: i32, unused y: i32) => y);
|
||||
}
|
||||
|
||||
// --- fail_break_continue.carbon
|
||||
@@ -260,6 +307,10 @@ fn F() {
|
||||
// CHECK:STDERR: fail_incomplete_type.carbon:[[@LINE+2]]:25: error: missing `return` at end of function with declared return type [MissingReturnStatement]
|
||||
// CHECK:STDERR:
|
||||
(fn () -> Incomplete {});
|
||||
// CHECK:STDERR: fail_incomplete_type.carbon:[[@LINE+3]]:27-28: error: function returns incomplete type `Incomplete` [IncompleteTypeInFunctionReturnType]
|
||||
// CHECK:STDERR: fail_incomplete_type.carbon:[[@LINE-14]]:1-17: note: class was forward declared here [ClassForwardDeclaredHere]
|
||||
// CHECK:STDERR:
|
||||
(fn (p: Incomplete*) => *p);
|
||||
}
|
||||
|
||||
// --- fail_conversion.carbon
|
||||
@@ -282,15 +333,16 @@ fn F() {
|
||||
// CHECK:STDERR: fail_todo_positional_params.carbon:[[@LINE+2]]:4-14: error: semantics TODO: `function with positional parameters` [SemanticsTodo]
|
||||
// CHECK:STDERR:
|
||||
(fn -> i32 { return 0; });
|
||||
// CHECK:STDERR: fail_todo_positional_params.carbon:[[@LINE+2]]:4-8: error: semantics TODO: `function with positional parameters` [SemanticsTodo]
|
||||
// CHECK:STDERR:
|
||||
(fn => 0);
|
||||
}
|
||||
|
||||
// --- fail_todo_terse_body.carbon
|
||||
// --- dependent_terse_return.carbon
|
||||
library "[[@TEST_NAME]]";
|
||||
|
||||
fn F() {
|
||||
// CHECK:STDERR: fail_todo_terse_body.carbon:[[@LINE+2]]:4-19: error: semantics TODO: `terse lambda body` [SemanticsTodo]
|
||||
// CHECK:STDERR:
|
||||
(fn (x: i32) => x);
|
||||
(fn [T: Core.Copy](x: T) => x);
|
||||
}
|
||||
|
||||
// CHECK:STDOUT: --- empty.carbon
|
||||
@@ -462,6 +514,189 @@ fn F() {
|
||||
// CHECK:STDOUT: return %Int.as.Copy.impl.Op.call
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: --- terse_identity.carbon
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: constants {
|
||||
// CHECK:STDOUT: type: type = facet_type <type> [concrete]
|
||||
// CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete]
|
||||
// CHECK:STDOUT: %N: Core.IntLiteral = symbolic_binding N, 0 [symbolic]
|
||||
// CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete]
|
||||
// CHECK:STDOUT: %pattern_type.d94: type = pattern_type %i32 [concrete]
|
||||
// CHECK:STDOUT: %x.param_patt: %pattern_type.d94 = value_param_pattern [concrete]
|
||||
// CHECK:STDOUT: %x.patt: %pattern_type.d94 = wrapper_binding_pattern x, %x.param_patt [concrete]
|
||||
// CHECK:STDOUT: %fn.type.975: type = fn_type @fn.loc5 [concrete]
|
||||
// CHECK:STDOUT: %fn.460: %fn.type.975 = struct_value () [concrete]
|
||||
// CHECK:STDOUT: %.0b3: Core.Form = init_form %i32 [concrete]
|
||||
// CHECK:STDOUT: %return.param_patt.299: %pattern_type.d94 = out_param_pattern [concrete]
|
||||
// CHECK:STDOUT: %return.patt.6fa: %pattern_type.d94 = return_slot_pattern %return.param_patt.299, %i32 [concrete]
|
||||
// CHECK:STDOUT: %Copy.type: type = facet_type <@Copy> [concrete]
|
||||
// CHECK:STDOUT: %Int.as.Copy.impl.Op.type.a1d: type = fn_type @Int.as.Copy.impl.Op, @Int.as.Copy.impl(%N) [symbolic]
|
||||
// CHECK:STDOUT: %Int.as.Copy.impl.Op.3c1: %Int.as.Copy.impl.Op.type.a1d = struct_value () [symbolic]
|
||||
// CHECK:STDOUT: %Copy.impl_witness.8af: <witness> = impl_witness imports.%Copy.impl_witness_table.f44, @Int.as.Copy.impl(%int_32) [concrete]
|
||||
// CHECK:STDOUT: %Int.as.Copy.impl.Op.type.648: type = fn_type @Int.as.Copy.impl.Op, @Int.as.Copy.impl(%int_32) [concrete]
|
||||
// CHECK:STDOUT: %Int.as.Copy.impl.Op.cae: %Int.as.Copy.impl.Op.type.648 = struct_value () [concrete]
|
||||
// CHECK:STDOUT: %Copy.facet: %Copy.type = facet_value %i32, (%Copy.impl_witness.8af) [concrete]
|
||||
// CHECK:STDOUT: %Copy.WithSelf.Op.type.f76: type = fn_type @Copy.WithSelf.Op, @Copy.WithSelf(%Copy.facet) [concrete]
|
||||
// CHECK:STDOUT: %.2b9: type = fn_type_with_self_type %Copy.WithSelf.Op.type.f76, %Copy.facet [concrete]
|
||||
// CHECK:STDOUT: %Int.as.Copy.impl.Op.specific_fn: <specific function> = specific_function %Int.as.Copy.impl.Op.cae, @Int.as.Copy.impl.Op(%int_32) [concrete]
|
||||
// CHECK:STDOUT: %e.patt: %pattern_type.d94 = value_binding_pattern e [concrete]
|
||||
// CHECK:STDOUT: %int_42.20e: Core.IntLiteral = int_value 42 [concrete]
|
||||
// CHECK:STDOUT: %ImplicitAs.type.6b0: type = facet_type <@ImplicitAs, @ImplicitAs(%i32)> [concrete]
|
||||
// CHECK:STDOUT: %To: Core.IntLiteral = symbolic_binding To, 0 [symbolic]
|
||||
// CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.type.3c6: type = fn_type @Core.IntLiteral.as.ImplicitAs.impl.Convert, @Core.IntLiteral.as.ImplicitAs.impl(%To) [symbolic]
|
||||
// CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.6f2: %Core.IntLiteral.as.ImplicitAs.impl.Convert.type.3c6 = struct_value () [symbolic]
|
||||
// CHECK:STDOUT: %ImplicitAs.impl_witness.d73: <witness> = impl_witness imports.%ImplicitAs.impl_witness_table.f53, @Core.IntLiteral.as.ImplicitAs.impl(%int_32) [concrete]
|
||||
// CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.type.766: type = fn_type @Core.IntLiteral.as.ImplicitAs.impl.Convert, @Core.IntLiteral.as.ImplicitAs.impl(%int_32) [concrete]
|
||||
// CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.f60: %Core.IntLiteral.as.ImplicitAs.impl.Convert.type.766 = struct_value () [concrete]
|
||||
// CHECK:STDOUT: %ImplicitAs.facet: %ImplicitAs.type.6b0 = facet_value Core.IntLiteral, (%ImplicitAs.impl_witness.d73) [concrete]
|
||||
// CHECK:STDOUT: %ImplicitAs.WithSelf.Convert.type.58f: type = fn_type @ImplicitAs.WithSelf.Convert, @ImplicitAs.WithSelf(%i32, %ImplicitAs.facet) [concrete]
|
||||
// CHECK:STDOUT: %.33a: type = fn_type_with_self_type %ImplicitAs.WithSelf.Convert.type.58f, %ImplicitAs.facet [concrete]
|
||||
// CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.bound.81c: <bound method> = bound_method %int_42.20e, %Core.IntLiteral.as.ImplicitAs.impl.Convert.f60 [concrete]
|
||||
// CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn: <specific function> = specific_function %Core.IntLiteral.as.ImplicitAs.impl.Convert.f60, @Core.IntLiteral.as.ImplicitAs.impl.Convert(%int_32) [concrete]
|
||||
// CHECK:STDOUT: %bound_method.98e: <bound method> = bound_method %int_42.20e, %Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn [concrete]
|
||||
// CHECK:STDOUT: %int_42.db5: %i32 = int_value 42 [concrete]
|
||||
// CHECK:STDOUT: %f.patt: %pattern_type.d94 = value_binding_pattern f [concrete]
|
||||
// CHECK:STDOUT: %fn.type.aea: type = fn_type @fn.loc7 [concrete]
|
||||
// CHECK:STDOUT: %fn.4d2: %fn.type.aea = struct_value () [concrete]
|
||||
// CHECK:STDOUT: %int_10.64f: Core.IntLiteral = int_value 10 [concrete]
|
||||
// CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.bound.02d: <bound method> = bound_method %int_10.64f, %Core.IntLiteral.as.ImplicitAs.impl.Convert.f60 [concrete]
|
||||
// CHECK:STDOUT: %bound_method.002: <bound method> = bound_method %int_10.64f, %Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn [concrete]
|
||||
// CHECK:STDOUT: %int_10.6a3: %i32 = int_value 10 [concrete]
|
||||
// CHECK:STDOUT: %fn.type.d0d: type = fn_type @fn.loc12 [concrete]
|
||||
// CHECK:STDOUT: %fn.5b0: %fn.type.d0d = struct_value () [concrete]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: imports {
|
||||
// CHECK:STDOUT: %Core.import_ref.72f: @Int.as.Copy.impl.%Int.as.Copy.impl.Op.type (%Int.as.Copy.impl.Op.type.a1d) = import_ref Core//prelude/parts/int, loc{{\d+_\d+}}, loaded [symbolic = @Int.as.Copy.impl.%Int.as.Copy.impl.Op (constants.%Int.as.Copy.impl.Op.3c1)]
|
||||
// CHECK:STDOUT: %Copy.impl_witness_table.f44 = impl_witness_table (%Core.import_ref.72f), @Int.as.Copy.impl [concrete]
|
||||
// CHECK:STDOUT: %Core.import_ref.e47: @Core.IntLiteral.as.ImplicitAs.impl.%Core.IntLiteral.as.ImplicitAs.impl.Convert.type (%Core.IntLiteral.as.ImplicitAs.impl.Convert.type.3c6) = import_ref Core//prelude/parts/int, loc{{\d+_\d+}}, loaded [symbolic = @Core.IntLiteral.as.ImplicitAs.impl.%Core.IntLiteral.as.ImplicitAs.impl.Convert (constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.6f2)]
|
||||
// CHECK:STDOUT: %ImplicitAs.impl_witness_table.f53 = impl_witness_table (%Core.import_ref.e47), @Core.IntLiteral.as.ImplicitAs.impl [concrete]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: file {
|
||||
// CHECK:STDOUT: %fn.decl: %fn.type.d0d = fn_decl @fn.loc12 [concrete = constants.%fn.5b0] {
|
||||
// CHECK:STDOUT: %x.param_patt: %pattern_type.d94 = value_param_pattern [concrete = constants.%x.param_patt]
|
||||
// CHECK:STDOUT: %x.patt: %pattern_type.d94 = wrapper_binding_pattern x, %x.param_patt [concrete = constants.%x.patt]
|
||||
// CHECK:STDOUT: %return.param_patt: %pattern_type.d94 = out_param_pattern [concrete = constants.%return.param_patt.299]
|
||||
// CHECK:STDOUT: %return.patt: %pattern_type.d94 = return_slot_pattern %return.param_patt, %i32.loc12_36 [concrete = constants.%return.patt.6fa]
|
||||
// CHECK:STDOUT: } {
|
||||
// CHECK:STDOUT: %x.param: %i32 = value_param call_param0
|
||||
// CHECK:STDOUT: %i32.loc12_28: type = type_literal constants.%i32 [concrete = constants.%i32]
|
||||
// CHECK:STDOUT: %x: %i32 = wrapper_binding x, %x.param
|
||||
// CHECK:STDOUT: %i32.loc12_36: type = type_literal constants.%i32 [concrete = constants.%i32]
|
||||
// CHECK:STDOUT: %.loc12_36.2: Core.Form = init_form %i32.loc12_36 [concrete = constants.%.0b3]
|
||||
// CHECK:STDOUT: %return.param: ref %i32 = out_param call_param1
|
||||
// CHECK:STDOUT: %return: ref %i32 = return_slot %return.param
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %terse_id_fn: %fn.type.d0d = alias_binding terse_id_fn, %fn.decl [concrete = constants.%fn.5b0]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn @TestTerse() {
|
||||
// CHECK:STDOUT: !entry:
|
||||
// CHECK:STDOUT: %fn.decl.loc5: %fn.type.975 = fn_decl @fn.loc5 [concrete = constants.%fn.460] {
|
||||
// CHECK:STDOUT: %x.param_patt: %pattern_type.d94 = value_param_pattern [concrete = constants.%x.param_patt]
|
||||
// CHECK:STDOUT: %x.patt: %pattern_type.d94 = wrapper_binding_pattern x, %x.param_patt [concrete = constants.%x.patt]
|
||||
// CHECK:STDOUT: %return.param_patt: %pattern_type.d94 = out_param_pattern [concrete = constants.%return.param_patt.299]
|
||||
// CHECK:STDOUT: %return.patt: %pattern_type.d94 = return_slot_pattern %return.param_patt, %i32.loc5_39 [concrete = constants.%return.patt.6fa]
|
||||
// CHECK:STDOUT: } {
|
||||
// CHECK:STDOUT: %x.param: %i32 = value_param call_param0
|
||||
// CHECK:STDOUT: %i32.loc5_31: type = type_literal constants.%i32 [concrete = constants.%i32]
|
||||
// CHECK:STDOUT: %x: %i32 = wrapper_binding x, %x.param
|
||||
// CHECK:STDOUT: %i32.loc5_39: type = type_literal constants.%i32 [concrete = constants.%i32]
|
||||
// CHECK:STDOUT: %.loc5_39.2: Core.Form = init_form %i32.loc5_39 [concrete = constants.%.0b3]
|
||||
// CHECK:STDOUT: %return.param: ref %i32 = out_param call_param1
|
||||
// CHECK:STDOUT: %return: ref %i32 = return_slot %return.param
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %terse_id_i32: %fn.type.975 = alias_binding terse_id_i32, %fn.decl.loc5 [concrete = constants.%fn.460]
|
||||
// CHECK:STDOUT: %terse_id_i32.ref: %fn.type.975 = name_ref terse_id_i32, %terse_id_i32 [concrete = constants.%fn.460]
|
||||
// CHECK:STDOUT: %int_42: Core.IntLiteral = int_value 42 [concrete = constants.%int_42.20e]
|
||||
// CHECK:STDOUT: %impl.elem0.loc6: %.33a = impl_witness_access constants.%ImplicitAs.impl_witness.d73, element0 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.f60]
|
||||
// CHECK:STDOUT: %bound_method.loc6_36.1: <bound method> = bound_method %int_42, %impl.elem0.loc6 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.bound.81c]
|
||||
// CHECK:STDOUT: %specific_fn.loc6: <specific function> = specific_function %impl.elem0.loc6, @Core.IntLiteral.as.ImplicitAs.impl.Convert(constants.%int_32) [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn]
|
||||
// CHECK:STDOUT: %bound_method.loc6_36.2: <bound method> = bound_method %int_42, %specific_fn.loc6 [concrete = constants.%bound_method.98e]
|
||||
// CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc6: init %i32 = call %bound_method.loc6_36.2(%int_42) [concrete = constants.%int_42.db5]
|
||||
// CHECK:STDOUT: %.loc6_36.1: %i32 = value_of_initializer %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc6 [concrete = constants.%int_42.db5]
|
||||
// CHECK:STDOUT: %.loc6_36.2: %i32 = converted %int_42, %.loc6_36.1 [concrete = constants.%int_42.db5]
|
||||
// CHECK:STDOUT: %fn.call.loc6: init %i32 = call %terse_id_i32.ref(%.loc6_36.2)
|
||||
// CHECK:STDOUT: %.loc6_38.1: %i32 = value_of_initializer %fn.call.loc6
|
||||
// CHECK:STDOUT: %.loc6_38.2: %i32 = converted %fn.call.loc6, %.loc6_38.1
|
||||
// CHECK:STDOUT: %i32.loc6: type = type_literal constants.%i32 [concrete = constants.%i32]
|
||||
// CHECK:STDOUT: %e: %i32 = wrapper_binding e, %.loc6_38.2
|
||||
// CHECK:STDOUT: name_binding_decl {
|
||||
// CHECK:STDOUT: %e.patt: %pattern_type.d94 = value_binding_pattern e [concrete = constants.%e.patt]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %fn.decl.loc7: %fn.type.aea = fn_decl @fn.loc7 [concrete = constants.%fn.4d2] {
|
||||
// CHECK:STDOUT: %x.param_patt: %pattern_type.d94 = value_param_pattern [concrete = constants.%x.param_patt]
|
||||
// CHECK:STDOUT: %x.patt: %pattern_type.d94 = wrapper_binding_pattern x, %x.param_patt [concrete = constants.%x.patt]
|
||||
// CHECK:STDOUT: %return.param_patt: %pattern_type.d94 = out_param_pattern [concrete = constants.%return.param_patt.299]
|
||||
// CHECK:STDOUT: %return.patt: %pattern_type.d94 = return_slot_pattern %return.param_patt, %i32.loc7_39 [concrete = constants.%return.patt.6fa]
|
||||
// CHECK:STDOUT: } {
|
||||
// CHECK:STDOUT: %x.param: %i32 = value_param call_param0
|
||||
// CHECK:STDOUT: %i32.loc7_31: type = type_literal constants.%i32 [concrete = constants.%i32]
|
||||
// CHECK:STDOUT: %x: %i32 = wrapper_binding x, %x.param
|
||||
// CHECK:STDOUT: %i32.loc7_39: type = type_literal constants.%i32 [concrete = constants.%i32]
|
||||
// CHECK:STDOUT: %.loc7_39.2: Core.Form = init_form %i32.loc7_39 [concrete = constants.%.0b3]
|
||||
// CHECK:STDOUT: %return.param: ref %i32 = out_param call_param1
|
||||
// CHECK:STDOUT: %return: ref %i32 = return_slot %return.param
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %int_10: Core.IntLiteral = int_value 10 [concrete = constants.%int_10.64f]
|
||||
// CHECK:STDOUT: %impl.elem0.loc7: %.33a = impl_witness_access constants.%ImplicitAs.impl_witness.d73, element0 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.f60]
|
||||
// CHECK:STDOUT: %bound_method.loc7_42.1: <bound method> = bound_method %int_10, %impl.elem0.loc7 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.bound.02d]
|
||||
// CHECK:STDOUT: %specific_fn.loc7: <specific function> = specific_function %impl.elem0.loc7, @Core.IntLiteral.as.ImplicitAs.impl.Convert(constants.%int_32) [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn]
|
||||
// CHECK:STDOUT: %bound_method.loc7_42.2: <bound method> = bound_method %int_10, %specific_fn.loc7 [concrete = constants.%bound_method.002]
|
||||
// CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc7: init %i32 = call %bound_method.loc7_42.2(%int_10) [concrete = constants.%int_10.6a3]
|
||||
// CHECK:STDOUT: %.loc7_42.1: %i32 = value_of_initializer %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc7 [concrete = constants.%int_10.6a3]
|
||||
// CHECK:STDOUT: %.loc7_42.2: %i32 = converted %int_10, %.loc7_42.1 [concrete = constants.%int_10.6a3]
|
||||
// CHECK:STDOUT: %fn.call.loc7: init %i32 = call %fn.decl.loc7(%.loc7_42.2)
|
||||
// CHECK:STDOUT: %.loc7_44.1: %i32 = value_of_initializer %fn.call.loc7
|
||||
// CHECK:STDOUT: %.loc7_44.2: %i32 = converted %fn.call.loc7, %.loc7_44.1
|
||||
// CHECK:STDOUT: %i32.loc7: type = type_literal constants.%i32 [concrete = constants.%i32]
|
||||
// CHECK:STDOUT: %f: %i32 = wrapper_binding f, %.loc7_44.2
|
||||
// CHECK:STDOUT: name_binding_decl {
|
||||
// CHECK:STDOUT: %f.patt: %pattern_type.d94 = value_binding_pattern f [concrete = constants.%f.patt]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: <elided>
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn @fn.loc5(%x.param: %i32) -> out %return.param: %i32 [deduced] {
|
||||
// CHECK:STDOUT: !entry:
|
||||
// CHECK:STDOUT: %x.ref: %i32 = name_ref x, %x
|
||||
// CHECK:STDOUT: %.loc5_39.1: init %i32 = splice_block %Int.as.Copy.impl.Op.call {
|
||||
// CHECK:STDOUT: %impl.elem0: %.2b9 = impl_witness_access constants.%Copy.impl_witness.8af, element0 [concrete = constants.%Int.as.Copy.impl.Op.cae]
|
||||
// CHECK:STDOUT: %bound_method.loc5_39.1: <bound method> = bound_method %x.ref, %impl.elem0
|
||||
// CHECK:STDOUT: %specific_fn: <specific function> = specific_function %impl.elem0, @Int.as.Copy.impl.Op(constants.%int_32) [concrete = constants.%Int.as.Copy.impl.Op.specific_fn]
|
||||
// CHECK:STDOUT: %bound_method.loc5_39.2: <bound method> = bound_method %x.ref, %specific_fn
|
||||
// CHECK:STDOUT: %Int.as.Copy.impl.Op.call: init %i32 = call %bound_method.loc5_39.2(%x.ref)
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: return %.loc5_39.1
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn @fn.loc7(%x.param: %i32) -> out %return.param: %i32 [deduced] {
|
||||
// CHECK:STDOUT: !entry:
|
||||
// CHECK:STDOUT: %x.ref: %i32 = name_ref x, %x
|
||||
// CHECK:STDOUT: %.loc7_39.1: init %i32 = splice_block %Int.as.Copy.impl.Op.call {
|
||||
// CHECK:STDOUT: %impl.elem0: %.2b9 = impl_witness_access constants.%Copy.impl_witness.8af, element0 [concrete = constants.%Int.as.Copy.impl.Op.cae]
|
||||
// CHECK:STDOUT: %bound_method.loc7_39.1: <bound method> = bound_method %x.ref, %impl.elem0
|
||||
// CHECK:STDOUT: %specific_fn: <specific function> = specific_function %impl.elem0, @Int.as.Copy.impl.Op(constants.%int_32) [concrete = constants.%Int.as.Copy.impl.Op.specific_fn]
|
||||
// CHECK:STDOUT: %bound_method.loc7_39.2: <bound method> = bound_method %x.ref, %specific_fn
|
||||
// CHECK:STDOUT: %Int.as.Copy.impl.Op.call: init %i32 = call %bound_method.loc7_39.2(%x.ref)
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: return %.loc7_39.1
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn @fn.loc12(%x.param: %i32) -> out %return.param: %i32 [deduced] {
|
||||
// CHECK:STDOUT: !entry:
|
||||
// CHECK:STDOUT: %x.ref: %i32 = name_ref x, %x
|
||||
// CHECK:STDOUT: %.loc12_36.1: init %i32 = splice_block %Int.as.Copy.impl.Op.call {
|
||||
// CHECK:STDOUT: %impl.elem0: %.2b9 = impl_witness_access constants.%Copy.impl_witness.8af, element0 [concrete = constants.%Int.as.Copy.impl.Op.cae]
|
||||
// CHECK:STDOUT: %bound_method.loc12_36.1: <bound method> = bound_method %x.ref, %impl.elem0
|
||||
// CHECK:STDOUT: %specific_fn: <specific function> = specific_function %impl.elem0, @Int.as.Copy.impl.Op(constants.%int_32) [concrete = constants.%Int.as.Copy.impl.Op.specific_fn]
|
||||
// CHECK:STDOUT: %bound_method.loc12_36.2: <bound method> = bound_method %x.ref, %specific_fn
|
||||
// CHECK:STDOUT: %Int.as.Copy.impl.Op.call: init %i32 = call %bound_method.loc12_36.2(%x.ref)
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: return %.loc12_36.1
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: --- generic_identity.carbon
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: constants {
|
||||
@@ -523,7 +758,7 @@ fn F() {
|
||||
// CHECK:STDOUT: %x.param_patt.051: %pattern_type.d94 = value_param_pattern [concrete]
|
||||
// CHECK:STDOUT: %x.patt.0f7: %pattern_type.d94 = wrapper_binding_pattern x, %x.param_patt.051 [concrete]
|
||||
// CHECK:STDOUT: %return.patt.6fa: %pattern_type.d94 = return_slot_pattern %return.param_patt.299, %i32 [concrete]
|
||||
// CHECK:STDOUT: %fn.specific_fn.fed: <specific function> = specific_function %fn, @fn(%Copy.facet.95d) [concrete]
|
||||
// CHECK:STDOUT: %fn.specific_fn.656: <specific function> = specific_function %fn, @fn(%Copy.facet.95d) [concrete]
|
||||
// CHECK:STDOUT: %pattern_type.831: type = pattern_type bool [concrete]
|
||||
// CHECK:STDOUT: %d.patt: %pattern_type.831 = value_binding_pattern d [concrete]
|
||||
// CHECK:STDOUT: %true: bool = bool_literal true [concrete]
|
||||
@@ -534,7 +769,7 @@ fn F() {
|
||||
// CHECK:STDOUT: %.f34: Core.Form = init_form bool [concrete]
|
||||
// CHECK:STDOUT: %return.param_patt.5a1: %pattern_type.831 = out_param_pattern [concrete]
|
||||
// CHECK:STDOUT: %return.patt.c0c: %pattern_type.831 = return_slot_pattern %return.param_patt.5a1, bool [concrete]
|
||||
// CHECK:STDOUT: %fn.specific_fn.f86: <specific function> = specific_function %fn, @fn(%Copy.facet.7af) [concrete]
|
||||
// CHECK:STDOUT: %fn.specific_fn.10a: <specific function> = specific_function %fn, @fn(%Copy.facet.7af) [concrete]
|
||||
// CHECK:STDOUT: %Copy.WithSelf.Op.type.f76: type = fn_type @Copy.WithSelf.Op, @Copy.WithSelf(%Copy.facet.95d) [concrete]
|
||||
// CHECK:STDOUT: %.2b9: type = fn_type_with_self_type %Copy.WithSelf.Op.type.f76, %Copy.facet.95d [concrete]
|
||||
// CHECK:STDOUT: %Int.as.Copy.impl.Op.specific_fn: <specific function> = specific_function %Int.as.Copy.impl.Op.cae, @Int.as.Copy.impl.Op(%int_32) [concrete]
|
||||
@@ -610,7 +845,7 @@ fn F() {
|
||||
// CHECK:STDOUT: %.loc6_43.1: %Copy.type = converted constants.%i32, %Copy.facet.loc6_43.1 [concrete = constants.%Copy.facet.95d]
|
||||
// CHECK:STDOUT: %Copy.facet.loc6_43.2: %Copy.type = facet_value constants.%i32, (constants.%Copy.impl_witness.8af) [concrete = constants.%Copy.facet.95d]
|
||||
// CHECK:STDOUT: %.loc6_43.2: %Copy.type = converted constants.%i32, %Copy.facet.loc6_43.2 [concrete = constants.%Copy.facet.95d]
|
||||
// CHECK:STDOUT: %fn.specific_fn.loc6: <specific function> = specific_function %generic_id.ref.loc6, @fn(constants.%Copy.facet.95d) [concrete = constants.%fn.specific_fn.fed]
|
||||
// CHECK:STDOUT: %fn.specific_fn.loc6: <specific function> = specific_function %generic_id.ref.loc6, @fn(constants.%Copy.facet.95d) [concrete = constants.%fn.specific_fn.656]
|
||||
// CHECK:STDOUT: %fn.call.loc6: init %i32 = call %fn.specific_fn.loc6(%.loc6_37.2)
|
||||
// CHECK:STDOUT: %.loc6_43.3: %i32 = value_of_initializer %fn.call.loc6
|
||||
// CHECK:STDOUT: %.loc6_43.4: %i32 = converted %fn.call.loc6, %.loc6_43.3
|
||||
@@ -625,7 +860,7 @@ fn F() {
|
||||
// CHECK:STDOUT: %.loc7_39.1: %Copy.type = converted bool, %Copy.facet.loc7_39.1 [concrete = constants.%Copy.facet.7af]
|
||||
// CHECK:STDOUT: %Copy.facet.loc7_39.2: %Copy.type = facet_value bool, (constants.%Copy.impl_witness.5e1) [concrete = constants.%Copy.facet.7af]
|
||||
// CHECK:STDOUT: %.loc7_39.2: %Copy.type = converted bool, %Copy.facet.loc7_39.2 [concrete = constants.%Copy.facet.7af]
|
||||
// CHECK:STDOUT: %fn.specific_fn.loc7: <specific function> = specific_function %generic_id.ref.loc7, @fn(constants.%Copy.facet.7af) [concrete = constants.%fn.specific_fn.f86]
|
||||
// CHECK:STDOUT: %fn.specific_fn.loc7: <specific function> = specific_function %generic_id.ref.loc7, @fn(constants.%Copy.facet.7af) [concrete = constants.%fn.specific_fn.10a]
|
||||
// CHECK:STDOUT: %fn.call.loc7: init bool = call %fn.specific_fn.loc7(%true)
|
||||
// CHECK:STDOUT: %.loc7_39.3: bool = value_of_initializer %fn.call.loc7
|
||||
// CHECK:STDOUT: %.loc7_39.4: bool = converted %fn.call.loc7, %.loc7_39.3
|
||||
@@ -739,24 +974,24 @@ fn F() {
|
||||
// CHECK:STDOUT: %.1ce700.2: Core.Form = init_form %T.as_type [symbolic]
|
||||
// CHECK:STDOUT: %return.param_patt.bf4475.2: %pattern_type.2c66b4.2 = out_param_pattern [symbolic]
|
||||
// CHECK:STDOUT: %return.patt.f44: %pattern_type.2c66b4.2 = return_slot_pattern %return.param_patt.bf4475.2, %T.as_type [symbolic]
|
||||
// CHECK:STDOUT: %fn.type.c16: type = fn_type @fn.loc5 [concrete]
|
||||
// CHECK:STDOUT: %fn.415: %fn.type.c16 = struct_value () [concrete]
|
||||
// CHECK:STDOUT: %fn.type.d4a: type = fn_type @fn.loc5 [concrete]
|
||||
// CHECK:STDOUT: %fn.9dd: %fn.type.d4a = struct_value () [concrete]
|
||||
// CHECK:STDOUT: %require_complete.d83: <witness> = require_complete_type %T.as_type [symbolic]
|
||||
// CHECK:STDOUT: %y.param_patt.ec0: %pattern_type.2c66b4.2 = value_param_pattern [symbolic]
|
||||
// CHECK:STDOUT: %y.patt.d6d: %pattern_type.2c66b4.2 = wrapper_binding_pattern y, %y.param_patt.ec0 [symbolic]
|
||||
// CHECK:STDOUT: %fn.type.48e: type = fn_type @fn.loc6, @fn.loc5(%T.f84) [symbolic]
|
||||
// CHECK:STDOUT: %fn.7f4: %fn.type.48e = struct_value () [symbolic]
|
||||
// CHECK:STDOUT: %fn.type.7d1: type = fn_type @fn.loc6, @fn.loc5(%T.f84) [symbolic]
|
||||
// CHECK:STDOUT: %fn.dd0: %fn.type.7d1 = struct_value () [symbolic]
|
||||
// CHECK:STDOUT: %z.param_patt.b42: %pattern_type.2c66b4.2 = value_param_pattern [symbolic]
|
||||
// CHECK:STDOUT: %z.patt.513: %pattern_type.2c66b4.2 = wrapper_binding_pattern z, %z.param_patt.b42 [symbolic]
|
||||
// CHECK:STDOUT: %fn.type.3f9: type = fn_type @fn.loc7, @fn.loc6(%T.f84) [symbolic]
|
||||
// CHECK:STDOUT: %fn.8a9: %fn.type.3f9 = struct_value () [symbolic]
|
||||
// CHECK:STDOUT: %fn.type.531: type = fn_type @fn.loc7, @fn.loc6(%T.f84) [symbolic]
|
||||
// CHECK:STDOUT: %fn.dc1: %fn.type.531 = struct_value () [symbolic]
|
||||
// CHECK:STDOUT: %Copy.lookup_impl_witness.d9c: <witness> = lookup_impl_witness %T.f84, @Copy [symbolic]
|
||||
// CHECK:STDOUT: %Copy.WithSelf.Op.type.d2f9c3.2: type = fn_type @Copy.WithSelf.Op, @Copy.WithSelf(%T.f84) [symbolic]
|
||||
// CHECK:STDOUT: %.8bf: type = fn_type_with_self_type %Copy.WithSelf.Op.type.d2f9c3.2, %T.f84 [symbolic]
|
||||
// CHECK:STDOUT: %impl.elem0.bb5: %.8bf = impl_witness_access %Copy.lookup_impl_witness.d9c, element0 [symbolic]
|
||||
// CHECK:STDOUT: %specific_impl_fn.2ac: <specific function> = specific_impl_function %impl.elem0.bb5, @Copy.WithSelf.Op(%T.f84) [symbolic]
|
||||
// CHECK:STDOUT: %fn.specific_fn.127: <specific function> = specific_function %fn.8a9, @fn.loc7(%T.f84) [symbolic]
|
||||
// CHECK:STDOUT: %fn.specific_fn.3ca: <specific function> = specific_function %fn.7f4, @fn.loc6(%T.f84) [symbolic]
|
||||
// CHECK:STDOUT: %fn.specific_fn.6d4: <specific function> = specific_function %fn.dc1, @fn.loc7(%T.f84) [symbolic]
|
||||
// CHECK:STDOUT: %fn.specific_fn.eed: <specific function> = specific_function %fn.dd0, @fn.loc6(%T.f84) [symbolic]
|
||||
// CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete]
|
||||
// CHECK:STDOUT: %Int.type: type = parameterized_class_name_type @Int [concrete]
|
||||
// CHECK:STDOUT: %Int.generic: %Int.type = struct_value () [concrete]
|
||||
@@ -794,7 +1029,7 @@ fn F() {
|
||||
// CHECK:STDOUT: %x.param_patt.051: %pattern_type.d94 = value_param_pattern [concrete]
|
||||
// CHECK:STDOUT: %x.patt.0f7: %pattern_type.d94 = wrapper_binding_pattern x, %x.param_patt.051 [concrete]
|
||||
// CHECK:STDOUT: %return.patt.6fa: %pattern_type.d94 = return_slot_pattern %return.param_patt.299, %i32 [concrete]
|
||||
// CHECK:STDOUT: %fn.specific_fn.ac4: <specific function> = specific_function %fn.415, @fn.loc5(%Copy.facet.95d) [concrete]
|
||||
// CHECK:STDOUT: %fn.specific_fn.d27: <specific function> = specific_function %fn.9dd, @fn.loc5(%Copy.facet.95d) [concrete]
|
||||
// CHECK:STDOUT: %pattern_type.831: type = pattern_type bool [concrete]
|
||||
// CHECK:STDOUT: %d.patt: %pattern_type.831 = value_binding_pattern d [concrete]
|
||||
// CHECK:STDOUT: %true: bool = bool_literal true [concrete]
|
||||
@@ -805,28 +1040,28 @@ fn F() {
|
||||
// CHECK:STDOUT: %.f34: Core.Form = init_form bool [concrete]
|
||||
// CHECK:STDOUT: %return.param_patt.5a1: %pattern_type.831 = out_param_pattern [concrete]
|
||||
// CHECK:STDOUT: %return.patt.c0c: %pattern_type.831 = return_slot_pattern %return.param_patt.5a1, bool [concrete]
|
||||
// CHECK:STDOUT: %fn.specific_fn.c23: <specific function> = specific_function %fn.415, @fn.loc5(%Copy.facet.7af) [concrete]
|
||||
// CHECK:STDOUT: %fn.type.7b0: type = fn_type @fn.loc6, @fn.loc5(%Copy.facet.95d) [concrete]
|
||||
// CHECK:STDOUT: %fn.758: %fn.type.7b0 = struct_value () [concrete]
|
||||
// CHECK:STDOUT: %fn.specific_fn.8de: <specific function> = specific_function %fn.9dd, @fn.loc5(%Copy.facet.7af) [concrete]
|
||||
// CHECK:STDOUT: %fn.type.949: type = fn_type @fn.loc6, @fn.loc5(%Copy.facet.95d) [concrete]
|
||||
// CHECK:STDOUT: %fn.62e: %fn.type.949 = struct_value () [concrete]
|
||||
// CHECK:STDOUT: %y.param_patt.665: %pattern_type.d94 = value_param_pattern [concrete]
|
||||
// CHECK:STDOUT: %y.patt.e18: %pattern_type.d94 = wrapper_binding_pattern y, %y.param_patt.665 [concrete]
|
||||
// CHECK:STDOUT: %fn.specific_fn.2f6: <specific function> = specific_function %fn.758, @fn.loc6(%Copy.facet.95d) [concrete]
|
||||
// CHECK:STDOUT: %fn.specific_fn.458: <specific function> = specific_function %fn.62e, @fn.loc6(%Copy.facet.95d) [concrete]
|
||||
// CHECK:STDOUT: %complete_type.127: <witness> = complete_type_witness bool [concrete]
|
||||
// CHECK:STDOUT: %fn.type.641: type = fn_type @fn.loc6, @fn.loc5(%Copy.facet.7af) [concrete]
|
||||
// CHECK:STDOUT: %fn.3e7: %fn.type.641 = struct_value () [concrete]
|
||||
// CHECK:STDOUT: %fn.type.319: type = fn_type @fn.loc6, @fn.loc5(%Copy.facet.7af) [concrete]
|
||||
// CHECK:STDOUT: %fn.1af: %fn.type.319 = struct_value () [concrete]
|
||||
// CHECK:STDOUT: %y.param_patt.077: %pattern_type.831 = value_param_pattern [concrete]
|
||||
// CHECK:STDOUT: %y.patt.252: %pattern_type.831 = wrapper_binding_pattern y, %y.param_patt.077 [concrete]
|
||||
// CHECK:STDOUT: %fn.specific_fn.421: <specific function> = specific_function %fn.3e7, @fn.loc6(%Copy.facet.7af) [concrete]
|
||||
// CHECK:STDOUT: %fn.type.8ae: type = fn_type @fn.loc7, @fn.loc6(%Copy.facet.95d) [concrete]
|
||||
// CHECK:STDOUT: %fn.c3f: %fn.type.8ae = struct_value () [concrete]
|
||||
// CHECK:STDOUT: %fn.specific_fn.c2d: <specific function> = specific_function %fn.1af, @fn.loc6(%Copy.facet.7af) [concrete]
|
||||
// CHECK:STDOUT: %fn.type.70b: type = fn_type @fn.loc7, @fn.loc6(%Copy.facet.95d) [concrete]
|
||||
// CHECK:STDOUT: %fn.37d: %fn.type.70b = struct_value () [concrete]
|
||||
// CHECK:STDOUT: %z.param_patt.896: %pattern_type.d94 = value_param_pattern [concrete]
|
||||
// CHECK:STDOUT: %z.patt.660: %pattern_type.d94 = wrapper_binding_pattern z, %z.param_patt.896 [concrete]
|
||||
// CHECK:STDOUT: %fn.specific_fn.0fa: <specific function> = specific_function %fn.c3f, @fn.loc7(%Copy.facet.95d) [concrete]
|
||||
// CHECK:STDOUT: %fn.type.d03: type = fn_type @fn.loc7, @fn.loc6(%Copy.facet.7af) [concrete]
|
||||
// CHECK:STDOUT: %fn.b92: %fn.type.d03 = struct_value () [concrete]
|
||||
// CHECK:STDOUT: %fn.specific_fn.6d6: <specific function> = specific_function %fn.37d, @fn.loc7(%Copy.facet.95d) [concrete]
|
||||
// CHECK:STDOUT: %fn.type.c1a: type = fn_type @fn.loc7, @fn.loc6(%Copy.facet.7af) [concrete]
|
||||
// CHECK:STDOUT: %fn.d5a: %fn.type.c1a = struct_value () [concrete]
|
||||
// CHECK:STDOUT: %z.param_patt.a49: %pattern_type.831 = value_param_pattern [concrete]
|
||||
// CHECK:STDOUT: %z.patt.246: %pattern_type.831 = wrapper_binding_pattern z, %z.param_patt.a49 [concrete]
|
||||
// CHECK:STDOUT: %fn.specific_fn.c7b: <specific function> = specific_function %fn.b92, @fn.loc7(%Copy.facet.7af) [concrete]
|
||||
// CHECK:STDOUT: %fn.specific_fn.8ab: <specific function> = specific_function %fn.d5a, @fn.loc7(%Copy.facet.7af) [concrete]
|
||||
// CHECK:STDOUT: %Copy.WithSelf.Op.type.f76: type = fn_type @Copy.WithSelf.Op, @Copy.WithSelf(%Copy.facet.95d) [concrete]
|
||||
// CHECK:STDOUT: %.2b9: type = fn_type_with_self_type %Copy.WithSelf.Op.type.f76, %Copy.facet.95d [concrete]
|
||||
// CHECK:STDOUT: %Int.as.Copy.impl.Op.specific_fn: <specific function> = specific_function %Int.as.Copy.impl.Op.cae, @Int.as.Copy.impl.Op(%int_32) [concrete]
|
||||
@@ -859,7 +1094,7 @@ fn F() {
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn @TestGenericNested() {
|
||||
// CHECK:STDOUT: !entry:
|
||||
// CHECK:STDOUT: %fn.decl: %fn.type.c16 = fn_decl @fn.loc5 [concrete = constants.%fn.415] {
|
||||
// CHECK:STDOUT: %fn.decl: %fn.type.d4a = fn_decl @fn.loc5 [concrete = constants.%fn.9dd] {
|
||||
// CHECK:STDOUT: %T.patt.loc5_27.1: %pattern_type.e81 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc5_27.2 (constants.%T.patt.fe6)]
|
||||
// CHECK:STDOUT: %x.param_patt.loc5_41.1: @fn.loc5.%pattern_type (%pattern_type.2c66b4.2) = value_param_pattern [symbolic = %x.param_patt.loc5_41.2 (constants.%x.param_patt.1f4)]
|
||||
// CHECK:STDOUT: %x.patt.loc5_41.1: @fn.loc5.%pattern_type (%pattern_type.2c66b4.2) = wrapper_binding_pattern x, %x.param_patt.loc5_41.1 [symbolic = %x.patt.loc5_41.2 (constants.%x.patt.cec)]
|
||||
@@ -886,8 +1121,8 @@ fn F() {
|
||||
// CHECK:STDOUT: %return.param: ref @fn.loc5.%T.as_type.loc5_43.1 (%T.as_type) = out_param call_param1
|
||||
// CHECK:STDOUT: %return: ref @fn.loc5.%T.as_type.loc5_43.1 (%T.as_type) = return_slot %return.param
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %generic_id: %fn.type.c16 = alias_binding generic_id, %fn.decl [concrete = constants.%fn.415]
|
||||
// CHECK:STDOUT: %generic_id.ref.loc12: %fn.type.c16 = name_ref generic_id, %generic_id [concrete = constants.%fn.415]
|
||||
// CHECK:STDOUT: %generic_id: %fn.type.d4a = alias_binding generic_id, %fn.decl [concrete = constants.%fn.9dd]
|
||||
// CHECK:STDOUT: %generic_id.ref.loc12: %fn.type.d4a = name_ref generic_id, %generic_id [concrete = constants.%fn.9dd]
|
||||
// CHECK:STDOUT: %int_42: Core.IntLiteral = int_value 42 [concrete = constants.%int_42.20e]
|
||||
// CHECK:STDOUT: %i32.loc12_40: type = type_literal constants.%i32 [concrete = constants.%i32]
|
||||
// CHECK:STDOUT: %impl.elem0: %.979 = impl_witness_access constants.%As.impl_witness.e09, element0 [concrete = constants.%Core.IntLiteral.as.As.impl.Convert.94f]
|
||||
@@ -901,7 +1136,7 @@ fn F() {
|
||||
// CHECK:STDOUT: %.loc12_43.1: %Copy.type = converted constants.%i32, %Copy.facet.loc12_43.1 [concrete = constants.%Copy.facet.95d]
|
||||
// CHECK:STDOUT: %Copy.facet.loc12_43.2: %Copy.type = facet_value constants.%i32, (constants.%Copy.impl_witness.8af) [concrete = constants.%Copy.facet.95d]
|
||||
// CHECK:STDOUT: %.loc12_43.2: %Copy.type = converted constants.%i32, %Copy.facet.loc12_43.2 [concrete = constants.%Copy.facet.95d]
|
||||
// CHECK:STDOUT: %fn.specific_fn.loc12: <specific function> = specific_function %generic_id.ref.loc12, @fn.loc5(constants.%Copy.facet.95d) [concrete = constants.%fn.specific_fn.ac4]
|
||||
// CHECK:STDOUT: %fn.specific_fn.loc12: <specific function> = specific_function %generic_id.ref.loc12, @fn.loc5(constants.%Copy.facet.95d) [concrete = constants.%fn.specific_fn.d27]
|
||||
// CHECK:STDOUT: %fn.call.loc12: init %i32 = call %fn.specific_fn.loc12(%.loc12_37.2)
|
||||
// CHECK:STDOUT: %.loc12_43.3: %i32 = value_of_initializer %fn.call.loc12
|
||||
// CHECK:STDOUT: %.loc12_43.4: %i32 = converted %fn.call.loc12, %.loc12_43.3
|
||||
@@ -910,13 +1145,13 @@ fn F() {
|
||||
// CHECK:STDOUT: name_binding_decl {
|
||||
// CHECK:STDOUT: %c.patt: %pattern_type.d94 = value_binding_pattern c [concrete = constants.%c.patt]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %generic_id.ref.loc13: %fn.type.c16 = name_ref generic_id, %generic_id [concrete = constants.%fn.415]
|
||||
// CHECK:STDOUT: %generic_id.ref.loc13: %fn.type.d4a = name_ref generic_id, %generic_id [concrete = constants.%fn.9dd]
|
||||
// CHECK:STDOUT: %true: bool = bool_literal true [concrete = constants.%true]
|
||||
// CHECK:STDOUT: %Copy.facet.loc13_39.1: %Copy.type = facet_value bool, (constants.%Copy.impl_witness.5e1) [concrete = constants.%Copy.facet.7af]
|
||||
// CHECK:STDOUT: %.loc13_39.1: %Copy.type = converted bool, %Copy.facet.loc13_39.1 [concrete = constants.%Copy.facet.7af]
|
||||
// CHECK:STDOUT: %Copy.facet.loc13_39.2: %Copy.type = facet_value bool, (constants.%Copy.impl_witness.5e1) [concrete = constants.%Copy.facet.7af]
|
||||
// CHECK:STDOUT: %.loc13_39.2: %Copy.type = converted bool, %Copy.facet.loc13_39.2 [concrete = constants.%Copy.facet.7af]
|
||||
// CHECK:STDOUT: %fn.specific_fn.loc13: <specific function> = specific_function %generic_id.ref.loc13, @fn.loc5(constants.%Copy.facet.7af) [concrete = constants.%fn.specific_fn.c23]
|
||||
// CHECK:STDOUT: %fn.specific_fn.loc13: <specific function> = specific_function %generic_id.ref.loc13, @fn.loc5(constants.%Copy.facet.7af) [concrete = constants.%fn.specific_fn.8de]
|
||||
// CHECK:STDOUT: %fn.call.loc13: init bool = call %fn.specific_fn.loc13(%true)
|
||||
// CHECK:STDOUT: %.loc13_39.3: bool = value_of_initializer %fn.call.loc13
|
||||
// CHECK:STDOUT: %.loc13_39.4: bool = converted %fn.call.loc13, %.loc13_39.3
|
||||
@@ -941,13 +1176,13 @@ fn F() {
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT: %require_complete: <witness> = require_complete_type %T.as_type.loc5_43.1 [symbolic = %require_complete (constants.%require_complete.d83)]
|
||||
// CHECK:STDOUT: %fn.type: type = fn_type @fn.loc6, @fn.loc5(%T.loc5_27.1) [symbolic = %fn.type (constants.%fn.type.48e)]
|
||||
// CHECK:STDOUT: %fn: @fn.loc5.%fn.type (%fn.type.48e) = struct_value () [symbolic = %fn (constants.%fn.7f4)]
|
||||
// CHECK:STDOUT: %fn.specific_fn.loc6_26.2: <specific function> = specific_function %fn, @fn.loc6(%T.loc5_27.1) [symbolic = %fn.specific_fn.loc6_26.2 (constants.%fn.specific_fn.3ca)]
|
||||
// CHECK:STDOUT: %fn.type: type = fn_type @fn.loc6, @fn.loc5(%T.loc5_27.1) [symbolic = %fn.type (constants.%fn.type.7d1)]
|
||||
// CHECK:STDOUT: %fn: @fn.loc5.%fn.type (%fn.type.7d1) = struct_value () [symbolic = %fn (constants.%fn.dd0)]
|
||||
// CHECK:STDOUT: %fn.specific_fn.loc6_26.2: <specific function> = specific_function %fn, @fn.loc6(%T.loc5_27.1) [symbolic = %fn.specific_fn.loc6_26.2 (constants.%fn.specific_fn.eed)]
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn(%x.param: @fn.loc5.%T.as_type.loc5_43.1 (%T.as_type)) -> out %return.param: @fn.loc5.%T.as_type.loc5_43.1 (%T.as_type) {
|
||||
// CHECK:STDOUT: !entry:
|
||||
// CHECK:STDOUT: %fn.decl: @fn.loc5.%fn.type (%fn.type.48e) = fn_decl @fn.loc6 [symbolic = @fn.loc5.%fn (constants.%fn.7f4)] {
|
||||
// CHECK:STDOUT: %fn.decl: @fn.loc5.%fn.type (%fn.type.7d1) = fn_decl @fn.loc6 [symbolic = @fn.loc5.%fn (constants.%fn.dd0)] {
|
||||
// CHECK:STDOUT: %y.param_patt.loc6_16.1: @fn.loc6.%pattern_type (%pattern_type.2c66b4.2) = value_param_pattern [symbolic = %y.param_patt.loc6_16.2 (constants.%y.param_patt.ec0)]
|
||||
// CHECK:STDOUT: %y.patt.loc6_16.1: @fn.loc6.%pattern_type (%pattern_type.2c66b4.2) = wrapper_binding_pattern y, %y.param_patt.loc6_16.1 [symbolic = %y.patt.loc6_16.2 (constants.%y.patt.d6d)]
|
||||
// CHECK:STDOUT: %return.param_patt.loc6_24.1: @fn.loc6.%pattern_type (%pattern_type.2c66b4.2) = out_param_pattern [symbolic = %return.param_patt.loc6_24.2 (constants.%return.param_patt.bf4475.2)]
|
||||
@@ -972,7 +1207,7 @@ fn F() {
|
||||
// CHECK:STDOUT: %x.ref: @fn.loc5.%T.as_type.loc5_43.1 (%T.as_type) = name_ref x, %x
|
||||
// CHECK:STDOUT: %.loc10_8.1: %Copy.type = converted constants.%T.as_type, constants.%T.f84 [symbolic = %T.loc5_27.1 (constants.%T.f84)]
|
||||
// CHECK:STDOUT: %.loc10_8.2: %Copy.type = converted constants.%T.as_type, constants.%T.f84 [symbolic = %T.loc5_27.1 (constants.%T.f84)]
|
||||
// CHECK:STDOUT: %fn.specific_fn.loc6_26.1: <specific function> = specific_function %fn.decl, @fn.loc6(constants.%T.f84) [symbolic = %fn.specific_fn.loc6_26.2 (constants.%fn.specific_fn.3ca)]
|
||||
// CHECK:STDOUT: %fn.specific_fn.loc6_26.1: <specific function> = specific_function %fn.decl, @fn.loc6(constants.%T.f84) [symbolic = %fn.specific_fn.loc6_26.2 (constants.%fn.specific_fn.eed)]
|
||||
// CHECK:STDOUT: %.loc5_49.1: ref @fn.loc5.%T.as_type.loc5_43.1 (%T.as_type) = splice_block %return.param {}
|
||||
// CHECK:STDOUT: %fn.call: init @fn.loc5.%T.as_type.loc5_43.1 (%T.as_type) to %.loc5_49.1 = call %fn.specific_fn.loc6_26.1(%x.ref)
|
||||
// CHECK:STDOUT: return %fn.call to %return.param
|
||||
@@ -991,13 +1226,13 @@ fn F() {
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT: %require_complete: <witness> = require_complete_type %T.as_type.loc6_18.1 [symbolic = %require_complete (constants.%require_complete.d83)]
|
||||
// CHECK:STDOUT: %fn.type: type = fn_type @fn.loc7, @fn.loc6(%T) [symbolic = %fn.type (constants.%fn.type.3f9)]
|
||||
// CHECK:STDOUT: %fn: @fn.loc6.%fn.type (%fn.type.3f9) = struct_value () [symbolic = %fn (constants.%fn.8a9)]
|
||||
// CHECK:STDOUT: %fn.specific_fn.loc7_28.2: <specific function> = specific_function %fn, @fn.loc7(%T) [symbolic = %fn.specific_fn.loc7_28.2 (constants.%fn.specific_fn.127)]
|
||||
// CHECK:STDOUT: %fn.type: type = fn_type @fn.loc7, @fn.loc6(%T) [symbolic = %fn.type (constants.%fn.type.531)]
|
||||
// CHECK:STDOUT: %fn: @fn.loc6.%fn.type (%fn.type.531) = struct_value () [symbolic = %fn (constants.%fn.dc1)]
|
||||
// CHECK:STDOUT: %fn.specific_fn.loc7_28.2: <specific function> = specific_function %fn, @fn.loc7(%T) [symbolic = %fn.specific_fn.loc7_28.2 (constants.%fn.specific_fn.6d4)]
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn(%y.param: @fn.loc6.%T.as_type.loc6_18.1 (%T.as_type)) -> out %return.param: @fn.loc6.%T.as_type.loc6_18.1 (%T.as_type) {
|
||||
// CHECK:STDOUT: !entry:
|
||||
// CHECK:STDOUT: %fn.decl: @fn.loc6.%fn.type (%fn.type.3f9) = fn_decl @fn.loc7 [symbolic = @fn.loc6.%fn (constants.%fn.8a9)] {
|
||||
// CHECK:STDOUT: %fn.decl: @fn.loc6.%fn.type (%fn.type.531) = fn_decl @fn.loc7 [symbolic = @fn.loc6.%fn (constants.%fn.dc1)] {
|
||||
// CHECK:STDOUT: %z.param_patt.loc7_18.1: @fn.loc7.%pattern_type (%pattern_type.2c66b4.2) = value_param_pattern [symbolic = %z.param_patt.loc7_18.2 (constants.%z.param_patt.b42)]
|
||||
// CHECK:STDOUT: %z.patt.loc7_18.1: @fn.loc7.%pattern_type (%pattern_type.2c66b4.2) = wrapper_binding_pattern z, %z.param_patt.loc7_18.1 [symbolic = %z.patt.loc7_18.2 (constants.%z.patt.513)]
|
||||
// CHECK:STDOUT: %return.param_patt.loc7_26.1: @fn.loc7.%pattern_type (%pattern_type.2c66b4.2) = out_param_pattern [symbolic = %return.param_patt.loc7_26.2 (constants.%return.param_patt.bf4475.2)]
|
||||
@@ -1022,7 +1257,7 @@ fn F() {
|
||||
// CHECK:STDOUT: %y.ref: @fn.loc6.%T.as_type.loc6_18.1 (%T.as_type) = name_ref y, %y
|
||||
// CHECK:STDOUT: %.loc9_10.1: %Copy.type = converted constants.%T.as_type, constants.%T.f84 [symbolic = %T (constants.%T.f84)]
|
||||
// CHECK:STDOUT: %.loc9_10.2: %Copy.type = converted constants.%T.as_type, constants.%T.f84 [symbolic = %T (constants.%T.f84)]
|
||||
// CHECK:STDOUT: %fn.specific_fn.loc7_28.1: <specific function> = specific_function %fn.decl, @fn.loc7(constants.%T.f84) [symbolic = %fn.specific_fn.loc7_28.2 (constants.%fn.specific_fn.127)]
|
||||
// CHECK:STDOUT: %fn.specific_fn.loc7_28.1: <specific function> = specific_function %fn.decl, @fn.loc7(constants.%T.f84) [symbolic = %fn.specific_fn.loc7_28.2 (constants.%fn.specific_fn.6d4)]
|
||||
// CHECK:STDOUT: %.loc6_24.1: ref @fn.loc6.%T.as_type.loc6_18.1 (%T.as_type) = splice_block %return.param {}
|
||||
// CHECK:STDOUT: %fn.call: init @fn.loc6.%T.as_type.loc6_18.1 (%T.as_type) to %.loc6_24.1 = call %fn.specific_fn.loc7_28.1(%y.ref)
|
||||
// CHECK:STDOUT: return %fn.call to %return.param
|
||||
@@ -1086,9 +1321,9 @@ fn F() {
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT: %require_complete => constants.%require_complete.d83
|
||||
// CHECK:STDOUT: %fn.type => constants.%fn.type.3f9
|
||||
// CHECK:STDOUT: %fn => constants.%fn.8a9
|
||||
// CHECK:STDOUT: %fn.specific_fn.loc7_28.2 => constants.%fn.specific_fn.127
|
||||
// CHECK:STDOUT: %fn.type => constants.%fn.type.531
|
||||
// CHECK:STDOUT: %fn => constants.%fn.dc1
|
||||
// CHECK:STDOUT: %fn.specific_fn.loc7_28.2 => constants.%fn.specific_fn.6d4
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific @fn.loc7(constants.%T.f84) {
|
||||
@@ -1123,9 +1358,9 @@ fn F() {
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT: %require_complete => constants.%complete_type.f8a
|
||||
// CHECK:STDOUT: %fn.type => constants.%fn.type.7b0
|
||||
// CHECK:STDOUT: %fn => constants.%fn.758
|
||||
// CHECK:STDOUT: %fn.specific_fn.loc6_26.2 => constants.%fn.specific_fn.2f6
|
||||
// CHECK:STDOUT: %fn.type => constants.%fn.type.949
|
||||
// CHECK:STDOUT: %fn => constants.%fn.62e
|
||||
// CHECK:STDOUT: %fn.specific_fn.loc6_26.2 => constants.%fn.specific_fn.458
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific @fn.loc5(constants.%Copy.facet.7af) {
|
||||
@@ -1141,9 +1376,9 @@ fn F() {
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT: %require_complete => constants.%complete_type.127
|
||||
// CHECK:STDOUT: %fn.type => constants.%fn.type.641
|
||||
// CHECK:STDOUT: %fn => constants.%fn.3e7
|
||||
// CHECK:STDOUT: %fn.specific_fn.loc6_26.2 => constants.%fn.specific_fn.421
|
||||
// CHECK:STDOUT: %fn.type => constants.%fn.type.319
|
||||
// CHECK:STDOUT: %fn => constants.%fn.1af
|
||||
// CHECK:STDOUT: %fn.specific_fn.loc6_26.2 => constants.%fn.specific_fn.c2d
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific @fn.loc6(constants.%Copy.facet.95d) {
|
||||
@@ -1158,9 +1393,9 @@ fn F() {
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT: %require_complete => constants.%complete_type.f8a
|
||||
// CHECK:STDOUT: %fn.type => constants.%fn.type.8ae
|
||||
// CHECK:STDOUT: %fn => constants.%fn.c3f
|
||||
// CHECK:STDOUT: %fn.specific_fn.loc7_28.2 => constants.%fn.specific_fn.0fa
|
||||
// CHECK:STDOUT: %fn.type => constants.%fn.type.70b
|
||||
// CHECK:STDOUT: %fn => constants.%fn.37d
|
||||
// CHECK:STDOUT: %fn.specific_fn.loc7_28.2 => constants.%fn.specific_fn.6d6
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific @fn.loc6(constants.%Copy.facet.7af) {
|
||||
@@ -1175,9 +1410,9 @@ fn F() {
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT: %require_complete => constants.%complete_type.127
|
||||
// CHECK:STDOUT: %fn.type => constants.%fn.type.d03
|
||||
// CHECK:STDOUT: %fn => constants.%fn.b92
|
||||
// CHECK:STDOUT: %fn.specific_fn.loc7_28.2 => constants.%fn.specific_fn.c7b
|
||||
// CHECK:STDOUT: %fn.type => constants.%fn.type.c1a
|
||||
// CHECK:STDOUT: %fn => constants.%fn.d5a
|
||||
// CHECK:STDOUT: %fn.specific_fn.loc7_28.2 => constants.%fn.specific_fn.8ab
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific @fn.loc7(constants.%Copy.facet.95d) {
|
||||
|
||||
Reference in new issue
Block a user