Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Model return slot as parameter in lowering #4457

Merged
merged 7 commits into from
Nov 1, 2024
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
5 changes: 4 additions & 1 deletion toolchain/check/eval.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1433,7 +1433,10 @@ static auto TryEvalInstInContext(EvalContext& eval_context,
return eval_context.GetConstantValue(typed_inst.src_id);
}
case CARBON_KIND(SemIR::SpliceBlock typed_inst): {
return eval_context.GetConstantValue(typed_inst.result_id);
if (typed_inst.result_id.is_valid()) {
return eval_context.GetConstantValue(typed_inst.result_id);
}
break;
}
case CARBON_KIND(SemIR::ValueOfInitializer typed_inst): {
return eval_context.GetConstantValue(typed_inst.init_id);
Expand Down
7 changes: 7 additions & 0 deletions toolchain/check/handle_function.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -336,6 +336,13 @@ static auto HandleFunctionDefinitionAfterSignature(
StartGenericDefinition(context);
context.AddCurrentCodeBlockToFunction();

auto function_decl =
context.insts().GetAs<SemIR::FunctionDecl>(function.latest_decl_id());
context.AddInst<SemIR::SpliceBlock>(node_id,
{.type_id = SemIR::TypeId::Invalid,
.block_id = function_decl.decl_block_id,
.result_id = SemIR::InstId::Invalid});

// Check the return type is complete.
CheckFunctionReturnType(context, function.return_slot_id, function,
SemIR::SpecificId::Invalid);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,12 @@ fn F() -> {} {
// CHECK:STDOUT:
// CHECK:STDOUT: fn @F() -> %.1 {
// CHECK:STDOUT: !entry:
// CHECK:STDOUT: %.loc13_14: invalid = splice_block invalid {
// CHECK:STDOUT: %.loc13_12.1: %.1 = struct_literal ()
// CHECK:STDOUT: %.loc13_12.2: type = converted %.loc13_12.1, constants.%.1 [template = constants.%.1]
// CHECK:STDOUT: %return.param: ref %.1 = out_param runtime_param0
// CHECK:STDOUT: %return: ref %.1 = return_slot %return.param
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc22_17: %.1 = struct_literal ()
// CHECK:STDOUT: %.loc22_12: <error> = bind_alias <invalid>, <error> [template = <error>]
// CHECK:STDOUT: %NS.ref: <namespace> = name_ref NS, file.%NS [template = file.%NS]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ fn F() {
// CHECK:STDOUT:
// CHECK:STDOUT: fn @F() {
// CHECK:STDOUT: !entry:
// CHECK:STDOUT: %.loc11: invalid = splice_block invalid {}
// CHECK:STDOUT: %.loc12_11.1: %.1 = tuple_literal ()
// CHECK:STDOUT: %.loc12_11.2: type = converted %.loc12_11.1, constants.%.1 [template = constants.%.1]
// CHECK:STDOUT: %a.var: ref %.1 = var a
Expand Down
6 changes: 6 additions & 0 deletions toolchain/check/testdata/alias/no_prelude/in_namespace.carbon
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,12 @@ fn F() -> NS.a {
// CHECK:STDOUT:
// CHECK:STDOUT: fn @F() -> %return: %C {
// CHECK:STDOUT: !entry:
// CHECK:STDOUT: %.loc18_16: invalid = splice_block invalid {
// CHECK:STDOUT: %NS.ref: <namespace> = name_ref NS, file.%NS [template = file.%NS]
// CHECK:STDOUT: %a.ref: type = name_ref a, file.%a [template = constants.%C]
// CHECK:STDOUT: %return.param: ref %C = out_param runtime_param0
// CHECK:STDOUT: %return: ref %C = return_slot %return.param
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc19_17.1: %.1 = tuple_literal ()
// CHECK:STDOUT: %.loc19_18.1: %.3 = struct_literal (%.loc19_17.1)
// CHECK:STDOUT: %.loc19_18.2: ref %.1 = class_element_access %return, element0
Expand Down
6 changes: 6 additions & 0 deletions toolchain/check/testdata/alias/no_prelude/local.carbon
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,12 @@ fn F() -> () {
// CHECK:STDOUT:
// CHECK:STDOUT: fn @F() -> %.1 {
// CHECK:STDOUT: !entry:
// CHECK:STDOUT: %.loc11_14: invalid = splice_block invalid {
// CHECK:STDOUT: %.loc11_12.1: %.1 = tuple_literal ()
// CHECK:STDOUT: %.loc11_12.2: type = converted %.loc11_12.1, constants.%.1 [template = constants.%.1]
// CHECK:STDOUT: %return.param: ref %.1 = out_param runtime_param0
// CHECK:STDOUT: %return: ref %.1 = return_slot %return.param
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc12_11.1: %.1 = tuple_literal ()
// CHECK:STDOUT: %.loc12_11.2: type = converted %.loc12_11.1, constants.%.1 [template = constants.%.1]
// CHECK:STDOUT: %a.var: ref %.1 = var a
Expand Down
1 change: 1 addition & 0 deletions toolchain/check/testdata/array/array_in_place.carbon
Original file line number Diff line number Diff line change
Expand Up @@ -85,6 +85,7 @@ fn G() {
// CHECK:STDOUT:
// CHECK:STDOUT: fn @G() {
// CHECK:STDOUT: !entry:
// CHECK:STDOUT: %.loc13: invalid = splice_block invalid {}
// CHECK:STDOUT: %int.make_type_32.loc14_12: init type = call constants.%Int32() [template = i32]
// CHECK:STDOUT: %int.make_type_32.loc14_17: init type = call constants.%Int32() [template = i32]
// CHECK:STDOUT: %int.make_type_32.loc14_22: init type = call constants.%Int32() [template = i32]
Expand Down
1 change: 1 addition & 0 deletions toolchain/check/testdata/array/array_vs_tuple.carbon
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,7 @@ fn G() {
// CHECK:STDOUT:
// CHECK:STDOUT: fn @G() {
// CHECK:STDOUT: !entry:
// CHECK:STDOUT: %.loc11: invalid = splice_block invalid {}
// CHECK:STDOUT: %int.make_type_32.loc13: init type = call constants.%Int32() [template = i32]
// CHECK:STDOUT: %.loc13_16: i32 = int_literal 3 [template = constants.%.2]
// CHECK:STDOUT: %.loc13_11.1: type = value_of_initializer %int.make_type_32.loc13 [template = i32]
Expand Down
10 changes: 10 additions & 0 deletions toolchain/check/testdata/array/assign_return_value.carbon
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,15 @@ fn Run() {
// CHECK:STDOUT:
// CHECK:STDOUT: fn @F() -> %.3 {
// CHECK:STDOUT: !entry:
// CHECK:STDOUT: %.loc11_18: invalid = splice_block invalid {
// CHECK:STDOUT: %int.make_type_32: init type = call constants.%Int32() [template = i32]
// CHECK:STDOUT: %.loc11_16.1: %.2 = tuple_literal (%int.make_type_32)
// CHECK:STDOUT: %.loc11_16.2: type = value_of_initializer %int.make_type_32 [template = i32]
// CHECK:STDOUT: %.loc11_16.3: type = converted %int.make_type_32, %.loc11_16.2 [template = i32]
// CHECK:STDOUT: %.loc11_16.4: type = converted %.loc11_16.1, constants.%.3 [template = constants.%.3]
// CHECK:STDOUT: %return.param: ref %.3 = out_param runtime_param0
// CHECK:STDOUT: %return: ref %.3 = return_slot %return.param
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc11_28: i32 = int_literal 0 [template = constants.%.4]
// CHECK:STDOUT: %.loc11_30: %.3 = tuple_literal (%.loc11_28)
// CHECK:STDOUT: %tuple: %.3 = tuple_value (%.loc11_28) [template = constants.%tuple]
Expand All @@ -84,6 +93,7 @@ fn Run() {
// CHECK:STDOUT:
// CHECK:STDOUT: fn @Run() {
// CHECK:STDOUT: !entry:
// CHECK:STDOUT: %.loc13: invalid = splice_block invalid {}
// CHECK:STDOUT: %int.make_type_32: init type = call constants.%Int32() [template = i32]
// CHECK:STDOUT: %.loc14_16: i32 = int_literal 1 [template = constants.%.5]
// CHECK:STDOUT: %.loc14_11.1: type = value_of_initializer %int.make_type_32 [template = i32]
Expand Down
26 changes: 26 additions & 0 deletions toolchain/check/testdata/array/function_param.carbon
Original file line number Diff line number Diff line change
Expand Up @@ -101,6 +101,25 @@ fn G() -> i32 {
// CHECK:STDOUT:
// CHECK:STDOUT: fn @F(%arr.param_patt: %.3, %i.param_patt: i32) -> i32 {
// CHECK:STDOUT: !entry:
// CHECK:STDOUT: %.loc11_36: invalid = splice_block invalid {
// CHECK:STDOUT: %int.make_type_32.loc11_12: init type = call constants.%Int32() [template = i32]
// CHECK:STDOUT: %.loc11_17: i32 = int_literal 3 [template = constants.%.2]
// CHECK:STDOUT: %.loc11_12.1: type = value_of_initializer %int.make_type_32.loc11_12 [template = i32]
// CHECK:STDOUT: %.loc11_12.2: type = converted %int.make_type_32.loc11_12, %.loc11_12.1 [template = i32]
// CHECK:STDOUT: %.loc11_18: type = array_type %.loc11_17, i32 [template = constants.%.3]
// CHECK:STDOUT: %int.make_type_32.loc11_24: init type = call constants.%Int32() [template = i32]
// CHECK:STDOUT: %.loc11_24.1: type = value_of_initializer %int.make_type_32.loc11_24 [template = i32]
// CHECK:STDOUT: %.loc11_24.2: type = converted %int.make_type_32.loc11_24, %.loc11_24.1 [template = i32]
// CHECK:STDOUT: %int.make_type_32.loc11_32: init type = call constants.%Int32() [template = i32]
// CHECK:STDOUT: %.loc11_32.1: type = value_of_initializer %int.make_type_32.loc11_32 [template = i32]
// CHECK:STDOUT: %.loc11_32.2: type = converted %int.make_type_32.loc11_32, %.loc11_32.1 [template = i32]
// CHECK:STDOUT: %arr.param: %.3 = value_param runtime_param0
// CHECK:STDOUT: %arr: %.3 = bind_name arr, %arr.param
// CHECK:STDOUT: %i.param: i32 = value_param runtime_param1
// CHECK:STDOUT: %i: i32 = bind_name i, %i.param
// CHECK:STDOUT: %return.param: ref i32 = out_param runtime_param2
// CHECK:STDOUT: %return: ref i32 = return_slot %return.param
// CHECK:STDOUT: }
// CHECK:STDOUT: %arr.ref: %.3 = name_ref arr, %arr
// CHECK:STDOUT: %i.ref: i32 = name_ref i, %i
// CHECK:STDOUT: %.loc12_15.1: ref %.3 = value_as_ref %arr.ref
Expand All @@ -111,6 +130,13 @@ fn G() -> i32 {
// CHECK:STDOUT:
// CHECK:STDOUT: fn @G() -> i32 {
// CHECK:STDOUT: !entry:
// CHECK:STDOUT: %.loc15_15: invalid = splice_block invalid {
// CHECK:STDOUT: %int.make_type_32: init type = call constants.%Int32() [template = i32]
// CHECK:STDOUT: %.loc15_11.1: type = value_of_initializer %int.make_type_32 [template = i32]
// CHECK:STDOUT: %.loc15_11.2: type = converted %int.make_type_32, %.loc15_11.1 [template = i32]
// CHECK:STDOUT: %return.param: ref i32 = out_param runtime_param0
// CHECK:STDOUT: %return: ref i32 = return_slot %return.param
// CHECK:STDOUT: }
// CHECK:STDOUT: %F.ref: %F.type = name_ref F, file.%F.decl [template = constants.%F]
// CHECK:STDOUT: %.loc16_13: i32 = int_literal 1 [template = constants.%.5]
// CHECK:STDOUT: %.loc16_16: i32 = int_literal 2 [template = constants.%.6]
Expand Down
4 changes: 4 additions & 0 deletions toolchain/check/testdata/array/generic_empty.carbon
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,10 @@ fn G(T:! type) {
// CHECK:STDOUT:
// CHECK:STDOUT: fn(%T.param_patt: type) {
// CHECK:STDOUT: !entry:
// CHECK:STDOUT: %.loc11: invalid = splice_block invalid {
// CHECK:STDOUT: %T.param: type = value_param runtime_param<invalid>
// CHECK:STDOUT: %T.loc11_6.1: type = bind_symbolic_name T, 0, %T.param [symbolic = %T.loc11_6.2 (constants.%T)]
// CHECK:STDOUT: }
// CHECK:STDOUT: %T.ref: type = name_ref T, %T.loc11_6.1 [symbolic = %T.loc11_6.2 (constants.%T)]
// CHECK:STDOUT: %.loc13_16: i32 = int_literal 0 [template = constants.%.2]
// CHECK:STDOUT: %.loc13_17.1: type = array_type %.loc13_16, %T [symbolic = %.loc13_17.2 (constants.%.3)]
Expand Down
5 changes: 5 additions & 0 deletions toolchain/check/testdata/as/adapter_conversion.carbon
Original file line number Diff line number Diff line change
Expand Up @@ -207,6 +207,11 @@ var b: B = {.x = 1} as B;
// CHECK:STDOUT:
// CHECK:STDOUT: fn @Make() -> %return: %A {
// CHECK:STDOUT: !entry:
// CHECK:STDOUT: %.loc8: invalid = splice_block invalid {
// CHECK:STDOUT: %A.ref: type = name_ref A, file.%A.decl [template = constants.%A]
// CHECK:STDOUT: %return.param: ref %A = out_param runtime_param0
// CHECK:STDOUT: %return: ref %A = return_slot %return.param
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc9_18: i32 = int_literal 1 [template = constants.%.6]
// CHECK:STDOUT: %.loc9_26: i32 = int_literal 2 [template = constants.%.7]
// CHECK:STDOUT: %.loc9_27.1: %.3 = struct_literal (%.loc9_18, %.loc9_26)
Expand Down
7 changes: 7 additions & 0 deletions toolchain/check/testdata/as/basic.carbon
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,13 @@ fn Main() -> i32 {
// CHECK:STDOUT:
// CHECK:STDOUT: fn @Main() -> i32 {
// CHECK:STDOUT: !entry:
// CHECK:STDOUT: %.loc11_18: invalid = splice_block invalid {
// CHECK:STDOUT: %int.make_type_32.loc11: init type = call constants.%Int32() [template = i32]
// CHECK:STDOUT: %.loc11_14.1: type = value_of_initializer %int.make_type_32.loc11 [template = i32]
// CHECK:STDOUT: %.loc11_14.2: type = converted %int.make_type_32.loc11, %.loc11_14.1 [template = i32]
// CHECK:STDOUT: %return.param: ref i32 = out_param runtime_param0
// CHECK:STDOUT: %return: ref i32 = return_slot %return.param
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc12_10: i32 = int_literal 1 [template = constants.%.2]
// CHECK:STDOUT: %int.make_type_32.loc12: init type = call constants.%Int32() [template = i32]
// CHECK:STDOUT: %.loc12_15.1: type = value_of_initializer %int.make_type_32.loc12 [template = i32]
Expand Down
14 changes: 13 additions & 1 deletion toolchain/check/testdata/as/identity.carbon
Original file line number Diff line number Diff line change
Expand Up @@ -85,7 +85,7 @@ fn Initializing() {
// CHECK:STDOUT: %p.param_patt: %.5 = value_param_pattern %p.patt, runtime_param0
// CHECK:STDOUT: } {
// CHECK:STDOUT: %X.ref.loc21: type = name_ref X, file.%X.decl [template = constants.%X]
// CHECK:STDOUT: %.loc21: type = ptr_type %X [template = constants.%.5]
// CHECK:STDOUT: %.loc21_18: type = ptr_type %X [template = constants.%.5]
// CHECK:STDOUT: %p.param: %.5 = value_param runtime_param0
// CHECK:STDOUT: %p: %.5 = bind_name p, %p.param
// CHECK:STDOUT: }
Expand All @@ -109,6 +109,11 @@ fn Initializing() {
// CHECK:STDOUT:
// CHECK:STDOUT: fn @Value(%n.param_patt: %X) {
// CHECK:STDOUT: !entry:
// CHECK:STDOUT: %.loc17: invalid = splice_block invalid {
// CHECK:STDOUT: %X.ref.loc17: type = name_ref X, file.%X.decl [template = constants.%X]
// CHECK:STDOUT: %n.param: %X = value_param runtime_param0
// CHECK:STDOUT: %n: %X = bind_name n, %n.param
// CHECK:STDOUT: }
// CHECK:STDOUT: %X.ref.loc18_10: type = name_ref X, file.%X.decl [template = constants.%X]
// CHECK:STDOUT: %n.ref: %X = name_ref n, %n
// CHECK:STDOUT: %X.ref.loc18_19: type = name_ref X, file.%X.decl [template = constants.%X]
Expand All @@ -118,6 +123,12 @@ fn Initializing() {
// CHECK:STDOUT:
// CHECK:STDOUT: fn @Reference(%p.param_patt: %.5) {
// CHECK:STDOUT: !entry:
// CHECK:STDOUT: %.loc21_21: invalid = splice_block invalid {
// CHECK:STDOUT: %X.ref.loc21: type = name_ref X, file.%X.decl [template = constants.%X]
// CHECK:STDOUT: %.loc21_18: type = ptr_type %X [template = constants.%.5]
// CHECK:STDOUT: %p.param: %.5 = value_param runtime_param0
// CHECK:STDOUT: %p: %.5 = bind_name p, %p.param
// CHECK:STDOUT: }
// CHECK:STDOUT: %X.ref.loc22_10: type = name_ref X, file.%X.decl [template = constants.%X]
// CHECK:STDOUT: %.loc22_11: type = ptr_type %X [template = constants.%.5]
// CHECK:STDOUT: %p.ref: %.5 = name_ref p, %p
Expand All @@ -132,6 +143,7 @@ fn Initializing() {
// CHECK:STDOUT:
// CHECK:STDOUT: fn @Initializing() {
// CHECK:STDOUT: !entry:
// CHECK:STDOUT: %.loc27: invalid = splice_block invalid {}
// CHECK:STDOUT: %X.ref.loc28_10: type = name_ref X, file.%X.decl [template = constants.%X]
// CHECK:STDOUT: %x.var: ref %X = var x
// CHECK:STDOUT: %x: ref %X = bind_name x, %x.var
Expand Down
2 changes: 2 additions & 0 deletions toolchain/check/testdata/as/no_prelude/tuple.carbon
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,7 @@ fn Var() {
// CHECK:STDOUT:
// CHECK:STDOUT: fn @Let() {
// CHECK:STDOUT: !entry:
// CHECK:STDOUT: %.loc17: invalid = splice_block invalid {}
// CHECK:STDOUT: %X.ref.loc19_11: type = name_ref X, file.%X.decl [template = constants.%X]
// CHECK:STDOUT: %X.ref.loc19_14: type = name_ref X, file.%X.decl [template = constants.%X]
// CHECK:STDOUT: %.loc19_15.1: %.4 = tuple_literal (%X.ref.loc19_11, %X.ref.loc19_14)
Expand Down Expand Up @@ -102,6 +103,7 @@ fn Var() {
// CHECK:STDOUT:
// CHECK:STDOUT: fn @Var() {
// CHECK:STDOUT: !entry:
// CHECK:STDOUT: %.loc22: invalid = splice_block invalid {}
// CHECK:STDOUT: %X.ref.loc24_11: type = name_ref X, file.%X.decl [template = constants.%X]
// CHECK:STDOUT: %X.ref.loc24_14: type = name_ref X, file.%X.decl [template = constants.%X]
// CHECK:STDOUT: %.loc24_15.1: %.4 = tuple_literal (%X.ref.loc24_11, %X.ref.loc24_14)
Expand Down
20 changes: 20 additions & 0 deletions toolchain/check/testdata/as/overloaded.carbon
Original file line number Diff line number Diff line change
Expand Up @@ -209,6 +209,16 @@ let n: i32 = ((4 as i32) as X) as i32;
// CHECK:STDOUT:
// CHECK:STDOUT: fn @Convert.2[%self.param_patt: i32]() -> %return: %X {
// CHECK:STDOUT: !entry:
// CHECK:STDOUT: %.loc16_32: invalid = splice_block invalid {
// CHECK:STDOUT: %int.make_type_32: init type = call constants.%Int32() [template = i32]
// CHECK:STDOUT: %.loc16_20.1: type = value_of_initializer %int.make_type_32 [template = i32]
// CHECK:STDOUT: %.loc16_20.2: type = converted %int.make_type_32, %.loc16_20.1 [template = i32]
// CHECK:STDOUT: %X.ref: type = name_ref X, file.%X.decl [template = constants.%X]
// CHECK:STDOUT: %self.param: i32 = value_param runtime_param0
// CHECK:STDOUT: %self: i32 = bind_name self, %self.param
// CHECK:STDOUT: %return.param: ref %X = out_param runtime_param1
// CHECK:STDOUT: %return: ref %X = return_slot %return.param
// CHECK:STDOUT: }
// CHECK:STDOUT: %self.ref: i32 = name_ref self, %self
// CHECK:STDOUT: %.loc16_51.1: %.3 = struct_literal (%self.ref)
// CHECK:STDOUT: %.loc16_51.2: ref i32 = class_element_access %return, element0
Expand All @@ -220,6 +230,16 @@ let n: i32 = ((4 as i32) as X) as i32;
// CHECK:STDOUT:
// CHECK:STDOUT: fn @Convert.3[%self.param_patt: %X]() -> i32 {
// CHECK:STDOUT: !entry:
// CHECK:STDOUT: %.loc20_32: invalid = splice_block invalid {
// CHECK:STDOUT: %X.ref: type = name_ref X, file.%X.decl [template = constants.%X]
// CHECK:STDOUT: %int.make_type_32: init type = call constants.%Int32() [template = i32]
// CHECK:STDOUT: %.loc20_28.1: type = value_of_initializer %int.make_type_32 [template = i32]
// CHECK:STDOUT: %.loc20_28.2: type = converted %int.make_type_32, %.loc20_28.1 [template = i32]
// CHECK:STDOUT: %self.param: %X = value_param runtime_param0
// CHECK:STDOUT: %self: %X = bind_name self, %self.param
// CHECK:STDOUT: %return.param: ref i32 = out_param runtime_param1
// CHECK:STDOUT: %return: ref i32 = return_slot %return.param
// CHECK:STDOUT: }
// CHECK:STDOUT: %self.ref: %X = name_ref self, %self
// CHECK:STDOUT: %n.ref: %.2 = name_ref n, @X.%.loc12_8 [template = @X.%.loc12_8]
// CHECK:STDOUT: %.loc20_45.1: ref i32 = class_element_access %self.ref, element0
Expand Down
4 changes: 4 additions & 0 deletions toolchain/check/testdata/basics/fail_bad_run.carbon
Original file line number Diff line number Diff line change
Expand Up @@ -57,5 +57,9 @@ fn Run() -> String {}
// CHECK:STDOUT:
// CHECK:STDOUT: fn @Run() -> %return: String {
// CHECK:STDOUT: !entry:
// CHECK:STDOUT: %.loc18_20: invalid = splice_block invalid {
// CHECK:STDOUT: %return.param: ref String = out_param runtime_param0
// CHECK:STDOUT: %return: ref String = return_slot %return.param
// CHECK:STDOUT: }
// CHECK:STDOUT: }
// CHECK:STDOUT:
7 changes: 7 additions & 0 deletions toolchain/check/testdata/basics/fail_bad_run_2.carbon
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,13 @@ fn Run(n: i32) {}
// CHECK:STDOUT:
// CHECK:STDOUT: fn @Run(%n.param_patt: i32) {
// CHECK:STDOUT: !entry:
// CHECK:STDOUT: %.loc14_16: invalid = splice_block invalid {
// CHECK:STDOUT: %int.make_type_32: init type = call constants.%Int32() [template = i32]
// CHECK:STDOUT: %.loc14_11.1: type = value_of_initializer %int.make_type_32 [template = i32]
// CHECK:STDOUT: %.loc14_11.2: type = converted %int.make_type_32, %.loc14_11.1 [template = i32]
// CHECK:STDOUT: %n.param: i32 = value_param runtime_param0
// CHECK:STDOUT: %n: i32 = bind_name n, %n.param
// CHECK:STDOUT: }
// CHECK:STDOUT: return
// CHECK:STDOUT: }
// CHECK:STDOUT:
2 changes: 2 additions & 0 deletions toolchain/check/testdata/basics/multifile.carbon
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,7 @@ fn B() {}
// CHECK:STDOUT:
// CHECK:STDOUT: fn @A() {
// CHECK:STDOUT: !entry:
// CHECK:STDOUT: %.loc3: invalid = splice_block invalid {}
// CHECK:STDOUT: return
// CHECK:STDOUT: }
// CHECK:STDOUT:
Expand Down Expand Up @@ -87,6 +88,7 @@ fn B() {}
// CHECK:STDOUT:
// CHECK:STDOUT: fn @B() {
// CHECK:STDOUT: !entry:
// CHECK:STDOUT: %.loc3: invalid = splice_block invalid {}
// CHECK:STDOUT: return
// CHECK:STDOUT: }
// CHECK:STDOUT:
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ fn Main() {
// CHECK:STDOUT:
// CHECK:STDOUT: fn @Main() {
// CHECK:STDOUT: !entry:
// CHECK:STDOUT: %.loc11: invalid = splice_block invalid {}
// CHECK:STDOUT: %x.ref: <error> = name_ref x, <error> [template = <error>]
// CHECK:STDOUT: return
// CHECK:STDOUT: }
Expand Down
Loading
Loading