mirror of
https://github.com/carbon-language/carbon-lang.git
synced 2026-10-06 08:14:43 +01:00
Build an evaluation block for the definition region of a generic. (#4131)
This commit is contained in:
+9
-9
@@ -42,15 +42,15 @@ fn F(T:! type, U:! type) {
|
||||
// CHECK:STDOUT: fn @F(%T: type, %U: type)
|
||||
// CHECK:STDOUT: generic [%T: type, %U: type] {
|
||||
// CHECK:STDOUT: !entry:
|
||||
// CHECK:STDOUT: %T.ref: type = name_ref T, %T [symbolic = constants.%T]
|
||||
// CHECK:STDOUT: %.loc12: type = ptr_type %T [symbolic = constants.%.2]
|
||||
// CHECK:STDOUT: %p.var: ref %.2 = var p
|
||||
// CHECK:STDOUT: %p: ref %.2 = bind_name p, %p.var
|
||||
// CHECK:STDOUT: %U.ref: type = name_ref U, %U [symbolic = constants.%U]
|
||||
// CHECK:STDOUT: %p.ref: ref %.2 = name_ref p, %p
|
||||
// CHECK:STDOUT: %.loc16_15: %.2 = bind_value %p.ref
|
||||
// CHECK:STDOUT: %.loc16_14: ref %T = deref %.loc16_15
|
||||
// CHECK:STDOUT: %n: %U = bind_name n, <error>
|
||||
// CHECK:STDOUT: %T.ref: type = name_ref T, %T [symbolic = %T.ref (constants.%T)]
|
||||
// CHECK:STDOUT: %.loc12: type = ptr_type %T [symbolic = %.loc12 (constants.%.2)]
|
||||
// CHECK:STDOUT: %p.var: ref @F.%.loc12 (%.2) = var p
|
||||
// CHECK:STDOUT: %p: ref @F.%.loc12 (%.2) = bind_name p, %p.var
|
||||
// CHECK:STDOUT: %U.ref: type = name_ref U, %U [symbolic = %U.ref (constants.%U)]
|
||||
// CHECK:STDOUT: %p.ref: ref @F.%.loc12 (%.2) = name_ref p, %p
|
||||
// CHECK:STDOUT: %.loc16_15: @F.%.loc12 (%.2) = bind_value %p.ref
|
||||
// CHECK:STDOUT: %.loc16_14: ref @F.%T.ref (%T) = deref %.loc16_15
|
||||
// CHECK:STDOUT: %n: @F.%U.ref (%U) = bind_name n, <error>
|
||||
// CHECK:STDOUT: return
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
|
||||
@@ -36,16 +36,16 @@ fn F(T:! type) {
|
||||
// CHECK:STDOUT: fn @F(%T: type)
|
||||
// CHECK:STDOUT: generic [%T: type] {
|
||||
// CHECK:STDOUT: !entry:
|
||||
// CHECK:STDOUT: %T.ref.loc12: type = name_ref T, %T [symbolic = constants.%T]
|
||||
// CHECK:STDOUT: %.loc12: type = ptr_type %T [symbolic = constants.%.2]
|
||||
// CHECK:STDOUT: %p.var: ref %.2 = var p
|
||||
// CHECK:STDOUT: %p: ref %.2 = bind_name p, %p.var
|
||||
// CHECK:STDOUT: %T.ref.loc13: type = name_ref T, %T [symbolic = constants.%T]
|
||||
// CHECK:STDOUT: %p.ref: ref %.2 = name_ref p, %p
|
||||
// CHECK:STDOUT: %.loc13_15: %.2 = bind_value %p.ref
|
||||
// CHECK:STDOUT: %.loc13_14.1: ref %T = deref %.loc13_15
|
||||
// CHECK:STDOUT: %.loc13_14.2: %T = bind_value %.loc13_14.1
|
||||
// CHECK:STDOUT: %n: %T = bind_name n, %.loc13_14.2
|
||||
// CHECK:STDOUT: %T.ref.loc12: type = name_ref T, %T [symbolic = %T.ref.loc12 (constants.%T)]
|
||||
// CHECK:STDOUT: %.loc12: type = ptr_type %T [symbolic = %.loc12 (constants.%.2)]
|
||||
// CHECK:STDOUT: %p.var: ref @F.%.loc12 (%.2) = var p
|
||||
// CHECK:STDOUT: %p: ref @F.%.loc12 (%.2) = bind_name p, %p.var
|
||||
// CHECK:STDOUT: %T.ref.loc13: type = name_ref T, %T [symbolic = %T.ref.loc12 (constants.%T)]
|
||||
// CHECK:STDOUT: %p.ref: ref @F.%.loc12 (%.2) = name_ref p, %p
|
||||
// CHECK:STDOUT: %.loc13_15: @F.%.loc12 (%.2) = bind_value %p.ref
|
||||
// CHECK:STDOUT: %.loc13_14.1: ref @F.%T.ref.loc12 (%T) = deref %.loc13_15
|
||||
// CHECK:STDOUT: %.loc13_14.2: @F.%T.ref.loc12 (%T) = bind_value %.loc13_14.1
|
||||
// CHECK:STDOUT: %n: @F.%T.ref.loc12 (%T) = bind_name n, %.loc13_14.2
|
||||
// CHECK:STDOUT: return
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
|
||||
+4
-4
@@ -40,10 +40,10 @@ fn F(T:! type, n: T) -> T {
|
||||
// CHECK:STDOUT: fn @F(%T: type, %n: @F.%T (%T)) -> %T
|
||||
// CHECK:STDOUT: generic [%T: type] {
|
||||
// CHECK:STDOUT: !entry:
|
||||
// CHECK:STDOUT: %T.ref: type = name_ref T, %T [symbolic = constants.%T]
|
||||
// CHECK:STDOUT: %n.ref: %T = name_ref n, %n
|
||||
// CHECK:STDOUT: %m: %T = bind_name m, %n.ref
|
||||
// CHECK:STDOUT: %m.ref: %T = name_ref m, %m
|
||||
// CHECK:STDOUT: %T.ref: type = name_ref T, %T [symbolic = %T.ref (constants.%T)]
|
||||
// CHECK:STDOUT: %n.ref: @F.%T.ref (%T) = name_ref n, %n
|
||||
// CHECK:STDOUT: %m: @F.%T.ref (%T) = bind_name m, %n.ref
|
||||
// CHECK:STDOUT: %m.ref: @F.%T.ref (%T) = name_ref m, %m
|
||||
// CHECK:STDOUT: return %m.ref
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
|
||||
@@ -138,10 +138,10 @@ fn F(U:! type, T:! type) -> U* {
|
||||
// CHECK:STDOUT: generic [file.%T.loc4_6.2: type] {
|
||||
// CHECK:STDOUT: !entry:
|
||||
// CHECK:STDOUT: %F.ref: %F.type = name_ref F, file.%F.decl.loc4 [template = constants.%F]
|
||||
// CHECK:STDOUT: %T.ref: type = name_ref T, %T [symbolic = constants.%T]
|
||||
// CHECK:STDOUT: %F.call: init %.1 = call %F.ref(%T.ref)
|
||||
// CHECK:STDOUT: %.loc7_14.1: %.1 = value_of_initializer %F.call
|
||||
// CHECK:STDOUT: %.loc7_14.2: %.1 = converted %F.call, %.loc7_14.1
|
||||
// CHECK:STDOUT: %T.ref: type = name_ref T, %T [symbolic = %T.ref (constants.%T)]
|
||||
// CHECK:STDOUT: %F.call: init <unexpected instref inst+26> (%.1) = call %F.ref(%T.ref)
|
||||
// CHECK:STDOUT: %.loc7_14.1: <unexpected instref inst+26> (%.1) = value_of_initializer %F.call
|
||||
// CHECK:STDOUT: %.loc7_14.2: <unexpected instref inst+26> (%.1) = converted %F.call, %.loc7_14.1
|
||||
// CHECK:STDOUT: return %.loc7_14.2
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
@@ -199,8 +199,8 @@ fn F(U:! type, T:! type) -> U* {
|
||||
// CHECK:STDOUT: generic [%T: type, %U: type] {
|
||||
// CHECK:STDOUT: !entry:
|
||||
// CHECK:STDOUT: %F.ref: %F.type = name_ref F, file.%F.decl [template = constants.%F]
|
||||
// CHECK:STDOUT: %T.ref: type = name_ref T, %T [symbolic = constants.%T]
|
||||
// CHECK:STDOUT: %F.call: init %.1 = call %F.ref(<invalid>) [template = <error>]
|
||||
// CHECK:STDOUT: %T.ref: type = name_ref T, %T [symbolic = %T.ref (constants.%T)]
|
||||
// CHECK:STDOUT: %F.call: init <unexpected instref inst+32> (%.1) = call %F.ref(<invalid>) [template = <error>]
|
||||
// CHECK:STDOUT: return <error>
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
@@ -268,7 +268,7 @@ fn F(U:! type, T:! type) -> U* {
|
||||
// CHECK:STDOUT: generic [%U: type, %T: type] {
|
||||
// CHECK:STDOUT: !entry:
|
||||
// CHECK:STDOUT: %F.ref: %F.type = name_ref F, file.%F.decl [template = constants.%F]
|
||||
// CHECK:STDOUT: %T.ref: type = name_ref T, %T [symbolic = constants.%T.2]
|
||||
// CHECK:STDOUT: %T.ref: type = name_ref T, %T [symbolic = %T.ref (constants.%T.2)]
|
||||
// CHECK:STDOUT: %F.call: init %.1 = call %F.ref(<invalid>) [template = <error>]
|
||||
// CHECK:STDOUT: return <error>
|
||||
// CHECK:STDOUT: }
|
||||
@@ -337,7 +337,7 @@ fn F(U:! type, T:! type) -> U* {
|
||||
// CHECK:STDOUT: generic [%U: type, %T: type] {
|
||||
// CHECK:STDOUT: !entry:
|
||||
// CHECK:STDOUT: %F.ref: %F.type = name_ref F, file.%F.decl [template = constants.%F]
|
||||
// CHECK:STDOUT: %T.ref: type = name_ref T, %T [symbolic = constants.%T.2]
|
||||
// CHECK:STDOUT: %T.ref: type = name_ref T, %T [symbolic = %T.ref (constants.%T.2)]
|
||||
// CHECK:STDOUT: %F.call: init %.1 = call %F.ref(<invalid>) [template = <error>]
|
||||
// CHECK:STDOUT: return <error>
|
||||
// CHECK:STDOUT: }
|
||||
|
||||
Reference in New Issue
Block a user