mirror of
https://github.com/carbon-language/carbon-lang.git
synced 2026-10-05 22:02:55 +01:00
Relax alias restrictions. (#7190)
Implement the alias rules from proposal #5389, wherein an alias is permitted so long as the target has a constant value. While that proposal is not yet accepted, this seems like a reasonable basis for further iteration, and will be useful for the examples we're currently pursuing.
This commit is contained in:
+1
-1
@@ -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:
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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 <none>
|
||||
// CHECK:STDOUT: %default.import.loc2_30.2 = import <none>
|
||||
// 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]
|
||||
|
||||
Reference in New Issue
Block a user