diff --git a/toolchain/check/handle_alias.cpp b/toolchain/check/handle_alias.cpp index f93d80721044..f07da27793fe 100644 --- a/toolchain/check/handle_alias.cpp +++ b/toolchain/check/handle_alias.cpp @@ -46,29 +46,16 @@ auto HandleParseNode(Context& context, Parse::AliasId /*node_id*/) -> bool { {.name_id = name_context.name_id_for_new_inst(), .parent_scope_id = name_context.parent_scope_id}); - auto alias_type_id = SemIR::TypeId::None; - auto alias_value_id = SemIR::InstId::None; - if (auto inst = context.insts().TryGetAs(expr_id)) { - // Pass through name references, albeit changing the name in use. - alias_type_id = inst->type_id; - alias_value_id = inst->value_id; - } else if (auto inst = - context.insts().TryGetAs(expr_id)) { - // Treat type literals such as `type` or `bool` like name references. - alias_type_id = inst->type_id; - alias_value_id = inst->value_id; - } else { - CARBON_DIAGNOSTIC(AliasRequiresNameRef, Error, - "alias initializer must be a name reference"); - context.emitter().Emit(expr_node, AliasRequiresNameRef); - alias_type_id = SemIR::ErrorInst::TypeId; - alias_value_id = SemIR::ErrorInst::InstId; + if (!context.constant_values().Get(expr_id).is_constant()) { + CARBON_DIAGNOSTIC(AliasRequiresConstantValue, Error, + "alias refers to a runtime value"); + context.emitter().Emit(expr_node, AliasRequiresConstantValue); } - auto alias_id = - AddInst(context, name_context.loc_id, - {.type_id = alias_type_id, - .entity_name_id = entity_name_id, - .value_id = alias_value_id}); + auto alias_id = AddInst( + context, name_context.loc_id, + {.type_id = context.insts().Get(expr_id).type_id(), + .entity_name_id = entity_name_id, + .value_id = expr_id}); // Add the name of the binding to the current scope. context.decl_name_stack().PopScope(); diff --git a/toolchain/check/testdata/alias/basics.carbon b/toolchain/check/testdata/alias/basics.carbon index fb12584e0478..a34359719aad 100644 --- a/toolchain/check/testdata/alias/basics.carbon +++ b/toolchain/check/testdata/alias/basics.carbon @@ -35,6 +35,18 @@ alias c = b; let d: c = {}; //@dump-sem-ir-end +// --- alias_to_generic.carbon + +library "[[@TEST_NAME]]"; + +class A(T:! type) {} + +//@dump-sem-ir-begin +alias a = A({}); +//@dump-sem-ir-end + +let v: a = {} as A({}); + // --- fail_control_flow.carbon library "[[@TEST_NAME]]"; @@ -82,7 +94,7 @@ library "[[@TEST_NAME]]"; var a: () = (); var b: ()* = &a; -// CHECK:STDERR: fail_not_constant.carbon:[[@LINE+4]]:11: error: alias initializer must be a name reference [AliasRequiresNameRef] +// CHECK:STDERR: fail_not_constant.carbon:[[@LINE+4]]:11: error: alias refers to a runtime value [AliasRequiresConstantValue] // CHECK:STDERR: alias c = *b; // CHECK:STDERR: ^~ // CHECK:STDERR: @@ -92,14 +104,10 @@ alias c = *b; library "[[@TEST_NAME]]"; -// CHECK:STDERR: fail_params.carbon:[[@LINE+8]]:8: error: `alias` declaration cannot have parameters [UnexpectedDeclNameParams] +// CHECK:STDERR: fail_params.carbon:[[@LINE+4]]:8: error: `alias` declaration cannot have parameters [UnexpectedDeclNameParams] // CHECK:STDERR: alias A(T:! type) = T*; // CHECK:STDERR: ^~~~~~~~~~ // CHECK:STDERR: -// CHECK:STDERR: fail_params.carbon:[[@LINE+4]]:21: error: alias initializer must be a name reference [AliasRequiresNameRef] -// CHECK:STDERR: alias A(T:! type) = T*; -// CHECK:STDERR: ^~ -// CHECK:STDERR: alias A(T:! type) = T*; // --- fail_modifiers.carbon @@ -155,7 +163,7 @@ extern alias C = Class; // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: %C.ref: type = name_ref C, %C.decl [concrete = constants.%C] -// CHECK:STDOUT: %c: type = alias_binding c, %C.decl [concrete = constants.%C] +// CHECK:STDOUT: %c: type = alias_binding c, %C.ref [concrete = constants.%C] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: fn @__global_init() { @@ -176,11 +184,11 @@ extern alias C = Class; // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: %C.ref: type = name_ref C, %C.decl [concrete = constants.%C] -// CHECK:STDOUT: %a: type = alias_binding a, %C.decl [concrete = constants.%C] +// CHECK:STDOUT: %a: type = alias_binding a, %C.ref [concrete = constants.%C] // CHECK:STDOUT: %a.ref: type = name_ref a, %a [concrete = constants.%C] -// CHECK:STDOUT: %b: type = alias_binding b, %a [concrete = constants.%C] +// CHECK:STDOUT: %b: type = alias_binding b, %a.ref [concrete = constants.%C] // CHECK:STDOUT: %b.ref: type = name_ref b, %b [concrete = constants.%C] -// CHECK:STDOUT: %c: type = alias_binding c, %b [concrete = constants.%C] +// CHECK:STDOUT: %c: type = alias_binding c, %b.ref [concrete = constants.%C] // CHECK:STDOUT: name_binding_decl { // CHECK:STDOUT: %d.patt: %pattern_type = value_binding_pattern d [concrete] // CHECK:STDOUT: } @@ -199,3 +207,26 @@ extern alias C = Class; // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: +// CHECK:STDOUT: --- alias_to_generic.carbon +// CHECK:STDOUT: +// CHECK:STDOUT: constants { +// CHECK:STDOUT: %A.type: type = generic_class_type @A [concrete] +// CHECK:STDOUT: %A.generic: %A.type = struct_value () [concrete] +// CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] +// CHECK:STDOUT: %empty_struct: %empty_struct_type = struct_value () [concrete] +// CHECK:STDOUT: %A.ed7: type = class_type @A, @A(%empty_struct_type) [concrete] +// CHECK:STDOUT: } +// CHECK:STDOUT: +// CHECK:STDOUT: file { +// CHECK:STDOUT: %A.ref: %A.type = name_ref A, %A.decl [concrete = constants.%A.generic] +// CHECK:STDOUT: %.loc7_14: %empty_struct_type = struct_literal () [concrete = constants.%empty_struct] +// CHECK:STDOUT: %.loc7_15: type = converted %.loc7_14, constants.%empty_struct_type [concrete = constants.%empty_struct_type] +// CHECK:STDOUT: %A: type = class_type @A, @A(constants.%empty_struct_type) [concrete = constants.%A.ed7] +// CHECK:STDOUT: %a: type = alias_binding a, %A [concrete = constants.%A.ed7] +// CHECK:STDOUT: } +// CHECK:STDOUT: +// CHECK:STDOUT: fn @__global_init() { +// CHECK:STDOUT: !entry: +// CHECK:STDOUT: +// CHECK:STDOUT: } +// CHECK:STDOUT: diff --git a/toolchain/check/testdata/alias/builtins.carbon b/toolchain/check/testdata/alias/builtins.carbon index 9f3f96669b4c..e9e4c93844b4 100644 --- a/toolchain/check/testdata/alias/builtins.carbon +++ b/toolchain/check/testdata/alias/builtins.carbon @@ -26,18 +26,13 @@ library "[[@TEST_NAME]]"; alias b = bool; //@dump-sem-ir-end -// --- fail_bool_value.carbon +// --- bool_value.carbon library "[[@TEST_NAME]]"; //@dump-sem-ir-begin -// CHECK:STDERR: fail_bool_value.carbon:[[@LINE+4]]:11: error: alias initializer must be a name reference [AliasRequiresNameRef] -// CHECK:STDERR: alias a = false; -// CHECK:STDERR: ^~~~~ -// CHECK:STDERR: alias a = false; -// This fails silently due to the above diagnostic. let a_test: bool = a; //@dump-sem-ir-end @@ -50,17 +45,17 @@ let a_test: bool = a; // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32] -// CHECK:STDOUT: %a: type = alias_binding a, constants.%i32 [concrete = constants.%i32] +// CHECK:STDOUT: %a: type = alias_binding a, %i32 [concrete = constants.%i32] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- bool.carbon // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: %.loc5: type = type_literal bool [concrete = bool] -// CHECK:STDOUT: %b: type = alias_binding b, bool [concrete = bool] +// CHECK:STDOUT: %b: type = alias_binding b, %.loc5 [concrete = bool] // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: --- fail_bool_value.carbon +// CHECK:STDOUT: --- bool_value.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %false: bool = bool_literal false [concrete] @@ -69,17 +64,17 @@ let a_test: bool = a; // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: %false: bool = bool_literal false [concrete = constants.%false] -// CHECK:STDOUT: %a: = alias_binding a, [concrete = ] +// CHECK:STDOUT: %a: bool = alias_binding a, %false [concrete = constants.%false] // CHECK:STDOUT: name_binding_decl { // CHECK:STDOUT: %a_test.patt: %pattern_type.831 = value_binding_pattern a_test [concrete] // CHECK:STDOUT: } -// CHECK:STDOUT: %.loc12: type = type_literal bool [concrete = bool] -// CHECK:STDOUT: %a_test: bool = value_binding a_test, [concrete = ] +// CHECK:STDOUT: %.loc7: type = type_literal bool [concrete = bool] +// CHECK:STDOUT: %a_test: bool = value_binding a_test, @__global_init.%a.ref // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: fn @__global_init() { // CHECK:STDOUT: !entry: -// CHECK:STDOUT: %a.ref: = name_ref a, file.%a [concrete = ] +// CHECK:STDOUT: %a.ref: bool = name_ref a, file.%a [concrete = constants.%false] // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/alias/export_name.carbon b/toolchain/check/testdata/alias/export_name.carbon index 636fcbfec298..1c41c13c0b26 100644 --- a/toolchain/check/testdata/alias/export_name.carbon +++ b/toolchain/check/testdata/alias/export_name.carbon @@ -96,7 +96,7 @@ var d: D* = &c; // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {} // CHECK:STDOUT: %C.ref: type = name_ref C, %C.decl [concrete = constants.%C] -// CHECK:STDOUT: %D: type = alias_binding D, %C.decl [concrete = constants.%C] +// CHECK:STDOUT: %D: type = alias_binding D, %C.ref [concrete = constants.%C] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @C { diff --git a/toolchain/check/testdata/alias/import.carbon b/toolchain/check/testdata/alias/import.carbon index f7bf468a7b7b..0c46d44be0e0 100644 --- a/toolchain/check/testdata/alias/import.carbon +++ b/toolchain/check/testdata/alias/import.carbon @@ -105,7 +105,7 @@ var c: () = a_alias_alias; // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {} // CHECK:STDOUT: %C.ref.loc6: type = name_ref C, %C.decl [concrete = constants.%C] -// CHECK:STDOUT: %c_alias: type = alias_binding c_alias, %C.decl [concrete = constants.%C] +// CHECK:STDOUT: %c_alias: type = alias_binding c_alias, %C.ref.loc6 [concrete = constants.%C] // CHECK:STDOUT: name_binding_decl { // CHECK:STDOUT: %a.patt: %pattern_type.506 = ref_binding_pattern a [concrete] // CHECK:STDOUT: %a.var_patt: %pattern_type.506 = var_pattern %a.patt [concrete] @@ -185,7 +185,7 @@ var c: () = a_alias_alias; // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: %c_alias.ref.loc6: type = name_ref c_alias, imports.%Main.c_alias [concrete = constants.%C] -// CHECK:STDOUT: %c_alias_alias: type = alias_binding c_alias_alias, imports.%Main.c_alias [concrete = constants.%C] +// CHECK:STDOUT: %c_alias_alias: type = alias_binding c_alias_alias, %c_alias.ref.loc6 [concrete = constants.%C] // CHECK:STDOUT: name_binding_decl { // CHECK:STDOUT: %b.patt: %pattern_type.506 = ref_binding_pattern b [concrete] // CHECK:STDOUT: %b.var_patt: %pattern_type.506 = var_pattern %b.patt [concrete] @@ -324,7 +324,7 @@ var c: () = a_alias_alias; // CHECK:STDOUT: } // CHECK:STDOUT: %a: ref %empty_tuple.type = ref_binding a, %a.var [concrete = %a.var] // CHECK:STDOUT: %a.ref: ref %empty_tuple.type = name_ref a, %a [concrete = %a.var] -// CHECK:STDOUT: %a_alias: ref %empty_tuple.type = alias_binding a_alias, %a [concrete = %a.var] +// CHECK:STDOUT: %a_alias: ref %empty_tuple.type = alias_binding a_alias, %a.ref [concrete = %a.var] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: fn @__global_init() { @@ -367,7 +367,7 @@ var c: () = a_alias_alias; // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: %a_alias.ref: ref %empty_tuple.type = name_ref a_alias, imports.%Main.a_alias [concrete = imports.%a.var] -// CHECK:STDOUT: %a_alias_alias: ref %empty_tuple.type = alias_binding a_alias_alias, imports.%Main.a_alias [concrete = imports.%a.var] +// CHECK:STDOUT: %a_alias_alias: ref %empty_tuple.type = alias_binding a_alias_alias, %a_alias.ref [concrete = imports.%a.var] // CHECK:STDOUT: name_binding_decl { // CHECK:STDOUT: %b.patt: %pattern_type = ref_binding_pattern b [concrete] // CHECK:STDOUT: %b.var_patt: %pattern_type = var_pattern %b.patt [concrete] diff --git a/toolchain/check/testdata/alias/import_access.carbon b/toolchain/check/testdata/alias/import_access.carbon index c51ddcf7ae16..d8bc4895d4ca 100644 --- a/toolchain/check/testdata/alias/import_access.carbon +++ b/toolchain/check/testdata/alias/import_access.carbon @@ -71,7 +71,7 @@ var inst: Test.A = {}; // CHECK:STDOUT: } // CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {} // CHECK:STDOUT: %C.ref: type = name_ref C, %C.decl [concrete = constants.%C] -// CHECK:STDOUT: %A: type = alias_binding A, %C.decl [concrete = constants.%C] +// CHECK:STDOUT: %A: type = alias_binding A, %C.ref [concrete = constants.%C] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @C { diff --git a/toolchain/check/testdata/alias/import_order.carbon b/toolchain/check/testdata/alias/import_order.carbon index 22257486f1ae..9b446449921f 100644 --- a/toolchain/check/testdata/alias/import_order.carbon +++ b/toolchain/check/testdata/alias/import_order.carbon @@ -54,13 +54,13 @@ var a_val: a = {.v = b_val.v}; // CHECK:STDOUT: } // CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {} // CHECK:STDOUT: %C.ref: type = name_ref C, %C.decl [concrete = constants.%C] -// CHECK:STDOUT: %a: type = alias_binding a, %C.decl [concrete = constants.%C] +// CHECK:STDOUT: %a: type = alias_binding a, %C.ref [concrete = constants.%C] // CHECK:STDOUT: %a.ref: type = name_ref a, %a [concrete = constants.%C] -// CHECK:STDOUT: %b: type = alias_binding b, %a [concrete = constants.%C] +// CHECK:STDOUT: %b: type = alias_binding b, %a.ref [concrete = constants.%C] // CHECK:STDOUT: %b.ref: type = name_ref b, %b [concrete = constants.%C] -// CHECK:STDOUT: %c: type = alias_binding c, %b [concrete = constants.%C] +// CHECK:STDOUT: %c: type = alias_binding c, %b.ref [concrete = constants.%C] // CHECK:STDOUT: %c.ref: type = name_ref c, %c [concrete = constants.%C] -// CHECK:STDOUT: %d: type = alias_binding d, %c [concrete = constants.%C] +// CHECK:STDOUT: %d: type = alias_binding d, %c.ref [concrete = constants.%C] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @C { diff --git a/toolchain/check/testdata/alias/in_namespace.carbon b/toolchain/check/testdata/alias/in_namespace.carbon index 544978ed36e9..c9c3b84b9976 100644 --- a/toolchain/check/testdata/alias/in_namespace.carbon +++ b/toolchain/check/testdata/alias/in_namespace.carbon @@ -34,14 +34,10 @@ library "[[@TEST_NAME]]"; namespace NS; fn F() -> {} { - // CHECK:STDERR: fail_local_in_namespace.carbon:[[@LINE+8]]:9: error: name `NS` not found [NameNotFound] + // CHECK:STDERR: fail_local_in_namespace.carbon:[[@LINE+4]]:9: error: name `NS` not found [NameNotFound] // CHECK:STDERR: alias NS.a = {}; // CHECK:STDERR: ^~ // CHECK:STDERR: - // CHECK:STDERR: fail_local_in_namespace.carbon:[[@LINE+4]]:16: error: alias initializer must be a name reference [AliasRequiresNameRef] - // CHECK:STDERR: alias NS.a = {}; - // CHECK:STDERR: ^~ - // CHECK:STDERR: alias NS.a = {}; // CHECK:STDERR: fail_local_in_namespace.carbon:[[@LINE+4]]:10: error: member name `a` not found in `NS` [MemberNameNotFoundInInstScope] // CHECK:STDERR: return NS.a; @@ -62,7 +58,7 @@ fn F() -> {} { // CHECK:STDOUT: .a = %a // CHECK:STDOUT: } // CHECK:STDOUT: %C.ref: type = name_ref C, %C.decl [concrete = constants.%C] -// CHECK:STDOUT: %a: type = alias_binding a, %C.decl [concrete = constants.%C] +// CHECK:STDOUT: %a: type = alias_binding a, %C.ref [concrete = constants.%C] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: fn @__global_init() { diff --git a/toolchain/check/testdata/alias/local.carbon b/toolchain/check/testdata/alias/local.carbon deleted file mode 100644 index 71fdae002559..000000000000 --- a/toolchain/check/testdata/alias/local.carbon +++ /dev/null @@ -1,38 +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 -// -// INCLUDE-FILE: toolchain/testing/testdata/min_prelude/destroy.carbon -// -// AUTOUPDATE -// TIP: To test this file alone, run: -// TIP: bazel test //toolchain/testing:file_test --test_arg=--file_tests=toolchain/check/testdata/alias/local.carbon -// TIP: To dump output, run: -// TIP: bazel run //toolchain/testing:file_test -- --dump_output --file_tests=toolchain/check/testdata/alias/local.carbon - -// --- local.carbon - -library "[[@TEST_NAME]]"; - -fn F() -> () { - var a: () = (); - //@dump-sem-ir-begin - alias b = a; - //@dump-sem-ir-end - return b; -} - -// CHECK:STDOUT: --- local.carbon -// CHECK:STDOUT: -// CHECK:STDOUT: constants { -// CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: fn @F() -> out %return.param: %empty_tuple.type { -// CHECK:STDOUT: !entry: -// CHECK:STDOUT: -// CHECK:STDOUT: %a.ref: ref %empty_tuple.type = name_ref a, %a -// CHECK:STDOUT: %b: ref %empty_tuple.type = alias_binding b, %a -// CHECK:STDOUT: -// CHECK:STDOUT: } -// CHECK:STDOUT: diff --git a/toolchain/check/testdata/alias/var.carbon b/toolchain/check/testdata/alias/var.carbon new file mode 100644 index 000000000000..57c02add37eb --- /dev/null +++ b/toolchain/check/testdata/alias/var.carbon @@ -0,0 +1,77 @@ +// 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 +// +// INCLUDE-FILE: toolchain/testing/testdata/min_prelude/destroy.carbon +// +// AUTOUPDATE +// TIP: To test this file alone, run: +// TIP: bazel test //toolchain/testing:file_test --test_arg=--file_tests=toolchain/check/testdata/alias/var.carbon +// TIP: To dump output, run: +// TIP: bazel run //toolchain/testing:file_test -- --dump_output --file_tests=toolchain/check/testdata/alias/var.carbon + +// --- global.carbon + +library "[[@TEST_NAME]]"; + +var a: () = (); + +fn F() -> () { + //@dump-sem-ir-begin + // TODO: Decide if this should be allowed, and if so, whether it should be + // spelled as + // + // alias b = ref a; + alias b = a; + //@dump-sem-ir-end + return b; +} + +// --- fail_local.carbon + +library "[[@TEST_NAME]]"; + +fn F() -> () { + var a: () = (); + //@dump-sem-ir-begin + // CHECK:STDERR: fail_local.carbon:[[@LINE+4]]:13: error: alias refers to a runtime value [AliasRequiresConstantValue] + // CHECK:STDERR: alias b = a; + // CHECK:STDERR: ^ + // CHECK:STDERR: + alias b = a; + //@dump-sem-ir-end + return b; +} + +// CHECK:STDOUT: --- global.carbon +// CHECK:STDOUT: +// CHECK:STDOUT: constants { +// CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] +// CHECK:STDOUT: } +// CHECK:STDOUT: +// CHECK:STDOUT: fn @F() -> out %return.param: %empty_tuple.type { +// CHECK:STDOUT: !entry: +// CHECK:STDOUT: %a.ref: ref %empty_tuple.type = name_ref a, file.%a [concrete = file.%a.var] +// CHECK:STDOUT: %b: ref %empty_tuple.type = alias_binding b, %a.ref [concrete = file.%a.var] +// CHECK:STDOUT: +// CHECK:STDOUT: } +// CHECK:STDOUT: +// CHECK:STDOUT: fn @__global_init() { +// CHECK:STDOUT: !entry: +// CHECK:STDOUT: +// CHECK:STDOUT: } +// CHECK:STDOUT: +// CHECK:STDOUT: --- fail_local.carbon +// CHECK:STDOUT: +// CHECK:STDOUT: constants { +// CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] +// CHECK:STDOUT: } +// CHECK:STDOUT: +// CHECK:STDOUT: fn @F() -> out %return.param: %empty_tuple.type { +// CHECK:STDOUT: !entry: +// CHECK:STDOUT: +// CHECK:STDOUT: %a.ref: ref %empty_tuple.type = name_ref a, %a +// CHECK:STDOUT: %b: ref %empty_tuple.type = alias_binding b, %a.ref +// CHECK:STDOUT: +// CHECK:STDOUT: } +// CHECK:STDOUT: diff --git a/toolchain/check/testdata/class/implicit_import.carbon b/toolchain/check/testdata/class/implicit_import.carbon index 47a18d34b49a..a97616e0a447 100644 --- a/toolchain/check/testdata/class/implicit_import.carbon +++ b/toolchain/check/testdata/class/implicit_import.carbon @@ -252,7 +252,7 @@ class B {} // CHECK:STDOUT: } // CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {} // CHECK:STDOUT: %C.ref: type = name_ref C, %C.decl [concrete = constants.%C] -// CHECK:STDOUT: %B: type = alias_binding B, %C.decl [concrete = constants.%C] +// CHECK:STDOUT: %B: type = alias_binding B, %C.ref [concrete = constants.%C] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @C; diff --git a/toolchain/check/testdata/class/import_indirect.carbon b/toolchain/check/testdata/class/import_indirect.carbon index dc81e17a51e3..486d9eb13d3e 100644 --- a/toolchain/check/testdata/class/import_indirect.carbon +++ b/toolchain/check/testdata/class/import_indirect.carbon @@ -188,7 +188,7 @@ var ptr: E* = &value; // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: %C.ref.loc6: type = name_ref C, imports.%Main.C [concrete = constants.%C] -// CHECK:STDOUT: %D: type = alias_binding D, imports.%Main.C [concrete = constants.%C] +// CHECK:STDOUT: %D: type = alias_binding D, %C.ref.loc6 [concrete = constants.%C] // CHECK:STDOUT: name_binding_decl { // CHECK:STDOUT: %b_val.patt: %pattern_type.7c7 = ref_binding_pattern b_val [concrete] // CHECK:STDOUT: %b_val.var_patt: %pattern_type.7c7 = var_pattern %b_val.patt [concrete] @@ -284,7 +284,7 @@ var ptr: E* = &value; // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: %C.ref.loc6: type = name_ref C, imports.%Main.C [concrete = constants.%C] -// CHECK:STDOUT: %E: type = alias_binding E, imports.%Main.C [concrete = constants.%C] +// CHECK:STDOUT: %E: type = alias_binding E, %C.ref.loc6 [concrete = constants.%C] // CHECK:STDOUT: name_binding_decl { // CHECK:STDOUT: %c_val.patt: %pattern_type.7c7 = ref_binding_pattern c_val [concrete] // CHECK:STDOUT: %c_val.var_patt: %pattern_type.7c7 = var_pattern %c_val.patt [concrete] diff --git a/toolchain/check/testdata/class/indirect_import_member.carbon b/toolchain/check/testdata/class/indirect_import_member.carbon index cb293d1720f5..7f8ce16eb8fb 100644 --- a/toolchain/check/testdata/class/indirect_import_member.carbon +++ b/toolchain/check/testdata/class/indirect_import_member.carbon @@ -221,7 +221,7 @@ var x: () = D.C.F(); // CHECK:STDOUT: class @D { // CHECK:STDOUT: %package.ref: = name_ref package, package [concrete = package] // CHECK:STDOUT: %C.ref: type = name_ref C, imports.%Main.C [concrete = constants.%C] -// CHECK:STDOUT: %C: type = alias_binding C, imports.%Main.C [concrete = constants.%C] +// CHECK:STDOUT: %C: type = alias_binding C, %C.ref [concrete = constants.%C] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: @@ -440,7 +440,7 @@ var x: () = D.C.F(); // CHECK:STDOUT: %Main.D: type = import_ref Main//e, D, loaded [concrete = constants.%D] // CHECK:STDOUT: %Main.import_ref.8f2: = import_ref Main//e, loc8_1, loaded [concrete = constants.%complete_type] // CHECK:STDOUT: %Main.import_ref.1d5 = import_ref Main//e, inst{{[0-9A-F]+}} [no loc], unloaded -// CHECK:STDOUT: %Main.import_ref.7a9: type = import_ref Main//e, loc7_9, loaded [concrete = constants.%C] +// CHECK:STDOUT: %Main.import_ref.c58: type = import_ref Main//e, loc7_9, loaded [concrete = constants.%C] // CHECK:STDOUT: %Main.import_ref.8f3: = import_ref Main//e, inst{{[0-9A-F]+}} [indirect], loaded [concrete = constants.%complete_type] // CHECK:STDOUT: %Main.import_ref.76e = import_ref Main//e, inst{{[0-9A-F]+}} [indirect], unloaded // CHECK:STDOUT: %Main.import_ref.c63: %C.F.type = import_ref Main//e, inst{{[0-9A-F]+}} [indirect], loaded [concrete = constants.%C.F] @@ -469,7 +469,7 @@ var x: () = D.C.F(); // CHECK:STDOUT: // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = imports.%Main.import_ref.1d5 -// CHECK:STDOUT: .C = imports.%Main.import_ref.7a9 +// CHECK:STDOUT: .C = imports.%Main.import_ref.c58 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @C [from "e.carbon"] { @@ -485,7 +485,7 @@ var x: () = D.C.F(); // CHECK:STDOUT: fn @__global_init() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %D.ref: type = name_ref D, imports.%Main.D [concrete = constants.%D] -// CHECK:STDOUT: %C.ref: type = name_ref C, imports.%Main.import_ref.7a9 [concrete = constants.%C] +// CHECK:STDOUT: %C.ref: type = name_ref C, imports.%Main.import_ref.c58 [concrete = constants.%C] // CHECK:STDOUT: %F.ref: %C.F.type = name_ref F, imports.%Main.import_ref.c63 [concrete = constants.%C.F] // CHECK:STDOUT: %C.F.call: init %empty_tuple.type = call %F.ref() // CHECK:STDOUT: assign file.%x.var, %C.F.call @@ -510,7 +510,7 @@ var x: () = D.C.F(); // CHECK:STDOUT: %Main.D: type = import_ref Main//e, D, loaded [concrete = constants.%D] // CHECK:STDOUT: %Main.import_ref.8f2: = import_ref Main//e, loc8_1, loaded [concrete = constants.%complete_type] // CHECK:STDOUT: %Main.import_ref.1d5 = import_ref Main//e, inst{{[0-9A-F]+}} [no loc], unloaded -// CHECK:STDOUT: %Main.import_ref.7a9: type = import_ref Main//e, loc7_9, loaded [concrete = constants.%C] +// CHECK:STDOUT: %Main.import_ref.c58: type = import_ref Main//e, loc7_9, loaded [concrete = constants.%C] // CHECK:STDOUT: %Main.import_ref.8f3: = import_ref Main//e, inst{{[0-9A-F]+}} [indirect], loaded [concrete = constants.%complete_type] // CHECK:STDOUT: %Main.import_ref.76e = import_ref Main//e, inst{{[0-9A-F]+}} [indirect], unloaded // CHECK:STDOUT: %Main.import_ref.c63: %C.F.type = import_ref Main//e, inst{{[0-9A-F]+}} [indirect], loaded [concrete = constants.%C.F] @@ -539,7 +539,7 @@ var x: () = D.C.F(); // CHECK:STDOUT: // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = imports.%Main.import_ref.1d5 -// CHECK:STDOUT: .C = imports.%Main.import_ref.7a9 +// CHECK:STDOUT: .C = imports.%Main.import_ref.c58 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @C [from "e.carbon"] { @@ -555,7 +555,7 @@ var x: () = D.C.F(); // CHECK:STDOUT: fn @__global_init() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %D.ref: type = name_ref D, imports.%Main.D [concrete = constants.%D] -// CHECK:STDOUT: %C.ref: type = name_ref C, imports.%Main.import_ref.7a9 [concrete = constants.%C] +// CHECK:STDOUT: %C.ref: type = name_ref C, imports.%Main.import_ref.c58 [concrete = constants.%C] // CHECK:STDOUT: %F.ref: %C.F.type = name_ref F, imports.%Main.import_ref.c63 [concrete = constants.%C.F] // CHECK:STDOUT: %C.F.call: init %empty_tuple.type = call %F.ref() // CHECK:STDOUT: assign file.%x.var, %C.F.call diff --git a/toolchain/check/testdata/class/method/method.carbon b/toolchain/check/testdata/class/method/method.carbon index b276f36a8081..6ffc79db3e82 100644 --- a/toolchain/check/testdata/class/method/method.carbon +++ b/toolchain/check/testdata/class/method/method.carbon @@ -343,7 +343,7 @@ fn CallGOnInitializingExpr() -> i32 { // CHECK:STDOUT: %return: ref %i32 = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %F.ref: %Class.F.type = name_ref F, %Class.F.decl [concrete = constants.%Class.F] -// CHECK:STDOUT: %A: %Class.F.type = alias_binding A, %Class.F.decl [concrete = constants.%Class.F] +// CHECK:STDOUT: %A: %Class.F.type = alias_binding A, %F.ref [concrete = constants.%Class.F] // CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %.loc21: %Class.elem = field_decl k, element0 [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%struct_type.k.0bf [concrete = constants.%complete_type.954] diff --git a/toolchain/check/testdata/class/syntactic_merge.carbon b/toolchain/check/testdata/class/syntactic_merge.carbon index 2c398b4c3743..9716a84760e8 100644 --- a/toolchain/check/testdata/class/syntactic_merge.carbon +++ b/toolchain/check/testdata/class/syntactic_merge.carbon @@ -211,7 +211,7 @@ fn Base.F[ref self: Base]() { // CHECK:STDOUT: } // CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {} // CHECK:STDOUT: %C.ref: type = name_ref C, %C.decl [concrete = constants.%C] -// CHECK:STDOUT: %D: type = alias_binding D, %C.decl [concrete = constants.%C] +// CHECK:STDOUT: %D: type = alias_binding D, %C.ref [concrete = constants.%C] // CHECK:STDOUT: %Foo.decl.loc7: %Foo.type = class_decl @Foo [concrete = constants.%Foo.generic] { // CHECK:STDOUT: %a.patt: %pattern_type = symbolic_binding_pattern a, 0 [concrete] // CHECK:STDOUT: } { @@ -532,7 +532,7 @@ fn Base.F[ref self: Base]() { // CHECK:STDOUT: } // CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {} // CHECK:STDOUT: %C.ref: type = name_ref C, %C.decl [concrete = constants.%C] -// CHECK:STDOUT: %D: type = alias_binding D, %C.decl [concrete = constants.%C] +// CHECK:STDOUT: %D: type = alias_binding D, %C.ref [concrete = constants.%C] // CHECK:STDOUT: %Foo.decl: %Foo.type = class_decl @Foo [concrete = constants.%Foo.generic] { // CHECK:STDOUT: %a.patt: %pattern_type = symbolic_binding_pattern a, 0 [concrete] // CHECK:STDOUT: } { @@ -706,7 +706,7 @@ fn Base.F[ref self: Base]() { // CHECK:STDOUT: } // CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {} // CHECK:STDOUT: %C.ref: type = name_ref C, %C.decl [concrete = constants.%C] -// CHECK:STDOUT: %D: type = alias_binding D, %C.decl [concrete = constants.%C] +// CHECK:STDOUT: %D: type = alias_binding D, %C.ref [concrete = constants.%C] // CHECK:STDOUT: %Foo.decl.loc7: %Foo.type.337be0.1 = class_decl @Foo.loc7 [concrete = constants.%Foo.generic.6e878d.1] { // CHECK:STDOUT: %a.patt: %pattern_type = symbolic_binding_pattern a, 0 [concrete] // CHECK:STDOUT: } { @@ -788,7 +788,7 @@ fn Base.F[ref self: Base]() { // CHECK:STDOUT: } // CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {} // CHECK:STDOUT: %C.ref: type = name_ref C, %C.decl [concrete = constants.%C] -// CHECK:STDOUT: %D: type = alias_binding D, %C.decl [concrete = constants.%C] +// CHECK:STDOUT: %D: type = alias_binding D, %C.ref [concrete = constants.%C] // CHECK:STDOUT: %Foo.decl.loc7: %Foo.type.337be0.1 = class_decl @Foo.loc7 [concrete = constants.%Foo.generic.6e878d.1] { // CHECK:STDOUT: %a.patt: %pattern_type = symbolic_binding_pattern a, 0 [concrete] // CHECK:STDOUT: } { @@ -870,7 +870,7 @@ fn Base.F[ref self: Base]() { // CHECK:STDOUT: } // CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {} // CHECK:STDOUT: %C.ref: type = name_ref C, %C.decl [concrete = constants.%C] -// CHECK:STDOUT: %D: type = alias_binding D, %C.decl [concrete = constants.%C] +// CHECK:STDOUT: %D: type = alias_binding D, %C.ref [concrete = constants.%C] // CHECK:STDOUT: %Foo.decl.loc7: %Foo.type.337be0.1 = class_decl @Foo.loc7 [concrete = constants.%Foo.generic.6e878d.1] { // CHECK:STDOUT: %a.patt: %pattern_type = symbolic_binding_pattern a, 0 [concrete] // CHECK:STDOUT: } { @@ -1007,7 +1007,7 @@ fn Base.F[ref self: Base]() { // CHECK:STDOUT: %default.import.loc2_30.1 = import // CHECK:STDOUT: %default.import.loc2_30.2 = import // CHECK:STDOUT: %C.ref: type = name_ref C, imports.%Main.C [concrete = constants.%C] -// CHECK:STDOUT: %D: type = alias_binding D, imports.%Main.C [concrete = constants.%C] +// CHECK:STDOUT: %D: type = alias_binding D, %C.ref [concrete = constants.%C] // CHECK:STDOUT: %Foo.decl: %Foo.type = class_decl @Foo [concrete = constants.%Foo.generic] { // CHECK:STDOUT: %a.patt: %pattern_type = symbolic_binding_pattern a, 0 [concrete] // CHECK:STDOUT: } { diff --git a/toolchain/check/testdata/function/call/alias.carbon b/toolchain/check/testdata/function/call/alias.carbon index fd735782de8f..c8e3a1ec773b 100644 --- a/toolchain/check/testdata/function/call/alias.carbon +++ b/toolchain/check/testdata/function/call/alias.carbon @@ -64,7 +64,7 @@ fn Main() { // CHECK:STDOUT: %return: ref %empty_tuple.type = return_slot %return.param // CHECK:STDOUT: } // CHECK:STDOUT: %A.ref: %A.type = name_ref A, %A.decl [concrete = constants.%A] -// CHECK:STDOUT: %B: %A.type = alias_binding B, %A.decl [concrete = constants.%A] +// CHECK:STDOUT: %B: %A.type = alias_binding B, %A.ref [concrete = constants.%A] // CHECK:STDOUT: %Main.decl: %Main.type = fn_decl @Main [concrete = constants.%Main] {} {} // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/function/definition/implicit_import.carbon b/toolchain/check/testdata/function/definition/implicit_import.carbon index 2f90bdf5535d..93b3acaa85a6 100644 --- a/toolchain/check/testdata/function/definition/implicit_import.carbon +++ b/toolchain/check/testdata/function/definition/implicit_import.carbon @@ -335,7 +335,7 @@ fn B() {} // CHECK:STDOUT: } // CHECK:STDOUT: %A.decl: %A.type = fn_decl @A [concrete = constants.%A] {} {} // CHECK:STDOUT: %A.ref: %A.type = name_ref A, %A.decl [concrete = constants.%A] -// CHECK:STDOUT: %B: %A.type = alias_binding B, %A.decl [concrete = constants.%A] +// CHECK:STDOUT: %B: %A.type = alias_binding B, %A.ref [concrete = constants.%A] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: fn @A(); diff --git a/toolchain/check/testdata/function/definition/syntactic_merge.carbon b/toolchain/check/testdata/function/definition/syntactic_merge.carbon index 222932447633..2ad2292be647 100644 --- a/toolchain/check/testdata/function/definition/syntactic_merge.carbon +++ b/toolchain/check/testdata/function/definition/syntactic_merge.carbon @@ -220,7 +220,7 @@ fn Foo(unused a: const (const C)) {} // CHECK:STDOUT: } // CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {} // CHECK:STDOUT: %C.ref: type = name_ref C, %C.decl [concrete = constants.%C] -// CHECK:STDOUT: %D: type = alias_binding D, %C.decl [concrete = constants.%C] +// CHECK:STDOUT: %D: type = alias_binding D, %C.ref [concrete = constants.%C] // CHECK:STDOUT: %Foo.decl.loc7: %Foo.type = fn_decl @Foo [concrete = constants.%Foo] { // CHECK:STDOUT: %a.param_patt: %pattern_type = value_param_pattern [concrete] // CHECK:STDOUT: %a.patt: %pattern_type = at_binding_pattern a, %a.param_patt [concrete] @@ -480,7 +480,7 @@ fn Foo(unused a: const (const C)) {} // CHECK:STDOUT: } // CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {} // CHECK:STDOUT: %C.ref: type = name_ref C, %C.decl [concrete = constants.%C] -// CHECK:STDOUT: %D: type = alias_binding D, %C.decl [concrete = constants.%C] +// CHECK:STDOUT: %D: type = alias_binding D, %C.ref [concrete = constants.%C] // CHECK:STDOUT: %Foo.decl: %Foo.type = fn_decl @Foo [concrete = constants.%Foo] { // CHECK:STDOUT: %a.param_patt: %pattern_type = value_param_pattern [concrete] // CHECK:STDOUT: %a.patt: %pattern_type = at_binding_pattern a, %a.param_patt [concrete] @@ -596,7 +596,7 @@ fn Foo(unused a: const (const C)) {} // CHECK:STDOUT: } // CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {} // CHECK:STDOUT: %C.ref: type = name_ref C, %C.decl [concrete = constants.%C] -// CHECK:STDOUT: %D: type = alias_binding D, %C.decl [concrete = constants.%C] +// CHECK:STDOUT: %D: type = alias_binding D, %C.ref [concrete = constants.%C] // CHECK:STDOUT: %Foo.decl.loc7: %Foo.type.47530a.1 = fn_decl @Foo.loc7 [concrete = constants.%Foo.9ec12f.1] { // CHECK:STDOUT: %a.param_patt: %pattern_type = value_param_pattern [concrete] // CHECK:STDOUT: %a.patt: %pattern_type = at_binding_pattern a, %a.param_patt [concrete] @@ -651,7 +651,7 @@ fn Foo(unused a: const (const C)) {} // CHECK:STDOUT: } // CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {} // CHECK:STDOUT: %C.ref: type = name_ref C, %C.decl [concrete = constants.%C] -// CHECK:STDOUT: %D: type = alias_binding D, %C.decl [concrete = constants.%C] +// CHECK:STDOUT: %D: type = alias_binding D, %C.ref [concrete = constants.%C] // CHECK:STDOUT: %Foo.decl.loc7: %Foo.type.47530a.1 = fn_decl @Foo.loc7 [concrete = constants.%Foo.9ec12f.1] { // CHECK:STDOUT: %a.param_patt: %pattern_type = value_param_pattern [concrete] // CHECK:STDOUT: %a.patt: %pattern_type = at_binding_pattern a, %a.param_patt [concrete] @@ -710,7 +710,7 @@ fn Foo(unused a: const (const C)) {} // CHECK:STDOUT: } // CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {} // CHECK:STDOUT: %C.ref: type = name_ref C, %C.decl [concrete = constants.%C] -// CHECK:STDOUT: %D: type = alias_binding D, %C.decl [concrete = constants.%C] +// CHECK:STDOUT: %D: type = alias_binding D, %C.ref [concrete = constants.%C] // CHECK:STDOUT: %Foo.decl.loc7: %Foo.type.47530a.1 = fn_decl @Foo.loc7 [concrete = constants.%Foo.9ec12f.1] { // CHECK:STDOUT: %a.patt: %pattern_type = symbolic_binding_pattern a, 0 [concrete] // CHECK:STDOUT: } { @@ -788,7 +788,7 @@ fn Foo(unused a: const (const C)) {} // CHECK:STDOUT: } // CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {} // CHECK:STDOUT: %C.ref: type = name_ref C, %C.decl [concrete = constants.%C] -// CHECK:STDOUT: %D: type = alias_binding D, %C.decl [concrete = constants.%C] +// CHECK:STDOUT: %D: type = alias_binding D, %C.ref [concrete = constants.%C] // CHECK:STDOUT: %Foo.decl.loc7: %Foo.type = fn_decl @Foo [concrete = constants.%Foo] { // CHECK:STDOUT: %return.param_patt: %pattern_type = out_param_pattern [concrete] // CHECK:STDOUT: %return.patt: %pattern_type = return_slot_pattern %return.param_patt, %D.ref [concrete] @@ -888,7 +888,7 @@ fn Foo(unused a: const (const C)) {} // CHECK:STDOUT: %default.import.loc2_30.1 = import // CHECK:STDOUT: %default.import.loc2_30.2 = import // CHECK:STDOUT: %C.ref: type = name_ref C, imports.%Main.C [concrete = constants.%C] -// CHECK:STDOUT: %D: type = alias_binding D, imports.%Main.C [concrete = constants.%C] +// CHECK:STDOUT: %D: type = alias_binding D, %C.ref [concrete = constants.%C] // CHECK:STDOUT: %Foo.decl: %Foo.type = fn_decl @Foo [concrete = constants.%Foo] { // CHECK:STDOUT: %a.param_patt: %pattern_type = value_param_pattern [concrete] // CHECK:STDOUT: %a.patt: %pattern_type = at_binding_pattern a, %a.param_patt [concrete] diff --git a/toolchain/check/testdata/impl/fail_alias.carbon b/toolchain/check/testdata/impl/fail_alias.carbon index 023d5eb6495c..b7f2e0de4b87 100644 --- a/toolchain/check/testdata/impl/fail_alias.carbon +++ b/toolchain/check/testdata/impl/fail_alias.carbon @@ -51,9 +51,9 @@ impl AC as AI {} // CHECK:STDOUT: %I.decl: type = interface_decl @I [concrete = constants.%I.type] {} {} // CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {} // CHECK:STDOUT: %I.ref: type = name_ref I, %I.decl [concrete = constants.%I.type] -// CHECK:STDOUT: %AI: type = alias_binding AI, %I.decl [concrete = constants.%I.type] +// CHECK:STDOUT: %AI: type = alias_binding AI, %I.ref [concrete = constants.%I.type] // CHECK:STDOUT: %C.ref: type = name_ref C, %C.decl [concrete = constants.%C] -// CHECK:STDOUT: %AC: type = alias_binding AC, %C.decl [concrete = constants.%C] +// CHECK:STDOUT: %AC: type = alias_binding AC, %C.ref [concrete = constants.%C] // CHECK:STDOUT: impl_decl @C.as.I.impl.e47215.1 [concrete] {} { // CHECK:STDOUT: %AC.ref: type = name_ref AC, file.%AC [concrete = constants.%C] // CHECK:STDOUT: %AI.ref: type = name_ref AI, file.%AI [concrete = constants.%I.type] diff --git a/toolchain/check/testdata/impl/fail_impl_bad_assoc_fn.carbon b/toolchain/check/testdata/impl/fail_impl_bad_assoc_fn.carbon index 43fedd3c57ce..3d3c68a88802 100644 --- a/toolchain/check/testdata/impl/fail_impl_bad_assoc_fn.carbon +++ b/toolchain/check/testdata/impl/fail_impl_bad_assoc_fn.carbon @@ -599,7 +599,7 @@ class SelfNestedBadReturnType { // CHECK:STDOUT: // CHECK:STDOUT: impl @FAlias.as.I.impl: %Self.ref as %I.ref { // CHECK:STDOUT: %PossiblyF.ref: %PossiblyF.type = name_ref PossiblyF, file.%PossiblyF.decl [concrete = constants.%PossiblyF] -// CHECK:STDOUT: %F: %PossiblyF.type = alias_binding F, file.%PossiblyF.decl [concrete = constants.%PossiblyF] +// CHECK:STDOUT: %F: %PossiblyF.type = alias_binding F, %PossiblyF.ref [concrete = constants.%PossiblyF] // CHECK:STDOUT: %I.impl_witness_table = impl_witness_table (), @FAlias.as.I.impl [concrete] // CHECK:STDOUT: %I.impl_witness: = impl_witness %I.impl_witness_table [concrete = constants.%I.impl_witness.109] // CHECK:STDOUT: diff --git a/toolchain/check/testdata/impl/lookup/alias.carbon b/toolchain/check/testdata/impl/lookup/alias.carbon index 54a5a3f367b1..f582f23310e1 100644 --- a/toolchain/check/testdata/impl/lookup/alias.carbon +++ b/toolchain/check/testdata/impl/lookup/alias.carbon @@ -105,7 +105,7 @@ fn G(c: C) { // CHECK:STDOUT: class @C { // CHECK:STDOUT: %HasF.ref: type = name_ref HasF, file.%HasF.decl [concrete = constants.%HasF.type] // CHECK:STDOUT: %F.ref: %HasF.assoc_type = name_ref F, @HasF.WithSelf.%assoc0 [concrete = constants.%assoc0] -// CHECK:STDOUT: %G: %HasF.assoc_type = alias_binding G, @HasF.WithSelf.%assoc0 [concrete = constants.%assoc0] +// CHECK:STDOUT: %G: %HasF.assoc_type = alias_binding G, %F.ref [concrete = constants.%assoc0] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: diff --git a/toolchain/check/testdata/impl/lookup/fail_alias_impl_not_found.carbon b/toolchain/check/testdata/impl/lookup/fail_alias_impl_not_found.carbon index 77ea4ec49c36..3ffb459ac3f2 100644 --- a/toolchain/check/testdata/impl/lookup/fail_alias_impl_not_found.carbon +++ b/toolchain/check/testdata/impl/lookup/fail_alias_impl_not_found.carbon @@ -87,7 +87,7 @@ fn F(c: C) { // CHECK:STDOUT: class @C { // CHECK:STDOUT: %I.ref: type = name_ref I, file.%I.decl [concrete = constants.%I.type] // CHECK:STDOUT: %F.ref: %I.assoc_type = name_ref F, @I.WithSelf.%assoc0 [concrete = constants.%assoc0] -// CHECK:STDOUT: %F: %I.assoc_type = alias_binding F, @I.WithSelf.%assoc0 [concrete = constants.%assoc0] +// CHECK:STDOUT: %F: %I.assoc_type = alias_binding F, %F.ref [concrete = constants.%assoc0] // CHECK:STDOUT: %complete_type: = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: diff --git a/toolchain/check/testdata/interface/fail_assoc_const_alias.carbon b/toolchain/check/testdata/interface/fail_assoc_const_alias.carbon index 9982b1c4a01a..e3ac262b1597 100644 --- a/toolchain/check/testdata/interface/fail_assoc_const_alias.carbon +++ b/toolchain/check/testdata/interface/fail_assoc_const_alias.carbon @@ -105,7 +105,7 @@ interface C { // CHECK:STDOUT: !with Self: // CHECK:STDOUT: %I2.ref: type = name_ref I2, file.%I2.decl [concrete = constants.%I2.type] // CHECK:STDOUT: %T2.ref: %I2.assoc_type = name_ref T2, @T2.%assoc0 [concrete = constants.%assoc0.7c1] -// CHECK:STDOUT: %U2: %I2.assoc_type = alias_binding U2, @T2.%assoc0 [concrete = constants.%assoc0.7c1] +// CHECK:STDOUT: %U2: %I2.assoc_type = alias_binding U2, %T2.ref [concrete = constants.%assoc0.7c1] // CHECK:STDOUT: %J2.WithSelf.F2.decl: @J2.WithSelf.%J2.WithSelf.F2.type (%J2.WithSelf.F2.type) = fn_decl @J2.WithSelf.F2 [symbolic = @J2.WithSelf.%J2.WithSelf.F2 (constants.%J2.WithSelf.F2)] { // CHECK:STDOUT: %return.param_patt: @J2.WithSelf.F2.%pattern_type (%pattern_type.a14) = out_param_pattern [concrete] // CHECK:STDOUT: %return.patt: @J2.WithSelf.F2.%pattern_type (%pattern_type.a14) = return_slot_pattern %return.param_patt, %U2.ref [concrete] diff --git a/toolchain/check/testdata/interface/import.carbon b/toolchain/check/testdata/interface/import.carbon index 3ba4655ff8cd..203682598520 100644 --- a/toolchain/check/testdata/interface/import.carbon +++ b/toolchain/check/testdata/interface/import.carbon @@ -333,16 +333,16 @@ var f: ForwardDeclared* = &f_ref.f; // CHECK:STDOUT: } // CHECK:STDOUT: %Basic.ref.loc10: type = name_ref Basic, imports.%Main.Basic [concrete = constants.%Basic.type] // CHECK:STDOUT: %T.ref.loc10: %Basic.assoc_type = name_ref T, imports.%Main.import_ref.736 [concrete = constants.%assoc0.a68] -// CHECK:STDOUT: %UseBasicT: %Basic.assoc_type = alias_binding UseBasicT, imports.%Main.import_ref.736 [concrete = constants.%assoc0.a68] +// CHECK:STDOUT: %UseBasicT: %Basic.assoc_type = alias_binding UseBasicT, %T.ref.loc10 [concrete = constants.%assoc0.a68] // CHECK:STDOUT: %Basic.ref.loc11: type = name_ref Basic, imports.%Main.Basic [concrete = constants.%Basic.type] // CHECK:STDOUT: %F.ref.loc11: %Basic.assoc_type = name_ref F, imports.%Main.import_ref.c83 [concrete = constants.%assoc1.448] -// CHECK:STDOUT: %UseBasicF: %Basic.assoc_type = alias_binding UseBasicF, imports.%Main.import_ref.c83 [concrete = constants.%assoc1.448] +// CHECK:STDOUT: %UseBasicF: %Basic.assoc_type = alias_binding UseBasicF, %F.ref.loc11 [concrete = constants.%assoc1.448] // CHECK:STDOUT: %ForwardDeclared.ref.loc13: type = name_ref ForwardDeclared, imports.%Main.ForwardDeclared [concrete = constants.%ForwardDeclared.type] // CHECK:STDOUT: %T.ref.loc13: %ForwardDeclared.assoc_type = name_ref T, imports.%Main.import_ref.fa6 [concrete = constants.%assoc0.c28] -// CHECK:STDOUT: %UseForwardDeclaredT: %ForwardDeclared.assoc_type = alias_binding UseForwardDeclaredT, imports.%Main.import_ref.fa6 [concrete = constants.%assoc0.c28] +// CHECK:STDOUT: %UseForwardDeclaredT: %ForwardDeclared.assoc_type = alias_binding UseForwardDeclaredT, %T.ref.loc13 [concrete = constants.%assoc0.c28] // CHECK:STDOUT: %ForwardDeclared.ref.loc14: type = name_ref ForwardDeclared, imports.%Main.ForwardDeclared [concrete = constants.%ForwardDeclared.type] // CHECK:STDOUT: %F.ref.loc14: %ForwardDeclared.assoc_type = name_ref F, imports.%Main.import_ref.9f2 [concrete = constants.%assoc1.e73] -// CHECK:STDOUT: %UseForwardDeclaredF: %ForwardDeclared.assoc_type = alias_binding UseForwardDeclaredF, imports.%Main.import_ref.9f2 [concrete = constants.%assoc1.e73] +// CHECK:STDOUT: %UseForwardDeclaredF: %ForwardDeclared.assoc_type = alias_binding UseForwardDeclaredF, %F.ref.loc14 [concrete = constants.%assoc1.e73] // CHECK:STDOUT: name_binding_decl { // CHECK:STDOUT: %f.patt: %pattern_type.063 = ref_binding_pattern f [concrete] // CHECK:STDOUT: %f.var_patt: %pattern_type.063 = var_pattern %f.patt [concrete] diff --git a/toolchain/check/testdata/interface/syntactic_merge.carbon b/toolchain/check/testdata/interface/syntactic_merge.carbon index cfe5fa7c1965..2ec386dee8c2 100644 --- a/toolchain/check/testdata/interface/syntactic_merge.carbon +++ b/toolchain/check/testdata/interface/syntactic_merge.carbon @@ -219,7 +219,7 @@ interface Foo(a:! const (const C)) {} // CHECK:STDOUT: } // CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {} // CHECK:STDOUT: %C.ref: type = name_ref C, %C.decl [concrete = constants.%C] -// CHECK:STDOUT: %D: type = alias_binding D, %C.decl [concrete = constants.%C] +// CHECK:STDOUT: %D: type = alias_binding D, %C.ref [concrete = constants.%C] // CHECK:STDOUT: %Foo.decl.loc7: %Foo.type.5ed = interface_decl @Foo [concrete = constants.%Foo.generic] { // CHECK:STDOUT: %a.patt: %pattern_type = symbolic_binding_pattern a, 0 [concrete] // CHECK:STDOUT: } { @@ -578,7 +578,7 @@ interface Foo(a:! const (const C)) {} // CHECK:STDOUT: } // CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {} // CHECK:STDOUT: %C.ref: type = name_ref C, %C.decl [concrete = constants.%C] -// CHECK:STDOUT: %D: type = alias_binding D, %C.decl [concrete = constants.%C] +// CHECK:STDOUT: %D: type = alias_binding D, %C.ref [concrete = constants.%C] // CHECK:STDOUT: %Foo.decl: %Foo.type = interface_decl @Foo [concrete = constants.%Foo.generic] { // CHECK:STDOUT: %a.patt: %pattern_type = symbolic_binding_pattern a, 0 [concrete] // CHECK:STDOUT: } { @@ -795,7 +795,7 @@ interface Foo(a:! const (const C)) {} // CHECK:STDOUT: } // CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {} // CHECK:STDOUT: %C.ref: type = name_ref C, %C.decl [concrete = constants.%C] -// CHECK:STDOUT: %D: type = alias_binding D, %C.decl [concrete = constants.%C] +// CHECK:STDOUT: %D: type = alias_binding D, %C.ref [concrete = constants.%C] // CHECK:STDOUT: %Foo.decl.loc7: %Foo.type.5ede67.1 = interface_decl @Foo.loc7 [concrete = constants.%Foo.generic.fda91f.1] { // CHECK:STDOUT: %a.patt: %pattern_type = symbolic_binding_pattern a, 0 [concrete] // CHECK:STDOUT: } { @@ -885,7 +885,7 @@ interface Foo(a:! const (const C)) {} // CHECK:STDOUT: } // CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {} // CHECK:STDOUT: %C.ref: type = name_ref C, %C.decl [concrete = constants.%C] -// CHECK:STDOUT: %D: type = alias_binding D, %C.decl [concrete = constants.%C] +// CHECK:STDOUT: %D: type = alias_binding D, %C.ref [concrete = constants.%C] // CHECK:STDOUT: %Foo.decl.loc7: %Foo.type.5ede67.1 = interface_decl @Foo.loc7 [concrete = constants.%Foo.generic.fda91f.1] { // CHECK:STDOUT: %a.patt: %pattern_type = symbolic_binding_pattern a, 0 [concrete] // CHECK:STDOUT: } { @@ -975,7 +975,7 @@ interface Foo(a:! const (const C)) {} // CHECK:STDOUT: } // CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {} // CHECK:STDOUT: %C.ref: type = name_ref C, %C.decl [concrete = constants.%C] -// CHECK:STDOUT: %D: type = alias_binding D, %C.decl [concrete = constants.%C] +// CHECK:STDOUT: %D: type = alias_binding D, %C.ref [concrete = constants.%C] // CHECK:STDOUT: %Foo.decl.loc7: %Foo.type.5ede67.1 = interface_decl @Foo.loc7 [concrete = constants.%Foo.generic.fda91f.1] { // CHECK:STDOUT: %a.patt: %pattern_type = symbolic_binding_pattern a, 0 [concrete] // CHECK:STDOUT: } { @@ -1123,7 +1123,7 @@ interface Foo(a:! const (const C)) {} // CHECK:STDOUT: %default.import.loc2_30.1 = import // CHECK:STDOUT: %default.import.loc2_30.2 = import // CHECK:STDOUT: %C.ref: type = name_ref C, imports.%Main.C [concrete = constants.%C] -// CHECK:STDOUT: %D: type = alias_binding D, imports.%Main.C [concrete = constants.%C] +// CHECK:STDOUT: %D: type = alias_binding D, %C.ref [concrete = constants.%C] // CHECK:STDOUT: %Foo.decl: %Foo.type.5ede67.2 = interface_decl @Foo.loc17 [concrete = constants.%Foo.generic.fda91f.2] { // CHECK:STDOUT: %a.patt: %pattern_type = symbolic_binding_pattern a, 0 [concrete] // CHECK:STDOUT: } { diff --git a/toolchain/check/testdata/interop/cpp/basics/import/cpp_namespace.carbon b/toolchain/check/testdata/interop/cpp/basics/import/cpp_namespace.carbon index 22f7096fefe1..e67b11aec92c 100644 --- a/toolchain/check/testdata/interop/cpp/basics/import/cpp_namespace.carbon +++ b/toolchain/check/testdata/interop/cpp/basics/import/cpp_namespace.carbon @@ -118,7 +118,7 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: %Cpp.ref: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %MyCpp: = alias_binding MyCpp, imports.%Cpp [concrete = imports.%Cpp] +// CHECK:STDOUT: %MyCpp: = alias_binding MyCpp, %Cpp.ref [concrete = imports.%Cpp] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- api_and_impl.carbon diff --git a/toolchain/check/testdata/interop/cpp/class/export/class.carbon b/toolchain/check/testdata/interop/cpp/class/export/class.carbon index 5119f61e61e5..ffe6ee17f1c1 100644 --- a/toolchain/check/testdata/interop/cpp/class/export/class.carbon +++ b/toolchain/check/testdata/interop/cpp/class/export/class.carbon @@ -84,13 +84,13 @@ class B(N:! i32) { // TODO: Once we allow this, we should produce an "invalid array bound" error // during monomorphization triggered by the C++ code. -// CHECK:STDERR: fail_todo_monomorphization_failure.carbon:[[@LINE+4]]:11: error: alias initializer must be a name reference [AliasRequiresNameRef] -// CHECK:STDERR: alias T = B(-1); -// CHECK:STDERR: ^~~~~ -// CHECK:STDERR: alias T = B(-1); inline Cpp ''' +// CHECK:STDERR: fail_todo_monomorphization_failure.carbon:[[@LINE+8]]:1: error: semantics TODO: `interop with unsupported type` [SemanticsTodo] +// CHECK:STDERR: Carbon::T t; +// CHECK:STDERR: ^ +// CHECK:STDERR: // CHECK:STDERR: fail_todo_monomorphization_failure.carbon:[[@LINE+4]]:9: error: no type named 'T' in namespace 'Carbon' [CppInteropParseError] // CHECK:STDERR: 22 | Carbon::T t; // CHECK:STDERR: | ~~~~~~~~^ diff --git a/toolchain/check/testdata/namespace/alias.carbon b/toolchain/check/testdata/namespace/alias.carbon index 8c88378791b4..b8078e1fcaee 100644 --- a/toolchain/check/testdata/namespace/alias.carbon +++ b/toolchain/check/testdata/namespace/alias.carbon @@ -85,7 +85,7 @@ fn D() -> i32 { return C(); } // CHECK:STDOUT: .A = %A.decl // CHECK:STDOUT: } // CHECK:STDOUT: %NS.ref.loc17: = name_ref NS, %NS [concrete = %NS] -// CHECK:STDOUT: %ns: = alias_binding ns, %NS [concrete = %NS] +// CHECK:STDOUT: %ns: = alias_binding ns, %NS.ref.loc17 [concrete = %NS] // CHECK:STDOUT: %A.decl: %A.type = fn_decl @A [concrete = constants.%A] { // CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern [concrete] // CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern %return.param_patt, %i32 [concrete] @@ -106,7 +106,7 @@ fn D() -> i32 { return C(); } // CHECK:STDOUT: } // CHECK:STDOUT: %NS.ref.loc23: = name_ref NS, %NS [concrete = %NS] // CHECK:STDOUT: %A.ref: %A.type = name_ref A, %A.decl [concrete = constants.%A] -// CHECK:STDOUT: %C: %A.type = alias_binding C, %A.decl [concrete = constants.%A] +// CHECK:STDOUT: %C: %A.type = alias_binding C, %A.ref [concrete = constants.%A] // CHECK:STDOUT: %D.decl: %D.type = fn_decl @D [concrete = constants.%D] { // CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern [concrete] // CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern %return.param_patt, %i32 [concrete] diff --git a/toolchain/check/testdata/namespace/fail_decl_in_alias.carbon b/toolchain/check/testdata/namespace/fail_decl_in_alias.carbon index 40d82a324d25..5e11e7f21f7e 100644 --- a/toolchain/check/testdata/namespace/fail_decl_in_alias.carbon +++ b/toolchain/check/testdata/namespace/fail_decl_in_alias.carbon @@ -78,7 +78,7 @@ fn ns.A() -> i32 { return 0; } // CHECK:STDOUT: %Core.import = import Core // CHECK:STDOUT: %NS: = namespace [concrete] {} // CHECK:STDOUT: %NS.ref: = name_ref NS, %NS [concrete = %NS] -// CHECK:STDOUT: %ns: = alias_binding ns, %NS [concrete = %NS] +// CHECK:STDOUT: %ns: = alias_binding ns, %NS.ref [concrete = %NS] // CHECK:STDOUT: %A.decl: %A.type = fn_decl @A [concrete = constants.%A] { // CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern [concrete] // CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern %return.param_patt, %i32 [concrete] diff --git a/toolchain/check/testdata/packages/cross_package_export.carbon b/toolchain/check/testdata/packages/cross_package_export.carbon index f270fa6df657..582f8cbad07e 100644 --- a/toolchain/check/testdata/packages/cross_package_export.carbon +++ b/toolchain/check/testdata/packages/cross_package_export.carbon @@ -905,7 +905,7 @@ alias C = Other.C; // CHECK:STDOUT: %Other.import = import Other // CHECK:STDOUT: %Other.ref: = name_ref Other, imports.%Other [concrete = imports.%Other] // CHECK:STDOUT: %C.ref: %C.type = name_ref C, imports.%Other.C [concrete = constants.%C] -// CHECK:STDOUT: %C: %C.type = alias_binding C, imports.%Other.C [concrete = constants.%C] +// CHECK:STDOUT: %C: %C.type = alias_binding C, %C.ref [concrete = constants.%C] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: fn @C [from "conflict.carbon"]; @@ -939,7 +939,7 @@ alias C = Other.C; // CHECK:STDOUT: %Other.import = import Other // CHECK:STDOUT: %Other.ref: = name_ref Other, imports.%Other [concrete = imports.%Other] // CHECK:STDOUT: %C.ref: type = name_ref C, imports.%Other.C [concrete = constants.%C] -// CHECK:STDOUT: %C: type = alias_binding C, imports.%Other.C [concrete = constants.%C] +// CHECK:STDOUT: %C: type = alias_binding C, %C.ref [concrete = constants.%C] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @C [from "export_name.carbon"] { diff --git a/toolchain/check/testdata/packages/export_import.carbon b/toolchain/check/testdata/packages/export_import.carbon index e5aed17db6ce..f228c93c02eb 100644 --- a/toolchain/check/testdata/packages/export_import.carbon +++ b/toolchain/check/testdata/packages/export_import.carbon @@ -767,7 +767,7 @@ export Poison; // CHECK:STDOUT: } // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: %C.ref: = name_ref C, [concrete = ] -// CHECK:STDOUT: %Local: = alias_binding Local, [concrete = ] +// CHECK:STDOUT: %Local: = alias_binding Local, %C.ref [concrete = ] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- use_non_export_then_base.carbon diff --git a/toolchain/check/testdata/packages/export_name.carbon b/toolchain/check/testdata/packages/export_name.carbon index c0d8397952c0..8f97867bedd1 100644 --- a/toolchain/check/testdata/packages/export_name.carbon +++ b/toolchain/check/testdata/packages/export_name.carbon @@ -988,10 +988,10 @@ private export C; // CHECK:STDOUT: } // CHECK:STDOUT: %default.import = import // CHECK:STDOUT: %C.ref: = name_ref C, [concrete = ] -// CHECK:STDOUT: %Local: = alias_binding Local, [concrete = ] +// CHECK:STDOUT: %Local: = alias_binding Local, %C.ref [concrete = ] // CHECK:STDOUT: %NS.ref: = name_ref NS, [concrete = ] // CHECK:STDOUT: %NSC.ref: = name_ref NSC, [concrete = ] -// CHECK:STDOUT: %NSLocal: = alias_binding NSLocal, [concrete = ] +// CHECK:STDOUT: %NSLocal: = alias_binding NSLocal, %NSC.ref [concrete = ] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- repeat_export.carbon diff --git a/toolchain/diagnostics/kind.def b/toolchain/diagnostics/kind.def index f227971de3a3..26d8399b1a33 100644 --- a/toolchain/diagnostics/kind.def +++ b/toolchain/diagnostics/kind.def @@ -547,7 +547,7 @@ CARBON_DIAGNOSTIC_KIND(ClassMemberDeclaration) CARBON_DIAGNOSTIC_KIND(ClassInvalidMemberAccess) // Alias diagnostics. -CARBON_DIAGNOSTIC_KIND(AliasRequiresNameRef) +CARBON_DIAGNOSTIC_KIND(AliasRequiresConstantValue) // Where operator and its requirements. CARBON_DIAGNOSTIC_KIND(ImplsOnNonFacetType) diff --git a/toolchain/lower/testdata/alias/local.carbon b/toolchain/lower/testdata/alias/local.carbon deleted file mode 100644 index fc0f689d5909..000000000000 --- a/toolchain/lower/testdata/alias/local.carbon +++ /dev/null @@ -1,64 +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 -// -// INCLUDE-FILE: toolchain/testing/testdata/min_prelude/int.carbon -// -// AUTOUPDATE -// TIP: To test this file alone, run: -// TIP: bazel test //toolchain/testing:file_test --test_arg=--file_tests=toolchain/lower/testdata/alias/local.carbon -// TIP: To dump output, run: -// TIP: bazel run //toolchain/testing:file_test -- --dump_output --file_tests=toolchain/lower/testdata/alias/local.carbon - -fn F() -> i32 { - var a: i32 = 0; - alias b = a; - return b; -} - -// CHECK:STDOUT: ; ModuleID = 'local.carbon' -// CHECK:STDOUT: source_filename = "local.carbon" -// CHECK:STDOUT: -// CHECK:STDOUT: ; Function Attrs: nounwind -// CHECK:STDOUT: define i32 @_CF.Main() #0 !dbg !4 { -// CHECK:STDOUT: entry: -// CHECK:STDOUT: %a.var = alloca i32, align 4, !dbg !8 -// CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %a.var), !dbg !8 -// CHECK:STDOUT: store i32 0, ptr %a.var, align 4, !dbg !8 -// CHECK:STDOUT: %.loc16 = load i32, ptr %a.var, align 4, !dbg !9 -// CHECK:STDOUT: call void @"_COp.7e389eab4a7e5487:core.Destroy.Core"(ptr %a.var), !dbg !8 -// CHECK:STDOUT: ret i32 %.loc16, !dbg !10 -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: ; Function Attrs: nounwind -// CHECK:STDOUT: define weak_odr void @"_COp.7e389eab4a7e5487:core.Destroy.Core"(ptr %self) #0 !dbg !11 { -// CHECK:STDOUT: entry: -// CHECK:STDOUT: ret void, !dbg !16 -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: ; Function Attrs: nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) -// CHECK:STDOUT: declare void @llvm.lifetime.start.p0(ptr captures(none)) #1 -// CHECK:STDOUT: -// CHECK:STDOUT: attributes #0 = { nounwind } -// CHECK:STDOUT: attributes #1 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) } -// CHECK:STDOUT: -// CHECK:STDOUT: !llvm.module.flags = !{!0, !1} -// CHECK:STDOUT: !llvm.dbg.cu = !{!2} -// CHECK:STDOUT: -// CHECK:STDOUT: !0 = !{i32 7, !"Dwarf Version", i32 5} -// CHECK:STDOUT: !1 = !{i32 2, !"Debug Info Version", i32 3} -// CHECK:STDOUT: !2 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus, file: !3, producer: "carbon", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug) -// CHECK:STDOUT: !3 = !DIFile(filename: "local.carbon", directory: "") -// CHECK:STDOUT: !4 = distinct !DISubprogram(name: "F", linkageName: "_CF.Main", scope: null, file: !3, line: 13, type: !5, spFlags: DISPFlagDefinition, unit: !2) -// CHECK:STDOUT: !5 = !DISubroutineType(types: !6) -// CHECK:STDOUT: !6 = !{!7} -// CHECK:STDOUT: !7 = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed) -// CHECK:STDOUT: !8 = !DILocation(line: 14, column: 3, scope: !4) -// CHECK:STDOUT: !9 = !DILocation(line: 16, column: 10, scope: !4) -// CHECK:STDOUT: !10 = !DILocation(line: 16, column: 3, scope: !4) -// CHECK:STDOUT: !11 = distinct !DISubprogram(name: "Op", linkageName: "_COp.7e389eab4a7e5487:core.Destroy.Core", scope: null, file: !3, line: 14, type: !12, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !14) -// CHECK:STDOUT: !12 = !DISubroutineType(types: !13) -// CHECK:STDOUT: !13 = !{null, !7} -// CHECK:STDOUT: !14 = !{!15} -// CHECK:STDOUT: !15 = !DILocalVariable(arg: 1, scope: !11, type: !7) -// CHECK:STDOUT: !16 = !DILocation(line: 14, column: 3, scope: !11) diff --git a/toolchain/lower/testdata/alias/var.carbon b/toolchain/lower/testdata/alias/var.carbon new file mode 100644 index 000000000000..263ffad6bc1f --- /dev/null +++ b/toolchain/lower/testdata/alias/var.carbon @@ -0,0 +1,59 @@ +// 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 +// +// INCLUDE-FILE: toolchain/testing/testdata/min_prelude/int.carbon +// +// AUTOUPDATE +// TIP: To test this file alone, run: +// TIP: bazel test //toolchain/testing:file_test --test_arg=--file_tests=toolchain/lower/testdata/alias/var.carbon +// TIP: To dump output, run: +// TIP: bazel run //toolchain/testing:file_test -- --dump_output --file_tests=toolchain/lower/testdata/alias/var.carbon + +var a: i32 = 0; + +fn F() -> i32 { + alias b = a; + return b; +} + +// CHECK:STDOUT: ; ModuleID = 'var.carbon' +// CHECK:STDOUT: source_filename = "var.carbon" +// CHECK:STDOUT: +// CHECK:STDOUT: @_Ca.Main = global i32 0 +// CHECK:STDOUT: @llvm.global_ctors = appending global [1 x { i32, ptr, ptr }] [{ i32, ptr, ptr } { i32 0, ptr @_C__global_init.Main, ptr null }] +// CHECK:STDOUT: +// CHECK:STDOUT: ; Function Attrs: nounwind +// CHECK:STDOUT: define i32 @_CF.Main() #0 !dbg !4 { +// CHECK:STDOUT: entry: +// CHECK:STDOUT: %.loc17 = load i32, ptr @_Ca.Main, align 4, !dbg !8 +// CHECK:STDOUT: ret i32 %.loc17, !dbg !9 +// CHECK:STDOUT: } +// CHECK:STDOUT: +// CHECK:STDOUT: ; Function Attrs: nounwind +// CHECK:STDOUT: define internal void @_C__global_init.Main() #0 !dbg !10 { +// CHECK:STDOUT: entry: +// CHECK:STDOUT: store i32 0, ptr @_Ca.Main, align 4, !dbg !13 +// CHECK:STDOUT: ret void, !dbg !14 +// CHECK:STDOUT: } +// CHECK:STDOUT: +// CHECK:STDOUT: attributes #0 = { nounwind } +// CHECK:STDOUT: +// CHECK:STDOUT: !llvm.module.flags = !{!0, !1} +// CHECK:STDOUT: !llvm.dbg.cu = !{!2} +// CHECK:STDOUT: +// CHECK:STDOUT: !0 = !{i32 7, !"Dwarf Version", i32 5} +// CHECK:STDOUT: !1 = !{i32 2, !"Debug Info Version", i32 3} +// CHECK:STDOUT: !2 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus, file: !3, producer: "carbon", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug) +// CHECK:STDOUT: !3 = !DIFile(filename: "var.carbon", directory: "") +// CHECK:STDOUT: !4 = distinct !DISubprogram(name: "F", linkageName: "_CF.Main", scope: null, file: !3, line: 15, type: !5, spFlags: DISPFlagDefinition, unit: !2) +// CHECK:STDOUT: !5 = !DISubroutineType(types: !6) +// CHECK:STDOUT: !6 = !{!7} +// CHECK:STDOUT: !7 = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed) +// CHECK:STDOUT: !8 = !DILocation(line: 17, column: 10, scope: !4) +// CHECK:STDOUT: !9 = !DILocation(line: 17, column: 3, scope: !4) +// CHECK:STDOUT: !10 = distinct !DISubprogram(name: "__global_init", linkageName: "_C__global_init.Main", scope: null, file: !3, type: !11, spFlags: DISPFlagDefinition, unit: !2) +// CHECK:STDOUT: !11 = !DISubroutineType(types: !12) +// CHECK:STDOUT: !12 = !{null} +// CHECK:STDOUT: !13 = !DILocation(line: 13, column: 1, scope: !10) +// CHECK:STDOUT: !14 = !DILocation(line: 0, scope: !10)