mirror of
https://github.com/carbon-language/carbon-lang.git
synced 2026-10-05 22:02:55 +01:00
Rebuild all constants in the eval block. (#4155)
Instead of reusing instructions from the generic entity in the eval block, rebuild constants in the same way we rebuild types. The previous attempt to not rebuild these constants assumed that every constant used in a generic would be built in that generic, and not referenced directly or referenced from some enclosing scope, which isn't true in practice and is a fragile assumption in any case. We could add back some reuse of instructions from the generic -- if we happen to see the right instruction to build a constant, we could opportunistically reuse it -- but given the complexity added by doing so, I'm not pursuing that here. Now that the eval block for a generic consists of instructions uniquely owned by that generic, rather than often being shared with another entity, include the generic in the formatted SemIR output. I'm using the same scope name for the generic object itself as for the parameterized class / function / interface, because there are very frequently references between them and this keeps the IR simpler and more readable, and avoids needing to invent a second name for the scope.
This commit is contained in:
+12
-11
@@ -92,22 +92,23 @@ interface Interface {
|
||||
// CHECK:STDOUT: witness = (%F.decl, %G.decl)
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn @F()
|
||||
// CHECK:STDOUT: generic [@Interface.%Self: %.1] {
|
||||
// CHECK:STDOUT: !entry:
|
||||
// CHECK:STDOUT: return
|
||||
// CHECK:STDOUT: generic fn @F(@Interface.%Self: %.1) {
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn() {
|
||||
// CHECK:STDOUT: !entry:
|
||||
// CHECK:STDOUT: return
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn @Int32() -> type = "int.make_type_32";
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn @G(@Interface.%a.loc21_16.2: i32, @Interface.%b.loc21_24.2: i32) -> i32 = "int.sadd"
|
||||
// CHECK:STDOUT: generic [@Interface.%Self: %.1];
|
||||
// CHECK:STDOUT: generic fn @G(@Interface.%Self: %.1) {
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific @Interface.%F.decl(constants.%Self) {
|
||||
// CHECK:STDOUT: declaration:
|
||||
// CHECK:STDOUT: fn(@Interface.%a.loc21_16.2: i32, @Interface.%b.loc21_24.2: i32) -> i32 = "int.sadd";
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific @Interface.%G.decl(constants.%Self) {
|
||||
// CHECK:STDOUT: declaration:
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: specific @F(constants.%Self) {}
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific @G(constants.%Self) {}
|
||||
// CHECK:STDOUT:
|
||||
|
||||
+10
-10
@@ -134,13 +134,17 @@ fn Interface.G(a: i32, b: i32) -> i32 = "int.sadd";
|
||||
// CHECK:STDOUT: witness = (%F.decl, %G.decl)
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn @F()
|
||||
// CHECK:STDOUT: generic [@Interface.%Self: %.1];
|
||||
// CHECK:STDOUT: generic fn @F(@Interface.%Self: %.1) {
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn();
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn @Int32() -> type = "int.make_type_32";
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn @G(@Interface.%a.loc22_16.2: i32, @Interface.%b.loc22_24.2: i32) -> i32
|
||||
// CHECK:STDOUT: generic [@Interface.%Self: %.1];
|
||||
// CHECK:STDOUT: generic fn @G(@Interface.%Self: %.1) {
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn(@Interface.%a.loc22_16.2: i32, @Interface.%b.loc22_24.2: i32) -> i32;
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn @.1() {
|
||||
// CHECK:STDOUT: !entry:
|
||||
@@ -149,11 +153,7 @@ fn Interface.G(a: i32, b: i32) -> i32 = "int.sadd";
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn @.2(%a: i32, %b: i32) -> i32 = "int.sadd";
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific @Interface.%F.decl(constants.%Self) {
|
||||
// CHECK:STDOUT: declaration:
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: specific @F(constants.%Self) {}
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific @Interface.%G.decl(constants.%Self) {
|
||||
// CHECK:STDOUT: declaration:
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: specific @G(constants.%Self) {}
|
||||
// CHECK:STDOUT:
|
||||
|
||||
@@ -34,7 +34,7 @@ fn F(T:! Empty) {
|
||||
// CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [template = constants.%F] {
|
||||
// CHECK:STDOUT: %Empty.ref: type = name_ref Empty, %Empty.decl [template = constants.%.1]
|
||||
// CHECK:STDOUT: %T.loc13_6.1: %.1 = param T
|
||||
// CHECK:STDOUT: @F.%T: %.1 = bind_symbolic_name T 0, %T.loc13_6.1 [symbolic = @F.%T (constants.%T)]
|
||||
// CHECK:STDOUT: @F.%T.loc13: %.1 = bind_symbolic_name T 0, %T.loc13_6.1 [symbolic = @F.%T.1 (constants.%T)]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
@@ -46,19 +46,23 @@ fn F(T:! Empty) {
|
||||
// CHECK:STDOUT: witness = ()
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn @F(%T: %.1)
|
||||
// CHECK:STDOUT: generic [%T: %.1] {
|
||||
// CHECK:STDOUT: !entry:
|
||||
// CHECK:STDOUT: %T.ref: %.1 = name_ref T, %T [symbolic = %T (constants.%T)]
|
||||
// CHECK:STDOUT: %.loc14_10.1: type = facet_type_access %T.ref [symbolic = %T (constants.%T)]
|
||||
// CHECK:STDOUT: %.loc14_10.2: type = converted %T.ref, %.loc14_10.1 [symbolic = %T (constants.%T)]
|
||||
// CHECK:STDOUT: %x.var: ref @F.%T (%T) = var x
|
||||
// CHECK:STDOUT: %x: ref @F.%T (%T) = bind_name x, %x.var
|
||||
// CHECK:STDOUT: return
|
||||
// CHECK:STDOUT: generic fn @F(%T.loc13: %.1) {
|
||||
// CHECK:STDOUT: %T.1: %.1 = bind_symbolic_name T 0 [symbolic = %T.1 (constants.%T)]
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn(%T.loc13: %.1) {
|
||||
// CHECK:STDOUT: !entry:
|
||||
// CHECK:STDOUT: %T.ref: %.1 = name_ref T, %T.loc13 [symbolic = %T.1 (constants.%T)]
|
||||
// CHECK:STDOUT: %.loc14_10.1: type = facet_type_access %T.ref [symbolic = %T.1 (constants.%T)]
|
||||
// CHECK:STDOUT: %.loc14_10.2: type = converted %T.ref, %.loc14_10.1 [symbolic = %T.1 (constants.%T)]
|
||||
// CHECK:STDOUT: %x.var: ref @F.%T.1 (%T) = var x
|
||||
// CHECK:STDOUT: %x: ref @F.%T.1 (%T) = bind_name x, %x.var
|
||||
// CHECK:STDOUT: return
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific file.%F.decl(constants.%T) {
|
||||
// CHECK:STDOUT: declaration:
|
||||
// CHECK:STDOUT: @F.%T => constants.%T
|
||||
// CHECK:STDOUT: specific @F(constants.%T) {
|
||||
// CHECK:STDOUT: %T.1 => constants.%T
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
|
||||
@@ -60,10 +60,10 @@ interface ForwardDeclared {
|
||||
// CHECK:STDOUT: witness = (%F.decl)
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn @F()
|
||||
// CHECK:STDOUT: generic [@ForwardDeclared.%Self: %.2];
|
||||
// CHECK:STDOUT: generic fn @F(@ForwardDeclared.%Self: %.2) {
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific @ForwardDeclared.%F.decl(constants.%Self.2) {
|
||||
// CHECK:STDOUT: declaration:
|
||||
// CHECK:STDOUT: fn();
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific @F(constants.%Self.2) {}
|
||||
// CHECK:STDOUT:
|
||||
|
||||
+20
-19
@@ -81,22 +81,25 @@ class C {
|
||||
// CHECK:STDOUT: .I = %I.decl
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn @F.1()
|
||||
// CHECK:STDOUT: generic [@I.%Self: %.1] {
|
||||
// CHECK:STDOUT: !entry:
|
||||
// CHECK:STDOUT: %C.ref: type = name_ref C, file.%C.decl [template = constants.%C]
|
||||
// CHECK:STDOUT: %c.var: ref %C = var c
|
||||
// CHECK:STDOUT: %c: ref %C = bind_name c, %c.var
|
||||
// CHECK:STDOUT: %.loc16_19.1: %.6 = struct_literal ()
|
||||
// CHECK:STDOUT: %.loc16_19.2: init %C = class_init (), %c.var [template = constants.%struct]
|
||||
// CHECK:STDOUT: %.loc16_20: init %C = converted %.loc16_19.1, %.loc16_19.2 [template = constants.%struct]
|
||||
// CHECK:STDOUT: assign %c.var, %.loc16_20
|
||||
// CHECK:STDOUT: %c.ref: ref %C = name_ref c, %c
|
||||
// CHECK:STDOUT: %I.ref: type = name_ref I, @C.%I.decl [template = constants.%.1]
|
||||
// CHECK:STDOUT: %F.ref: %.3 = name_ref F, @I.%.loc14 [template = constants.%.4]
|
||||
// CHECK:STDOUT: %.1: %F.type.1 = interface_witness_access @impl.%.1, element0 [template = constants.%F.2]
|
||||
// CHECK:STDOUT: %F.call: init %.2 = call %.1()
|
||||
// CHECK:STDOUT: return
|
||||
// CHECK:STDOUT: generic fn @F.1(@I.%Self: %.1) {
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn() {
|
||||
// CHECK:STDOUT: !entry:
|
||||
// CHECK:STDOUT: %C.ref: type = name_ref C, file.%C.decl [template = constants.%C]
|
||||
// CHECK:STDOUT: %c.var: ref %C = var c
|
||||
// CHECK:STDOUT: %c: ref %C = bind_name c, %c.var
|
||||
// CHECK:STDOUT: %.loc16_19.1: %.6 = struct_literal ()
|
||||
// CHECK:STDOUT: %.loc16_19.2: init %C = class_init (), %c.var [template = constants.%struct]
|
||||
// CHECK:STDOUT: %.loc16_20: init %C = converted %.loc16_19.1, %.loc16_19.2 [template = constants.%struct]
|
||||
// CHECK:STDOUT: assign %c.var, %.loc16_20
|
||||
// CHECK:STDOUT: %c.ref: ref %C = name_ref c, %c
|
||||
// CHECK:STDOUT: %I.ref: type = name_ref I, @C.%I.decl [template = constants.%.1]
|
||||
// CHECK:STDOUT: %F.ref: %.3 = name_ref F, @I.%.loc14 [template = constants.%.4]
|
||||
// CHECK:STDOUT: %.1: %F.type.1 = interface_witness_access @impl.%.1, element0 [template = constants.%F.2]
|
||||
// CHECK:STDOUT: %F.call: init %.2 = call %.1()
|
||||
// CHECK:STDOUT: return
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn @F.2() {
|
||||
@@ -104,7 +107,5 @@ class C {
|
||||
// CHECK:STDOUT: return
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific @I.%F.decl(constants.%Self) {
|
||||
// CHECK:STDOUT: declaration:
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: specific @F.1(constants.%Self) {}
|
||||
// CHECK:STDOUT:
|
||||
|
||||
+24
-22
@@ -79,15 +79,19 @@ interface Outer {
|
||||
// CHECK:STDOUT: witness = ()
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: interface @Inner
|
||||
// CHECK:STDOUT: generic [@Outer.%Self: %.3] {
|
||||
// CHECK:STDOUT: %Self: %.4 = bind_symbolic_name Self 1 [symbolic = %Self (constants.%Self.3)]
|
||||
// CHECK:STDOUT: %.decl: %.type = fn_decl @.1 [template = constants.%.5] {}
|
||||
// CHECK:STDOUT: generic interface @Inner(@Outer.%Self: %.3) {
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT: %Self.2: %.4 = bind_symbolic_name Self 1 [symbolic = %Self.2 (constants.%Self.3)]
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !members:
|
||||
// CHECK:STDOUT: .Self = %Self
|
||||
// CHECK:STDOUT: .F = @Outer.%F.decl
|
||||
// CHECK:STDOUT: witness = ()
|
||||
// CHECK:STDOUT: interface {
|
||||
// CHECK:STDOUT: %Self.1: %.4 = bind_symbolic_name Self 1 [symbolic = %Self.2 (constants.%Self.3)]
|
||||
// CHECK:STDOUT: %.decl: %.type = fn_decl @.1 [template = constants.%.5] {}
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !members:
|
||||
// CHECK:STDOUT: .Self = %Self.1
|
||||
// CHECK:STDOUT: .F = @Outer.%F.decl
|
||||
// CHECK:STDOUT: witness = ()
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn @F.1() {
|
||||
@@ -95,24 +99,22 @@ interface Outer {
|
||||
// CHECK:STDOUT: return
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn @.1()
|
||||
// CHECK:STDOUT: generic [@Outer.%Self: %.3, @Inner.%Self: %.4];
|
||||
// CHECK:STDOUT: generic fn @.1(@Outer.%Self: %.3, @Inner.%Self.1: %.4) {
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn @F.2()
|
||||
// CHECK:STDOUT: generic [@Outer.%Self: %.3];
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific @Outer.%Inner.decl(constants.%Self.2) {
|
||||
// CHECK:STDOUT: declaration:
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: definition:
|
||||
// CHECK:STDOUT: @Inner.%Self => constants.%Self.3
|
||||
// CHECK:STDOUT: fn();
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific @Inner.%.decl(constants.%Self.2, constants.%Self.3) {
|
||||
// CHECK:STDOUT: declaration:
|
||||
// CHECK:STDOUT: generic fn @F.2(@Outer.%Self: %.3) {
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn();
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific @Outer.%F.decl(constants.%Self.2) {
|
||||
// CHECK:STDOUT: declaration:
|
||||
// CHECK:STDOUT: specific @Inner(constants.%Self.2) {
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT: %Self.2 => constants.%Self.3
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific @.1(constants.%Self.2, constants.%Self.3) {}
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific @F.2(constants.%Self.2) {}
|
||||
// CHECK:STDOUT:
|
||||
|
||||
+55
-41
@@ -45,7 +45,7 @@ interface DifferentParams(T:! ()) {}
|
||||
// CHECK:STDOUT: %.type.1: type = generic_interface_type @.1 [template]
|
||||
// CHECK:STDOUT: %.2: type = tuple_type () [template]
|
||||
// CHECK:STDOUT: %.3: %.type.1 = struct_value () [template]
|
||||
// CHECK:STDOUT: %.4: type = interface_type @.1, file.%.decl.loc19(%T.1) [symbolic]
|
||||
// CHECK:STDOUT: %.4: type = interface_type @.1, @.1(%T.1) [symbolic]
|
||||
// CHECK:STDOUT: %Self.1: %.4 = bind_symbolic_name Self 1 [symbolic]
|
||||
// CHECK:STDOUT: %Generic.type: type = generic_interface_type @Generic [template]
|
||||
// CHECK:STDOUT: %Generic: %Generic.type = struct_value () [template]
|
||||
@@ -56,7 +56,7 @@ interface DifferentParams(T:! ()) {}
|
||||
// CHECK:STDOUT: %T.2: %.2 = bind_symbolic_name T 0 [symbolic]
|
||||
// CHECK:STDOUT: %.type.2: type = generic_interface_type @.3 [template]
|
||||
// CHECK:STDOUT: %.6: %.type.2 = struct_value () [template]
|
||||
// CHECK:STDOUT: %.7: type = interface_type @.3, file.%.decl.loc38(%T.2) [symbolic]
|
||||
// CHECK:STDOUT: %.7: type = interface_type @.3, @.3(%T.2) [symbolic]
|
||||
// CHECK:STDOUT: %Self.3: %.7 = bind_symbolic_name Self 1 [symbolic]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
@@ -69,38 +69,48 @@ interface DifferentParams(T:! ()) {}
|
||||
// CHECK:STDOUT: %NotGeneric.decl: type = interface_decl @NotGeneric [template = constants.%.1] {}
|
||||
// CHECK:STDOUT: %.decl.loc19: %.type.1 = interface_decl @.1 [template = constants.%.3] {
|
||||
// CHECK:STDOUT: %T.loc19_22.1: type = param T
|
||||
// CHECK:STDOUT: %T.loc19_22.2: type = bind_symbolic_name T 0, %T.loc19_22.1 [symbolic = %T.loc19_22.2 (constants.%T.1)]
|
||||
// CHECK:STDOUT: %T.loc19_22.2: type = bind_symbolic_name T 0, %T.loc19_22.1 [symbolic = @.1.%T (constants.%T.1)]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %Generic.decl: %Generic.type = interface_decl @Generic [template = constants.%Generic] {
|
||||
// CHECK:STDOUT: %T.loc21_19.1: type = param T
|
||||
// CHECK:STDOUT: %T.loc21_19.2: type = bind_symbolic_name T 0, %T.loc21_19.1 [symbolic = %T.loc21_19.2 (constants.%T.1)]
|
||||
// CHECK:STDOUT: %T.loc21_19.2: type = bind_symbolic_name T 0, %T.loc21_19.1 [symbolic = @Generic.%T (constants.%T.1)]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %.decl.loc29: type = interface_decl @.2 [template = constants.%.5] {}
|
||||
// CHECK:STDOUT: %DifferentParams.decl: %DifferentParams.type = interface_decl @DifferentParams [template = constants.%DifferentParams] {
|
||||
// CHECK:STDOUT: %T.loc31_27.1: type = param T
|
||||
// CHECK:STDOUT: %T.loc31_27.2: type = bind_symbolic_name T 0, %T.loc31_27.1 [symbolic = %T.loc31_27.2 (constants.%T.1)]
|
||||
// CHECK:STDOUT: %T.loc31_27.2: type = bind_symbolic_name T 0, %T.loc31_27.1 [symbolic = @DifferentParams.%T (constants.%T.1)]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %.decl.loc38: %.type.2 = interface_decl @.3 [template = constants.%.6] {
|
||||
// CHECK:STDOUT: %.loc38_32.1: %.2 = tuple_literal ()
|
||||
// CHECK:STDOUT: %.loc38_32.2: type = converted %.loc38_32.1, constants.%.2 [template = constants.%.2]
|
||||
// CHECK:STDOUT: %T.loc38_27.1: %.2 = param T
|
||||
// CHECK:STDOUT: %T.loc38_27.2: %.2 = bind_symbolic_name T 0, %T.loc38_27.1 [symbolic = %T.loc38_27.2 (constants.%T.2)]
|
||||
// CHECK:STDOUT: %T.loc38_27.2: %.2 = bind_symbolic_name T 0, %T.loc38_27.1 [symbolic = @.3.%T (constants.%T.2)]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: interface @NotGeneric;
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: interface @.1
|
||||
// CHECK:STDOUT: generic [file.%T.loc19_22.2: type] {
|
||||
// CHECK:STDOUT: %Self: <unexpected>.inst+13 (%.4) = bind_symbolic_name Self 1 [symbolic = %Self (constants.%Self.1)]
|
||||
// CHECK:STDOUT: generic interface @.1(file.%T.loc19_22.2: type) {
|
||||
// CHECK:STDOUT: %T: type = bind_symbolic_name T 0 [symbolic = %T (constants.%T.1)]
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !members:
|
||||
// CHECK:STDOUT: .Self = %Self
|
||||
// CHECK:STDOUT: witness = ()
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT: %.1: type = interface_type @.1, @.1(%T) [symbolic = %.1 (constants.%.4)]
|
||||
// CHECK:STDOUT: %Self.2: %.4 = bind_symbolic_name Self 1 [symbolic = %Self.2 (constants.%Self.1)]
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: interface {
|
||||
// CHECK:STDOUT: %Self.1: @.1.%.1 (%.4) = bind_symbolic_name Self 1 [symbolic = %Self.2 (constants.%Self.1)]
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !members:
|
||||
// CHECK:STDOUT: .Self = %Self.1
|
||||
// CHECK:STDOUT: witness = ()
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: interface @Generic
|
||||
// CHECK:STDOUT: generic [file.%T.loc21_19.2: type];
|
||||
// CHECK:STDOUT: generic interface @Generic(file.%T.loc21_19.2: type) {
|
||||
// CHECK:STDOUT: %T: type = bind_symbolic_name T 0 [symbolic = %T (constants.%T.1)]
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: interface;
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: interface @.2 {
|
||||
// CHECK:STDOUT: %Self: %.5 = bind_symbolic_name Self 0 [symbolic = constants.%Self.2]
|
||||
@@ -110,45 +120,49 @@ interface DifferentParams(T:! ()) {}
|
||||
// CHECK:STDOUT: witness = ()
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: interface @DifferentParams
|
||||
// CHECK:STDOUT: generic [file.%T.loc31_27.2: type];
|
||||
// CHECK:STDOUT: generic interface @DifferentParams(file.%T.loc31_27.2: type) {
|
||||
// CHECK:STDOUT: %T: type = bind_symbolic_name T 0 [symbolic = %T (constants.%T.1)]
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: interface @.3
|
||||
// CHECK:STDOUT: generic [file.%T.loc38_27.2: %.2] {
|
||||
// CHECK:STDOUT: %Self: <unexpected>.inst+39 (%.7) = bind_symbolic_name Self 1 [symbolic = %Self (constants.%Self.3)]
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !members:
|
||||
// CHECK:STDOUT: .Self = %Self
|
||||
// CHECK:STDOUT: witness = ()
|
||||
// CHECK:STDOUT: interface;
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific file.%.decl.loc19(constants.%T.1) {
|
||||
// CHECK:STDOUT: declaration:
|
||||
// CHECK:STDOUT: file.%T.loc19_22.2 => constants.%T.1
|
||||
// CHECK:STDOUT: generic interface @.3(file.%T.loc38_27.2: %.2) {
|
||||
// CHECK:STDOUT: %T: %.2 = bind_symbolic_name T 0 [symbolic = %T (constants.%T.2)]
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT: %.1: type = interface_type @.3, @.3(%T) [symbolic = %.1 (constants.%.7)]
|
||||
// CHECK:STDOUT: %Self.2: %.7 = bind_symbolic_name Self 1 [symbolic = %Self.2 (constants.%Self.3)]
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: interface {
|
||||
// CHECK:STDOUT: %Self.1: @.3.%.1 (%.7) = bind_symbolic_name Self 1 [symbolic = %Self.2 (constants.%Self.3)]
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !members:
|
||||
// CHECK:STDOUT: .Self = %Self.1
|
||||
// CHECK:STDOUT: witness = ()
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific file.%.decl.loc19(file.%T.loc19_22.2) {
|
||||
// CHECK:STDOUT: declaration:
|
||||
// CHECK:STDOUT: file.%T.loc19_22.2 => constants.%T.1
|
||||
// CHECK:STDOUT: specific @.1(constants.%T.1) {
|
||||
// CHECK:STDOUT: %T => constants.%T.1
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific file.%Generic.decl(constants.%T.1) {
|
||||
// CHECK:STDOUT: declaration:
|
||||
// CHECK:STDOUT: file.%T.loc21_19.2 => constants.%T.1
|
||||
// CHECK:STDOUT: specific @.1(@.1.%T) {
|
||||
// CHECK:STDOUT: %T => constants.%T.1
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific file.%DifferentParams.decl(constants.%T.1) {
|
||||
// CHECK:STDOUT: declaration:
|
||||
// CHECK:STDOUT: file.%T.loc31_27.2 => constants.%T.1
|
||||
// CHECK:STDOUT: specific @Generic(constants.%T.1) {
|
||||
// CHECK:STDOUT: %T => constants.%T.1
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific file.%.decl.loc38(constants.%T.2) {
|
||||
// CHECK:STDOUT: declaration:
|
||||
// CHECK:STDOUT: file.%T.loc38_27.2 => constants.%T.2
|
||||
// CHECK:STDOUT: specific @DifferentParams(constants.%T.1) {
|
||||
// CHECK:STDOUT: %T => constants.%T.1
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific file.%.decl.loc38(file.%T.loc38_27.2) {
|
||||
// CHECK:STDOUT: declaration:
|
||||
// CHECK:STDOUT: file.%T.loc38_27.2 => constants.%T.2
|
||||
// CHECK:STDOUT: specific @.3(constants.%T.2) {
|
||||
// CHECK:STDOUT: %T => constants.%T.2
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific @.3(@.3.%T) {
|
||||
// CHECK:STDOUT: %T => constants.%T.2
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
|
||||
@@ -107,17 +107,17 @@ interface BeingDefined {
|
||||
// CHECK:STDOUT: return
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn @H() -> <error>
|
||||
// CHECK:STDOUT: generic [@BeingDefined.%Self: %.4];
|
||||
// CHECK:STDOUT: generic fn @H(@BeingDefined.%Self: %.4) {
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn @.2()
|
||||
// CHECK:STDOUT: generic [@BeingDefined.%Self: %.4];
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific @BeingDefined.%H.decl(constants.%Self) {
|
||||
// CHECK:STDOUT: declaration:
|
||||
// CHECK:STDOUT: fn() -> <error>;
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific @BeingDefined.%.decl(constants.%Self) {
|
||||
// CHECK:STDOUT: declaration:
|
||||
// CHECK:STDOUT: generic fn @.2(@BeingDefined.%Self: %.4) {
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn();
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific @H(constants.%Self) {}
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific @.2(constants.%Self) {}
|
||||
// CHECK:STDOUT:
|
||||
|
||||
@@ -66,8 +66,10 @@ fn F() {
|
||||
// CHECK:STDOUT: witness = (%F.decl, %T)
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn @F.1()
|
||||
// CHECK:STDOUT: generic [@Interface.%Self: %.1];
|
||||
// CHECK:STDOUT: generic fn @F.1(@Interface.%Self: %.1) {
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn();
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn @F.2() {
|
||||
// CHECK:STDOUT: !entry:
|
||||
@@ -80,7 +82,5 @@ fn F() {
|
||||
// CHECK:STDOUT: return
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific @Interface.%F.decl(constants.%Self) {
|
||||
// CHECK:STDOUT: declaration:
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: specific @F.1(constants.%Self) {}
|
||||
// CHECK:STDOUT:
|
||||
|
||||
@@ -52,17 +52,17 @@ interface Interface {
|
||||
// CHECK:STDOUT: witness = (%F.decl)
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn @F()
|
||||
// CHECK:STDOUT: generic [@Interface.%Self: %.1];
|
||||
// CHECK:STDOUT: generic fn @F(@Interface.%Self: %.1) {
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn @.1()
|
||||
// CHECK:STDOUT: generic [@Interface.%Self: %.1];
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific @Interface.%F.decl(constants.%Self) {
|
||||
// CHECK:STDOUT: declaration:
|
||||
// CHECK:STDOUT: fn();
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific @Interface.%.decl(constants.%Self) {
|
||||
// CHECK:STDOUT: declaration:
|
||||
// CHECK:STDOUT: generic fn @.1(@Interface.%Self: %.1) {
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn();
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific @F(constants.%Self) {}
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific @.1(constants.%Self) {}
|
||||
// CHECK:STDOUT:
|
||||
|
||||
+36
-28
@@ -52,17 +52,17 @@ fn CallFacet(T:! Interface, x: T) {
|
||||
// CHECK:STDOUT: %CallStatic.decl: %CallStatic.type = fn_decl @CallStatic [template = constants.%CallStatic] {
|
||||
// CHECK:STDOUT: %Interface.ref.loc13: type = name_ref Interface, %Interface.decl [template = constants.%.1]
|
||||
// CHECK:STDOUT: %T.loc13_15.1: %.1 = param T
|
||||
// CHECK:STDOUT: @CallStatic.%T: %.1 = bind_symbolic_name T 0, %T.loc13_15.1 [symbolic = @CallStatic.%T (constants.%T)]
|
||||
// CHECK:STDOUT: @CallStatic.%T.loc13: %.1 = bind_symbolic_name T 0, %T.loc13_15.1 [symbolic = @CallStatic.%T.1 (constants.%T)]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %CallFacet.decl: %CallFacet.type = fn_decl @CallFacet [template = constants.%CallFacet] {
|
||||
// CHECK:STDOUT: %Interface.ref.loc21: type = name_ref Interface, %Interface.decl [template = constants.%.1]
|
||||
// CHECK:STDOUT: %T.loc21_14.1: %.1 = param T
|
||||
// CHECK:STDOUT: @CallFacet.%T: %.1 = bind_symbolic_name T 0, %T.loc21_14.1 [symbolic = @CallFacet.%T (constants.%T)]
|
||||
// CHECK:STDOUT: %T.ref: %.1 = name_ref T, @CallFacet.%T [symbolic = @CallFacet.%T (constants.%T)]
|
||||
// CHECK:STDOUT: %.loc21_32.1: type = facet_type_access %T.ref [symbolic = @CallFacet.%T (constants.%T)]
|
||||
// CHECK:STDOUT: %.loc21_32.2: type = converted %T.ref, %.loc21_32.1 [symbolic = @CallFacet.%T (constants.%T)]
|
||||
// CHECK:STDOUT: %x.loc21_29.1: @CallFacet.%T (%T) = param x
|
||||
// CHECK:STDOUT: @CallFacet.%x: @CallFacet.%T (%T) = bind_name x, %x.loc21_29.1
|
||||
// CHECK:STDOUT: @CallFacet.%T.loc21: %.1 = bind_symbolic_name T 0, %T.loc21_14.1 [symbolic = @CallFacet.%T.1 (constants.%T)]
|
||||
// CHECK:STDOUT: %T.ref: %.1 = name_ref T, @CallFacet.%T.loc21 [symbolic = @CallFacet.%T.1 (constants.%T)]
|
||||
// CHECK:STDOUT: %.loc21_32.1: type = facet_type_access %T.ref [symbolic = @CallFacet.%T.1 (constants.%T)]
|
||||
// CHECK:STDOUT: %.loc21_32.2: type = converted %T.ref, %.loc21_32.1 [symbolic = @CallFacet.%T.1 (constants.%T)]
|
||||
// CHECK:STDOUT: %x.loc21_29.1: @CallFacet.%T.1 (%T) = param x
|
||||
// CHECK:STDOUT: @CallFacet.%x: @CallFacet.%T.1 (%T) = bind_name x, %x.loc21_29.1
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
@@ -77,35 +77,43 @@ fn CallFacet(T:! Interface, x: T) {
|
||||
// CHECK:STDOUT: witness = (%F.decl)
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn @F()
|
||||
// CHECK:STDOUT: generic [@Interface.%Self: %.1];
|
||||
// CHECK:STDOUT: generic fn @F(@Interface.%Self: %.1) {
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn @CallStatic(%T: %.1)
|
||||
// CHECK:STDOUT: generic [%T: %.1] {
|
||||
// CHECK:STDOUT: !entry:
|
||||
// CHECK:STDOUT: %T.ref: %.1 = name_ref T, %T [symbolic = %T (constants.%T)]
|
||||
// CHECK:STDOUT: %F.ref: %.3 = name_ref F, @Interface.%.loc11 [template = constants.%.4]
|
||||
// CHECK:STDOUT: return
|
||||
// CHECK:STDOUT: fn();
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn @CallFacet(%T: %.1, %x: @CallFacet.%T (%T))
|
||||
// CHECK:STDOUT: generic [%T: %.1] {
|
||||
// CHECK:STDOUT: !entry:
|
||||
// CHECK:STDOUT: %x.ref: @CallFacet.%T (%T) = name_ref x, %x
|
||||
// CHECK:STDOUT: return
|
||||
// CHECK:STDOUT: generic fn @CallStatic(%T.loc13: %.1) {
|
||||
// CHECK:STDOUT: %T.1: %.1 = bind_symbolic_name T 0 [symbolic = %T.1 (constants.%T)]
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn(%T.loc13: %.1) {
|
||||
// CHECK:STDOUT: !entry:
|
||||
// CHECK:STDOUT: %T.ref: %.1 = name_ref T, %T.loc13 [symbolic = %T.1 (constants.%T)]
|
||||
// CHECK:STDOUT: %F.ref: %.3 = name_ref F, @Interface.%.loc11 [template = constants.%.4]
|
||||
// CHECK:STDOUT: return
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific @Interface.%F.decl(constants.%Self) {
|
||||
// CHECK:STDOUT: declaration:
|
||||
// CHECK:STDOUT: generic fn @CallFacet(%T.loc21: %.1) {
|
||||
// CHECK:STDOUT: %T.1: %.1 = bind_symbolic_name T 0 [symbolic = %T.1 (constants.%T)]
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn(%T.loc21: %.1, %x: @CallFacet.%T.1 (%T)) {
|
||||
// CHECK:STDOUT: !entry:
|
||||
// CHECK:STDOUT: %x.ref: @CallFacet.%T.1 (%T) = name_ref x, %x
|
||||
// CHECK:STDOUT: return
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific file.%CallStatic.decl(constants.%T) {
|
||||
// CHECK:STDOUT: declaration:
|
||||
// CHECK:STDOUT: @CallStatic.%T => constants.%T
|
||||
// CHECK:STDOUT: specific @F(constants.%Self) {}
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific @CallStatic(constants.%T) {
|
||||
// CHECK:STDOUT: %T.1 => constants.%T
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific file.%CallFacet.decl(constants.%T) {
|
||||
// CHECK:STDOUT: declaration:
|
||||
// CHECK:STDOUT: @CallFacet.%T => constants.%T
|
||||
// CHECK:STDOUT: specific @CallFacet(constants.%T) {
|
||||
// CHECK:STDOUT: %T.1 => constants.%T
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
|
||||
+83
-64
@@ -28,13 +28,12 @@ fn I(T:! type).F[self: Self]() -> Self { return self; }
|
||||
// CHECK:STDOUT: %I.type: type = generic_interface_type @I [template]
|
||||
// CHECK:STDOUT: %.1: type = tuple_type () [template]
|
||||
// CHECK:STDOUT: %I: %I.type = struct_value () [template]
|
||||
// CHECK:STDOUT: %.2: type = interface_type @I, file.%I.decl(%T) [symbolic]
|
||||
// CHECK:STDOUT: %Self.1: %.2 = bind_symbolic_name Self 1 [symbolic]
|
||||
// CHECK:STDOUT: %.2: type = interface_type @I, @I(%T) [symbolic]
|
||||
// CHECK:STDOUT: %Self: %.2 = bind_symbolic_name Self 1 [symbolic]
|
||||
// CHECK:STDOUT: %F.type: type = fn_type @F [template]
|
||||
// CHECK:STDOUT: %F: %F.type = struct_value () [template]
|
||||
// CHECK:STDOUT: %.3: type = assoc_entity_type @I, %F.type [template]
|
||||
// CHECK:STDOUT: %.4: %.3 = assoc_entity element0, @I.%F.decl [template]
|
||||
// CHECK:STDOUT: %Self.2: <unexpected>.inst+28 (%.2) = bind_symbolic_name Self 1 [symbolic]
|
||||
// CHECK:STDOUT: %.type: type = fn_type @.1 [template]
|
||||
// CHECK:STDOUT: %.5: %.type = struct_value () [template]
|
||||
// CHECK:STDOUT: }
|
||||
@@ -45,87 +44,107 @@ fn I(T:! type).F[self: Self]() -> Self { return self; }
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %I.decl: %I.type = interface_decl @I [template = constants.%I] {
|
||||
// CHECK:STDOUT: %T.loc11_13.1: type = param T
|
||||
// CHECK:STDOUT: %T.loc11_13.2: type = bind_symbolic_name T 0, %T.loc11_13.1 [symbolic = %T.loc11_13.2 (constants.%T)]
|
||||
// CHECK:STDOUT: %T.loc11_13.2: type = bind_symbolic_name T 0, %T.loc11_13.1 [symbolic = @I.%T (constants.%T)]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %.decl: %.type = fn_decl @.1 [template = constants.%.5] {
|
||||
// CHECK:STDOUT: %T.loc22_6.1: type = param T
|
||||
// CHECK:STDOUT: %T.loc22_6.2: type = bind_symbolic_name T 0, %T.loc22_6.1 [symbolic = %T.loc22_6.2 (constants.%T)]
|
||||
// CHECK:STDOUT: %.loc22_24.1: <unexpected>.inst+44 (%.2) = specific_constant @I.%Self, %I.decl(constants.%T) [symbolic = %.loc22_24.1 (constants.%Self.2)]
|
||||
// CHECK:STDOUT: %Self.ref.loc22_24: <unexpected>.inst+44 (%.2) = name_ref Self, %.loc22_24.1 [symbolic = %.loc22_24.1 (constants.%Self.2)]
|
||||
// CHECK:STDOUT: %.loc22_24.2: type = facet_type_access %Self.ref.loc22_24 [symbolic = %.loc22_24.1 (constants.%Self.2)]
|
||||
// CHECK:STDOUT: %.loc22_24.3: type = converted %Self.ref.loc22_24, %.loc22_24.2 [symbolic = %.loc22_24.1 (constants.%Self.2)]
|
||||
// CHECK:STDOUT: %self.loc22_18.1: file.%.loc22_24.1 (%Self.2) = param self
|
||||
// CHECK:STDOUT: @.1.%self: file.%.loc22_24.1 (%Self.2) = bind_name self, %self.loc22_18.1
|
||||
// CHECK:STDOUT: %.loc22_35.1: <unexpected>.inst+44 (%.2) = specific_constant @I.%Self, %I.decl(constants.%T) [symbolic = %.loc22_24.1 (constants.%Self.2)]
|
||||
// CHECK:STDOUT: %Self.ref.loc22_35: <unexpected>.inst+44 (%.2) = name_ref Self, %.loc22_35.1 [symbolic = %.loc22_24.1 (constants.%Self.2)]
|
||||
// CHECK:STDOUT: %.loc22_35.2: type = facet_type_access %Self.ref.loc22_35 [symbolic = %.loc22_24.1 (constants.%Self.2)]
|
||||
// CHECK:STDOUT: %.loc22_35.3: type = converted %Self.ref.loc22_35, %.loc22_35.2 [symbolic = %.loc22_24.1 (constants.%Self.2)]
|
||||
// CHECK:STDOUT: @.1.%return: ref %Self.2 = var <return slot>
|
||||
// CHECK:STDOUT: %T.loc22_6.2: type = bind_symbolic_name T 0, %T.loc22_6.1 [symbolic = @.1.%T (constants.%T)]
|
||||
// CHECK:STDOUT: %.loc22_24.1: @.1.%.1 (%.2) = specific_constant @I.%Self.1, @I(constants.%T) [symbolic = @.1.%Self (constants.%Self)]
|
||||
// CHECK:STDOUT: %Self.ref.loc22_24: @.1.%.1 (%.2) = name_ref Self, %.loc22_24.1 [symbolic = @.1.%Self (constants.%Self)]
|
||||
// CHECK:STDOUT: %.loc22_24.2: type = facet_type_access %Self.ref.loc22_24 [symbolic = @.1.%Self (constants.%Self)]
|
||||
// CHECK:STDOUT: %.loc22_24.3: type = converted %Self.ref.loc22_24, %.loc22_24.2 [symbolic = @.1.%Self (constants.%Self)]
|
||||
// CHECK:STDOUT: %self.loc22_18.1: @.1.%Self (%Self) = param self
|
||||
// CHECK:STDOUT: @.1.%self: @.1.%Self (%Self) = bind_name self, %self.loc22_18.1
|
||||
// CHECK:STDOUT: %.loc22_35.1: @.1.%.1 (%.2) = specific_constant @I.%Self.1, @I(constants.%T) [symbolic = @.1.%Self (constants.%Self)]
|
||||
// CHECK:STDOUT: %Self.ref.loc22_35: @.1.%.1 (%.2) = name_ref Self, %.loc22_35.1 [symbolic = @.1.%Self (constants.%Self)]
|
||||
// CHECK:STDOUT: %.loc22_35.2: type = facet_type_access %Self.ref.loc22_35 [symbolic = @.1.%Self (constants.%Self)]
|
||||
// CHECK:STDOUT: %.loc22_35.3: type = converted %Self.ref.loc22_35, %.loc22_35.2 [symbolic = @.1.%Self (constants.%Self)]
|
||||
// CHECK:STDOUT: @.1.%return: ref %Self = var <return slot>
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: interface @I
|
||||
// CHECK:STDOUT: generic [file.%T.loc11_13.2: type] {
|
||||
// CHECK:STDOUT: %Self: <unexpected>.inst+28 (%.2) = bind_symbolic_name Self 1 [symbolic = %Self (constants.%Self.1)]
|
||||
// CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [template = constants.%F] {
|
||||
// CHECK:STDOUT: %.loc13_14.1: %.2 = specific_constant %Self, file.%I.decl(constants.%T) [symbolic = %.loc13_14.1 (constants.%Self.1)]
|
||||
// CHECK:STDOUT: %Self.ref.loc13_14: %.2 = name_ref Self, %.loc13_14.1 [symbolic = %.loc13_14.1 (constants.%Self.1)]
|
||||
// CHECK:STDOUT: %.loc13_14.2: type = facet_type_access %Self.ref.loc13_14 [symbolic = %.loc13_14.1 (constants.%Self.1)]
|
||||
// CHECK:STDOUT: %.loc13_14.3: type = converted %Self.ref.loc13_14, %.loc13_14.2 [symbolic = %.loc13_14.1 (constants.%Self.1)]
|
||||
// CHECK:STDOUT: %self.loc13_8.1: @I.%.loc13_14.1 (%Self.1) = param self
|
||||
// CHECK:STDOUT: %self.loc13_8.2: @I.%.loc13_14.1 (%Self.1) = bind_name self, %self.loc13_8.1
|
||||
// CHECK:STDOUT: %.loc13_25.1: %.2 = specific_constant %Self, file.%I.decl(constants.%T) [symbolic = %.loc13_14.1 (constants.%Self.1)]
|
||||
// CHECK:STDOUT: %Self.ref.loc13_25: %.2 = name_ref Self, %.loc13_25.1 [symbolic = %.loc13_14.1 (constants.%Self.1)]
|
||||
// CHECK:STDOUT: %.loc13_25.2: type = facet_type_access %Self.ref.loc13_25 [symbolic = %.loc13_14.1 (constants.%Self.1)]
|
||||
// CHECK:STDOUT: %.loc13_25.3: type = converted %Self.ref.loc13_25, %.loc13_25.2 [symbolic = %.loc13_14.1 (constants.%Self.1)]
|
||||
// CHECK:STDOUT: %return.var: ref %Self.1 = var <return slot>
|
||||
// CHECK:STDOUT: generic interface @I(file.%T.loc11_13.2: type) {
|
||||
// CHECK:STDOUT: %T: type = bind_symbolic_name T 0 [symbolic = %T (constants.%T)]
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT: %.1: type = interface_type @I, @I(%T) [symbolic = %.1 (constants.%.2)]
|
||||
// CHECK:STDOUT: %Self.2: %.2 = bind_symbolic_name Self 1 [symbolic = %Self.2 (constants.%Self)]
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: interface {
|
||||
// CHECK:STDOUT: %Self.1: @I.%.1 (%.2) = bind_symbolic_name Self 1 [symbolic = %Self.2 (constants.%Self)]
|
||||
// CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [template = constants.%F] {
|
||||
// CHECK:STDOUT: %.loc13_14.1: @F.%.1 (%.2) = specific_constant %Self.1, @I(constants.%T) [symbolic = @F.%Self (constants.%Self)]
|
||||
// CHECK:STDOUT: %Self.ref.loc13_14: @F.%.1 (%.2) = name_ref Self, %.loc13_14.1 [symbolic = @F.%Self (constants.%Self)]
|
||||
// CHECK:STDOUT: %.loc13_14.2: type = facet_type_access %Self.ref.loc13_14 [symbolic = @F.%Self (constants.%Self)]
|
||||
// CHECK:STDOUT: %.loc13_14.3: type = converted %Self.ref.loc13_14, %.loc13_14.2 [symbolic = @F.%Self (constants.%Self)]
|
||||
// CHECK:STDOUT: %self.loc13_8.1: @F.%Self (%Self) = param self
|
||||
// CHECK:STDOUT: %self.loc13_8.2: @F.%Self (%Self) = bind_name self, %self.loc13_8.1
|
||||
// CHECK:STDOUT: %.loc13_25.1: @F.%.1 (%.2) = specific_constant %Self.1, @I(constants.%T) [symbolic = @F.%Self (constants.%Self)]
|
||||
// CHECK:STDOUT: %Self.ref.loc13_25: @F.%.1 (%.2) = name_ref Self, %.loc13_25.1 [symbolic = @F.%Self (constants.%Self)]
|
||||
// CHECK:STDOUT: %.loc13_25.2: type = facet_type_access %Self.ref.loc13_25 [symbolic = @F.%Self (constants.%Self)]
|
||||
// CHECK:STDOUT: %.loc13_25.3: type = converted %Self.ref.loc13_25, %.loc13_25.2 [symbolic = @F.%Self (constants.%Self)]
|
||||
// CHECK:STDOUT: %return.var: ref %Self = var <return slot>
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %.loc13_29: %.3 = assoc_entity element0, %F.decl [template = constants.%.4]
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !members:
|
||||
// CHECK:STDOUT: .Self = %Self.1
|
||||
// CHECK:STDOUT: .F = %.loc13_29
|
||||
// CHECK:STDOUT: witness = (%F.decl)
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %.loc13_29: %.3 = assoc_entity element0, %F.decl [template = constants.%.4]
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !members:
|
||||
// CHECK:STDOUT: .Self = %Self
|
||||
// CHECK:STDOUT: .F = %.loc13_29
|
||||
// CHECK:STDOUT: witness = (%F.decl)
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn @F[@I.%self.loc13_8.2: @I.%.loc13_14.1 (%Self.1)]() -> %Self.1
|
||||
// CHECK:STDOUT: generic [file.%T.loc11_13.2: type, @I.%Self: <unexpected>.inst+28 (%.2)];
|
||||
// CHECK:STDOUT: generic fn @F(file.%T.loc11_13.2: type, @I.%Self.1: @I.%.1 (%.2)) {
|
||||
// CHECK:STDOUT: %T: type = bind_symbolic_name T 0 [symbolic = %T (constants.%T)]
|
||||
// CHECK:STDOUT: %.1: type = interface_type @I, @I(%T) [symbolic = %.1 (constants.%.2)]
|
||||
// CHECK:STDOUT: %Self: %.2 = bind_symbolic_name Self 1 [symbolic = %Self (constants.%Self)]
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn @.1[%self: file.%.loc22_24.1 (%Self.2)]() -> %Self.2
|
||||
// CHECK:STDOUT: generic [file.%T.loc22_6.2: type] {
|
||||
// CHECK:STDOUT: !entry:
|
||||
// CHECK:STDOUT: %self.ref: file.%.loc22_24.1 (%Self.2) = name_ref self, %self
|
||||
// CHECK:STDOUT: return %self.ref
|
||||
// CHECK:STDOUT: fn[@I.%self.loc13_8.2: @F.%Self (%Self)]() -> %Self;
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific file.%I.decl(constants.%T) {
|
||||
// CHECK:STDOUT: declaration:
|
||||
// CHECK:STDOUT: file.%T.loc11_13.2 => constants.%T
|
||||
// CHECK:STDOUT: generic fn @.1(file.%T.loc22_6.2: type) {
|
||||
// CHECK:STDOUT: %T: type = bind_symbolic_name T 0 [symbolic = %T (constants.%T)]
|
||||
// CHECK:STDOUT: %.1: type = interface_type @I, @I(%T) [symbolic = %.1 (constants.%.2)]
|
||||
// CHECK:STDOUT: %Self: %.2 = bind_symbolic_name Self 1 [symbolic = %Self (constants.%Self)]
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: definition:
|
||||
// CHECK:STDOUT: <unexpected>.inst+28 => constants.%.2
|
||||
// CHECK:STDOUT: @I.%Self => constants.%Self.2
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn[%self: @.1.%Self (%Self)]() -> %Self {
|
||||
// CHECK:STDOUT: !entry:
|
||||
// CHECK:STDOUT: %self.ref: @.1.%Self (%Self) = name_ref self, %self
|
||||
// CHECK:STDOUT: return %self.ref
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific @I.%F.decl(constants.%T, constants.%Self.1) {
|
||||
// CHECK:STDOUT: declaration:
|
||||
// CHECK:STDOUT: @I.%.loc13_14.1 => constants.%Self.1
|
||||
// CHECK:STDOUT: specific @I(constants.%T) {
|
||||
// CHECK:STDOUT: %T => constants.%T
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT: %.1 => constants.%.2
|
||||
// CHECK:STDOUT: %Self.2 => constants.%Self
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific file.%I.decl(file.%T.loc11_13.2) {
|
||||
// CHECK:STDOUT: declaration:
|
||||
// CHECK:STDOUT: file.%T.loc11_13.2 => constants.%T
|
||||
// CHECK:STDOUT: specific @I(@F.%T) {
|
||||
// CHECK:STDOUT: %T => constants.%T
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific file.%I.decl(file.%T.loc22_6.2) {
|
||||
// CHECK:STDOUT: declaration:
|
||||
// CHECK:STDOUT: file.%T.loc11_13.2 => constants.%T
|
||||
// CHECK:STDOUT: specific @F(constants.%T, constants.%Self) {
|
||||
// CHECK:STDOUT: %T => constants.%T
|
||||
// CHECK:STDOUT: %.1 => constants.%.2
|
||||
// CHECK:STDOUT: %Self => constants.%Self
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific file.%.decl(constants.%T) {
|
||||
// CHECK:STDOUT: declaration:
|
||||
// CHECK:STDOUT: file.%T.loc22_6.2 => constants.%T
|
||||
// CHECK:STDOUT: <unexpected>.inst+44 => constants.%.2
|
||||
// CHECK:STDOUT: file.%.loc22_24.1 => constants.%Self.2
|
||||
// CHECK:STDOUT: specific @I(@I.%T) {
|
||||
// CHECK:STDOUT: %T => constants.%T
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific @I(@.1.%T) {
|
||||
// CHECK:STDOUT: %T => constants.%T
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific @.1(constants.%T) {
|
||||
// CHECK:STDOUT: %T => constants.%T
|
||||
// CHECK:STDOUT: %.1 => constants.%.2
|
||||
// CHECK:STDOUT: %Self => constants.%Self
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
|
||||
@@ -57,23 +57,25 @@ interface Modifiers {
|
||||
// CHECK:STDOUT: witness = (%Final.decl, %Default.decl)
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn @Final()
|
||||
// CHECK:STDOUT: generic [@Modifiers.%Self: %.1] {
|
||||
// CHECK:STDOUT: !entry:
|
||||
// CHECK:STDOUT: return
|
||||
// CHECK:STDOUT: generic fn @Final(@Modifiers.%Self: %.1) {
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn() {
|
||||
// CHECK:STDOUT: !entry:
|
||||
// CHECK:STDOUT: return
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn @Default()
|
||||
// CHECK:STDOUT: generic [@Modifiers.%Self: %.1] {
|
||||
// CHECK:STDOUT: !entry:
|
||||
// CHECK:STDOUT: return
|
||||
// CHECK:STDOUT: generic fn @Default(@Modifiers.%Self: %.1) {
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn() {
|
||||
// CHECK:STDOUT: !entry:
|
||||
// CHECK:STDOUT: return
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific @Modifiers.%Final.decl(constants.%Self) {
|
||||
// CHECK:STDOUT: declaration:
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: specific @Final(constants.%Self) {}
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific @Modifiers.%Default.decl(constants.%Self) {
|
||||
// CHECK:STDOUT: declaration:
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: specific @Default(constants.%Self) {}
|
||||
// CHECK:STDOUT:
|
||||
|
||||
+139
-113
@@ -65,22 +65,22 @@ fn G(T:! Generic(B)) {
|
||||
// CHECK:STDOUT: %Simple.type: type = generic_interface_type @Simple [template]
|
||||
// CHECK:STDOUT: %.1: type = tuple_type () [template]
|
||||
// CHECK:STDOUT: %Simple: %Simple.type = struct_value () [template]
|
||||
// CHECK:STDOUT: %.2: type = interface_type @Simple, file.%Simple.decl(%T.1) [symbolic]
|
||||
// CHECK:STDOUT: %.2: type = interface_type @Simple, @Simple(%T.1) [symbolic]
|
||||
// CHECK:STDOUT: %Self.1: %.2 = bind_symbolic_name Self 1 [symbolic]
|
||||
// CHECK:STDOUT: %X: type = class_type @X [template]
|
||||
// CHECK:STDOUT: %.3: type = struct_type {} [template]
|
||||
// CHECK:STDOUT: %WithAssocFn.type: type = generic_interface_type @WithAssocFn [template]
|
||||
// CHECK:STDOUT: %WithAssocFn: %WithAssocFn.type = struct_value () [template]
|
||||
// CHECK:STDOUT: %.4: type = interface_type @WithAssocFn, file.%WithAssocFn.decl(%T.1) [symbolic]
|
||||
// CHECK:STDOUT: %.4: type = interface_type @WithAssocFn, @WithAssocFn(%T.1) [symbolic]
|
||||
// CHECK:STDOUT: %Self.2: %.4 = bind_symbolic_name Self 1 [symbolic]
|
||||
// CHECK:STDOUT: %F.type.1: type = fn_type @F.1 [template]
|
||||
// CHECK:STDOUT: %F.1: %F.type.1 = struct_value () [template]
|
||||
// CHECK:STDOUT: %.5: type = assoc_entity_type @WithAssocFn, %F.type.1 [template]
|
||||
// CHECK:STDOUT: %.6: %.5 = assoc_entity element0, @WithAssocFn.%F.decl [template]
|
||||
// CHECK:STDOUT: %C: type = class_type @C [template]
|
||||
// CHECK:STDOUT: %.7: type = interface_type @Simple, file.%Simple.decl(%C) [template]
|
||||
// CHECK:STDOUT: %.7: type = interface_type @Simple, @Simple(%C) [template]
|
||||
// CHECK:STDOUT: %.8: <witness> = interface_witness () [template]
|
||||
// CHECK:STDOUT: %.9: type = interface_type @WithAssocFn, file.%WithAssocFn.decl(%C) [template]
|
||||
// CHECK:STDOUT: %.9: type = interface_type @WithAssocFn, @WithAssocFn(%C) [template]
|
||||
// CHECK:STDOUT: %F.type.2: type = fn_type @F.2 [template]
|
||||
// CHECK:STDOUT: %F.2: %F.type.2 = struct_value () [template]
|
||||
// CHECK:STDOUT: %.10: <witness> = interface_witness (%F.2) [template]
|
||||
@@ -108,20 +108,20 @@ fn G(T:! Generic(B)) {
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %Simple.decl: %Simple.type = interface_decl @Simple [template = constants.%Simple] {
|
||||
// CHECK:STDOUT: %T.loc4_18.1: type = param T
|
||||
// CHECK:STDOUT: %T.loc4_18.2: type = bind_symbolic_name T 0, %T.loc4_18.1 [symbolic = %T.loc4_18.2 (constants.%T.1)]
|
||||
// CHECK:STDOUT: %T.loc4_18.2: type = bind_symbolic_name T 0, %T.loc4_18.1 [symbolic = @Simple.%T (constants.%T.1)]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %X.decl: type = class_decl @X [template = constants.%X] {}
|
||||
// CHECK:STDOUT: %WithAssocFn.decl: %WithAssocFn.type = interface_decl @WithAssocFn [template = constants.%WithAssocFn] {
|
||||
// CHECK:STDOUT: %T.loc8_23.1: type = param T
|
||||
// CHECK:STDOUT: %T.loc8_23.2: type = bind_symbolic_name T 0, %T.loc8_23.1 [symbolic = %T.loc8_23.2 (constants.%T.1)]
|
||||
// CHECK:STDOUT: %T.loc8_23.2: type = bind_symbolic_name T 0, %T.loc8_23.1 [symbolic = @WithAssocFn.%T (constants.%T.1)]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %C.decl: type = class_decl @C [template = constants.%C] {}
|
||||
// CHECK:STDOUT: %WithImplicitArgs.decl: %WithImplicitArgs.type = interface_decl @WithImplicitArgs [template = constants.%WithImplicitArgs] {
|
||||
// CHECK:STDOUT: %T.loc22_28.1: type = param T
|
||||
// CHECK:STDOUT: %T.loc22_28.2: type = bind_symbolic_name T 0, %T.loc22_28.1 [symbolic = %T.loc22_28.2 (constants.%T.1)]
|
||||
// CHECK:STDOUT: %T.ref: type = name_ref T, %T.loc22_28.2 [symbolic = %T.loc22_28.2 (constants.%T.1)]
|
||||
// CHECK:STDOUT: %N.loc22_38.1: file.%T.loc22_28.2 (%T.1) = param N
|
||||
// CHECK:STDOUT: %N.loc22_38.2: file.%T.loc22_28.2 (%T.1) = bind_symbolic_name N 1, %N.loc22_38.1 [symbolic = %N.loc22_38.2 (constants.%N)]
|
||||
// CHECK:STDOUT: %T.loc22_28.2: type = bind_symbolic_name T 0, %T.loc22_28.1 [symbolic = @WithImplicitArgs.%T (constants.%T.1)]
|
||||
// CHECK:STDOUT: %T.ref: type = name_ref T, %T.loc22_28.2 [symbolic = @WithImplicitArgs.%T (constants.%T.1)]
|
||||
// CHECK:STDOUT: %N.loc22_38.1: @WithImplicitArgs.%T (%T.1) = param N
|
||||
// CHECK:STDOUT: %N.loc22_38.2: @WithImplicitArgs.%T (%T.1) = bind_symbolic_name N 1, %N.loc22_38.1 [symbolic = @WithImplicitArgs.%N (constants.%N)]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %Receive.decl: %Receive.type = fn_decl @Receive [template = constants.%Receive] {
|
||||
// CHECK:STDOUT: %Simple.ref.loc24: %Simple.type = name_ref Simple, %Simple.decl [template = constants.%Simple]
|
||||
@@ -130,7 +130,7 @@ fn G(T:! Generic(B)) {
|
||||
// CHECK:STDOUT: %.loc24_24.1: type = value_of_initializer %.loc24_22 [template = constants.%.7]
|
||||
// CHECK:STDOUT: %.loc24_24.2: type = converted %.loc24_22, %.loc24_24.1 [template = constants.%.7]
|
||||
// CHECK:STDOUT: %T.loc24_12.1: %.7 = param T
|
||||
// CHECK:STDOUT: @Receive.%T: %.7 = bind_symbolic_name T 0, %T.loc24_12.1 [symbolic = @Receive.%T (constants.%T.2)]
|
||||
// CHECK:STDOUT: @Receive.%T.loc24: %.7 = bind_symbolic_name T 0, %T.loc24_12.1 [symbolic = @Receive.%T.1 (constants.%T.2)]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %Pass.decl: %Pass.type = fn_decl @Pass [template = constants.%Pass] {
|
||||
// CHECK:STDOUT: %Simple.ref.loc25: %Simple.type = name_ref Simple, %Simple.decl [template = constants.%Simple]
|
||||
@@ -139,36 +139,54 @@ fn G(T:! Generic(B)) {
|
||||
// CHECK:STDOUT: %.loc25_21.1: type = value_of_initializer %.loc25_19 [template = constants.%.7]
|
||||
// CHECK:STDOUT: %.loc25_21.2: type = converted %.loc25_19, %.loc25_21.1 [template = constants.%.7]
|
||||
// CHECK:STDOUT: %T.loc25_9.1: %.7 = param T
|
||||
// CHECK:STDOUT: @Pass.%T: %.7 = bind_symbolic_name T 0, %T.loc25_9.1 [symbolic = @Pass.%T (constants.%T.2)]
|
||||
// CHECK:STDOUT: @Pass.%T.loc25: %.7 = bind_symbolic_name T 0, %T.loc25_9.1 [symbolic = @Pass.%T.1 (constants.%T.2)]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: interface @Simple
|
||||
// CHECK:STDOUT: generic [file.%T.loc4_18.2: type] {
|
||||
// CHECK:STDOUT: %Self: <unexpected>.inst+11 (%.2) = bind_symbolic_name Self 1 [symbolic = %Self (constants.%Self.1)]
|
||||
// CHECK:STDOUT: generic interface @Simple(file.%T.loc4_18.2: type) {
|
||||
// CHECK:STDOUT: %T: type = bind_symbolic_name T 0 [symbolic = %T (constants.%T.1)]
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !members:
|
||||
// CHECK:STDOUT: .Self = %Self
|
||||
// CHECK:STDOUT: witness = ()
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT: %.1: type = interface_type @Simple, @Simple(%T) [symbolic = %.1 (constants.%.2)]
|
||||
// CHECK:STDOUT: %Self.2: %.2 = bind_symbolic_name Self 1 [symbolic = %Self.2 (constants.%Self.1)]
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: interface @WithAssocFn
|
||||
// CHECK:STDOUT: generic [file.%T.loc8_23.2: type] {
|
||||
// CHECK:STDOUT: %Self: <unexpected>.inst+31 (%.4) = bind_symbolic_name Self 1 [symbolic = %Self (constants.%Self.2)]
|
||||
// CHECK:STDOUT: %F.decl: %F.type.1 = fn_decl @F.1 [template = constants.%F.1] {
|
||||
// CHECK:STDOUT: %X.ref: type = name_ref X, file.%X.decl [template = constants.%X]
|
||||
// CHECK:STDOUT: %return.var: ref %X = var <return slot>
|
||||
// CHECK:STDOUT: interface {
|
||||
// CHECK:STDOUT: %Self.1: @Simple.%.1 (%.2) = bind_symbolic_name Self 1 [symbolic = %Self.2 (constants.%Self.1)]
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !members:
|
||||
// CHECK:STDOUT: .Self = %Self.1
|
||||
// CHECK:STDOUT: witness = ()
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %.loc10: %.5 = assoc_entity element0, %F.decl [template = constants.%.6]
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !members:
|
||||
// CHECK:STDOUT: .Self = %Self
|
||||
// CHECK:STDOUT: .F = %.loc10
|
||||
// CHECK:STDOUT: witness = (%F.decl)
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: interface @WithImplicitArgs
|
||||
// CHECK:STDOUT: generic [file.%T.loc22_28.2: type, file.%N.loc22_38.2: file.%T.loc22_28.2 (%T.1)];
|
||||
// CHECK:STDOUT: generic interface @WithAssocFn(file.%T.loc8_23.2: type) {
|
||||
// CHECK:STDOUT: %T: type = bind_symbolic_name T 0 [symbolic = %T (constants.%T.1)]
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT: %.1: type = interface_type @WithAssocFn, @WithAssocFn(%T) [symbolic = %.1 (constants.%.4)]
|
||||
// CHECK:STDOUT: %Self.2: %.4 = bind_symbolic_name Self 1 [symbolic = %Self.2 (constants.%Self.2)]
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: interface {
|
||||
// CHECK:STDOUT: %Self.1: @WithAssocFn.%.1 (%.4) = bind_symbolic_name Self 1 [symbolic = %Self.2 (constants.%Self.2)]
|
||||
// CHECK:STDOUT: %F.decl: %F.type.1 = fn_decl @F.1 [template = constants.%F.1] {
|
||||
// CHECK:STDOUT: %X.ref: type = name_ref X, file.%X.decl [template = constants.%X]
|
||||
// CHECK:STDOUT: %return.var: ref %X = var <return slot>
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %.loc10: %.5 = assoc_entity element0, %F.decl [template = constants.%.6]
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !members:
|
||||
// CHECK:STDOUT: .Self = %Self.1
|
||||
// CHECK:STDOUT: .F = %.loc10
|
||||
// CHECK:STDOUT: witness = (%F.decl)
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: generic interface @WithImplicitArgs(file.%T.loc22_28.2: type, file.%N.loc22_38.2: @WithImplicitArgs.%T (%T.1)) {
|
||||
// CHECK:STDOUT: %T: type = bind_symbolic_name T 0 [symbolic = %T (constants.%T.1)]
|
||||
// CHECK:STDOUT: %N: %T.1 = bind_symbolic_name N 1 [symbolic = %N (constants.%N)]
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: interface;
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: impl @impl.1: %C as %.7 {
|
||||
// CHECK:STDOUT: %.1: <witness> = interface_witness () [template = constants.%.8]
|
||||
@@ -214,8 +232,10 @@ fn G(T:! Generic(B)) {
|
||||
// CHECK:STDOUT: .Self = constants.%C
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn @F.1() -> %X
|
||||
// CHECK:STDOUT: generic [file.%T.loc8_23.2: type, @WithAssocFn.%Self: <unexpected>.inst+31 (%.4)];
|
||||
// CHECK:STDOUT: generic fn @F.1(file.%T.loc8_23.2: type, @WithAssocFn.%Self.1: @WithAssocFn.%.1 (%.4)) {
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn() -> %X;
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn @F.2() -> @impl.2.%return.var: %X {
|
||||
// CHECK:STDOUT: !entry:
|
||||
@@ -225,66 +245,63 @@ fn G(T:! Generic(B)) {
|
||||
// CHECK:STDOUT: return %.loc17_16 to @impl.2.%return.var
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn @Receive(%T: %.7)
|
||||
// CHECK:STDOUT: generic [%T: %.7];
|
||||
// CHECK:STDOUT: generic fn @Receive(%T.loc24: %.7) {
|
||||
// CHECK:STDOUT: %T.1: %.7 = bind_symbolic_name T 0 [symbolic = %T.1 (constants.%T.2)]
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn @Pass(%T: %.7)
|
||||
// CHECK:STDOUT: generic [%T: %.7] {
|
||||
// CHECK:STDOUT: !entry:
|
||||
// CHECK:STDOUT: %Receive.ref: %Receive.type = name_ref Receive, file.%Receive.decl [template = constants.%Receive]
|
||||
// CHECK:STDOUT: %T.ref: %.7 = name_ref T, %T [symbolic = %T (constants.%T.2)]
|
||||
// CHECK:STDOUT: %Receive.call: init %.1 = call %Receive.ref(%T.ref)
|
||||
// CHECK:STDOUT: return
|
||||
// CHECK:STDOUT: fn(%T.loc24: %.7);
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific file.%Simple.decl(constants.%T.1) {
|
||||
// CHECK:STDOUT: declaration:
|
||||
// CHECK:STDOUT: file.%T.loc4_18.2 => constants.%T.1
|
||||
// CHECK:STDOUT: generic fn @Pass(%T.loc25: %.7) {
|
||||
// CHECK:STDOUT: %T.1: %.7 = bind_symbolic_name T 0 [symbolic = %T.1 (constants.%T.2)]
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn(%T.loc25: %.7) {
|
||||
// CHECK:STDOUT: !entry:
|
||||
// CHECK:STDOUT: %Receive.ref: %Receive.type = name_ref Receive, file.%Receive.decl [template = constants.%Receive]
|
||||
// CHECK:STDOUT: %T.ref: %.7 = name_ref T, %T.loc25 [symbolic = %T.1 (constants.%T.2)]
|
||||
// CHECK:STDOUT: %Receive.call: init %.1 = call %Receive.ref(%T.ref)
|
||||
// CHECK:STDOUT: return
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific file.%Simple.decl(file.%T.loc4_18.2) {
|
||||
// CHECK:STDOUT: declaration:
|
||||
// CHECK:STDOUT: file.%T.loc4_18.2 => constants.%T.1
|
||||
// CHECK:STDOUT: specific @Simple(constants.%T.1) {
|
||||
// CHECK:STDOUT: %T => constants.%T.1
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific file.%WithAssocFn.decl(constants.%T.1) {
|
||||
// CHECK:STDOUT: declaration:
|
||||
// CHECK:STDOUT: file.%T.loc8_23.2 => constants.%T.1
|
||||
// CHECK:STDOUT: specific @Simple(@Simple.%T) {
|
||||
// CHECK:STDOUT: %T => constants.%T.1
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific @WithAssocFn.%F.decl(constants.%T.1, constants.%Self.2) {
|
||||
// CHECK:STDOUT: declaration:
|
||||
// CHECK:STDOUT: specific @WithAssocFn(constants.%T.1) {
|
||||
// CHECK:STDOUT: %T => constants.%T.1
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific file.%WithAssocFn.decl(file.%T.loc8_23.2) {
|
||||
// CHECK:STDOUT: declaration:
|
||||
// CHECK:STDOUT: file.%T.loc8_23.2 => constants.%T.1
|
||||
// CHECK:STDOUT: specific @F.1(constants.%T.1, constants.%Self.2) {}
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific @WithAssocFn(@WithAssocFn.%T) {
|
||||
// CHECK:STDOUT: %T => constants.%T.1
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific file.%Simple.decl(constants.%C) {
|
||||
// CHECK:STDOUT: declaration:
|
||||
// CHECK:STDOUT: file.%T.loc4_18.2 => constants.%C
|
||||
// CHECK:STDOUT: specific @Simple(constants.%C) {
|
||||
// CHECK:STDOUT: %T => constants.%C
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific file.%WithAssocFn.decl(constants.%C) {
|
||||
// CHECK:STDOUT: declaration:
|
||||
// CHECK:STDOUT: file.%T.loc8_23.2 => constants.%C
|
||||
// CHECK:STDOUT: specific @WithAssocFn(constants.%C) {
|
||||
// CHECK:STDOUT: %T => constants.%C
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific file.%WithImplicitArgs.decl(constants.%T.1, constants.%N) {
|
||||
// CHECK:STDOUT: declaration:
|
||||
// CHECK:STDOUT: file.%T.loc22_28.2 => constants.%T.1
|
||||
// CHECK:STDOUT: file.%N.loc22_38.2 => constants.%N
|
||||
// CHECK:STDOUT: specific @WithImplicitArgs(constants.%T.1, constants.%N) {
|
||||
// CHECK:STDOUT: %T => constants.%T.1
|
||||
// CHECK:STDOUT: %N => constants.%N
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific file.%Receive.decl(constants.%T.2) {
|
||||
// CHECK:STDOUT: declaration:
|
||||
// CHECK:STDOUT: @Receive.%T => constants.%T.2
|
||||
// CHECK:STDOUT: specific @Receive(constants.%T.2) {
|
||||
// CHECK:STDOUT: %T.1 => constants.%T.2
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific file.%Pass.decl(constants.%T.2) {
|
||||
// CHECK:STDOUT: declaration:
|
||||
// CHECK:STDOUT: @Pass.%T => constants.%T.2
|
||||
// CHECK:STDOUT: specific @Pass(constants.%T.2) {
|
||||
// CHECK:STDOUT: %T.1 => constants.%T.2
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: --- fail_mismatched_args.carbon
|
||||
@@ -294,16 +311,16 @@ fn G(T:! Generic(B)) {
|
||||
// CHECK:STDOUT: %Generic.type: type = generic_interface_type @Generic [template]
|
||||
// CHECK:STDOUT: %.1: type = tuple_type () [template]
|
||||
// CHECK:STDOUT: %Generic: %Generic.type = struct_value () [template]
|
||||
// CHECK:STDOUT: %.2: type = interface_type @Generic, file.%Generic.decl(%T.1) [symbolic]
|
||||
// CHECK:STDOUT: %.2: type = interface_type @Generic, @Generic(%T.1) [symbolic]
|
||||
// CHECK:STDOUT: %Self: %.2 = bind_symbolic_name Self 1 [symbolic]
|
||||
// CHECK:STDOUT: %A: type = class_type @A [template]
|
||||
// CHECK:STDOUT: %.3: type = struct_type {} [template]
|
||||
// CHECK:STDOUT: %B: type = class_type @B [template]
|
||||
// CHECK:STDOUT: %.4: type = interface_type @Generic, file.%Generic.decl(%A) [template]
|
||||
// CHECK:STDOUT: %.4: type = interface_type @Generic, @Generic(%A) [template]
|
||||
// CHECK:STDOUT: %T.2: %.4 = bind_symbolic_name T 0 [symbolic]
|
||||
// CHECK:STDOUT: %F.type: type = fn_type @F [template]
|
||||
// CHECK:STDOUT: %F: %F.type = struct_value () [template]
|
||||
// CHECK:STDOUT: %.5: type = interface_type @Generic, file.%Generic.decl(%B) [template]
|
||||
// CHECK:STDOUT: %.5: type = interface_type @Generic, @Generic(%B) [template]
|
||||
// CHECK:STDOUT: %T.3: %.5 = bind_symbolic_name T 0 [symbolic]
|
||||
// CHECK:STDOUT: %G.type: type = fn_type @G [template]
|
||||
// CHECK:STDOUT: %G: %G.type = struct_value () [template]
|
||||
@@ -319,7 +336,7 @@ fn G(T:! Generic(B)) {
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %Generic.decl: %Generic.type = interface_decl @Generic [template = constants.%Generic] {
|
||||
// CHECK:STDOUT: %T.loc4_19.1: type = param T
|
||||
// CHECK:STDOUT: %T.loc4_19.2: type = bind_symbolic_name T 0, %T.loc4_19.1 [symbolic = %T.loc4_19.2 (constants.%T.1)]
|
||||
// CHECK:STDOUT: %T.loc4_19.2: type = bind_symbolic_name T 0, %T.loc4_19.1 [symbolic = @Generic.%T (constants.%T.1)]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %A.decl: type = class_decl @A [template = constants.%A] {}
|
||||
// CHECK:STDOUT: %B.decl: type = class_decl @B [template = constants.%B] {}
|
||||
@@ -330,7 +347,7 @@ fn G(T:! Generic(B)) {
|
||||
// CHECK:STDOUT: %.loc9_19.1: type = value_of_initializer %.loc9_17 [template = constants.%.4]
|
||||
// CHECK:STDOUT: %.loc9_19.2: type = converted %.loc9_17, %.loc9_19.1 [template = constants.%.4]
|
||||
// CHECK:STDOUT: %T.loc9_6.1: %.4 = param T
|
||||
// CHECK:STDOUT: @F.%T: %.4 = bind_symbolic_name T 0, %T.loc9_6.1 [symbolic = @F.%T (constants.%T.2)]
|
||||
// CHECK:STDOUT: @F.%T.loc9: %.4 = bind_symbolic_name T 0, %T.loc9_6.1 [symbolic = @F.%T.1 (constants.%T.2)]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [template = constants.%G] {
|
||||
// CHECK:STDOUT: %Generic.ref.loc10: %Generic.type = name_ref Generic, %Generic.decl [template = constants.%Generic]
|
||||
@@ -339,17 +356,24 @@ fn G(T:! Generic(B)) {
|
||||
// CHECK:STDOUT: %.loc10_19.1: type = value_of_initializer %.loc10_17 [template = constants.%.5]
|
||||
// CHECK:STDOUT: %.loc10_19.2: type = converted %.loc10_17, %.loc10_19.1 [template = constants.%.5]
|
||||
// CHECK:STDOUT: %T.loc10_6.1: %.5 = param T
|
||||
// CHECK:STDOUT: @G.%T: %.5 = bind_symbolic_name T 0, %T.loc10_6.1 [symbolic = @G.%T (constants.%T.3)]
|
||||
// CHECK:STDOUT: @G.%T.loc10: %.5 = bind_symbolic_name T 0, %T.loc10_6.1 [symbolic = @G.%T.1 (constants.%T.3)]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: interface @Generic
|
||||
// CHECK:STDOUT: generic [file.%T.loc4_19.2: type] {
|
||||
// CHECK:STDOUT: %Self: <unexpected>.inst+11 (%.2) = bind_symbolic_name Self 1 [symbolic = %Self (constants.%Self)]
|
||||
// CHECK:STDOUT: generic interface @Generic(file.%T.loc4_19.2: type) {
|
||||
// CHECK:STDOUT: %T: type = bind_symbolic_name T 0 [symbolic = %T (constants.%T.1)]
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !members:
|
||||
// CHECK:STDOUT: .Self = %Self
|
||||
// CHECK:STDOUT: witness = ()
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT: %.1: type = interface_type @Generic, @Generic(%T) [symbolic = %.1 (constants.%.2)]
|
||||
// CHECK:STDOUT: %Self.2: %.2 = bind_symbolic_name Self 1 [symbolic = %Self.2 (constants.%Self)]
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: interface {
|
||||
// CHECK:STDOUT: %Self.1: @Generic.%.1 (%.2) = bind_symbolic_name Self 1 [symbolic = %Self.2 (constants.%Self)]
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !members:
|
||||
// CHECK:STDOUT: .Self = %Self.1
|
||||
// CHECK:STDOUT: witness = ()
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: class @A {
|
||||
@@ -362,45 +386,47 @@ fn G(T:! Generic(B)) {
|
||||
// CHECK:STDOUT: .Self = constants.%B
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn @F(%T: %.4)
|
||||
// CHECK:STDOUT: generic [%T: %.4];
|
||||
// CHECK:STDOUT: generic fn @F(%T.loc9: %.4) {
|
||||
// CHECK:STDOUT: %T.1: %.4 = bind_symbolic_name T 0 [symbolic = %T.1 (constants.%T.2)]
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn @G(%T: %.5)
|
||||
// CHECK:STDOUT: generic [%T: %.5] {
|
||||
// CHECK:STDOUT: !entry:
|
||||
// CHECK:STDOUT: %F.ref: %F.type = name_ref F, file.%F.decl [template = constants.%F]
|
||||
// CHECK:STDOUT: %T.ref: %.5 = name_ref T, %T [symbolic = %T (constants.%T.3)]
|
||||
// CHECK:STDOUT: %F.call: init %.1 = call %F.ref(<invalid>) [template = <error>]
|
||||
// CHECK:STDOUT: return
|
||||
// CHECK:STDOUT: fn(%T.loc9: %.4);
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific file.%Generic.decl(constants.%T.1) {
|
||||
// CHECK:STDOUT: declaration:
|
||||
// CHECK:STDOUT: file.%T.loc4_19.2 => constants.%T.1
|
||||
// CHECK:STDOUT: generic fn @G(%T.loc10: %.5) {
|
||||
// CHECK:STDOUT: %T.1: %.5 = bind_symbolic_name T 0 [symbolic = %T.1 (constants.%T.3)]
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn(%T.loc10: %.5) {
|
||||
// CHECK:STDOUT: !entry:
|
||||
// CHECK:STDOUT: %F.ref: %F.type = name_ref F, file.%F.decl [template = constants.%F]
|
||||
// CHECK:STDOUT: %T.ref: %.5 = name_ref T, %T.loc10 [symbolic = %T.1 (constants.%T.3)]
|
||||
// CHECK:STDOUT: %F.call: init %.1 = call %F.ref(<invalid>) [template = <error>]
|
||||
// CHECK:STDOUT: return
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific file.%Generic.decl(file.%T.loc4_19.2) {
|
||||
// CHECK:STDOUT: declaration:
|
||||
// CHECK:STDOUT: file.%T.loc4_19.2 => constants.%T.1
|
||||
// CHECK:STDOUT: specific @Generic(constants.%T.1) {
|
||||
// CHECK:STDOUT: %T => constants.%T.1
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific file.%Generic.decl(constants.%A) {
|
||||
// CHECK:STDOUT: declaration:
|
||||
// CHECK:STDOUT: file.%T.loc4_19.2 => constants.%A
|
||||
// CHECK:STDOUT: specific @Generic(@Generic.%T) {
|
||||
// CHECK:STDOUT: %T => constants.%T.1
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific file.%F.decl(constants.%T.2) {
|
||||
// CHECK:STDOUT: declaration:
|
||||
// CHECK:STDOUT: @F.%T => constants.%T.2
|
||||
// CHECK:STDOUT: specific @Generic(constants.%A) {
|
||||
// CHECK:STDOUT: %T => constants.%A
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific file.%Generic.decl(constants.%B) {
|
||||
// CHECK:STDOUT: declaration:
|
||||
// CHECK:STDOUT: file.%T.loc4_19.2 => constants.%B
|
||||
// CHECK:STDOUT: specific @F(constants.%T.2) {
|
||||
// CHECK:STDOUT: %T.1 => constants.%T.2
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific file.%G.decl(constants.%T.3) {
|
||||
// CHECK:STDOUT: declaration:
|
||||
// CHECK:STDOUT: @G.%T => constants.%T.3
|
||||
// CHECK:STDOUT: specific @Generic(constants.%B) {
|
||||
// CHECK:STDOUT: %T => constants.%B
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific @G(constants.%T.3) {
|
||||
// CHECK:STDOUT: %T.1 => constants.%T.3
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
|
||||
+17
-13
@@ -46,14 +46,14 @@ interface I {
|
||||
// CHECK:STDOUT: %Self: %.1 = bind_symbolic_name Self 0 [symbolic = constants.%Self]
|
||||
// CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [template = constants.%F] {
|
||||
// CHECK:STDOUT: %T.loc12_8.1: type = param T
|
||||
// CHECK:STDOUT: %T.loc12_8.2: type = bind_symbolic_name T 1, %T.loc12_8.1 [symbolic = %T.loc12_8.2 (constants.%T)]
|
||||
// CHECK:STDOUT: %T.loc12_8.2: type = bind_symbolic_name T 1, %T.loc12_8.1 [symbolic = @F.%T.1 (constants.%T)]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %.loc12: %.3 = assoc_entity element0, %F.decl [template = constants.%.4]
|
||||
// CHECK:STDOUT: %U: type = assoc_const_decl U [template]
|
||||
// CHECK:STDOUT: %.loc13: %.5 = assoc_entity element1, %U [template = constants.%.6]
|
||||
// CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [template = constants.%G] {
|
||||
// CHECK:STDOUT: %T.loc16_8.1: type = param T
|
||||
// CHECK:STDOUT: %T.loc16_8.2: type = bind_symbolic_name T 1, %T.loc16_8.1 [symbolic = %T.loc16_8.2 (constants.%T)]
|
||||
// CHECK:STDOUT: %T.loc16_8.2: type = bind_symbolic_name T 1, %T.loc16_8.1 [symbolic = @G.%T.1 (constants.%T)]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %.loc16: %.7 = assoc_entity element2, %G.decl [template = constants.%.8]
|
||||
// CHECK:STDOUT:
|
||||
@@ -65,19 +65,23 @@ interface I {
|
||||
// CHECK:STDOUT: witness = (%F.decl, %U, %G.decl)
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn @F(@I.%T.loc12_8.2: type)
|
||||
// CHECK:STDOUT: generic [@I.%Self: %.1, @I.%T.loc12_8.2: type];
|
||||
// CHECK:STDOUT: generic fn @F(@I.%Self: %.1, @I.%T.loc12_8.2: type) {
|
||||
// CHECK:STDOUT: %T.1: type = bind_symbolic_name T 1 [symbolic = %T.1 (constants.%T)]
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn @G(@I.%T.loc16_8.2: type)
|
||||
// CHECK:STDOUT: generic [@I.%Self: %.1, @I.%T.loc16_8.2: type];
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific @I.%F.decl(constants.%Self, constants.%T) {
|
||||
// CHECK:STDOUT: declaration:
|
||||
// CHECK:STDOUT: @I.%T.loc12_8.2 => constants.%T
|
||||
// CHECK:STDOUT: fn(@I.%T.loc12_8.2: type);
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific @I.%G.decl(constants.%Self, constants.%T) {
|
||||
// CHECK:STDOUT: declaration:
|
||||
// CHECK:STDOUT: @I.%T.loc16_8.2 => constants.%T
|
||||
// CHECK:STDOUT: generic fn @G(@I.%Self: %.1, @I.%T.loc16_8.2: type) {
|
||||
// CHECK:STDOUT: %T.1: type = bind_symbolic_name T 1 [symbolic = %T.1 (constants.%T)]
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn(@I.%T.loc16_8.2: type);
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific @F(constants.%Self, constants.%T) {
|
||||
// CHECK:STDOUT: %T.1 => constants.%T
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific @G(constants.%Self, constants.%T) {
|
||||
// CHECK:STDOUT: %T.1 => constants.%T
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
|
||||
@@ -34,7 +34,7 @@ impl C as AddWith(C) {
|
||||
// CHECK:STDOUT: %AddWith.type: type = generic_interface_type @AddWith [template]
|
||||
// CHECK:STDOUT: %.1: type = tuple_type () [template]
|
||||
// CHECK:STDOUT: %AddWith: %AddWith.type = struct_value () [template]
|
||||
// CHECK:STDOUT: %.2: type = interface_type @AddWith, file.%AddWith.decl(%T) [symbolic]
|
||||
// CHECK:STDOUT: %.2: type = interface_type @AddWith, @AddWith(%T) [symbolic]
|
||||
// CHECK:STDOUT: %Self: %.2 = bind_symbolic_name Self 1 [symbolic]
|
||||
// CHECK:STDOUT: %F.type: type = fn_type @F [template]
|
||||
// CHECK:STDOUT: %F: %F.type = struct_value () [template]
|
||||
@@ -48,37 +48,42 @@ impl C as AddWith(C) {
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %AddWith.decl: %AddWith.type = interface_decl @AddWith [template = constants.%AddWith] {
|
||||
// CHECK:STDOUT: %T.loc4_19.1: type = param T
|
||||
// CHECK:STDOUT: %T.loc4_19.2: type = bind_symbolic_name T 0, %T.loc4_19.1 [symbolic = %T.loc4_19.2 (constants.%T)]
|
||||
// CHECK:STDOUT: %T.loc4_19.2: type = bind_symbolic_name T 0, %T.loc4_19.1 [symbolic = @AddWith.%T (constants.%T)]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: interface @AddWith
|
||||
// CHECK:STDOUT: generic [file.%T.loc4_19.2: type] {
|
||||
// CHECK:STDOUT: %Self: <unexpected>.inst+17 (%.2) = bind_symbolic_name Self 1 [symbolic = %Self (constants.%Self)]
|
||||
// CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [template = constants.%F] {}
|
||||
// CHECK:STDOUT: %.loc5: %.3 = assoc_entity element0, %F.decl [template = constants.%.4]
|
||||
// CHECK:STDOUT: generic interface @AddWith(file.%T.loc4_19.2: type) {
|
||||
// CHECK:STDOUT: %T: type = bind_symbolic_name T 0 [symbolic = %T (constants.%T)]
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !members:
|
||||
// CHECK:STDOUT: .Self = %Self
|
||||
// CHECK:STDOUT: .F = %.loc5
|
||||
// CHECK:STDOUT: witness = (%F.decl)
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT: %.1: type = interface_type @AddWith, @AddWith(%T) [symbolic = %.1 (constants.%.2)]
|
||||
// CHECK:STDOUT: %Self.2: %.2 = bind_symbolic_name Self 1 [symbolic = %Self.2 (constants.%Self)]
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: interface {
|
||||
// CHECK:STDOUT: %Self.1: @AddWith.%.1 (%.2) = bind_symbolic_name Self 1 [symbolic = %Self.2 (constants.%Self)]
|
||||
// CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [template = constants.%F] {}
|
||||
// CHECK:STDOUT: %.loc5: %.3 = assoc_entity element0, %F.decl [template = constants.%.4]
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !members:
|
||||
// CHECK:STDOUT: .Self = %Self.1
|
||||
// CHECK:STDOUT: .F = %.loc5
|
||||
// CHECK:STDOUT: witness = (%F.decl)
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn @F()
|
||||
// CHECK:STDOUT: generic [file.%T.loc4_19.2: type, @AddWith.%Self: <unexpected>.inst+17 (%.2)];
|
||||
// CHECK:STDOUT: generic fn @F(file.%T.loc4_19.2: type, @AddWith.%Self.1: @AddWith.%.1 (%.2)) {
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific file.%AddWith.decl(constants.%T) {
|
||||
// CHECK:STDOUT: declaration:
|
||||
// CHECK:STDOUT: file.%T.loc4_19.2 => constants.%T
|
||||
// CHECK:STDOUT: fn();
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific @AddWith.%F.decl(constants.%T, constants.%Self) {
|
||||
// CHECK:STDOUT: declaration:
|
||||
// CHECK:STDOUT: specific @AddWith(constants.%T) {
|
||||
// CHECK:STDOUT: %T => constants.%T
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific file.%AddWith.decl(file.%T.loc4_19.2) {
|
||||
// CHECK:STDOUT: declaration:
|
||||
// CHECK:STDOUT: file.%T.loc4_19.2 => constants.%T
|
||||
// CHECK:STDOUT: specific @F(constants.%T, constants.%Self) {}
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific @AddWith(@AddWith.%T) {
|
||||
// CHECK:STDOUT: %T => constants.%T
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: --- b.carbon
|
||||
@@ -90,9 +95,9 @@ impl C as AddWith(C) {
|
||||
// CHECK:STDOUT: %.2: type = tuple_type () [template]
|
||||
// CHECK:STDOUT: %AddWith: %AddWith.type = struct_value () [template]
|
||||
// CHECK:STDOUT: %T: type = bind_symbolic_name T 0, <unexpected>.inst+14 [symbolic]
|
||||
// CHECK:STDOUT: %.3: type = interface_type @AddWith, <invalid>(%T) [symbolic]
|
||||
// CHECK:STDOUT: %.3: type = interface_type @AddWith, invalid(%T) [symbolic]
|
||||
// CHECK:STDOUT: %Self: %.3 = bind_symbolic_name Self 1 [symbolic]
|
||||
// CHECK:STDOUT: %.4: type = interface_type @AddWith, <invalid>(%C) [template]
|
||||
// CHECK:STDOUT: %.4: type = interface_type @AddWith, invalid(%C) [template]
|
||||
// CHECK:STDOUT: %F.type.1: type = fn_type @F.1 [template]
|
||||
// CHECK:STDOUT: %F.1: %F.type.1 = struct_value () [template]
|
||||
// CHECK:STDOUT: %F.type.2: type = fn_type @F.2 [template]
|
||||
@@ -102,9 +107,9 @@ impl C as AddWith(C) {
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: imports {
|
||||
// CHECK:STDOUT: %import_ref.1: %AddWith.type = import_ref Main//a, inst+4, loaded [template = constants.%AddWith]
|
||||
// CHECK:STDOUT: %import_ref.2 = import_ref Main//a, inst+9, unloaded
|
||||
// CHECK:STDOUT: %import_ref.3 = import_ref Main//a, inst+15, unloaded
|
||||
// CHECK:STDOUT: %import_ref.4: %F.type.2 = import_ref Main//a, inst+11, loaded [template = constants.%F.2]
|
||||
// CHECK:STDOUT: %import_ref.2 = import_ref Main//a, inst+10, unloaded
|
||||
// CHECK:STDOUT: %import_ref.3 = import_ref Main//a, inst+16, unloaded
|
||||
// CHECK:STDOUT: %import_ref.4: %F.type.2 = import_ref Main//a, inst+12, loaded [template = constants.%F.2]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: file {
|
||||
@@ -152,7 +157,7 @@ impl C as AddWith(C) {
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn @F.2();
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific <invalid>(constants.%T);
|
||||
// CHECK:STDOUT: specific invalid(constants.%T);
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific <invalid>(constants.%C);
|
||||
// CHECK:STDOUT: specific invalid(constants.%C);
|
||||
// CHECK:STDOUT:
|
||||
|
||||
@@ -126,20 +126,20 @@ var f: ForwardDeclared* = &f_ref.f;
|
||||
// CHECK:STDOUT: witness = (%T, %F.decl)
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn @F.1()
|
||||
// CHECK:STDOUT: generic [@Basic.%Self: %.2];
|
||||
// CHECK:STDOUT: generic fn @F.1(@Basic.%Self: %.2) {
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn @F.2()
|
||||
// CHECK:STDOUT: generic [@ForwardDeclared.%Self: %.8];
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific @Basic.%F.decl(constants.%Self.2) {
|
||||
// CHECK:STDOUT: declaration:
|
||||
// CHECK:STDOUT: fn();
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific @ForwardDeclared.%F.decl(constants.%Self.3) {
|
||||
// CHECK:STDOUT: declaration:
|
||||
// CHECK:STDOUT: generic fn @F.2(@ForwardDeclared.%Self: %.8) {
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn();
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific @F.1(constants.%Self.2) {}
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific @F.2(constants.%Self.3) {}
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: --- b.carbon
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: constants {
|
||||
|
||||
+15
-13
@@ -34,14 +34,14 @@ interface UseSelf {
|
||||
// CHECK:STDOUT: interface @UseSelf {
|
||||
// CHECK:STDOUT: %Self: %.1 = bind_symbolic_name Self 0 [symbolic = constants.%Self]
|
||||
// CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [template = constants.%F] {
|
||||
// CHECK:STDOUT: %Self.ref.loc12_14: %.1 = name_ref Self, %Self [symbolic = %Self.ref.loc12_14 (constants.%Self)]
|
||||
// CHECK:STDOUT: %.loc12_14.1: type = facet_type_access %Self.ref.loc12_14 [symbolic = %Self.ref.loc12_14 (constants.%Self)]
|
||||
// CHECK:STDOUT: %.loc12_14.2: type = converted %Self.ref.loc12_14, %.loc12_14.1 [symbolic = %Self.ref.loc12_14 (constants.%Self)]
|
||||
// CHECK:STDOUT: %self.loc12_8.1: @UseSelf.%Self.ref.loc12_14 (%Self) = param self
|
||||
// CHECK:STDOUT: %self.loc12_8.2: @UseSelf.%Self.ref.loc12_14 (%Self) = bind_name self, %self.loc12_8.1
|
||||
// CHECK:STDOUT: %Self.ref.loc12_25: %.1 = name_ref Self, %Self [symbolic = %Self.ref.loc12_14 (constants.%Self)]
|
||||
// CHECK:STDOUT: %.loc12_25.1: type = facet_type_access %Self.ref.loc12_25 [symbolic = %Self.ref.loc12_14 (constants.%Self)]
|
||||
// CHECK:STDOUT: %.loc12_25.2: type = converted %Self.ref.loc12_25, %.loc12_25.1 [symbolic = %Self.ref.loc12_14 (constants.%Self)]
|
||||
// CHECK:STDOUT: %Self.ref.loc12_14: %.1 = name_ref Self, %Self [symbolic = @F.%Self (constants.%Self)]
|
||||
// CHECK:STDOUT: %.loc12_14.1: type = facet_type_access %Self.ref.loc12_14 [symbolic = @F.%Self (constants.%Self)]
|
||||
// CHECK:STDOUT: %.loc12_14.2: type = converted %Self.ref.loc12_14, %.loc12_14.1 [symbolic = @F.%Self (constants.%Self)]
|
||||
// CHECK:STDOUT: %self.loc12_8.1: @F.%Self (%Self) = param self
|
||||
// CHECK:STDOUT: %self.loc12_8.2: @F.%Self (%Self) = bind_name self, %self.loc12_8.1
|
||||
// CHECK:STDOUT: %Self.ref.loc12_25: %.1 = name_ref Self, %Self [symbolic = @F.%Self (constants.%Self)]
|
||||
// CHECK:STDOUT: %.loc12_25.1: type = facet_type_access %Self.ref.loc12_25 [symbolic = @F.%Self (constants.%Self)]
|
||||
// CHECK:STDOUT: %.loc12_25.2: type = converted %Self.ref.loc12_25, %.loc12_25.1 [symbolic = @F.%Self (constants.%Self)]
|
||||
// CHECK:STDOUT: %return.var: ref %Self = var <return slot>
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %.loc12_29: %.3 = assoc_entity element0, %F.decl [template = constants.%.4]
|
||||
@@ -52,11 +52,13 @@ interface UseSelf {
|
||||
// CHECK:STDOUT: witness = (%F.decl)
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn @F[@UseSelf.%self.loc12_8.2: @UseSelf.%Self.ref.loc12_14 (%Self)]() -> %Self
|
||||
// CHECK:STDOUT: generic [@UseSelf.%Self: %.1];
|
||||
// CHECK:STDOUT: generic fn @F(@UseSelf.%Self: %.1) {
|
||||
// CHECK:STDOUT: %Self: %.1 = bind_symbolic_name Self 0 [symbolic = %Self (constants.%Self)]
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific @UseSelf.%F.decl(constants.%Self) {
|
||||
// CHECK:STDOUT: declaration:
|
||||
// CHECK:STDOUT: @UseSelf.%Self.ref.loc12_14 => constants.%Self
|
||||
// CHECK:STDOUT: fn[@UseSelf.%self.loc12_8.2: @F.%Self (%Self)]() -> %Self;
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific @F(constants.%Self) {
|
||||
// CHECK:STDOUT: %Self => constants.%Self
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
|
||||
@@ -118,22 +118,23 @@ interface I {
|
||||
// CHECK:STDOUT: witness = (%F.decl, %G.decl, %T, %N)
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn @F()
|
||||
// CHECK:STDOUT: generic [@I.%Self: %.1] {
|
||||
// CHECK:STDOUT: !entry:
|
||||
// CHECK:STDOUT: return
|
||||
// CHECK:STDOUT: generic fn @F(@I.%Self: %.1) {
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn() {
|
||||
// CHECK:STDOUT: !entry:
|
||||
// CHECK:STDOUT: return
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn @Int32() -> type = "int.make_type_32";
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn @G(@I.%a.loc14_8.2: i32, @I.%b.loc14_16.2: i32) -> i32 = "int.sadd"
|
||||
// CHECK:STDOUT: generic [@I.%Self: %.1];
|
||||
// CHECK:STDOUT: generic fn @G(@I.%Self: %.1) {
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific @I.%F.decl(constants.%Self) {
|
||||
// CHECK:STDOUT: declaration:
|
||||
// CHECK:STDOUT: fn(@I.%a.loc14_8.2: i32, @I.%b.loc14_16.2: i32) -> i32 = "int.sadd";
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific @I.%G.decl(constants.%Self) {
|
||||
// CHECK:STDOUT: declaration:
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: specific @F(constants.%Self) {}
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific @G(constants.%Self) {}
|
||||
// CHECK:STDOUT:
|
||||
|
||||
Reference in New Issue
Block a user