From 270174cd82b531d4ecf309c21bd997553c92846f Mon Sep 17 00:00:00 2001 From: Jon Ross-Perkins Date: Tue, 27 May 2025 16:31:22 -0700 Subject: [PATCH] Move the ir test (#5510) This test has its own directory, since #3056. We haven't added any more, so fold it into basics. Also simplify it a little using `else`, and `no_prelude`. Note, I'm not even sure how much we need this test given the `%.loc_`, but I feel slightly worse deleting it. --- .../duplicate_name_same_line.carbon | 63 +++++++++ .../ir/duplicate_name_same_line.carbon | 123 ------------------ 2 files changed, 63 insertions(+), 123 deletions(-) create mode 100644 toolchain/check/testdata/basics/no_prelude/duplicate_name_same_line.carbon delete mode 100644 toolchain/check/testdata/ir/duplicate_name_same_line.carbon diff --git a/toolchain/check/testdata/basics/no_prelude/duplicate_name_same_line.carbon b/toolchain/check/testdata/basics/no_prelude/duplicate_name_same_line.carbon new file mode 100644 index 000000000000..5d5ff535bc7f --- /dev/null +++ b/toolchain/check/testdata/basics/no_prelude/duplicate_name_same_line.carbon @@ -0,0 +1,63 @@ +// Part of the Carbon Language project, under the Apache License v2.0 with LLVM +// Exceptions. See /LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +// EXTRA-ARGS: --dump-sem-ir-ranges=only +// +// AUTOUPDATE +// TIP: To test this file alone, run: +// TIP: bazel test //toolchain/testing:file_test --test_arg=--file_tests=toolchain/check/testdata/basics/no_prelude/duplicate_name_same_line.carbon +// TIP: To dump output, run: +// TIP: bazel run //toolchain/testing:file_test -- --dump_output --file_tests=toolchain/check/testdata/basics/no_prelude/duplicate_name_same_line.carbon + +fn A() { + if (true) { + // This declares `n` in two different scopes, it's just showing the IR + // behavior of having both on the same line. + //@dump-sem-ir-begin + var n: (); } else { var n: (); + //@dump-sem-ir-end + } +} + +// CHECK:STDOUT: --- duplicate_name_same_line.carbon +// CHECK:STDOUT: +// CHECK:STDOUT: constants { +// CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %empty_tuple.type [concrete] +// CHECK:STDOUT: } +// CHECK:STDOUT: +// CHECK:STDOUT: fn @A() { +// CHECK:STDOUT: !entry: +// CHECK:STDOUT: +// CHECK:STDOUT: +// CHECK:STDOUT: !if.then: +// CHECK:STDOUT: name_binding_decl { +// CHECK:STDOUT: %n.patt.loc18_9: %pattern_type = binding_pattern n [concrete] +// CHECK:STDOUT: %n.var_patt.loc18_5: %pattern_type = var_pattern %n.patt.loc18_9 [concrete] +// CHECK:STDOUT: } +// CHECK:STDOUT: %n.var.loc18_5: ref %empty_tuple.type = var %n.var_patt.loc18_5 +// CHECK:STDOUT: %.loc18_13.1: type = splice_block %.loc18_13.3 [concrete = constants.%empty_tuple.type] { +// CHECK:STDOUT: %.loc18_13.2: %empty_tuple.type = tuple_literal () +// CHECK:STDOUT: %.loc18_13.3: type = converted %.loc18_13.2, constants.%empty_tuple.type [concrete = constants.%empty_tuple.type] +// CHECK:STDOUT: } +// CHECK:STDOUT: %n.loc18_9: ref %empty_tuple.type = bind_name n, %n.var.loc18_5 +// CHECK:STDOUT: +// CHECK:STDOUT: +// CHECK:STDOUT: !if.else: +// CHECK:STDOUT: name_binding_decl { +// CHECK:STDOUT: %n.patt.loc18_29: %pattern_type = binding_pattern n [concrete] +// CHECK:STDOUT: %n.var_patt.loc18_25: %pattern_type = var_pattern %n.patt.loc18_29 [concrete] +// CHECK:STDOUT: } +// CHECK:STDOUT: %n.var.loc18_25: ref %empty_tuple.type = var %n.var_patt.loc18_25 +// CHECK:STDOUT: %.loc18_33.1: type = splice_block %.loc18_33.3 [concrete = constants.%empty_tuple.type] { +// CHECK:STDOUT: %.loc18_33.2: %empty_tuple.type = tuple_literal () +// CHECK:STDOUT: %.loc18_33.3: type = converted %.loc18_33.2, constants.%empty_tuple.type [concrete = constants.%empty_tuple.type] +// CHECK:STDOUT: } +// CHECK:STDOUT: %n.loc18_29: ref %empty_tuple.type = bind_name n, %n.var.loc18_25 +// CHECK:STDOUT: +// CHECK:STDOUT: +// CHECK:STDOUT: !if.done: +// CHECK:STDOUT: +// CHECK:STDOUT: } +// CHECK:STDOUT: diff --git a/toolchain/check/testdata/ir/duplicate_name_same_line.carbon b/toolchain/check/testdata/ir/duplicate_name_same_line.carbon deleted file mode 100644 index e1009eaf1260..000000000000 --- a/toolchain/check/testdata/ir/duplicate_name_same_line.carbon +++ /dev/null @@ -1,123 +0,0 @@ -// Part of the Carbon Language project, under the Apache License v2.0 with LLVM -// Exceptions. See /LICENSE for license information. -// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception -// -// AUTOUPDATE -// TIP: To test this file alone, run: -// TIP: bazel test //toolchain/testing:file_test --test_arg=--file_tests=toolchain/check/testdata/ir/duplicate_name_same_line.carbon -// TIP: To dump output, run: -// TIP: bazel run //toolchain/testing:file_test -- --dump_output --file_tests=toolchain/check/testdata/ir/duplicate_name_same_line.carbon - -fn A() { if (true) { var n: i32 = 1; } if (true) { var n: i32 = 2; } } - -// CHECK:STDOUT: --- duplicate_name_same_line.carbon -// CHECK:STDOUT: -// CHECK:STDOUT: constants { -// CHECK:STDOUT: %A.type: type = fn_type @A [concrete] -// CHECK:STDOUT: %A: %A.type = struct_value () [concrete] -// CHECK:STDOUT: %true: bool = bool_literal true [concrete] -// CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] -// CHECK:STDOUT: %Int.type: type = generic_class_type @Int [concrete] -// CHECK:STDOUT: %Int.generic: %Int.type = struct_value () [concrete] -// CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] -// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete] -// CHECK:STDOUT: %int_1.5b8: Core.IntLiteral = int_value 1 [concrete] -// CHECK:STDOUT: %ImplicitAs.type.cc7: type = generic_interface_type @ImplicitAs [concrete] -// CHECK:STDOUT: %ImplicitAs.generic: %ImplicitAs.type.cc7 = struct_value () [concrete] -// CHECK:STDOUT: %ImplicitAs.type.205: type = facet_type <@ImplicitAs, @ImplicitAs(%i32)> [concrete] -// CHECK:STDOUT: %Convert.type.1b6: type = fn_type @Convert.1, @ImplicitAs(%i32) [concrete] -// CHECK:STDOUT: %To.c80: Core.IntLiteral = bind_symbolic_name To, 0 [symbolic] -// CHECK:STDOUT: %Convert.type.0f9: type = fn_type @Convert.2, @impl.4f9(%To.c80) [symbolic] -// CHECK:STDOUT: %Convert.f06: %Convert.type.0f9 = struct_value () [symbolic] -// CHECK:STDOUT: %ImplicitAs.impl_witness.c75: = impl_witness imports.%ImplicitAs.impl_witness_table.a2f, @impl.4f9(%int_32) [concrete] -// CHECK:STDOUT: %Convert.type.035: type = fn_type @Convert.2, @impl.4f9(%int_32) [concrete] -// CHECK:STDOUT: %Convert.956: %Convert.type.035 = struct_value () [concrete] -// CHECK:STDOUT: %ImplicitAs.facet: %ImplicitAs.type.205 = facet_value Core.IntLiteral, (%ImplicitAs.impl_witness.c75) [concrete] -// CHECK:STDOUT: %.9c3: type = fn_type_with_self_type %Convert.type.1b6, %ImplicitAs.facet [concrete] -// CHECK:STDOUT: %Convert.bound.ab5: = bound_method %int_1.5b8, %Convert.956 [concrete] -// CHECK:STDOUT: %Convert.specific_fn: = specific_function %Convert.956, @Convert.2(%int_32) [concrete] -// CHECK:STDOUT: %bound_method.9a1: = bound_method %int_1.5b8, %Convert.specific_fn [concrete] -// CHECK:STDOUT: %int_1.5d2: %i32 = int_value 1 [concrete] -// CHECK:STDOUT: %int_2.ecc: Core.IntLiteral = int_value 2 [concrete] -// CHECK:STDOUT: %Convert.bound.ef9: = bound_method %int_2.ecc, %Convert.956 [concrete] -// CHECK:STDOUT: %bound_method.b92: = bound_method %int_2.ecc, %Convert.specific_fn [concrete] -// CHECK:STDOUT: %int_2.ef8: %i32 = int_value 2 [concrete] -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: imports { -// CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { -// CHECK:STDOUT: .Int = %Core.Int -// CHECK:STDOUT: .ImplicitAs = %Core.ImplicitAs -// CHECK:STDOUT: import Core//prelude -// CHECK:STDOUT: import Core//prelude/... -// CHECK:STDOUT: } -// CHECK:STDOUT: %Core.Int: %Int.type = import_ref Core//prelude/types/int, Int, loaded [concrete = constants.%Int.generic] -// CHECK:STDOUT: %Core.ImplicitAs: %ImplicitAs.type.cc7 = import_ref Core//prelude/operators/as, ImplicitAs, loaded [concrete = constants.%ImplicitAs.generic] -// CHECK:STDOUT: %Core.import_ref.a5b: @impl.4f9.%Convert.type (%Convert.type.0f9) = import_ref Core//prelude/types/int, loc19_39, loaded [symbolic = @impl.4f9.%Convert (constants.%Convert.f06)] -// CHECK:STDOUT: %ImplicitAs.impl_witness_table.a2f = impl_witness_table (%Core.import_ref.a5b), @impl.4f9 [concrete] -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: file { -// CHECK:STDOUT: package: = namespace [concrete] { -// CHECK:STDOUT: .Core = imports.%Core -// CHECK:STDOUT: .A = %A.decl -// CHECK:STDOUT: } -// CHECK:STDOUT: %Core.import = import Core -// CHECK:STDOUT: %A.decl: %A.type = fn_decl @A [concrete = constants.%A] {} {} -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: fn @A() { -// CHECK:STDOUT: !entry: -// CHECK:STDOUT: %true.loc11_14: bool = bool_literal true [concrete = constants.%true] -// CHECK:STDOUT: if %true.loc11_14 br !if.then.loc11_18 else br !if.else.loc11_18 -// CHECK:STDOUT: -// CHECK:STDOUT: !if.then.loc11_18: -// CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %n.patt.loc11_26: %pattern_type.7ce = binding_pattern n [concrete] -// CHECK:STDOUT: %n.var_patt.loc11_22: %pattern_type.7ce = var_pattern %n.patt.loc11_26 [concrete] -// CHECK:STDOUT: } -// CHECK:STDOUT: %n.var.loc11_22: ref %i32 = var %n.var_patt.loc11_22 -// CHECK:STDOUT: %int_1: Core.IntLiteral = int_value 1 [concrete = constants.%int_1.5b8] -// CHECK:STDOUT: %impl.elem0.loc11_22: %.9c3 = impl_witness_access constants.%ImplicitAs.impl_witness.c75, element0 [concrete = constants.%Convert.956] -// CHECK:STDOUT: %bound_method.loc11_22.1: = bound_method %int_1, %impl.elem0.loc11_22 [concrete = constants.%Convert.bound.ab5] -// CHECK:STDOUT: %specific_fn.loc11_22: = specific_function %impl.elem0.loc11_22, @Convert.2(constants.%int_32) [concrete = constants.%Convert.specific_fn] -// CHECK:STDOUT: %bound_method.loc11_22.2: = bound_method %int_1, %specific_fn.loc11_22 [concrete = constants.%bound_method.9a1] -// CHECK:STDOUT: %int.convert_checked.loc11_22: init %i32 = call %bound_method.loc11_22.2(%int_1) [concrete = constants.%int_1.5d2] -// CHECK:STDOUT: %.loc11_22: init %i32 = converted %int_1, %int.convert_checked.loc11_22 [concrete = constants.%int_1.5d2] -// CHECK:STDOUT: assign %n.var.loc11_22, %.loc11_22 -// CHECK:STDOUT: %.loc11_29: type = splice_block %i32.loc11_29 [concrete = constants.%i32] { -// CHECK:STDOUT: %int_32.loc11_29: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] -// CHECK:STDOUT: %i32.loc11_29: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] -// CHECK:STDOUT: } -// CHECK:STDOUT: %n.loc11_26: ref %i32 = bind_name n, %n.var.loc11_22 -// CHECK:STDOUT: br !if.else.loc11_18 -// CHECK:STDOUT: -// CHECK:STDOUT: !if.else.loc11_18: -// CHECK:STDOUT: %true.loc11_44: bool = bool_literal true [concrete = constants.%true] -// CHECK:STDOUT: if %true.loc11_44 br !if.then.loc11_48 else br !if.else.loc11_48 -// CHECK:STDOUT: -// CHECK:STDOUT: !if.then.loc11_48: -// CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %n.patt.loc11_56: %pattern_type.7ce = binding_pattern n [concrete] -// CHECK:STDOUT: %n.var_patt.loc11_52: %pattern_type.7ce = var_pattern %n.patt.loc11_56 [concrete] -// CHECK:STDOUT: } -// CHECK:STDOUT: %n.var.loc11_52: ref %i32 = var %n.var_patt.loc11_52 -// CHECK:STDOUT: %int_2: Core.IntLiteral = int_value 2 [concrete = constants.%int_2.ecc] -// CHECK:STDOUT: %impl.elem0.loc11_52: %.9c3 = impl_witness_access constants.%ImplicitAs.impl_witness.c75, element0 [concrete = constants.%Convert.956] -// CHECK:STDOUT: %bound_method.loc11_52.1: = bound_method %int_2, %impl.elem0.loc11_52 [concrete = constants.%Convert.bound.ef9] -// CHECK:STDOUT: %specific_fn.loc11_52: = specific_function %impl.elem0.loc11_52, @Convert.2(constants.%int_32) [concrete = constants.%Convert.specific_fn] -// CHECK:STDOUT: %bound_method.loc11_52.2: = bound_method %int_2, %specific_fn.loc11_52 [concrete = constants.%bound_method.b92] -// CHECK:STDOUT: %int.convert_checked.loc11_52: init %i32 = call %bound_method.loc11_52.2(%int_2) [concrete = constants.%int_2.ef8] -// CHECK:STDOUT: %.loc11_52: init %i32 = converted %int_2, %int.convert_checked.loc11_52 [concrete = constants.%int_2.ef8] -// CHECK:STDOUT: assign %n.var.loc11_52, %.loc11_52 -// CHECK:STDOUT: %.loc11_59: type = splice_block %i32.loc11_59 [concrete = constants.%i32] { -// CHECK:STDOUT: %int_32.loc11_59: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] -// CHECK:STDOUT: %i32.loc11_59: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] -// CHECK:STDOUT: } -// CHECK:STDOUT: %n.loc11_56: ref %i32 = bind_name n, %n.var.loc11_52 -// CHECK:STDOUT: br !if.else.loc11_48 -// CHECK:STDOUT: -// CHECK:STDOUT: !if.else.loc11_48: -// CHECK:STDOUT: return -// CHECK:STDOUT: } -// CHECK:STDOUT: