|
|
@@ -112,7 +112,7 @@ fn Generic(T:! ()).WrongType() {}
|
|
|
// CHECK:STDOUT: %Class.type: type = generic_class_type @Class [template]
|
|
|
// CHECK:STDOUT: %.1: type = tuple_type () [template]
|
|
|
// CHECK:STDOUT: %Class.1: %Class.type = struct_value () [template]
|
|
|
-// CHECK:STDOUT: %Class.2: type = class_type @Class, file.%Class.decl(%T) [symbolic]
|
|
|
+// CHECK:STDOUT: %Class.2: type = class_type @Class, @Class(%T) [symbolic]
|
|
|
// CHECK:STDOUT: %F.type: type = fn_type @F [template]
|
|
|
// CHECK:STDOUT: %F: %F.type = struct_value () [template]
|
|
|
// CHECK:STDOUT: %G.type: type = fn_type @G [template]
|
|
|
@@ -139,7 +139,7 @@ fn Generic(T:! ()).WrongType() {}
|
|
|
// CHECK:STDOUT: }
|
|
|
// CHECK:STDOUT: %Class.decl: %Class.type = class_decl @Class [template = constants.%Class.1] {
|
|
|
// CHECK:STDOUT: %T.loc4_13.1: type = param T
|
|
|
-// CHECK:STDOUT: %T.loc4_13.2: type = bind_symbolic_name T 0, %T.loc4_13.1 [symbolic = %T.loc4_13.2 (constants.%T)]
|
|
|
+// CHECK:STDOUT: %T.loc4_13.2: type = bind_symbolic_name T 0, %T.loc4_13.1 [symbolic = @Class.%T (constants.%T)]
|
|
|
// CHECK:STDOUT: }
|
|
|
// CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [template = constants.%F] {
|
|
|
// CHECK:STDOUT: %T.loc10_10.1: type = param T
|
|
|
@@ -153,7 +153,7 @@ fn Generic(T:! ()).WrongType() {}
|
|
|
// CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [template = constants.%G] {
|
|
|
// CHECK:STDOUT: %T.loc14_10.1: type = param T
|
|
|
// CHECK:STDOUT: %T.loc14_10.2: type = bind_symbolic_name T 0, %T.loc14_10.1 [symbolic = constants.%T]
|
|
|
-// CHECK:STDOUT: %.loc14: type = specific_constant constants.%Class.2, %Class.decl(constants.%T) [symbolic = constants.%Class.2]
|
|
|
+// CHECK:STDOUT: %.loc14: type = specific_constant constants.%Class.2, @Class(constants.%T) [symbolic = constants.%Class.2]
|
|
|
// CHECK:STDOUT: %Self.ref: type = name_ref Self, %.loc14 [symbolic = constants.%Class.2]
|
|
|
// CHECK:STDOUT: %self.loc14_22.1: %Class.2 = param self
|
|
|
// CHECK:STDOUT: @G.%self: %Class.2 = bind_name self, %self.loc14_22.1
|
|
|
@@ -162,74 +162,92 @@ fn Generic(T:! ()).WrongType() {}
|
|
|
// CHECK:STDOUT: }
|
|
|
// CHECK:STDOUT: }
|
|
|
// CHECK:STDOUT:
|
|
|
-// CHECK:STDOUT: class @Class
|
|
|
-// CHECK:STDOUT: generic [file.%T.loc4_13.2: type] {
|
|
|
-// CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [template = constants.%F] {
|
|
|
-// CHECK:STDOUT: %T.ref.loc5_11: type = name_ref T, file.%T.loc4_13.2 [symbolic = %T.ref.loc5_11 (constants.%T)]
|
|
|
-// CHECK:STDOUT: %n.loc5_8.1: @Class.%T.ref.loc5_11 (%T) = param n
|
|
|
-// CHECK:STDOUT: %n.loc5_8.2: @Class.%T.ref.loc5_11 (%T) = bind_name n, %n.loc5_8.1
|
|
|
-// CHECK:STDOUT: %T.ref.loc5_17: type = name_ref T, file.%T.loc4_13.2 [symbolic = %T.ref.loc5_11 (constants.%T)]
|
|
|
-// CHECK:STDOUT: %return.var.loc5: ref %T = var <return slot>
|
|
|
-// CHECK:STDOUT: }
|
|
|
-// CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [template = constants.%G] {
|
|
|
-// CHECK:STDOUT: %.loc6: type = specific_constant constants.%Class.2, file.%Class.decl(constants.%T) [symbolic = %.loc6 (constants.%Class.2)]
|
|
|
-// CHECK:STDOUT: %Self.ref: type = name_ref Self, %.loc6 [symbolic = %.loc6 (constants.%Class.2)]
|
|
|
-// CHECK:STDOUT: %self.loc6_8.1: @Class.%.loc6 (%Class.2) = param self
|
|
|
-// CHECK:STDOUT: %self.loc6_8.2: @Class.%.loc6 (%Class.2) = bind_name self, %self.loc6_8.1
|
|
|
-// CHECK:STDOUT: %T.ref.loc6: type = name_ref T, file.%T.loc4_13.2 [symbolic = %T.ref.loc6 (constants.%T)]
|
|
|
-// CHECK:STDOUT: %return.var.loc6: ref %T = var <return slot>
|
|
|
+// CHECK:STDOUT: generic class @Class(file.%T.loc4_13.2: type) {
|
|
|
+// CHECK:STDOUT: %T: type = bind_symbolic_name T 0 [symbolic = %T (constants.%T)]
|
|
|
+// CHECK:STDOUT:
|
|
|
+// CHECK:STDOUT: !definition:
|
|
|
+// CHECK:STDOUT: %Class: type = class_type @Class, @Class(%T) [symbolic = %Class (constants.%Class.2)]
|
|
|
+// CHECK:STDOUT: %.1: type = unbound_element_type @Class.%Class (%Class.2), @Class.%T (%T) [symbolic = %.1 (constants.%.2)]
|
|
|
+// CHECK:STDOUT:
|
|
|
+// CHECK:STDOUT: class {
|
|
|
+// CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [template = constants.%F] {
|
|
|
+// CHECK:STDOUT: %T.ref.loc5_11: type = name_ref T, file.%T.loc4_13.2 [symbolic = @F.%T (constants.%T)]
|
|
|
+// CHECK:STDOUT: %n.loc5_8.1: @F.%T (%T) = param n
|
|
|
+// CHECK:STDOUT: %n.loc5_8.2: @F.%T (%T) = bind_name n, %n.loc5_8.1
|
|
|
+// CHECK:STDOUT: %T.ref.loc5_17: type = name_ref T, file.%T.loc4_13.2 [symbolic = @F.%T (constants.%T)]
|
|
|
+// CHECK:STDOUT: %return.var.loc5: ref %T = var <return slot>
|
|
|
+// CHECK:STDOUT: }
|
|
|
+// CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [template = constants.%G] {
|
|
|
+// CHECK:STDOUT: %.loc6: type = specific_constant constants.%Class.2, @Class(constants.%T) [symbolic = @G.%Class (constants.%Class.2)]
|
|
|
+// CHECK:STDOUT: %Self.ref: type = name_ref Self, %.loc6 [symbolic = @G.%Class (constants.%Class.2)]
|
|
|
+// CHECK:STDOUT: %self.loc6_8.1: @G.%Class (%Class.2) = param self
|
|
|
+// CHECK:STDOUT: %self.loc6_8.2: @G.%Class (%Class.2) = bind_name self, %self.loc6_8.1
|
|
|
+// CHECK:STDOUT: %T.ref.loc6: type = name_ref T, file.%T.loc4_13.2 [symbolic = @G.%T (constants.%T)]
|
|
|
+// CHECK:STDOUT: %return.var.loc6: ref %T = var <return slot>
|
|
|
+// CHECK:STDOUT: }
|
|
|
+// CHECK:STDOUT: %T.ref.loc7: type = name_ref T, file.%T.loc4_13.2 [symbolic = %T (constants.%T)]
|
|
|
+// CHECK:STDOUT: %.loc7: @Class.%.1 (%.2) = field_decl n, element0 [template]
|
|
|
+// CHECK:STDOUT:
|
|
|
+// CHECK:STDOUT: !members:
|
|
|
+// CHECK:STDOUT: .Self = constants.%Class.2
|
|
|
+// CHECK:STDOUT: .F = %F.decl
|
|
|
+// CHECK:STDOUT: .G = %G.decl
|
|
|
+// CHECK:STDOUT: .n = %.loc7
|
|
|
// CHECK:STDOUT: }
|
|
|
-// CHECK:STDOUT: %T.ref.loc7: type = name_ref T, file.%T.loc4_13.2 [symbolic = file.%T.loc4_13.2 (constants.%T)]
|
|
|
-// CHECK:STDOUT: %.loc7: <unexpected>.inst+35 (%.2) = field_decl n, element0 [template]
|
|
|
-// CHECK:STDOUT:
|
|
|
-// CHECK:STDOUT: !members:
|
|
|
-// CHECK:STDOUT: .Self = constants.%Class.2
|
|
|
-// CHECK:STDOUT: .F = %F.decl
|
|
|
-// CHECK:STDOUT: .G = %G.decl
|
|
|
-// CHECK:STDOUT: .n = %.loc7
|
|
|
// CHECK:STDOUT: }
|
|
|
// CHECK:STDOUT:
|
|
|
-// CHECK:STDOUT: fn @F(%n: %T) -> %T
|
|
|
-// CHECK:STDOUT: generic [file.%T.loc4_13.2: type] {
|
|
|
-// CHECK:STDOUT: !entry:
|
|
|
-// CHECK:STDOUT: %n.ref: @Class.%T.ref.loc5_11 (%T) = name_ref n, %n
|
|
|
-// CHECK:STDOUT: return %n.ref
|
|
|
+// CHECK:STDOUT: generic fn @F(file.%T.loc4_13.2: type) {
|
|
|
+// CHECK:STDOUT: %T: type = bind_symbolic_name T 0 [symbolic = %T (constants.%T)]
|
|
|
+// CHECK:STDOUT:
|
|
|
+// CHECK:STDOUT: !definition:
|
|
|
+// CHECK:STDOUT:
|
|
|
+// CHECK:STDOUT: fn(%n: %T) -> %T {
|
|
|
+// CHECK:STDOUT: !entry:
|
|
|
+// CHECK:STDOUT: %n.ref: @F.%T (%T) = name_ref n, %n
|
|
|
+// CHECK:STDOUT: return %n.ref
|
|
|
+// CHECK:STDOUT: }
|
|
|
// CHECK:STDOUT: }
|
|
|
// CHECK:STDOUT:
|
|
|
-// CHECK:STDOUT: fn @G[%self: %Class.2]() -> %T
|
|
|
-// CHECK:STDOUT: generic [file.%T.loc4_13.2: type] {
|
|
|
-// CHECK:STDOUT: !entry:
|
|
|
-// CHECK:STDOUT: %self.ref: @Class.%.loc6 (%Class.2) = name_ref self, %self
|
|
|
-// CHECK:STDOUT: %n.ref: <unexpected>.inst+61 (%.2) = name_ref n, @Class.%.loc7 [template = @Class.%.loc7]
|
|
|
-// CHECK:STDOUT: %.loc15_14.1: ref @Class.%T.ref.loc6 (%T) = class_element_access %self.ref, element0
|
|
|
-// CHECK:STDOUT: %.loc15_14.2: @Class.%T.ref.loc6 (%T) = bind_value %.loc15_14.1
|
|
|
-// CHECK:STDOUT: return %.loc15_14.2
|
|
|
+// CHECK:STDOUT: generic fn @G(file.%T.loc4_13.2: type) {
|
|
|
+// CHECK:STDOUT: %T: type = bind_symbolic_name T 0 [symbolic = %T (constants.%T)]
|
|
|
+// CHECK:STDOUT: %Class: type = class_type @Class, @Class(%T) [symbolic = %Class (constants.%Class.2)]
|
|
|
+// CHECK:STDOUT:
|
|
|
+// CHECK:STDOUT: !definition:
|
|
|
+// CHECK:STDOUT: %.1: type = unbound_element_type @G.%Class (%Class.2), @G.%T (%T) [symbolic = %.1 (constants.%.2)]
|
|
|
+// CHECK:STDOUT:
|
|
|
+// CHECK:STDOUT: fn[%self: %Class.2]() -> %T {
|
|
|
+// CHECK:STDOUT: !entry:
|
|
|
+// CHECK:STDOUT: %self.ref: @G.%Class (%Class.2) = name_ref self, %self
|
|
|
+// CHECK:STDOUT: %n.ref: @G.%.1 (%.2) = name_ref n, @Class.%.loc7 [template = @Class.%.loc7]
|
|
|
+// CHECK:STDOUT: %.loc15_14.1: ref @G.%T (%T) = class_element_access %self.ref, element0
|
|
|
+// CHECK:STDOUT: %.loc15_14.2: @G.%T (%T) = bind_value %.loc15_14.1
|
|
|
+// CHECK:STDOUT: return %.loc15_14.2
|
|
|
+// CHECK:STDOUT: }
|
|
|
// CHECK:STDOUT: }
|
|
|
// CHECK:STDOUT:
|
|
|
-// CHECK:STDOUT: specific file.%Class.decl(constants.%T) {
|
|
|
-// CHECK:STDOUT: declaration:
|
|
|
-// CHECK:STDOUT: file.%T.loc4_13.2 => constants.%T
|
|
|
+// CHECK:STDOUT: specific @Class(constants.%T) {
|
|
|
+// CHECK:STDOUT: %T => constants.%T
|
|
|
+// CHECK:STDOUT:
|
|
|
+// CHECK:STDOUT: !definition:
|
|
|
+// CHECK:STDOUT: %Class => constants.%Class.2
|
|
|
+// CHECK:STDOUT: %.1 => constants.%.2
|
|
|
+// CHECK:STDOUT: }
|
|
|
// CHECK:STDOUT:
|
|
|
-// CHECK:STDOUT: definition:
|
|
|
-// CHECK:STDOUT: <unexpected>.inst+34 => constants.%Class.2
|
|
|
-// CHECK:STDOUT: <unexpected>.inst+35 => constants.%.2
|
|
|
-// CHECK:STDOUT: <unexpected>.inst+31.loc7_8 => <unexpected>.inst+32
|
|
|
+// CHECK:STDOUT: specific @F(constants.%T) {
|
|
|
+// CHECK:STDOUT: %T => constants.%T
|
|
|
// CHECK:STDOUT: }
|
|
|
// CHECK:STDOUT:
|
|
|
-// CHECK:STDOUT: specific @Class.%F.decl(constants.%T) {
|
|
|
-// CHECK:STDOUT: declaration:
|
|
|
-// CHECK:STDOUT: @Class.%T.ref.loc5_11 => constants.%T
|
|
|
+// CHECK:STDOUT: specific @Class(@G.%T) {
|
|
|
+// CHECK:STDOUT: %T => constants.%T
|
|
|
// CHECK:STDOUT: }
|
|
|
// CHECK:STDOUT:
|
|
|
-// CHECK:STDOUT: specific @Class.%G.decl(constants.%T) {
|
|
|
-// CHECK:STDOUT: declaration:
|
|
|
-// CHECK:STDOUT: @Class.%.loc6 => constants.%Class.2
|
|
|
-// CHECK:STDOUT: @Class.%T.ref.loc6 => constants.%T
|
|
|
+// CHECK:STDOUT: specific @G(constants.%T) {
|
|
|
+// CHECK:STDOUT: %T => constants.%T
|
|
|
+// CHECK:STDOUT: %Class => constants.%Class.2
|
|
|
// CHECK:STDOUT: }
|
|
|
// CHECK:STDOUT:
|
|
|
-// CHECK:STDOUT: specific file.%Class.decl(file.%T.loc4_13.2) {
|
|
|
-// CHECK:STDOUT: declaration:
|
|
|
-// CHECK:STDOUT: file.%T.loc4_13.2 => constants.%T
|
|
|
+// CHECK:STDOUT: specific @Class(@Class.%T) {
|
|
|
+// CHECK:STDOUT: %T => constants.%T
|
|
|
// CHECK:STDOUT: }
|
|
|
// CHECK:STDOUT:
|
|
|
// CHECK:STDOUT: --- nested.carbon
|
|
|
@@ -239,11 +257,11 @@ fn Generic(T:! ()).WrongType() {}
|
|
|
// CHECK:STDOUT: %A.type: type = generic_class_type @A [template]
|
|
|
// CHECK:STDOUT: %.1: type = tuple_type () [template]
|
|
|
// CHECK:STDOUT: %A.1: %A.type = struct_value () [template]
|
|
|
-// CHECK:STDOUT: %A.2: type = class_type @A, file.%A.decl(%T) [symbolic]
|
|
|
+// CHECK:STDOUT: %A.2: type = class_type @A, @A(%T) [symbolic]
|
|
|
// CHECK:STDOUT: %N: %T = bind_symbolic_name N 1 [symbolic]
|
|
|
// CHECK:STDOUT: %B.type: type = generic_class_type @B [template]
|
|
|
// CHECK:STDOUT: %B.1: %B.type = struct_value () [template]
|
|
|
-// CHECK:STDOUT: %B.2: type = class_type @B, @A.%B.decl(%T, %N) [symbolic]
|
|
|
+// CHECK:STDOUT: %B.2: type = class_type @B, @B(%T, %N) [symbolic]
|
|
|
// CHECK:STDOUT: %F.type: type = fn_type @F [template]
|
|
|
// CHECK:STDOUT: %F: %F.type = struct_value () [template]
|
|
|
// CHECK:STDOUT: %.2: type = struct_type {} [template]
|
|
|
@@ -267,7 +285,7 @@ fn Generic(T:! ()).WrongType() {}
|
|
|
// CHECK:STDOUT: }
|
|
|
// CHECK:STDOUT: %A.decl: %A.type = class_decl @A [template = constants.%A.1] {
|
|
|
// CHECK:STDOUT: %T.loc4_9.1: type = param T
|
|
|
-// CHECK:STDOUT: %T.loc4_9.2: type = bind_symbolic_name T 0, %T.loc4_9.1 [symbolic = %T.loc4_9.2 (constants.%T)]
|
|
|
+// CHECK:STDOUT: %T.loc4_9.2: type = bind_symbolic_name T 0, %T.loc4_9.1 [symbolic = @A.%T (constants.%T)]
|
|
|
// CHECK:STDOUT: }
|
|
|
// CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [template = constants.%F] {
|
|
|
// CHECK:STDOUT: %T.loc10_6.1: type = param T
|
|
|
@@ -275,7 +293,7 @@ fn Generic(T:! ()).WrongType() {}
|
|
|
// CHECK:STDOUT: %T.ref.loc10_22: type = name_ref T, %T.loc10_6.2 [symbolic = constants.%T]
|
|
|
// CHECK:STDOUT: %N.loc10_18.1: %T = param N
|
|
|
// CHECK:STDOUT: %N.loc10_18.2: %T = bind_symbolic_name N 1, %N.loc10_18.1 [symbolic = constants.%N]
|
|
|
-// CHECK:STDOUT: %.loc10: type = specific_constant constants.%B.2, @A.%B.decl(constants.%T, constants.%N) [symbolic = constants.%B.2]
|
|
|
+// CHECK:STDOUT: %.loc10: type = specific_constant constants.%B.2, @B(constants.%T, constants.%N) [symbolic = constants.%B.2]
|
|
|
// CHECK:STDOUT: %Self.ref: type = name_ref Self, %.loc10 [symbolic = constants.%B.2]
|
|
|
// CHECK:STDOUT: %self.loc10_27.1: %B.2 = param self
|
|
|
// CHECK:STDOUT: @F.%self: %B.2 = bind_name self, %self.loc10_27.1
|
|
|
@@ -285,61 +303,82 @@ fn Generic(T:! ()).WrongType() {}
|
|
|
// CHECK:STDOUT: }
|
|
|
// CHECK:STDOUT: }
|
|
|
// CHECK:STDOUT:
|
|
|
-// CHECK:STDOUT: class @A
|
|
|
-// CHECK:STDOUT: generic [file.%T.loc4_9.2: type] {
|
|
|
-// CHECK:STDOUT: %B.decl: %B.type = class_decl @B [template = constants.%B.1] {
|
|
|
-// CHECK:STDOUT: %T.ref: type = name_ref T, file.%T.loc4_9.2 [symbolic = %T.ref (constants.%T)]
|
|
|
-// CHECK:STDOUT: %N.loc5_11.1: @A.%T.ref (%T) = param N
|
|
|
-// CHECK:STDOUT: %N.loc5_11.2: @A.%T.ref (%T) = bind_symbolic_name N 1, %N.loc5_11.1 [symbolic = %N.loc5_11.2 (constants.%N)]
|
|
|
-// CHECK:STDOUT: }
|
|
|
+// CHECK:STDOUT: generic class @A(file.%T.loc4_9.2: type) {
|
|
|
+// CHECK:STDOUT: %T: type = bind_symbolic_name T 0 [symbolic = %T (constants.%T)]
|
|
|
// CHECK:STDOUT:
|
|
|
-// CHECK:STDOUT: !members:
|
|
|
-// CHECK:STDOUT: .Self = constants.%A.2
|
|
|
-// CHECK:STDOUT: .B = %B.decl
|
|
|
-// CHECK:STDOUT: }
|
|
|
+// CHECK:STDOUT: !definition:
|
|
|
// CHECK:STDOUT:
|
|
|
-// CHECK:STDOUT: class @B
|
|
|
-// CHECK:STDOUT: generic [file.%T.loc4_9.2: type, @A.%N.loc5_11.2: @A.%T.ref (%T)] {
|
|
|
-// CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [template = constants.%F] {
|
|
|
-// CHECK:STDOUT: %.loc6: type = specific_constant constants.%B.2, @A.%B.decl(constants.%T, constants.%N) [symbolic = %.loc6 (constants.%B.2)]
|
|
|
-// CHECK:STDOUT: %Self.ref: type = name_ref Self, %.loc6 [symbolic = %.loc6 (constants.%B.2)]
|
|
|
-// CHECK:STDOUT: %self.loc6_10.1: @B.%.loc6 (%B.2) = param self
|
|
|
-// CHECK:STDOUT: %self.loc6_10.2: @B.%.loc6 (%B.2) = bind_name self, %self.loc6_10.1
|
|
|
-// CHECK:STDOUT: %T.ref: type = name_ref T, file.%T.loc4_9.2 [symbolic = %T.ref (constants.%T)]
|
|
|
-// CHECK:STDOUT: %a.loc6_22.1: @B.%T.ref (%T) = param a
|
|
|
-// CHECK:STDOUT: %a.loc6_22.2: @B.%T.ref (%T) = bind_name a, %a.loc6_22.1
|
|
|
+// CHECK:STDOUT: class {
|
|
|
+// CHECK:STDOUT: %B.decl: %B.type = class_decl @B [template = constants.%B.1] {
|
|
|
+// CHECK:STDOUT: %T.ref: type = name_ref T, file.%T.loc4_9.2 [symbolic = @B.%T (constants.%T)]
|
|
|
+// CHECK:STDOUT: %N.loc5_11.1: @B.%T (%T) = param N
|
|
|
+// CHECK:STDOUT: %N.loc5_11.2: @B.%T (%T) = bind_symbolic_name N 1, %N.loc5_11.1 [symbolic = @B.%N (constants.%N)]
|
|
|
+// CHECK:STDOUT: }
|
|
|
+// CHECK:STDOUT:
|
|
|
+// CHECK:STDOUT: !members:
|
|
|
+// CHECK:STDOUT: .Self = constants.%A.2
|
|
|
+// CHECK:STDOUT: .B = %B.decl
|
|
|
// CHECK:STDOUT: }
|
|
|
+// CHECK:STDOUT: }
|
|
|
// CHECK:STDOUT:
|
|
|
-// CHECK:STDOUT: !members:
|
|
|
-// CHECK:STDOUT: .Self = constants.%B.2
|
|
|
-// CHECK:STDOUT: .F = %F.decl
|
|
|
+// CHECK:STDOUT: generic class @B(file.%T.loc4_9.2: type, @A.%N.loc5_11.2: @B.%T (%T)) {
|
|
|
+// CHECK:STDOUT: %T: type = bind_symbolic_name T 0 [symbolic = %T (constants.%T)]
|
|
|
+// CHECK:STDOUT: %N: %T = bind_symbolic_name N 1 [symbolic = %N (constants.%N)]
|
|
|
+// CHECK:STDOUT:
|
|
|
+// CHECK:STDOUT: !definition:
|
|
|
+// CHECK:STDOUT:
|
|
|
+// CHECK:STDOUT: class {
|
|
|
+// CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [template = constants.%F] {
|
|
|
+// CHECK:STDOUT: %.loc6: type = specific_constant constants.%B.2, @B(constants.%T, constants.%N) [symbolic = @F.%B (constants.%B.2)]
|
|
|
+// CHECK:STDOUT: %Self.ref: type = name_ref Self, %.loc6 [symbolic = @F.%B (constants.%B.2)]
|
|
|
+// CHECK:STDOUT: %self.loc6_10.1: @F.%B (%B.2) = param self
|
|
|
+// CHECK:STDOUT: %self.loc6_10.2: @F.%B (%B.2) = bind_name self, %self.loc6_10.1
|
|
|
+// CHECK:STDOUT: %T.ref: type = name_ref T, file.%T.loc4_9.2 [symbolic = @F.%T (constants.%T)]
|
|
|
+// CHECK:STDOUT: %a.loc6_22.1: @F.%T (%T) = param a
|
|
|
+// CHECK:STDOUT: %a.loc6_22.2: @F.%T (%T) = bind_name a, %a.loc6_22.1
|
|
|
+// CHECK:STDOUT: }
|
|
|
+// CHECK:STDOUT:
|
|
|
+// CHECK:STDOUT: !members:
|
|
|
+// CHECK:STDOUT: .Self = constants.%B.2
|
|
|
+// CHECK:STDOUT: .F = %F.decl
|
|
|
+// CHECK:STDOUT: }
|
|
|
// CHECK:STDOUT: }
|
|
|
// CHECK:STDOUT:
|
|
|
-// CHECK:STDOUT: fn @F[%self: %B.2](%a: %T)
|
|
|
-// CHECK:STDOUT: generic [file.%T.loc4_9.2: type, @A.%N.loc5_11.2: @A.%T.ref (%T)] {
|
|
|
-// CHECK:STDOUT: !entry:
|
|
|
-// CHECK:STDOUT: return
|
|
|
+// CHECK:STDOUT: generic fn @F(file.%T.loc4_9.2: type, @A.%N.loc5_11.2: @B.%T (%T)) {
|
|
|
+// CHECK:STDOUT: %T: type = bind_symbolic_name T 0 [symbolic = %T (constants.%T)]
|
|
|
+// CHECK:STDOUT: %N: %T = bind_symbolic_name N 1 [symbolic = %N (constants.%N)]
|
|
|
+// CHECK:STDOUT: %B: type = class_type @B, @B(%T, %N) [symbolic = %B (constants.%B.2)]
|
|
|
+// CHECK:STDOUT:
|
|
|
+// CHECK:STDOUT: !definition:
|
|
|
+// CHECK:STDOUT:
|
|
|
+// CHECK:STDOUT: fn[%self: %B.2](%a: %T) {
|
|
|
+// CHECK:STDOUT: !entry:
|
|
|
+// CHECK:STDOUT: return
|
|
|
+// CHECK:STDOUT: }
|
|
|
// CHECK:STDOUT: }
|
|
|
// CHECK:STDOUT:
|
|
|
-// CHECK:STDOUT: specific file.%A.decl(constants.%T) {
|
|
|
-// CHECK:STDOUT: declaration:
|
|
|
-// CHECK:STDOUT: file.%T.loc4_9.2 => constants.%T
|
|
|
+// CHECK:STDOUT: specific @A(constants.%T) {
|
|
|
+// CHECK:STDOUT: %T => constants.%T
|
|
|
// CHECK:STDOUT:
|
|
|
-// CHECK:STDOUT: definition:
|
|
|
+// CHECK:STDOUT: !definition:
|
|
|
// CHECK:STDOUT: }
|
|
|
// CHECK:STDOUT:
|
|
|
-// CHECK:STDOUT: specific @A.%B.decl(constants.%T, constants.%N) {
|
|
|
-// CHECK:STDOUT: declaration:
|
|
|
-// CHECK:STDOUT: @A.%T.ref => constants.%T
|
|
|
-// CHECK:STDOUT: @A.%N.loc5_11.2 => constants.%N
|
|
|
+// CHECK:STDOUT: specific @B(constants.%T, constants.%N) {
|
|
|
+// CHECK:STDOUT: %T => constants.%T
|
|
|
+// CHECK:STDOUT: %N => constants.%N
|
|
|
// CHECK:STDOUT:
|
|
|
-// CHECK:STDOUT: definition:
|
|
|
+// CHECK:STDOUT: !definition:
|
|
|
// CHECK:STDOUT: }
|
|
|
// CHECK:STDOUT:
|
|
|
-// CHECK:STDOUT: specific @B.%F.decl(constants.%T, constants.%N) {
|
|
|
-// CHECK:STDOUT: declaration:
|
|
|
-// CHECK:STDOUT: @B.%.loc6 => constants.%B.2
|
|
|
-// CHECK:STDOUT: @B.%T.ref => constants.%T
|
|
|
+// CHECK:STDOUT: specific @B(@F.%T, @F.%N) {
|
|
|
+// CHECK:STDOUT: %T => constants.%T
|
|
|
+// CHECK:STDOUT: %N => constants.%N
|
|
|
+// CHECK:STDOUT: }
|
|
|
+// CHECK:STDOUT:
|
|
|
+// CHECK:STDOUT: specific @F(constants.%T, constants.%N) {
|
|
|
+// CHECK:STDOUT: %T => constants.%T
|
|
|
+// CHECK:STDOUT: %N => constants.%N
|
|
|
+// CHECK:STDOUT: %B => constants.%B.2
|
|
|
// CHECK:STDOUT: }
|
|
|
// CHECK:STDOUT:
|
|
|
// CHECK:STDOUT: --- fail_mismatched_not_generic_vs_generic.carbon
|
|
|
@@ -373,7 +412,7 @@ fn Generic(T:! ()).WrongType() {}
|
|
|
// CHECK:STDOUT: %NotGeneric.decl: type = class_decl @NotGeneric [template = constants.%NotGeneric] {}
|
|
|
// CHECK:STDOUT: %.decl: %.type = fn_decl @.1 [template = constants.%.3] {
|
|
|
// CHECK:STDOUT: %T.loc15_15.1: type = param T
|
|
|
-// CHECK:STDOUT: %T.loc15_15.2: type = bind_symbolic_name T 0, %T.loc15_15.1 [symbolic = %T.loc15_15.2 (constants.%T)]
|
|
|
+// CHECK:STDOUT: %T.loc15_15.2: type = bind_symbolic_name T 0, %T.loc15_15.1 [symbolic = @.1.%T (constants.%T)]
|
|
|
// CHECK:STDOUT: }
|
|
|
// CHECK:STDOUT: }
|
|
|
// CHECK:STDOUT:
|
|
|
@@ -387,15 +426,19 @@ fn Generic(T:! ()).WrongType() {}
|
|
|
// CHECK:STDOUT:
|
|
|
// CHECK:STDOUT: fn @F();
|
|
|
// CHECK:STDOUT:
|
|
|
-// CHECK:STDOUT: fn @.1()
|
|
|
-// CHECK:STDOUT: generic [file.%T.loc15_15.2: type] {
|
|
|
-// CHECK:STDOUT: !entry:
|
|
|
-// CHECK:STDOUT: return
|
|
|
+// CHECK:STDOUT: generic fn @.1(file.%T.loc15_15.2: type) {
|
|
|
+// CHECK:STDOUT: %T: type = bind_symbolic_name T 0 [symbolic = %T (constants.%T)]
|
|
|
+// CHECK:STDOUT:
|
|
|
+// CHECK:STDOUT: !definition:
|
|
|
+// CHECK:STDOUT:
|
|
|
+// CHECK:STDOUT: fn() {
|
|
|
+// CHECK:STDOUT: !entry:
|
|
|
+// CHECK:STDOUT: return
|
|
|
+// CHECK:STDOUT: }
|
|
|
// CHECK:STDOUT: }
|
|
|
// CHECK:STDOUT:
|
|
|
-// CHECK:STDOUT: specific file.%.decl(constants.%T) {
|
|
|
-// CHECK:STDOUT: declaration:
|
|
|
-// CHECK:STDOUT: file.%T.loc15_15.2 => constants.%T
|
|
|
+// CHECK:STDOUT: specific @.1(constants.%T) {
|
|
|
+// CHECK:STDOUT: %T => constants.%T
|
|
|
// CHECK:STDOUT: }
|
|
|
// CHECK:STDOUT:
|
|
|
// CHECK:STDOUT: --- fail_mismatched_too_few_args.carbon
|
|
|
@@ -405,7 +448,7 @@ fn Generic(T:! ()).WrongType() {}
|
|
|
// CHECK:STDOUT: %Generic.type: type = generic_class_type @Generic [template]
|
|
|
// CHECK:STDOUT: %.1: type = tuple_type () [template]
|
|
|
// CHECK:STDOUT: %Generic.1: %Generic.type = struct_value () [template]
|
|
|
-// CHECK:STDOUT: %Generic.2: type = class_type @Generic, file.%Generic.decl(%T) [symbolic]
|
|
|
+// CHECK:STDOUT: %Generic.2: type = class_type @Generic, @Generic(%T) [symbolic]
|
|
|
// CHECK:STDOUT: %TooFew.type: type = fn_type @TooFew [template]
|
|
|
// CHECK:STDOUT: %TooFew: %TooFew.type = struct_value () [template]
|
|
|
// CHECK:STDOUT: %.2: type = struct_type {} [template]
|
|
|
@@ -430,36 +473,40 @@ fn Generic(T:! ()).WrongType() {}
|
|
|
// CHECK:STDOUT: }
|
|
|
// CHECK:STDOUT: %Generic.decl: %Generic.type = class_decl @Generic [template = constants.%Generic.1] {
|
|
|
// CHECK:STDOUT: %T.loc4_15.1: type = param T
|
|
|
-// CHECK:STDOUT: %T.loc4_15.2: type = bind_symbolic_name T 0, %T.loc4_15.1 [symbolic = %T.loc4_15.2 (constants.%T)]
|
|
|
+// CHECK:STDOUT: %T.loc4_15.2: type = bind_symbolic_name T 0, %T.loc4_15.1 [symbolic = @Generic.%T (constants.%T)]
|
|
|
// CHECK:STDOUT: }
|
|
|
// CHECK:STDOUT: %.decl: %.type = fn_decl @.1 [template = constants.%.3] {}
|
|
|
// CHECK:STDOUT: }
|
|
|
// CHECK:STDOUT:
|
|
|
-// CHECK:STDOUT: class @Generic
|
|
|
-// CHECK:STDOUT: generic [file.%T.loc4_15.2: type] {
|
|
|
-// CHECK:STDOUT: %TooFew.decl: %TooFew.type = fn_decl @TooFew [template = constants.%TooFew] {}
|
|
|
+// CHECK:STDOUT: generic class @Generic(file.%T.loc4_15.2: type) {
|
|
|
+// CHECK:STDOUT: %T: type = bind_symbolic_name T 0 [symbolic = %T (constants.%T)]
|
|
|
// CHECK:STDOUT:
|
|
|
-// CHECK:STDOUT: !members:
|
|
|
-// CHECK:STDOUT: .Self = constants.%Generic.2
|
|
|
-// CHECK:STDOUT: .TooFew = %TooFew.decl
|
|
|
+// CHECK:STDOUT: !definition:
|
|
|
+// CHECK:STDOUT:
|
|
|
+// CHECK:STDOUT: class {
|
|
|
+// CHECK:STDOUT: %TooFew.decl: %TooFew.type = fn_decl @TooFew [template = constants.%TooFew] {}
|
|
|
+// CHECK:STDOUT:
|
|
|
+// CHECK:STDOUT: !members:
|
|
|
+// CHECK:STDOUT: .Self = constants.%Generic.2
|
|
|
+// CHECK:STDOUT: .TooFew = %TooFew.decl
|
|
|
+// CHECK:STDOUT: }
|
|
|
// CHECK:STDOUT: }
|
|
|
// CHECK:STDOUT:
|
|
|
-// CHECK:STDOUT: fn @TooFew()
|
|
|
-// CHECK:STDOUT: generic [file.%T.loc4_15.2: type];
|
|
|
+// CHECK:STDOUT: generic fn @TooFew(file.%T.loc4_15.2: type) {
|
|
|
+// CHECK:STDOUT:
|
|
|
+// CHECK:STDOUT: fn();
|
|
|
+// CHECK:STDOUT: }
|
|
|
// CHECK:STDOUT:
|
|
|
// CHECK:STDOUT: fn @.1() {
|
|
|
// CHECK:STDOUT: !entry:
|
|
|
// CHECK:STDOUT: return
|
|
|
// CHECK:STDOUT: }
|
|
|
// CHECK:STDOUT:
|
|
|
-// CHECK:STDOUT: specific file.%Generic.decl(constants.%T) {
|
|
|
-// CHECK:STDOUT: declaration:
|
|
|
-// CHECK:STDOUT: file.%T.loc4_15.2 => constants.%T
|
|
|
+// CHECK:STDOUT: specific @Generic(constants.%T) {
|
|
|
+// CHECK:STDOUT: %T => constants.%T
|
|
|
// CHECK:STDOUT: }
|
|
|
// CHECK:STDOUT:
|
|
|
-// CHECK:STDOUT: specific @Generic.%TooFew.decl(constants.%T) {
|
|
|
-// CHECK:STDOUT: declaration:
|
|
|
-// CHECK:STDOUT: }
|
|
|
+// CHECK:STDOUT: specific @TooFew(constants.%T) {}
|
|
|
// CHECK:STDOUT:
|
|
|
// CHECK:STDOUT: --- fail_mismatched_too_many_args.carbon
|
|
|
// CHECK:STDOUT:
|
|
|
@@ -468,7 +515,7 @@ fn Generic(T:! ()).WrongType() {}
|
|
|
// CHECK:STDOUT: %Generic.type: type = generic_class_type @Generic [template]
|
|
|
// CHECK:STDOUT: %.1: type = tuple_type () [template]
|
|
|
// CHECK:STDOUT: %Generic.1: %Generic.type = struct_value () [template]
|
|
|
-// CHECK:STDOUT: %Generic.2: type = class_type @Generic, file.%Generic.decl(%T) [symbolic]
|
|
|
+// CHECK:STDOUT: %Generic.2: type = class_type @Generic, @Generic(%T) [symbolic]
|
|
|
// CHECK:STDOUT: %TooMany.type: type = fn_type @TooMany [template]
|
|
|
// CHECK:STDOUT: %TooMany: %TooMany.type = struct_value () [template]
|
|
|
// CHECK:STDOUT: %.2: type = struct_type {} [template]
|
|
|
@@ -494,47 +541,56 @@ fn Generic(T:! ()).WrongType() {}
|
|
|
// CHECK:STDOUT: }
|
|
|
// CHECK:STDOUT: %Generic.decl: %Generic.type = class_decl @Generic [template = constants.%Generic.1] {
|
|
|
// CHECK:STDOUT: %T.loc4_15.1: type = param T
|
|
|
-// CHECK:STDOUT: %T.loc4_15.2: type = bind_symbolic_name T 0, %T.loc4_15.1 [symbolic = %T.loc4_15.2 (constants.%T)]
|
|
|
+// CHECK:STDOUT: %T.loc4_15.2: type = bind_symbolic_name T 0, %T.loc4_15.1 [symbolic = @Generic.%T (constants.%T)]
|
|
|
// CHECK:STDOUT: }
|
|
|
// CHECK:STDOUT: %.decl: %.type = fn_decl @.1 [template = constants.%.3] {
|
|
|
// CHECK:STDOUT: %T.loc15_12.1: type = param T
|
|
|
-// CHECK:STDOUT: %T.loc15_12.2: type = bind_symbolic_name T 0, %T.loc15_12.1 [symbolic = %T.loc15_12.2 (constants.%T)]
|
|
|
+// CHECK:STDOUT: %T.loc15_12.2: type = bind_symbolic_name T 0, %T.loc15_12.1 [symbolic = @.1.%T (constants.%T)]
|
|
|
// CHECK:STDOUT: %U.loc15_22.1: type = param U
|
|
|
-// CHECK:STDOUT: %U.loc15_22.2: type = bind_symbolic_name U 1, %U.loc15_22.1 [symbolic = %U.loc15_22.2 (constants.%U)]
|
|
|
+// CHECK:STDOUT: %U.loc15_22.2: type = bind_symbolic_name U 1, %U.loc15_22.1 [symbolic = @.1.%U (constants.%U)]
|
|
|
// CHECK:STDOUT: }
|
|
|
// CHECK:STDOUT: }
|
|
|
// CHECK:STDOUT:
|
|
|
-// CHECK:STDOUT: class @Generic
|
|
|
-// CHECK:STDOUT: generic [file.%T.loc4_15.2: type] {
|
|
|
-// CHECK:STDOUT: %TooMany.decl: %TooMany.type = fn_decl @TooMany [template = constants.%TooMany] {}
|
|
|
+// CHECK:STDOUT: generic class @Generic(file.%T.loc4_15.2: type) {
|
|
|
+// CHECK:STDOUT: %T: type = bind_symbolic_name T 0 [symbolic = %T (constants.%T)]
|
|
|
// CHECK:STDOUT:
|
|
|
-// CHECK:STDOUT: !members:
|
|
|
-// CHECK:STDOUT: .Self = constants.%Generic.2
|
|
|
-// CHECK:STDOUT: .TooMany = %TooMany.decl
|
|
|
+// CHECK:STDOUT: !definition:
|
|
|
+// CHECK:STDOUT:
|
|
|
+// CHECK:STDOUT: class {
|
|
|
+// CHECK:STDOUT: %TooMany.decl: %TooMany.type = fn_decl @TooMany [template = constants.%TooMany] {}
|
|
|
+// CHECK:STDOUT:
|
|
|
+// CHECK:STDOUT: !members:
|
|
|
+// CHECK:STDOUT: .Self = constants.%Generic.2
|
|
|
+// CHECK:STDOUT: .TooMany = %TooMany.decl
|
|
|
+// CHECK:STDOUT: }
|
|
|
// CHECK:STDOUT: }
|
|
|
// CHECK:STDOUT:
|
|
|
-// CHECK:STDOUT: fn @TooMany()
|
|
|
-// CHECK:STDOUT: generic [file.%T.loc4_15.2: type];
|
|
|
+// CHECK:STDOUT: generic fn @TooMany(file.%T.loc4_15.2: type) {
|
|
|
// CHECK:STDOUT:
|
|
|
-// CHECK:STDOUT: fn @.1()
|
|
|
-// CHECK:STDOUT: generic [file.%T.loc15_12.2: type, file.%U.loc15_22.2: type] {
|
|
|
-// CHECK:STDOUT: !entry:
|
|
|
-// CHECK:STDOUT: return
|
|
|
+// CHECK:STDOUT: fn();
|
|
|
// CHECK:STDOUT: }
|
|
|
// CHECK:STDOUT:
|
|
|
-// CHECK:STDOUT: specific file.%Generic.decl(constants.%T) {
|
|
|
-// CHECK:STDOUT: declaration:
|
|
|
-// CHECK:STDOUT: file.%T.loc4_15.2 => constants.%T
|
|
|
+// CHECK:STDOUT: generic fn @.1(file.%T.loc15_12.2: type, file.%U.loc15_22.2: type) {
|
|
|
+// CHECK:STDOUT: %T: type = bind_symbolic_name T 0 [symbolic = %T (constants.%T)]
|
|
|
+// CHECK:STDOUT: %U: type = bind_symbolic_name U 1 [symbolic = %U (constants.%U)]
|
|
|
+// CHECK:STDOUT:
|
|
|
+// CHECK:STDOUT: !definition:
|
|
|
+// CHECK:STDOUT:
|
|
|
+// CHECK:STDOUT: fn() {
|
|
|
+// CHECK:STDOUT: !entry:
|
|
|
+// CHECK:STDOUT: return
|
|
|
+// CHECK:STDOUT: }
|
|
|
// CHECK:STDOUT: }
|
|
|
// CHECK:STDOUT:
|
|
|
-// CHECK:STDOUT: specific @Generic.%TooMany.decl(constants.%T) {
|
|
|
-// CHECK:STDOUT: declaration:
|
|
|
+// CHECK:STDOUT: specific @Generic(constants.%T) {
|
|
|
+// CHECK:STDOUT: %T => constants.%T
|
|
|
// CHECK:STDOUT: }
|
|
|
// CHECK:STDOUT:
|
|
|
-// CHECK:STDOUT: specific file.%.decl(constants.%T, constants.%U) {
|
|
|
-// CHECK:STDOUT: declaration:
|
|
|
-// CHECK:STDOUT: file.%T.loc15_12.2 => constants.%T
|
|
|
-// CHECK:STDOUT: file.%U.loc15_22.2 => constants.%U
|
|
|
+// CHECK:STDOUT: specific @TooMany(constants.%T) {}
|
|
|
+// CHECK:STDOUT:
|
|
|
+// CHECK:STDOUT: specific @.1(constants.%T, constants.%U) {
|
|
|
+// CHECK:STDOUT: %T => constants.%T
|
|
|
+// CHECK:STDOUT: %U => constants.%U
|
|
|
// CHECK:STDOUT: }
|
|
|
// CHECK:STDOUT:
|
|
|
// CHECK:STDOUT: --- fail_mismatched_wrong_arg_type.carbon
|
|
|
@@ -544,7 +600,7 @@ fn Generic(T:! ()).WrongType() {}
|
|
|
// CHECK:STDOUT: %Generic.type: type = generic_class_type @Generic [template]
|
|
|
// CHECK:STDOUT: %.1: type = tuple_type () [template]
|
|
|
// CHECK:STDOUT: %Generic.1: %Generic.type = struct_value () [template]
|
|
|
-// CHECK:STDOUT: %Generic.2: type = class_type @Generic, file.%Generic.decl(%T.1) [symbolic]
|
|
|
+// CHECK:STDOUT: %Generic.2: type = class_type @Generic, @Generic(%T.1) [symbolic]
|
|
|
// CHECK:STDOUT: %WrongType.type: type = fn_type @WrongType [template]
|
|
|
// CHECK:STDOUT: %WrongType: %WrongType.type = struct_value () [template]
|
|
|
// CHECK:STDOUT: %.2: type = struct_type {} [template]
|
|
|
@@ -570,45 +626,53 @@ fn Generic(T:! ()).WrongType() {}
|
|
|
// CHECK:STDOUT: }
|
|
|
// CHECK:STDOUT: %Generic.decl: %Generic.type = class_decl @Generic [template = constants.%Generic.1] {
|
|
|
// CHECK:STDOUT: %T.loc4_15.1: type = param T
|
|
|
-// CHECK:STDOUT: %T.loc4_15.2: type = bind_symbolic_name T 0, %T.loc4_15.1 [symbolic = %T.loc4_15.2 (constants.%T.1)]
|
|
|
+// CHECK:STDOUT: %T.loc4_15.2: type = bind_symbolic_name T 0, %T.loc4_15.1 [symbolic = @Generic.%T (constants.%T.1)]
|
|
|
// CHECK:STDOUT: }
|
|
|
// CHECK:STDOUT: %.decl: %.type = fn_decl @.1 [template = constants.%.3] {
|
|
|
// CHECK:STDOUT: %.loc14_17.1: %.1 = tuple_literal ()
|
|
|
// CHECK:STDOUT: %.loc14_17.2: type = converted %.loc14_17.1, constants.%.1 [template = constants.%.1]
|
|
|
// CHECK:STDOUT: %T.loc14_12.1: %.1 = param T
|
|
|
-// CHECK:STDOUT: %T.loc14_12.2: %.1 = bind_symbolic_name T 0, %T.loc14_12.1 [symbolic = %T.loc14_12.2 (constants.%T.2)]
|
|
|
+// CHECK:STDOUT: %T.loc14_12.2: %.1 = bind_symbolic_name T 0, %T.loc14_12.1 [symbolic = @.1.%T (constants.%T.2)]
|
|
|
// CHECK:STDOUT: }
|
|
|
// CHECK:STDOUT: }
|
|
|
// CHECK:STDOUT:
|
|
|
-// CHECK:STDOUT: class @Generic
|
|
|
-// CHECK:STDOUT: generic [file.%T.loc4_15.2: type] {
|
|
|
-// CHECK:STDOUT: %WrongType.decl: %WrongType.type = fn_decl @WrongType [template = constants.%WrongType] {}
|
|
|
+// CHECK:STDOUT: generic class @Generic(file.%T.loc4_15.2: type) {
|
|
|
+// CHECK:STDOUT: %T: type = bind_symbolic_name T 0 [symbolic = %T (constants.%T.1)]
|
|
|
// CHECK:STDOUT:
|
|
|
-// CHECK:STDOUT: !members:
|
|
|
-// CHECK:STDOUT: .Self = constants.%Generic.2
|
|
|
-// CHECK:STDOUT: .WrongType = %WrongType.decl
|
|
|
+// CHECK:STDOUT: !definition:
|
|
|
+// CHECK:STDOUT:
|
|
|
+// CHECK:STDOUT: class {
|
|
|
+// CHECK:STDOUT: %WrongType.decl: %WrongType.type = fn_decl @WrongType [template = constants.%WrongType] {}
|
|
|
+// CHECK:STDOUT:
|
|
|
+// CHECK:STDOUT: !members:
|
|
|
+// CHECK:STDOUT: .Self = constants.%Generic.2
|
|
|
+// CHECK:STDOUT: .WrongType = %WrongType.decl
|
|
|
+// CHECK:STDOUT: }
|
|
|
// CHECK:STDOUT: }
|
|
|
// CHECK:STDOUT:
|
|
|
-// CHECK:STDOUT: fn @WrongType()
|
|
|
-// CHECK:STDOUT: generic [file.%T.loc4_15.2: type];
|
|
|
+// CHECK:STDOUT: generic fn @WrongType(file.%T.loc4_15.2: type) {
|
|
|
// CHECK:STDOUT:
|
|
|
-// CHECK:STDOUT: fn @.1()
|
|
|
-// CHECK:STDOUT: generic [file.%T.loc14_12.2: %.1] {
|
|
|
-// CHECK:STDOUT: !entry:
|
|
|
-// CHECK:STDOUT: return
|
|
|
+// CHECK:STDOUT: fn();
|
|
|
// CHECK:STDOUT: }
|
|
|
// CHECK:STDOUT:
|
|
|
-// CHECK:STDOUT: specific file.%Generic.decl(constants.%T.1) {
|
|
|
-// CHECK:STDOUT: declaration:
|
|
|
-// CHECK:STDOUT: file.%T.loc4_15.2 => constants.%T.1
|
|
|
+// CHECK:STDOUT: generic fn @.1(file.%T.loc14_12.2: %.1) {
|
|
|
+// CHECK:STDOUT: %T: %.1 = bind_symbolic_name T 0 [symbolic = %T (constants.%T.2)]
|
|
|
+// CHECK:STDOUT:
|
|
|
+// CHECK:STDOUT: !definition:
|
|
|
+// CHECK:STDOUT:
|
|
|
+// CHECK:STDOUT: fn() {
|
|
|
+// CHECK:STDOUT: !entry:
|
|
|
+// CHECK:STDOUT: return
|
|
|
+// CHECK:STDOUT: }
|
|
|
// CHECK:STDOUT: }
|
|
|
// CHECK:STDOUT:
|
|
|
-// CHECK:STDOUT: specific @Generic.%WrongType.decl(constants.%T.1) {
|
|
|
-// CHECK:STDOUT: declaration:
|
|
|
+// CHECK:STDOUT: specific @Generic(constants.%T.1) {
|
|
|
+// CHECK:STDOUT: %T => constants.%T.1
|
|
|
// CHECK:STDOUT: }
|
|
|
// CHECK:STDOUT:
|
|
|
-// CHECK:STDOUT: specific file.%.decl(constants.%T.2) {
|
|
|
-// CHECK:STDOUT: declaration:
|
|
|
-// CHECK:STDOUT: file.%T.loc14_12.2 => constants.%T.2
|
|
|
+// CHECK:STDOUT: specific @WrongType(constants.%T.1) {}
|
|
|
+// CHECK:STDOUT:
|
|
|
+// CHECK:STDOUT: specific @.1(constants.%T.2) {
|
|
|
+// CHECK:STDOUT: %T => constants.%T.2
|
|
|
// CHECK:STDOUT: }
|
|
|
// CHECK:STDOUT:
|