mirror of
https://github.com/carbon-language/carbon-lang.git
synced 2026-10-04 11:21:05 +01:00
Replace :! binding syntax with phase keywords and contextual defaults (#7479)
Implement the toolchain side of proposal #7254, removing the `:!` binding syntax for generic and template parameters in favor of the keywords `generic`, `template`, and `runtime` plus contextual defaults for phase. For valid programs this is semantics-preserving: each binding resolves to the same phase, and produces the same SemIR, as it did under `:!`/`:`. The parser derives a binding's phase from its syntactic context plus any explicit phase keyword; new diagnostics and error recovery for misused keywords are described below. Implementation details for each component: - Lexer: remove the `:!` (`ColonExclaim`) token, move its virtual parse-node budget onto `:`, and add the `generic` and `runtime` keywords. - Parser: thread a `BindingContext` (`ExplicitParam`, `DeducedParam`, or `CompileTimeEntityParam`) from declaration introducers down through parameter lists to each binding pattern, using a one-token lookahead to distinguish a name-qualifier parameter list from a declaration's own final list. Parameters of a compile-time entity (`class`, `interface`, `constraint`, `choice`, `alias`, `export`, `namespace`) and deduced `[]` parameters default to checked generic; explicit function parameters and local bindings default to runtime. `HandleBindingPattern` resolves the phase from that context plus the keyword: a `generic` keyword needs no node of its own (the phase is carried by the binding's node kind), while a `runtime` keyword is preserved as a `RuntimeBindingName` node so `check` can name it in a diagnostic. A phase keyword that is merely redundant with the contextual default is diagnosed here, without invalidating the parse tree. - Check: a phase keyword that is invalid for its context (for example `runtime` on a checked-generic parameter) is diagnosed here, and recovers by building an error binding that still introduces the name so that later uses of it do not produce cascading errors. The removed `:!` syntax is now rejected as an ordinary parse error. The `form`/`:?`/`->?` ("extended types") portion of proposal #7254 is left for a separate change. Assisted-by: Claude Code
This commit is contained in:
@@ -20,15 +20,15 @@ fn MakeIntLiteral() -> type = "int_literal.make_type";
|
||||
alias IntLiteral = MakeIntLiteral();
|
||||
fn Int(N: IntLiteral) -> type = "int.make_type_signed";
|
||||
|
||||
interface AddWith(T:! type) {
|
||||
interface AddWith(T: type) {
|
||||
fn Op(self, other: Self) -> Self;
|
||||
}
|
||||
|
||||
interface As(T:! type) {
|
||||
interface As(T: type) {
|
||||
fn Convert(self) -> T;
|
||||
}
|
||||
|
||||
interface ImplicitAs(T:! type) {
|
||||
interface ImplicitAs(T: type) {
|
||||
fn Convert(self) -> T;
|
||||
}
|
||||
|
||||
@@ -223,27 +223,27 @@ var arr: array(i32, (1 as i32) + (2 as i32)) = (3, 4, (3 as i32) + (4 as i32));
|
||||
// CHECK:STDOUT: %AddWith.decl: %AddWith.type.2ef = interface_decl @AddWith [concrete = constants.%AddWith.generic] {
|
||||
// CHECK:STDOUT: %T.patt.loc8_20.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_20.2 (constants.%T.patt)]
|
||||
// CHECK:STDOUT: } {
|
||||
// CHECK:STDOUT: %.loc8_23.1: type = splice_block %.loc8_23.2 [concrete = type] {
|
||||
// CHECK:STDOUT: %.loc8_22.1: type = splice_block %.loc8_22.2 [concrete = type] {
|
||||
// CHECK:STDOUT: %.Self.frozen: %type = symbolic_binding .Self [symbolic_self = constants.%.Self.frozen]
|
||||
// CHECK:STDOUT: %.loc8_23.2: type = type_literal type [concrete = type]
|
||||
// CHECK:STDOUT: %.loc8_22.2: type = type_literal type [concrete = type]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %T.loc8_20.2: type = symbolic_binding T, 0 [symbolic = %T.loc8_20.1 (constants.%T)]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %As.decl: %As.type.116 = interface_decl @As [concrete = constants.%As.generic] {
|
||||
// CHECK:STDOUT: %T.patt.loc12_15.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc12_15.2 (constants.%T.patt)]
|
||||
// CHECK:STDOUT: } {
|
||||
// CHECK:STDOUT: %.loc12_18.1: type = splice_block %.loc12_18.2 [concrete = type] {
|
||||
// CHECK:STDOUT: %.loc12_17.1: type = splice_block %.loc12_17.2 [concrete = type] {
|
||||
// CHECK:STDOUT: %.Self.frozen: %type = symbolic_binding .Self [symbolic_self = constants.%.Self.frozen]
|
||||
// CHECK:STDOUT: %.loc12_18.2: type = type_literal type [concrete = type]
|
||||
// CHECK:STDOUT: %.loc12_17.2: type = type_literal type [concrete = type]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %T.loc12_15.2: type = symbolic_binding T, 0 [symbolic = %T.loc12_15.1 (constants.%T)]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %ImplicitAs.decl: %ImplicitAs.type.0ff = interface_decl @ImplicitAs [concrete = constants.%ImplicitAs.generic] {
|
||||
// CHECK:STDOUT: %T.patt.loc16_23.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc16_23.2 (constants.%T.patt)]
|
||||
// CHECK:STDOUT: } {
|
||||
// CHECK:STDOUT: %.loc16_26.1: type = splice_block %.loc16_26.2 [concrete = type] {
|
||||
// CHECK:STDOUT: %.loc16_25.1: type = splice_block %.loc16_25.2 [concrete = type] {
|
||||
// CHECK:STDOUT: %.Self.frozen: %type = symbolic_binding .Self [symbolic_self = constants.%.Self.frozen]
|
||||
// CHECK:STDOUT: %.loc16_26.2: type = type_literal type [concrete = type]
|
||||
// CHECK:STDOUT: %.loc16_25.2: type = type_literal type [concrete = type]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %T.loc16_23.2: type = symbolic_binding T, 0 [symbolic = %T.loc16_23.1 (constants.%T)]
|
||||
// CHECK:STDOUT: }
|
||||
@@ -279,10 +279,10 @@ var arr: array(i32, (1 as i32) + (2 as i32)) = (3, 4, (3 as i32) + (4 as i32));
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT: %AddWith.type: type = facet_type <@AddWith, @AddWith(%T.loc8_20.1)> [symbolic = %AddWith.type (constants.%AddWith.type.7e9)]
|
||||
// CHECK:STDOUT: %Self.loc8_29.2: @AddWith.%AddWith.type (%AddWith.type.7e9) = symbolic_binding Self, 1 [symbolic = %Self.loc8_29.2 (constants.%Self.8d5)]
|
||||
// CHECK:STDOUT: %Self.loc8_28.2: @AddWith.%AddWith.type (%AddWith.type.7e9) = symbolic_binding Self, 1 [symbolic = %Self.loc8_28.2 (constants.%Self.8d5)]
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: interface {
|
||||
// CHECK:STDOUT: %Self.loc8_29.1: @AddWith.%AddWith.type (%AddWith.type.7e9) = symbolic_binding Self, 1 [symbolic = %Self.loc8_29.2 (constants.%Self.8d5)]
|
||||
// CHECK:STDOUT: %Self.loc8_28.1: @AddWith.%AddWith.type (%AddWith.type.7e9) = symbolic_binding Self, 1 [symbolic = %Self.loc8_28.2 (constants.%Self.8d5)]
|
||||
// CHECK:STDOUT: %AddWith.WithSelf.decl = interface_with_self_decl @AddWith [concrete]
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !with Self:
|
||||
@@ -294,14 +294,14 @@ var arr: array(i32, (1 as i32) + (2 as i32)) = (3, 4, (3 as i32) + (4 as i32));
|
||||
// CHECK:STDOUT: %return.param_patt.loc9_31.1: @AddWith.WithSelf.Op.%pattern_type (%pattern_type.131) = out_param_pattern [symbolic = %return.param_patt.loc9_31.2 (constants.%return.param_patt.8c6)]
|
||||
// CHECK:STDOUT: %return.patt.loc9_28.1: @AddWith.WithSelf.Op.%pattern_type (%pattern_type.131) = return_slot_pattern %return.param_patt.loc9_31.1, %.loc9_31.3 [symbolic = %return.patt.loc9_28.2 (constants.%return.patt.169)]
|
||||
// CHECK:STDOUT: } {
|
||||
// CHECK:STDOUT: %.loc9_31.2: @AddWith.WithSelf.Op.%AddWith.type (%AddWith.type.7e9) = specific_constant @AddWith.%Self.loc8_29.1, @AddWith(constants.%T) [symbolic = %Self (constants.%Self.8d5)]
|
||||
// CHECK:STDOUT: %.loc9_31.2: @AddWith.WithSelf.Op.%AddWith.type (%AddWith.type.7e9) = specific_constant @AddWith.%Self.loc8_28.1, @AddWith(constants.%T) [symbolic = %Self (constants.%Self.8d5)]
|
||||
// CHECK:STDOUT: %Self.ref.loc9_31: @AddWith.WithSelf.Op.%AddWith.type (%AddWith.type.7e9) = name_ref Self, %.loc9_31.2 [symbolic = %Self (constants.%Self.8d5)]
|
||||
// CHECK:STDOUT: %Self.as_type.loc9_31: type = facet_access_type %Self.ref.loc9_31 [symbolic = %Self.as_type.loc9_9.1 (constants.%Self.as_type.48c)]
|
||||
// CHECK:STDOUT: %.loc9_31.3: type = converted %Self.ref.loc9_31, %Self.as_type.loc9_31 [symbolic = %Self.as_type.loc9_9.1 (constants.%Self.as_type.48c)]
|
||||
// CHECK:STDOUT: %.loc9_31.4: Core.Form = init_form %.loc9_31.3 [symbolic = %.loc9_31.1 (constants.%.e80)]
|
||||
// CHECK:STDOUT: %self.param: @AddWith.WithSelf.Op.%Self.as_type.loc9_9.1 (%Self.as_type.48c) = value_param call_param0
|
||||
// CHECK:STDOUT: %.loc9_9.1: type = splice_block %.loc9_9.3 [symbolic = %Self.as_type.loc9_9.1 (constants.%Self.as_type.48c)] {
|
||||
// CHECK:STDOUT: %.loc9_9.2: @AddWith.WithSelf.Op.%AddWith.type (%AddWith.type.7e9) = specific_constant @AddWith.%Self.loc8_29.1, @AddWith(constants.%T) [symbolic = %Self (constants.%Self.8d5)]
|
||||
// CHECK:STDOUT: %.loc9_9.2: @AddWith.WithSelf.Op.%AddWith.type (%AddWith.type.7e9) = specific_constant @AddWith.%Self.loc8_28.1, @AddWith(constants.%T) [symbolic = %Self (constants.%Self.8d5)]
|
||||
// CHECK:STDOUT: %Self.ref.loc9_9: @AddWith.WithSelf.Op.%AddWith.type (%AddWith.type.7e9) = name_ref Self, %.loc9_9.2 [symbolic = %Self (constants.%Self.8d5)]
|
||||
// CHECK:STDOUT: %Self.as_type.loc9_9.2: type = facet_access_type %Self.ref.loc9_9 [symbolic = %Self.as_type.loc9_9.1 (constants.%Self.as_type.48c)]
|
||||
// CHECK:STDOUT: %.loc9_9.3: type = converted %Self.ref.loc9_9, %Self.as_type.loc9_9.2 [symbolic = %Self.as_type.loc9_9.1 (constants.%Self.as_type.48c)]
|
||||
@@ -309,7 +309,7 @@ var arr: array(i32, (1 as i32) + (2 as i32)) = (3, 4, (3 as i32) + (4 as i32));
|
||||
// CHECK:STDOUT: %self: @AddWith.WithSelf.Op.%Self.as_type.loc9_9.1 (%Self.as_type.48c) = wrapper_binding self, %self.param
|
||||
// CHECK:STDOUT: %other.param: @AddWith.WithSelf.Op.%Self.as_type.loc9_9.1 (%Self.as_type.48c) = value_param call_param1
|
||||
// CHECK:STDOUT: %.loc9_22.1: type = splice_block %.loc9_22.3 [symbolic = %Self.as_type.loc9_9.1 (constants.%Self.as_type.48c)] {
|
||||
// CHECK:STDOUT: %.loc9_22.2: @AddWith.WithSelf.Op.%AddWith.type (%AddWith.type.7e9) = specific_constant @AddWith.%Self.loc8_29.1, @AddWith(constants.%T) [symbolic = %Self (constants.%Self.8d5)]
|
||||
// CHECK:STDOUT: %.loc9_22.2: @AddWith.WithSelf.Op.%AddWith.type (%AddWith.type.7e9) = specific_constant @AddWith.%Self.loc8_28.1, @AddWith(constants.%T) [symbolic = %Self (constants.%Self.8d5)]
|
||||
// CHECK:STDOUT: %Self.ref.loc9_22: @AddWith.WithSelf.Op.%AddWith.type (%AddWith.type.7e9) = name_ref Self, %.loc9_22.2 [symbolic = %Self (constants.%Self.8d5)]
|
||||
// CHECK:STDOUT: %Self.as_type.loc9_22: type = facet_access_type %Self.ref.loc9_22 [symbolic = %Self.as_type.loc9_9.1 (constants.%Self.as_type.48c)]
|
||||
// CHECK:STDOUT: %.loc9_22.3: type = converted %Self.ref.loc9_22, %Self.as_type.loc9_22 [symbolic = %Self.as_type.loc9_9.1 (constants.%Self.as_type.48c)]
|
||||
@@ -321,7 +321,7 @@ var arr: array(i32, (1 as i32) + (2 as i32)) = (3, 4, (3 as i32) + (4 as i32));
|
||||
// CHECK:STDOUT: %assoc0.loc9_35.1: @AddWith.WithSelf.%AddWith.assoc_type (%AddWith.assoc_type.588) = assoc_entity element0, %AddWith.WithSelf.Op.decl [symbolic = %assoc0.loc9_35.2 (constants.%assoc0.aed)]
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !members:
|
||||
// CHECK:STDOUT: .Self = %Self.loc8_29.1
|
||||
// CHECK:STDOUT: .Self = %Self.loc8_28.1
|
||||
// CHECK:STDOUT: .Op = @AddWith.WithSelf.%assoc0.loc9_35.1
|
||||
// CHECK:STDOUT: witness = (@AddWith.WithSelf.%AddWith.WithSelf.Op.decl)
|
||||
// CHECK:STDOUT:
|
||||
@@ -337,10 +337,10 @@ var arr: array(i32, (1 as i32) + (2 as i32)) = (3, 4, (3 as i32) + (4 as i32));
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT: %As.type: type = facet_type <@As, @As(%T.loc12_15.1)> [symbolic = %As.type (constants.%As.type.c5f)]
|
||||
// CHECK:STDOUT: %Self.loc12_24.2: @As.%As.type (%As.type.c5f) = symbolic_binding Self, 1 [symbolic = %Self.loc12_24.2 (constants.%Self.f80)]
|
||||
// CHECK:STDOUT: %Self.loc12_23.2: @As.%As.type (%As.type.c5f) = symbolic_binding Self, 1 [symbolic = %Self.loc12_23.2 (constants.%Self.f80)]
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: interface {
|
||||
// CHECK:STDOUT: %Self.loc12_24.1: @As.%As.type (%As.type.c5f) = symbolic_binding Self, 1 [symbolic = %Self.loc12_24.2 (constants.%Self.f80)]
|
||||
// CHECK:STDOUT: %Self.loc12_23.1: @As.%As.type (%As.type.c5f) = symbolic_binding Self, 1 [symbolic = %Self.loc12_23.2 (constants.%Self.f80)]
|
||||
// CHECK:STDOUT: %As.WithSelf.decl = interface_with_self_decl @As [concrete]
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !with Self:
|
||||
@@ -354,7 +354,7 @@ var arr: array(i32, (1 as i32) + (2 as i32)) = (3, 4, (3 as i32) + (4 as i32));
|
||||
// CHECK:STDOUT: %.loc13_23.2: Core.Form = init_form %T.ref [symbolic = %.loc13_23.1 (constants.%.184)]
|
||||
// CHECK:STDOUT: %self.param: @As.WithSelf.Convert.%Self.as_type.loc13_14.1 (%Self.as_type.1ce) = value_param call_param0
|
||||
// CHECK:STDOUT: %.loc13_14.1: type = splice_block %.loc13_14.3 [symbolic = %Self.as_type.loc13_14.1 (constants.%Self.as_type.1ce)] {
|
||||
// CHECK:STDOUT: %.loc13_14.2: @As.WithSelf.Convert.%As.type (%As.type.c5f) = specific_constant @As.%Self.loc12_24.1, @As(constants.%T) [symbolic = %Self (constants.%Self.f80)]
|
||||
// CHECK:STDOUT: %.loc13_14.2: @As.WithSelf.Convert.%As.type (%As.type.c5f) = specific_constant @As.%Self.loc12_23.1, @As(constants.%T) [symbolic = %Self (constants.%Self.f80)]
|
||||
// CHECK:STDOUT: %Self.ref: @As.WithSelf.Convert.%As.type (%As.type.c5f) = name_ref Self, %.loc13_14.2 [symbolic = %Self (constants.%Self.f80)]
|
||||
// CHECK:STDOUT: %Self.as_type.loc13_14.2: type = facet_access_type %Self.ref [symbolic = %Self.as_type.loc13_14.1 (constants.%Self.as_type.1ce)]
|
||||
// CHECK:STDOUT: %.loc13_14.3: type = converted %Self.ref, %Self.as_type.loc13_14.2 [symbolic = %Self.as_type.loc13_14.1 (constants.%Self.as_type.1ce)]
|
||||
@@ -366,7 +366,7 @@ var arr: array(i32, (1 as i32) + (2 as i32)) = (3, 4, (3 as i32) + (4 as i32));
|
||||
// CHECK:STDOUT: %assoc0.loc13_24.1: @As.WithSelf.%As.assoc_type (%As.assoc_type.b40) = assoc_entity element0, %As.WithSelf.Convert.decl [symbolic = %assoc0.loc13_24.2 (constants.%assoc0.a44)]
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !members:
|
||||
// CHECK:STDOUT: .Self = %Self.loc12_24.1
|
||||
// CHECK:STDOUT: .Self = %Self.loc12_23.1
|
||||
// CHECK:STDOUT: .T = <poisoned>
|
||||
// CHECK:STDOUT: .T = <poisoned>
|
||||
// CHECK:STDOUT: .Convert = @As.WithSelf.%assoc0.loc13_24.1
|
||||
@@ -384,10 +384,10 @@ var arr: array(i32, (1 as i32) + (2 as i32)) = (3, 4, (3 as i32) + (4 as i32));
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT: %ImplicitAs.type: type = facet_type <@ImplicitAs, @ImplicitAs(%T.loc16_23.1)> [symbolic = %ImplicitAs.type (constants.%ImplicitAs.type.3aa)]
|
||||
// CHECK:STDOUT: %Self.loc16_32.2: @ImplicitAs.%ImplicitAs.type (%ImplicitAs.type.3aa) = symbolic_binding Self, 1 [symbolic = %Self.loc16_32.2 (constants.%Self.bb1)]
|
||||
// CHECK:STDOUT: %Self.loc16_31.2: @ImplicitAs.%ImplicitAs.type (%ImplicitAs.type.3aa) = symbolic_binding Self, 1 [symbolic = %Self.loc16_31.2 (constants.%Self.bb1)]
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: interface {
|
||||
// CHECK:STDOUT: %Self.loc16_32.1: @ImplicitAs.%ImplicitAs.type (%ImplicitAs.type.3aa) = symbolic_binding Self, 1 [symbolic = %Self.loc16_32.2 (constants.%Self.bb1)]
|
||||
// CHECK:STDOUT: %Self.loc16_31.1: @ImplicitAs.%ImplicitAs.type (%ImplicitAs.type.3aa) = symbolic_binding Self, 1 [symbolic = %Self.loc16_31.2 (constants.%Self.bb1)]
|
||||
// CHECK:STDOUT: %ImplicitAs.WithSelf.decl = interface_with_self_decl @ImplicitAs [concrete]
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !with Self:
|
||||
@@ -401,7 +401,7 @@ var arr: array(i32, (1 as i32) + (2 as i32)) = (3, 4, (3 as i32) + (4 as i32));
|
||||
// CHECK:STDOUT: %.loc17_23.2: Core.Form = init_form %T.ref [symbolic = %.loc17_23.1 (constants.%.184)]
|
||||
// CHECK:STDOUT: %self.param: @ImplicitAs.WithSelf.Convert.%Self.as_type.loc17_14.1 (%Self.as_type.5b8) = value_param call_param0
|
||||
// CHECK:STDOUT: %.loc17_14.1: type = splice_block %.loc17_14.3 [symbolic = %Self.as_type.loc17_14.1 (constants.%Self.as_type.5b8)] {
|
||||
// CHECK:STDOUT: %.loc17_14.2: @ImplicitAs.WithSelf.Convert.%ImplicitAs.type (%ImplicitAs.type.3aa) = specific_constant @ImplicitAs.%Self.loc16_32.1, @ImplicitAs(constants.%T) [symbolic = %Self (constants.%Self.bb1)]
|
||||
// CHECK:STDOUT: %.loc17_14.2: @ImplicitAs.WithSelf.Convert.%ImplicitAs.type (%ImplicitAs.type.3aa) = specific_constant @ImplicitAs.%Self.loc16_31.1, @ImplicitAs(constants.%T) [symbolic = %Self (constants.%Self.bb1)]
|
||||
// CHECK:STDOUT: %Self.ref: @ImplicitAs.WithSelf.Convert.%ImplicitAs.type (%ImplicitAs.type.3aa) = name_ref Self, %.loc17_14.2 [symbolic = %Self (constants.%Self.bb1)]
|
||||
// CHECK:STDOUT: %Self.as_type.loc17_14.2: type = facet_access_type %Self.ref [symbolic = %Self.as_type.loc17_14.1 (constants.%Self.as_type.5b8)]
|
||||
// CHECK:STDOUT: %.loc17_14.3: type = converted %Self.ref, %Self.as_type.loc17_14.2 [symbolic = %Self.as_type.loc17_14.1 (constants.%Self.as_type.5b8)]
|
||||
@@ -413,7 +413,7 @@ var arr: array(i32, (1 as i32) + (2 as i32)) = (3, 4, (3 as i32) + (4 as i32));
|
||||
// CHECK:STDOUT: %assoc0.loc17_24.1: @ImplicitAs.WithSelf.%ImplicitAs.assoc_type (%ImplicitAs.assoc_type.fcc) = assoc_entity element0, %ImplicitAs.WithSelf.Convert.decl [symbolic = %assoc0.loc17_24.2 (constants.%assoc0.313)]
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !members:
|
||||
// CHECK:STDOUT: .Self = %Self.loc16_32.1
|
||||
// CHECK:STDOUT: .Self = %Self.loc16_31.1
|
||||
// CHECK:STDOUT: .T = <poisoned>
|
||||
// CHECK:STDOUT: .T = <poisoned>
|
||||
// CHECK:STDOUT: .Convert = @ImplicitAs.WithSelf.%assoc0.loc17_24.1
|
||||
@@ -532,7 +532,7 @@ var arr: array(i32, (1 as i32) + (2 as i32)) = (3, 4, (3 as i32) + (4 as i32));
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn @Int(%N.param: Core.IntLiteral) -> out %return.param: type = "int.make_type_signed";
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: generic fn @AddWith.WithSelf.Op(@AddWith.%T.loc8_20.2: type, @AddWith.%Self.loc8_29.1: @AddWith.%AddWith.type (%AddWith.type.7e9)) {
|
||||
// CHECK:STDOUT: generic fn @AddWith.WithSelf.Op(@AddWith.%T.loc8_20.2: type, @AddWith.%Self.loc8_28.1: @AddWith.%AddWith.type (%AddWith.type.7e9)) {
|
||||
// CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic = %T (constants.%T)]
|
||||
// CHECK:STDOUT: %AddWith.type: type = facet_type <@AddWith, @AddWith(%T)> [symbolic = %AddWith.type (constants.%AddWith.type.7e9)]
|
||||
// CHECK:STDOUT: %Self: @AddWith.WithSelf.Op.%AddWith.type (%AddWith.type.7e9) = symbolic_binding Self, 1 [symbolic = %Self (constants.%Self.8d5)]
|
||||
@@ -549,7 +549,7 @@ var arr: array(i32, (1 as i32) + (2 as i32)) = (3, 4, (3 as i32) + (4 as i32));
|
||||
// CHECK:STDOUT: fn(%self.param: @AddWith.WithSelf.Op.%Self.as_type.loc9_9.1 (%Self.as_type.48c), %other.param: @AddWith.WithSelf.Op.%Self.as_type.loc9_9.1 (%Self.as_type.48c)) -> out %return.param: @AddWith.WithSelf.Op.%Self.as_type.loc9_9.1 (%Self.as_type.48c);
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: generic fn @As.WithSelf.Convert(@As.%T.loc12_15.2: type, @As.%Self.loc12_24.1: @As.%As.type (%As.type.c5f)) {
|
||||
// CHECK:STDOUT: generic fn @As.WithSelf.Convert(@As.%T.loc12_15.2: type, @As.%Self.loc12_23.1: @As.%As.type (%As.type.c5f)) {
|
||||
// CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic = %T (constants.%T)]
|
||||
// CHECK:STDOUT: %As.type: type = facet_type <@As, @As(%T)> [symbolic = %As.type (constants.%As.type.c5f)]
|
||||
// CHECK:STDOUT: %Self: @As.WithSelf.Convert.%As.type (%As.type.c5f) = symbolic_binding Self, 1 [symbolic = %Self (constants.%Self.f80)]
|
||||
@@ -565,7 +565,7 @@ var arr: array(i32, (1 as i32) + (2 as i32)) = (3, 4, (3 as i32) + (4 as i32));
|
||||
// CHECK:STDOUT: fn(%self.param: @As.WithSelf.Convert.%Self.as_type.loc13_14.1 (%Self.as_type.1ce)) -> out %return.param: @As.WithSelf.Convert.%T (%T);
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: generic fn @ImplicitAs.WithSelf.Convert(@ImplicitAs.%T.loc16_23.2: type, @ImplicitAs.%Self.loc16_32.1: @ImplicitAs.%ImplicitAs.type (%ImplicitAs.type.3aa)) {
|
||||
// CHECK:STDOUT: generic fn @ImplicitAs.WithSelf.Convert(@ImplicitAs.%T.loc16_23.2: type, @ImplicitAs.%Self.loc16_31.1: @ImplicitAs.%ImplicitAs.type (%ImplicitAs.type.3aa)) {
|
||||
// CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic = %T (constants.%T)]
|
||||
// CHECK:STDOUT: %ImplicitAs.type: type = facet_type <@ImplicitAs, @ImplicitAs(%T)> [symbolic = %ImplicitAs.type (constants.%ImplicitAs.type.3aa)]
|
||||
// CHECK:STDOUT: %Self: @ImplicitAs.WithSelf.Convert.%ImplicitAs.type (%ImplicitAs.type.3aa) = symbolic_binding Self, 1 [symbolic = %Self (constants.%Self.bb1)]
|
||||
@@ -659,7 +659,7 @@ var arr: array(i32, (1 as i32) + (2 as i32)) = (3, 4, (3 as i32) + (4 as i32));
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT: %AddWith.type => constants.%AddWith.type.7c6
|
||||
// CHECK:STDOUT: %Self.loc8_29.2 => constants.%Self.9ab
|
||||
// CHECK:STDOUT: %Self.loc8_28.2 => constants.%Self.9ab
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific @AddWith.WithSelf(constants.%i32.builtin, constants.%Self.8d5) {
|
||||
@@ -705,7 +705,7 @@ var arr: array(i32, (1 as i32) + (2 as i32)) = (3, 4, (3 as i32) + (4 as i32));
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT: %As.type => constants.%As.type.dfb
|
||||
// CHECK:STDOUT: %Self.loc12_24.2 => constants.%Self.2c0
|
||||
// CHECK:STDOUT: %Self.loc12_23.2 => constants.%Self.2c0
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific @As.WithSelf(constants.%i32.builtin, constants.%Self.f80) {
|
||||
@@ -750,7 +750,7 @@ var arr: array(i32, (1 as i32) + (2 as i32)) = (3, 4, (3 as i32) + (4 as i32));
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT: %ImplicitAs.type => constants.%ImplicitAs.type.9df
|
||||
// CHECK:STDOUT: %Self.loc16_32.2 => constants.%Self.19a
|
||||
// CHECK:STDOUT: %Self.loc16_31.2 => constants.%Self.19a
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific @ImplicitAs.WithSelf(constants.%i32.builtin, constants.%Self.bb1) {
|
||||
@@ -795,7 +795,7 @@ var arr: array(i32, (1 as i32) + (2 as i32)) = (3, 4, (3 as i32) + (4 as i32));
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT: %ImplicitAs.type => constants.%ImplicitAs.type.7cb
|
||||
// CHECK:STDOUT: %Self.loc16_32.2 => constants.%Self.c40
|
||||
// CHECK:STDOUT: %Self.loc16_31.2 => constants.%Self.c40
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific @ImplicitAs.WithSelf(Core.IntLiteral, constants.%Self.bb1) {
|
||||
|
||||
@@ -13,10 +13,10 @@
|
||||
// TIP: bazel run //toolchain/testing:file_test -- --dump_output --file_tests=toolchain/check/testdata/function/call/fail_runtime_implicit_param.carbon
|
||||
|
||||
// CHECK:STDERR: fail_runtime_implicit_param.carbon:[[@LINE+4]]:6: error: implicit parameters of functions must be constant [ImplictParamMustBeConstant]
|
||||
// CHECK:STDERR: fn F[s: ()]();
|
||||
// CHECK:STDERR: ^~~~~
|
||||
// CHECK:STDERR: fn F[runtime s: ()]();
|
||||
// CHECK:STDERR: ^~~~~~~~~~~~~
|
||||
// CHECK:STDERR:
|
||||
fn F[s: ()]();
|
||||
fn F[runtime s: ()]();
|
||||
|
||||
fn Run() {
|
||||
F();
|
||||
|
||||
+101
-101
@@ -78,14 +78,14 @@ library "[[@TEST_NAME]]";
|
||||
// CHECK:STDERR: ^~~
|
||||
// CHECK:STDERR:
|
||||
fn F(x:? i32);
|
||||
// CHECK:STDERR: fail_form_param_not_form.carbon:[[@LINE+8]]:6: error: semantics TODO: `handle invalid parse trees in `check`` [SemanticsTodo]
|
||||
// CHECK:STDERR: fn G(ref x:? i32);
|
||||
// CHECK:STDERR: ^~~~~
|
||||
// CHECK:STDERR:
|
||||
// CHECK:STDERR: fail_form_param_not_form.carbon:[[@LINE+4]]:6: error: expected `:` binding after `ref` [ExpectedRuntimeBindingPatternAfterRef]
|
||||
// CHECK:STDERR: fail_form_param_not_form.carbon:[[@LINE+8]]:6: error: `ref` is only allowed on a runtime binding [ExpectedRuntimeBindingPatternAfterRef]
|
||||
// CHECK:STDERR: fn G(ref x:? i32);
|
||||
// CHECK:STDERR: ^~~
|
||||
// CHECK:STDERR:
|
||||
// CHECK:STDERR: fail_form_param_not_form.carbon:[[@LINE+4]]:10: error: semantics TODO: `handle invalid parse trees in `check`` [SemanticsTodo]
|
||||
// CHECK:STDERR: fn G(ref x:? i32);
|
||||
// CHECK:STDERR: ^~~~~~~
|
||||
// CHECK:STDERR:
|
||||
fn G(ref x:? i32);
|
||||
|
||||
// --- fail_missing_ref_tag.carbon
|
||||
@@ -108,7 +108,7 @@ fn G() {
|
||||
// --- form_generic_param.carbon
|
||||
library "[[@TEST_NAME]]";
|
||||
|
||||
fn F(Fm:! Core.Form, unused x:? Fm) {}
|
||||
fn F(generic Fm: Core.Form, unused x:? Fm) {}
|
||||
|
||||
fn G() {
|
||||
var x: i32;
|
||||
@@ -118,7 +118,7 @@ fn G() {
|
||||
// --- fail_todo_composite_generic_form.carbon
|
||||
library "[[@TEST_NAME]]";
|
||||
|
||||
fn F(Fm:! Core.Form, unused x:? Fm) {}
|
||||
fn F(generic Fm: Core.Form, unused x:? Fm) {}
|
||||
|
||||
fn G() {
|
||||
var x: i32;
|
||||
@@ -128,9 +128,9 @@ fn G() {
|
||||
// CHECK:STDERR: fail_todo_composite_generic_form.carbon:[[@LINE+7]]:3: note: type `(Core.Form, Core.Form)` does not implement interface `Core.ImplicitAs(Core.Form)` [MissingImplInMemberAccessInContext]
|
||||
// CHECK:STDERR: F((form(var i32), form(ref i32)), (x, ref x));
|
||||
// CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
// CHECK:STDERR: fail_todo_composite_generic_form.carbon:[[@LINE-10]]:6: note: initializing generic parameter `Fm` declared here [InitializingGenericParam]
|
||||
// CHECK:STDERR: fn F(Fm:! Core.Form, unused x:? Fm) {}
|
||||
// CHECK:STDERR: ^~~~~~~~~~~~~~
|
||||
// CHECK:STDERR: fail_todo_composite_generic_form.carbon:[[@LINE-10]]:14: note: initializing generic parameter `Fm` declared here [InitializingGenericParam]
|
||||
// CHECK:STDERR: fn F(generic Fm: Core.Form, unused x:? Fm) {}
|
||||
// CHECK:STDERR: ^~~~~~~~~~~~~
|
||||
// CHECK:STDERR:
|
||||
F((form(var i32), form(ref i32)), (x, ref x));
|
||||
}
|
||||
@@ -138,7 +138,7 @@ fn G() {
|
||||
// --- fail_todo_deduce_generic_form.carbon
|
||||
library "[[@TEST_NAME]]";
|
||||
|
||||
fn F[Fm:! Core.Form](v:? Fm);
|
||||
fn F[Fm: Core.Form](v:? Fm);
|
||||
|
||||
fn G() {
|
||||
var v: i32 = 0;
|
||||
@@ -146,8 +146,8 @@ fn G() {
|
||||
// CHECK:STDERR: F(ref v);
|
||||
// CHECK:STDERR: ^~~~~~~~
|
||||
// CHECK:STDERR: fail_todo_deduce_generic_form.carbon:[[@LINE-7]]:1: note: while deducing parameters of generic declared here [DeductionGenericHere]
|
||||
// CHECK:STDERR: fn F[Fm:! Core.Form](v:? Fm);
|
||||
// CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
// CHECK:STDERR: fn F[Fm: Core.Form](v:? Fm);
|
||||
// CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
// CHECK:STDERR:
|
||||
F(ref v);
|
||||
}
|
||||
@@ -155,7 +155,7 @@ fn G() {
|
||||
// --- fail_form_generic_arg_not_form.carbon
|
||||
library "[[@TEST_NAME]]";
|
||||
|
||||
fn F(Fm:! Core.Form, unused x:? Fm) {}
|
||||
fn F(generic Fm: Core.Form, unused x:? Fm) {}
|
||||
|
||||
fn G() {
|
||||
var x: i32;
|
||||
@@ -165,9 +165,9 @@ fn G() {
|
||||
// CHECK:STDERR: fail_form_generic_arg_not_form.carbon:[[@LINE+7]]:3: note: type `type` does not implement interface `Core.ImplicitAs(Core.Form)` [MissingImplInMemberAccessInContext]
|
||||
// CHECK:STDERR: F(i32, x);
|
||||
// CHECK:STDERR: ^~~~~~~~~
|
||||
// CHECK:STDERR: fail_form_generic_arg_not_form.carbon:[[@LINE-10]]:6: note: initializing generic parameter `Fm` declared here [InitializingGenericParam]
|
||||
// CHECK:STDERR: fn F(Fm:! Core.Form, unused x:? Fm) {}
|
||||
// CHECK:STDERR: ^~~~~~~~~~~~~~
|
||||
// CHECK:STDERR: fail_form_generic_arg_not_form.carbon:[[@LINE-10]]:14: note: initializing generic parameter `Fm` declared here [InitializingGenericParam]
|
||||
// CHECK:STDERR: fn F(generic Fm: Core.Form, unused x:? Fm) {}
|
||||
// CHECK:STDERR: ^~~~~~~~~~~~~
|
||||
// CHECK:STDERR:
|
||||
F(i32, x);
|
||||
}
|
||||
@@ -175,7 +175,7 @@ fn G() {
|
||||
// --- fail_form_generic_missing_ref_tag.carbon
|
||||
library "[[@TEST_NAME]]";
|
||||
|
||||
fn F(Fm:! Core.Form, unused x:? Fm) {}
|
||||
fn F(generic Fm: Core.Form, unused x:? Fm) {}
|
||||
|
||||
fn G() {
|
||||
var x: i32;
|
||||
@@ -183,9 +183,9 @@ fn G() {
|
||||
// CHECK:STDERR: F(form(ref i32), x);
|
||||
// CHECK:STDERR: ^
|
||||
// CHECK:STDERR: fail_form_generic_missing_ref_tag.carbon: note: initializing function parameter [InCallToFunctionParam]
|
||||
// CHECK:STDERR: fail_form_generic_missing_ref_tag.carbon:[[@LINE-8]]:29: note: initializing function parameter [InCallToFunctionParam]
|
||||
// CHECK:STDERR: fn F(Fm:! Core.Form, unused x:? Fm) {}
|
||||
// CHECK:STDERR: ^~~~~~
|
||||
// CHECK:STDERR: fail_form_generic_missing_ref_tag.carbon:[[@LINE-8]]:36: note: initializing function parameter [InCallToFunctionParam]
|
||||
// CHECK:STDERR: fn F(generic Fm: Core.Form, unused x:? Fm) {}
|
||||
// CHECK:STDERR: ^~~~~~
|
||||
// CHECK:STDERR:
|
||||
F(form(ref i32), x);
|
||||
}
|
||||
@@ -206,7 +206,7 @@ library "[[@TEST_NAME]]";
|
||||
|
||||
// TODO: this code should fail for a different reason, but right now we don't
|
||||
// have a way to write correct code that reaches the TODO we're exercising here.
|
||||
fn F(Form:! Core.Form) {
|
||||
fn F(generic Form: Core.Form) {
|
||||
// CHECK:STDERR: fail_todo_local_symbolic_form_binding.carbon:[[@LINE+4]]:7: error: semantics TODO: `support local form bindings` [SemanticsTodo]
|
||||
// CHECK:STDERR: let y:? Form = 0;
|
||||
// CHECK:STDERR: ^~~~~~~~
|
||||
@@ -274,7 +274,7 @@ fn F() ->? ref i32;
|
||||
library "[[@TEST_NAME]]";
|
||||
//@include-in-dumps
|
||||
|
||||
fn F(Fm:! Core.Form, v:? Fm) ->? Fm {
|
||||
fn F(generic Fm: Core.Form, v:? Fm) ->? Fm {
|
||||
// TODO: This should fail because `Fm` might be `form(var T)` for a
|
||||
// non-copyable `T`.
|
||||
return v;
|
||||
@@ -673,9 +673,9 @@ fn G() {
|
||||
// CHECK:STDOUT: %Fm: Core.Form = symbolic_binding Fm, 0 [symbolic]
|
||||
// CHECK:STDOUT: %.42f: type = type_component_of %Fm [symbolic]
|
||||
// CHECK:STDOUT: %pattern_type.177: type = pattern_type %.42f [symbolic]
|
||||
// CHECK:STDOUT: %.f15: %pattern_type.177 = splice_inst @F.%.loc4_23.3 [template]
|
||||
// CHECK:STDOUT: %.f15: %pattern_type.177 = splice_inst @F.%.loc4_30.3 [template]
|
||||
// CHECK:STDOUT: %v.patt.0b3: %pattern_type.177 = at_binding_pattern v, %.f15 [template]
|
||||
// CHECK:STDOUT: %.677: %pattern_type.177 = splice_inst @F.%.loc4_30.3 [template]
|
||||
// CHECK:STDOUT: %.677: %pattern_type.177 = splice_inst @F.%.loc4_37.3 [template]
|
||||
// CHECK:STDOUT: %return.patt.113: %pattern_type.177 = return_slot_pattern %.677, %.42f [template]
|
||||
// CHECK:STDOUT: %.cfa: <instruction> = form_param_pattern_action %Fm, v [template]
|
||||
// CHECK:STDOUT: %.26b: %pattern_type.177 = splice_inst %.cfa [template]
|
||||
@@ -816,52 +816,52 @@ fn G() {
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %Core.import = import Core
|
||||
// CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] {
|
||||
// CHECK:STDOUT: %Fm.patt.loc4_8.1: %pattern_type.13f = symbolic_binding_pattern Fm, 0 [symbolic = %Fm.patt.loc4_8.2 (constants.%Fm.patt)]
|
||||
// CHECK:STDOUT: %.loc4_23.2: @F.%pattern_type (%pattern_type.177) = splice_inst %.loc4_23.3 [template = %.loc4_23.4 (constants.%.f15)]
|
||||
// CHECK:STDOUT: %v.patt.loc4_23.1: @F.%pattern_type (%pattern_type.177) = at_binding_pattern v, %.loc4_23.2 [template = %v.patt.loc4_23.2 (constants.%v.patt.0b3)]
|
||||
// CHECK:STDOUT: %.loc4_30.2: @F.%pattern_type (%pattern_type.177) = splice_inst %.loc4_30.3 [template = %.loc4_30.4 (constants.%.677)]
|
||||
// CHECK:STDOUT: %return.patt.loc4_30.1: @F.%pattern_type (%pattern_type.177) = return_slot_pattern %.loc4_30.2, %.loc4_34 [template = %return.patt.loc4_30.2 (constants.%return.patt.113)]
|
||||
// CHECK:STDOUT: %Fm.patt.loc4_16.1: %pattern_type.13f = symbolic_binding_pattern Fm, 0 [symbolic = %Fm.patt.loc4_16.2 (constants.%Fm.patt)]
|
||||
// CHECK:STDOUT: %.loc4_30.2: @F.%pattern_type (%pattern_type.177) = splice_inst %.loc4_30.3 [template = %.loc4_30.4 (constants.%.f15)]
|
||||
// CHECK:STDOUT: %v.patt.loc4_30.1: @F.%pattern_type (%pattern_type.177) = at_binding_pattern v, %.loc4_30.2 [template = %v.patt.loc4_30.2 (constants.%v.patt.0b3)]
|
||||
// CHECK:STDOUT: %.loc4_37.2: @F.%pattern_type (%pattern_type.177) = splice_inst %.loc4_37.3 [template = %.loc4_37.4 (constants.%.677)]
|
||||
// CHECK:STDOUT: %return.patt.loc4_37.1: @F.%pattern_type (%pattern_type.177) = return_slot_pattern %.loc4_37.2, %.loc4_41 [template = %return.patt.loc4_37.2 (constants.%return.patt.113)]
|
||||
// CHECK:STDOUT: } {
|
||||
// CHECK:STDOUT: %Fm.ref.loc4_34: Core.Form = name_ref Fm, %Fm.loc4_8.2 [symbolic = %Fm.loc4_8.1 (constants.%Fm)]
|
||||
// CHECK:STDOUT: %.loc4_34: type = type_component_of %Fm.ref.loc4_34 [symbolic = %.loc4_26.1 (constants.%.42f)]
|
||||
// CHECK:STDOUT: %.loc4_15: type = splice_block %Form.ref [concrete = Core.Form] {
|
||||
// CHECK:STDOUT: %Fm.ref.loc4_41: Core.Form = name_ref Fm, %Fm.loc4_16.2 [symbolic = %Fm.loc4_16.1 (constants.%Fm)]
|
||||
// CHECK:STDOUT: %.loc4_41: type = type_component_of %Fm.ref.loc4_41 [symbolic = %.loc4_33.1 (constants.%.42f)]
|
||||
// CHECK:STDOUT: %.loc4_22: type = splice_block %Form.ref [concrete = Core.Form] {
|
||||
// CHECK:STDOUT: %.Self.frozen: %type = symbolic_binding .Self [symbolic_self = constants.%.Self.frozen]
|
||||
// CHECK:STDOUT: %Core.ref: <namespace> = name_ref Core, imports.%Core [concrete = imports.%Core]
|
||||
// CHECK:STDOUT: %Form.ref: type = name_ref Form, imports.%Core.Form [concrete = Core.Form]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %Fm.loc4_8.2: Core.Form = symbolic_binding Fm, 0 [symbolic = %Fm.loc4_8.1 (constants.%Fm)]
|
||||
// CHECK:STDOUT: %.loc4_23.1: @F.%.loc4_26.1 (%.42f) = splice_inst %.loc4_23.5
|
||||
// CHECK:STDOUT: %.loc4_26.2: Core.Form = splice_block %Fm.ref.loc4_26 [symbolic = %Fm.loc4_8.1 (constants.%Fm)] {
|
||||
// CHECK:STDOUT: %Fm.ref.loc4_26: Core.Form = name_ref Fm, %Fm.loc4_8.2 [symbolic = %Fm.loc4_8.1 (constants.%Fm)]
|
||||
// CHECK:STDOUT: %.loc4_26.3: type = type_component_of %Fm.ref.loc4_26 [symbolic = %.loc4_26.1 (constants.%.42f)]
|
||||
// CHECK:STDOUT: %Fm.loc4_16.2: Core.Form = symbolic_binding Fm, 0 [symbolic = %Fm.loc4_16.1 (constants.%Fm)]
|
||||
// CHECK:STDOUT: %.loc4_30.1: @F.%.loc4_33.1 (%.42f) = splice_inst %.loc4_30.5
|
||||
// CHECK:STDOUT: %.loc4_33.2: Core.Form = splice_block %Fm.ref.loc4_33 [symbolic = %Fm.loc4_16.1 (constants.%Fm)] {
|
||||
// CHECK:STDOUT: %Fm.ref.loc4_33: Core.Form = name_ref Fm, %Fm.loc4_16.2 [symbolic = %Fm.loc4_16.1 (constants.%Fm)]
|
||||
// CHECK:STDOUT: %.loc4_33.3: type = type_component_of %Fm.ref.loc4_33 [symbolic = %.loc4_33.1 (constants.%.42f)]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %v: @F.%.loc4_26.1 (%.42f) = wrapper_binding v, %.loc4_23.1
|
||||
// CHECK:STDOUT: %.loc4_30.1: @F.%.loc4_26.1 (%.42f) = splice_inst %.loc4_30.5
|
||||
// CHECK:STDOUT: %return: @F.%.loc4_26.1 (%.42f) = return_slot %.loc4_30.1
|
||||
// CHECK:STDOUT: %v: @F.%.loc4_33.1 (%.42f) = wrapper_binding v, %.loc4_30.1
|
||||
// CHECK:STDOUT: %.loc4_37.1: @F.%.loc4_33.1 (%.42f) = splice_inst %.loc4_37.5
|
||||
// CHECK:STDOUT: %return: @F.%.loc4_33.1 (%.42f) = return_slot %.loc4_37.1
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] {} {}
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: generic fn @F(%Fm.loc4_8.2: Core.Form) {
|
||||
// CHECK:STDOUT: %Fm.patt.loc4_8.2: %pattern_type.13f = symbolic_binding_pattern Fm, 0 [symbolic = %Fm.patt.loc4_8.2 (constants.%Fm.patt)]
|
||||
// CHECK:STDOUT: %Fm.loc4_8.1: Core.Form = symbolic_binding Fm, 0 [symbolic = %Fm.loc4_8.1 (constants.%Fm)]
|
||||
// CHECK:STDOUT: %.loc4_26.1: type = type_component_of %Fm.loc4_8.1 [symbolic = %.loc4_26.1 (constants.%.42f)]
|
||||
// CHECK:STDOUT: %.loc4_23.3: <instruction> = form_param_pattern_action %Fm.ref.loc4_26, v [template]
|
||||
// CHECK:STDOUT: %pattern_type: type = pattern_type %.loc4_26.1 [symbolic = %pattern_type (constants.%pattern_type.177)]
|
||||
// CHECK:STDOUT: %.loc4_23.4: @F.%pattern_type (%pattern_type.177) = splice_inst %.loc4_23.3 [template = %.loc4_23.4 (constants.%.f15)]
|
||||
// CHECK:STDOUT: %v.patt.loc4_23.2: @F.%pattern_type (%pattern_type.177) = at_binding_pattern v, %.loc4_23.4 [template = %v.patt.loc4_23.2 (constants.%v.patt.0b3)]
|
||||
// CHECK:STDOUT: %.loc4_30.3: <instruction> = out_form_param_pattern_action %Fm.ref.loc4_34 [template]
|
||||
// CHECK:STDOUT: %.loc4_30.4: @F.%pattern_type (%pattern_type.177) = splice_inst %.loc4_30.3 [template = %.loc4_30.4 (constants.%.677)]
|
||||
// CHECK:STDOUT: %return.patt.loc4_30.2: @F.%pattern_type (%pattern_type.177) = return_slot_pattern %.loc4_30.4, %.loc4_26.1 [template = %return.patt.loc4_30.2 (constants.%return.patt.113)]
|
||||
// CHECK:STDOUT: %.loc4_23.5: <instruction> = callee_pattern_match_action constants.%.f15, call_param0 [template]
|
||||
// CHECK:STDOUT: %.loc4_30.5: <instruction> = callee_pattern_match_action constants.%.677, call_param1 [template]
|
||||
// CHECK:STDOUT: generic fn @F(%Fm.loc4_16.2: Core.Form) {
|
||||
// CHECK:STDOUT: %Fm.patt.loc4_16.2: %pattern_type.13f = symbolic_binding_pattern Fm, 0 [symbolic = %Fm.patt.loc4_16.2 (constants.%Fm.patt)]
|
||||
// CHECK:STDOUT: %Fm.loc4_16.1: Core.Form = symbolic_binding Fm, 0 [symbolic = %Fm.loc4_16.1 (constants.%Fm)]
|
||||
// CHECK:STDOUT: %.loc4_33.1: type = type_component_of %Fm.loc4_16.1 [symbolic = %.loc4_33.1 (constants.%.42f)]
|
||||
// CHECK:STDOUT: %.loc4_30.3: <instruction> = form_param_pattern_action %Fm.ref.loc4_33, v [template]
|
||||
// CHECK:STDOUT: %pattern_type: type = pattern_type %.loc4_33.1 [symbolic = %pattern_type (constants.%pattern_type.177)]
|
||||
// CHECK:STDOUT: %.loc4_30.4: @F.%pattern_type (%pattern_type.177) = splice_inst %.loc4_30.3 [template = %.loc4_30.4 (constants.%.f15)]
|
||||
// CHECK:STDOUT: %v.patt.loc4_30.2: @F.%pattern_type (%pattern_type.177) = at_binding_pattern v, %.loc4_30.4 [template = %v.patt.loc4_30.2 (constants.%v.patt.0b3)]
|
||||
// CHECK:STDOUT: %.loc4_37.3: <instruction> = out_form_param_pattern_action %Fm.ref.loc4_41 [template]
|
||||
// CHECK:STDOUT: %.loc4_37.4: @F.%pattern_type (%pattern_type.177) = splice_inst %.loc4_37.3 [template = %.loc4_37.4 (constants.%.677)]
|
||||
// CHECK:STDOUT: %return.patt.loc4_37.2: @F.%pattern_type (%pattern_type.177) = return_slot_pattern %.loc4_37.4, %.loc4_33.1 [template = %return.patt.loc4_37.2 (constants.%return.patt.113)]
|
||||
// CHECK:STDOUT: %.loc4_30.5: <instruction> = callee_pattern_match_action constants.%.f15, call_param0 [template]
|
||||
// CHECK:STDOUT: %.loc4_37.5: <instruction> = callee_pattern_match_action constants.%.677, call_param1 [template]
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT: %require_complete: <witness> = require_complete_type %.loc4_26.1 [symbolic = %require_complete (constants.%require_complete.c9b)]
|
||||
// CHECK:STDOUT: %require_complete: <witness> = require_complete_type %.loc4_33.1 [symbolic = %require_complete (constants.%require_complete.c9b)]
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn(%.loc4_23.1: @F.%.loc4_26.1 (%.42f)) -> out %.loc4_30.1:? %Fm {
|
||||
// CHECK:STDOUT: fn(%.loc4_30.1: @F.%.loc4_33.1 (%.42f)) -> out %.loc4_37.1:? %Fm {
|
||||
// CHECK:STDOUT: !entry:
|
||||
// CHECK:STDOUT: %v.ref: @F.%.loc4_26.1 (%.42f) = name_ref v, %v
|
||||
// CHECK:STDOUT: %v.ref: @F.%.loc4_33.1 (%.42f) = name_ref v, %v
|
||||
// CHECK:STDOUT: return %v.ref
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !observes:
|
||||
@@ -954,69 +954,69 @@ fn G() {
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific @F(constants.%Fm) {
|
||||
// CHECK:STDOUT: %Fm.patt.loc4_8.2 => constants.%Fm.patt
|
||||
// CHECK:STDOUT: %Fm.loc4_8.1 => constants.%Fm
|
||||
// CHECK:STDOUT: %.loc4_26.1 => constants.%.42f
|
||||
// CHECK:STDOUT: %.loc4_23.3 => constants.%.cfa
|
||||
// CHECK:STDOUT: %Fm.patt.loc4_16.2 => constants.%Fm.patt
|
||||
// CHECK:STDOUT: %Fm.loc4_16.1 => constants.%Fm
|
||||
// CHECK:STDOUT: %.loc4_33.1 => constants.%.42f
|
||||
// CHECK:STDOUT: %.loc4_30.3 => constants.%.cfa
|
||||
// CHECK:STDOUT: %pattern_type => constants.%pattern_type.177
|
||||
// CHECK:STDOUT: %.loc4_23.4 => constants.%.26b
|
||||
// CHECK:STDOUT: %v.patt.loc4_23.2 => constants.%v.patt.cda
|
||||
// CHECK:STDOUT: %.loc4_30.3 => constants.%.94f
|
||||
// CHECK:STDOUT: %.loc4_30.4 => constants.%.1ac
|
||||
// CHECK:STDOUT: %return.patt.loc4_30.2 => constants.%return.patt.333
|
||||
// CHECK:STDOUT: %.loc4_23.5 => constants.%.095
|
||||
// CHECK:STDOUT: %.loc4_30.5 => constants.%.efc
|
||||
// CHECK:STDOUT: %.loc4_30.4 => constants.%.26b
|
||||
// CHECK:STDOUT: %v.patt.loc4_30.2 => constants.%v.patt.cda
|
||||
// CHECK:STDOUT: %.loc4_37.3 => constants.%.94f
|
||||
// CHECK:STDOUT: %.loc4_37.4 => constants.%.1ac
|
||||
// CHECK:STDOUT: %return.patt.loc4_37.2 => constants.%return.patt.333
|
||||
// CHECK:STDOUT: %.loc4_30.5 => constants.%.095
|
||||
// CHECK:STDOUT: %.loc4_37.5 => constants.%.efc
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific @F(constants.%.795) {
|
||||
// CHECK:STDOUT: %Fm.patt.loc4_8.2 => constants.%Fm.patt
|
||||
// CHECK:STDOUT: %Fm.loc4_8.1 => constants.%.795
|
||||
// CHECK:STDOUT: %.loc4_26.1 => constants.%i32
|
||||
// CHECK:STDOUT: %.loc4_23.3 => constants.%inst.splice_block
|
||||
// CHECK:STDOUT: %Fm.patt.loc4_16.2 => constants.%Fm.patt
|
||||
// CHECK:STDOUT: %Fm.loc4_16.1 => constants.%.795
|
||||
// CHECK:STDOUT: %.loc4_33.1 => constants.%i32
|
||||
// CHECK:STDOUT: %.loc4_30.3 => constants.%inst.splice_block
|
||||
// CHECK:STDOUT: %pattern_type => constants.%pattern_type.6b6
|
||||
// CHECK:STDOUT: %.loc4_23.4 => constants.%v.var_patt.13561f.1
|
||||
// CHECK:STDOUT: %v.patt.loc4_23.2 => constants.%v.patt.b2b
|
||||
// CHECK:STDOUT: %.loc4_30.3 => constants.%inst.out_param_pattern
|
||||
// CHECK:STDOUT: %.loc4_30.4 => constants.%return.param_patt.a9a4c7.1
|
||||
// CHECK:STDOUT: %return.patt.loc4_30.2 => constants.%return.patt.e1b
|
||||
// CHECK:STDOUT: %.loc4_23.5 => constants.%.095
|
||||
// CHECK:STDOUT: %.loc4_30.5 => constants.%.efc
|
||||
// CHECK:STDOUT: %.loc4_30.4 => constants.%v.var_patt.13561f.1
|
||||
// CHECK:STDOUT: %v.patt.loc4_30.2 => constants.%v.patt.b2b
|
||||
// CHECK:STDOUT: %.loc4_37.3 => constants.%inst.out_param_pattern
|
||||
// CHECK:STDOUT: %.loc4_37.4 => constants.%return.param_patt.a9a4c7.1
|
||||
// CHECK:STDOUT: %return.patt.loc4_37.2 => constants.%return.patt.e1b
|
||||
// CHECK:STDOUT: %.loc4_30.5 => constants.%.095
|
||||
// CHECK:STDOUT: %.loc4_37.5 => constants.%.efc
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT: %require_complete => constants.%complete_type.f8a
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific @F(constants.%.512) {
|
||||
// CHECK:STDOUT: %Fm.patt.loc4_8.2 => constants.%Fm.patt
|
||||
// CHECK:STDOUT: %Fm.loc4_8.1 => constants.%.512
|
||||
// CHECK:STDOUT: %.loc4_26.1 => constants.%i32
|
||||
// CHECK:STDOUT: %.loc4_23.3 => constants.%inst.ref_param_pattern
|
||||
// CHECK:STDOUT: %Fm.patt.loc4_16.2 => constants.%Fm.patt
|
||||
// CHECK:STDOUT: %Fm.loc4_16.1 => constants.%.512
|
||||
// CHECK:STDOUT: %.loc4_33.1 => constants.%i32
|
||||
// CHECK:STDOUT: %.loc4_30.3 => constants.%inst.ref_param_pattern
|
||||
// CHECK:STDOUT: %pattern_type => constants.%pattern_type.6b6
|
||||
// CHECK:STDOUT: %.loc4_23.4 => constants.%v.param_patt.e9ad17.1
|
||||
// CHECK:STDOUT: %v.patt.loc4_23.2 => constants.%v.patt.5c0
|
||||
// CHECK:STDOUT: %.loc4_30.3 => constants.%inst.ref_return_pattern
|
||||
// CHECK:STDOUT: %.loc4_30.4 => constants.%.ae0167.1
|
||||
// CHECK:STDOUT: %return.patt.loc4_30.2 => constants.%return.patt.c62
|
||||
// CHECK:STDOUT: %.loc4_23.5 => constants.%.095
|
||||
// CHECK:STDOUT: %.loc4_30.5 => constants.%.efc
|
||||
// CHECK:STDOUT: %.loc4_30.4 => constants.%v.param_patt.e9ad17.1
|
||||
// CHECK:STDOUT: %v.patt.loc4_30.2 => constants.%v.patt.5c0
|
||||
// CHECK:STDOUT: %.loc4_37.3 => constants.%inst.ref_return_pattern
|
||||
// CHECK:STDOUT: %.loc4_37.4 => constants.%.ae0167.1
|
||||
// CHECK:STDOUT: %return.patt.loc4_37.2 => constants.%return.patt.c62
|
||||
// CHECK:STDOUT: %.loc4_30.5 => constants.%.095
|
||||
// CHECK:STDOUT: %.loc4_37.5 => constants.%.efc
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT: %require_complete => constants.%complete_type.f8a
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific @F(constants.%.c2a) {
|
||||
// CHECK:STDOUT: %Fm.patt.loc4_8.2 => constants.%Fm.patt
|
||||
// CHECK:STDOUT: %Fm.loc4_8.1 => constants.%.c2a
|
||||
// CHECK:STDOUT: %.loc4_26.1 => constants.%i32
|
||||
// CHECK:STDOUT: %.loc4_23.3 => constants.%inst.value_param_pattern
|
||||
// CHECK:STDOUT: %Fm.patt.loc4_16.2 => constants.%Fm.patt
|
||||
// CHECK:STDOUT: %Fm.loc4_16.1 => constants.%.c2a
|
||||
// CHECK:STDOUT: %.loc4_33.1 => constants.%i32
|
||||
// CHECK:STDOUT: %.loc4_30.3 => constants.%inst.value_param_pattern
|
||||
// CHECK:STDOUT: %pattern_type => constants.%pattern_type.6b6
|
||||
// CHECK:STDOUT: %.loc4_23.4 => constants.%v.param_patt.733534.1
|
||||
// CHECK:STDOUT: %v.patt.loc4_23.2 => constants.%v.patt.971
|
||||
// CHECK:STDOUT: %.loc4_30.3 => constants.%inst.value_return_pattern
|
||||
// CHECK:STDOUT: %.loc4_30.4 => constants.%.1a588f.1
|
||||
// CHECK:STDOUT: %return.patt.loc4_30.2 => constants.%return.patt.45a
|
||||
// CHECK:STDOUT: %.loc4_23.5 => constants.%.095
|
||||
// CHECK:STDOUT: %.loc4_30.5 => constants.%.efc
|
||||
// CHECK:STDOUT: %.loc4_30.4 => constants.%v.param_patt.733534.1
|
||||
// CHECK:STDOUT: %v.patt.loc4_30.2 => constants.%v.patt.971
|
||||
// CHECK:STDOUT: %.loc4_37.3 => constants.%inst.value_return_pattern
|
||||
// CHECK:STDOUT: %.loc4_37.4 => constants.%.1a588f.1
|
||||
// CHECK:STDOUT: %return.patt.loc4_37.2 => constants.%return.patt.45a
|
||||
// CHECK:STDOUT: %.loc4_30.5 => constants.%.095
|
||||
// CHECK:STDOUT: %.loc4_37.5 => constants.%.efc
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT: %require_complete => constants.%complete_type.f8a
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
library "[[@TEST_NAME]]";
|
||||
|
||||
// F in the lexical scope.
|
||||
class Class(F:! type) {
|
||||
class Class(F: type) {
|
||||
class Inner {
|
||||
// F in a non-lexical scope.
|
||||
fn F() -> i32 { return 0; }
|
||||
@@ -25,7 +25,7 @@ class Class(F:! type) {
|
||||
}
|
||||
}
|
||||
|
||||
fn Class(F:! type).Inner.G() -> i32 { return F(); }
|
||||
fn Class(F: type).Inner.G() -> i32 { return F(); }
|
||||
|
||||
// CHECK:STDOUT: --- prefer_unqualified_lookup.carbon
|
||||
// CHECK:STDOUT:
|
||||
@@ -95,9 +95,9 @@ fn Class(F:! type).Inner.G() -> i32 { return F(); }
|
||||
// CHECK:STDOUT: %Class.decl: %Class.type = class_decl @Class [concrete = constants.%Class.generic] {
|
||||
// CHECK:STDOUT: %F.patt.loc5_14.1: %pattern_type.98f = symbolic_binding_pattern F, 0 [symbolic = %F.patt.loc5_14.2 (constants.%F.patt)]
|
||||
// CHECK:STDOUT: } {
|
||||
// CHECK:STDOUT: %.loc5_17.1: type = splice_block %.loc5_17.2 [concrete = type] {
|
||||
// CHECK:STDOUT: %.loc5_16.1: type = splice_block %.loc5_16.2 [concrete = type] {
|
||||
// CHECK:STDOUT: %.Self.frozen: %type = symbolic_binding .Self [symbolic_self = constants.%.Self.frozen]
|
||||
// CHECK:STDOUT: %.loc5_17.2: type = type_literal type [concrete = type]
|
||||
// CHECK:STDOUT: %.loc5_16.2: type = type_literal type [concrete = type]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %F.loc5_14.2: type = symbolic_binding F, 0 [symbolic = %F.loc5_14.1 (constants.%F)]
|
||||
// CHECK:STDOUT: }
|
||||
@@ -105,13 +105,13 @@ fn Class(F:! type).Inner.G() -> i32 { return F(); }
|
||||
// CHECK:STDOUT: %return.param_patt: %pattern_type.6b6 = out_param_pattern [concrete = constants.%return.param_patt.a9a]
|
||||
// CHECK:STDOUT: %return.patt: %pattern_type.6b6 = return_slot_pattern %return.param_patt, %i32.loc13 [concrete = constants.%return.patt.e1b]
|
||||
// CHECK:STDOUT: } {
|
||||
// CHECK:STDOUT: %.loc13_14.1: type = splice_block %.loc13_14.2 [concrete = type] {
|
||||
// CHECK:STDOUT: %.loc13_13.1: type = splice_block %.loc13_13.2 [concrete = type] {
|
||||
// CHECK:STDOUT: %.Self.frozen: %type = symbolic_binding .Self [symbolic_self = constants.%.Self.frozen]
|
||||
// CHECK:STDOUT: %.loc13_14.2: type = type_literal type [concrete = type]
|
||||
// CHECK:STDOUT: %.loc13_13.2: type = type_literal type [concrete = type]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %F.loc13_11: type = symbolic_binding F, 0 [symbolic = @Class.%F.loc5_14.1 (constants.%F)]
|
||||
// CHECK:STDOUT: %i32.loc13: type = type_literal constants.%i32 [concrete = constants.%i32]
|
||||
// CHECK:STDOUT: %.loc13_33: Core.Form = init_form %i32.loc13 [concrete = constants.%.795]
|
||||
// CHECK:STDOUT: %.loc13_32: Core.Form = init_form %i32.loc13 [concrete = constants.%.795]
|
||||
// CHECK:STDOUT: %return.param.loc13: ref %i32 = out_param call_param0
|
||||
// CHECK:STDOUT: %return.loc13: ref %i32 = return_slot %return.param.loc13
|
||||
// CHECK:STDOUT: }
|
||||
@@ -192,17 +192,17 @@ fn Class(F:! type).Inner.G() -> i32 { return F(); }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: generic fn @Inner.G(@Class.%F.loc5_14.2: type) {
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT: %F.loc13_46: type = symbolic_binding F, 0 [symbolic = %F.loc13_46 (constants.%F)]
|
||||
// CHECK:STDOUT: %Inner.F.type: type = fn_type @Inner.F, @Inner(%F.loc13_46) [symbolic = %Inner.F.type (constants.%Inner.F.type)]
|
||||
// CHECK:STDOUT: %F.loc13_45: type = symbolic_binding F, 0 [symbolic = %F.loc13_45 (constants.%F)]
|
||||
// CHECK:STDOUT: %Inner.F.type: type = fn_type @Inner.F, @Inner(%F.loc13_45) [symbolic = %Inner.F.type (constants.%Inner.F.type)]
|
||||
// CHECK:STDOUT: %Inner.F: @Inner.G.%Inner.F.type (%Inner.F.type) = struct_value () [symbolic = %Inner.F (constants.%Inner.F)]
|
||||
// CHECK:STDOUT: %Inner.F.specific_fn.loc13_46.2: <specific function> = specific_function %Inner.F, @Inner.F(%F.loc13_46) [symbolic = %Inner.F.specific_fn.loc13_46.2 (constants.%Inner.F.specific_fn)]
|
||||
// CHECK:STDOUT: %Inner.F.specific_fn.loc13_45.2: <specific function> = specific_function %Inner.F, @Inner.F(%F.loc13_45) [symbolic = %Inner.F.specific_fn.loc13_45.2 (constants.%Inner.F.specific_fn)]
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn() -> out %return.param.loc13: %i32 {
|
||||
// CHECK:STDOUT: !entry:
|
||||
// CHECK:STDOUT: %.loc13_46: @Inner.G.%Inner.F.type (%Inner.F.type) = specific_constant @Inner.%Inner.F.decl, @Inner(constants.%F) [symbolic = %Inner.F (constants.%Inner.F)]
|
||||
// CHECK:STDOUT: %F.ref: @Inner.G.%Inner.F.type (%Inner.F.type) = name_ref F, %.loc13_46 [symbolic = %Inner.F (constants.%Inner.F)]
|
||||
// CHECK:STDOUT: %Inner.F.specific_fn.loc13_46.1: <specific function> = specific_function %F.ref, @Inner.F(constants.%F) [symbolic = %Inner.F.specific_fn.loc13_46.2 (constants.%Inner.F.specific_fn)]
|
||||
// CHECK:STDOUT: %Inner.F.call: init %i32 = call %Inner.F.specific_fn.loc13_46.1()
|
||||
// CHECK:STDOUT: %.loc13_45: @Inner.G.%Inner.F.type (%Inner.F.type) = specific_constant @Inner.%Inner.F.decl, @Inner(constants.%F) [symbolic = %Inner.F (constants.%Inner.F)]
|
||||
// CHECK:STDOUT: %F.ref: @Inner.G.%Inner.F.type (%Inner.F.type) = name_ref F, %.loc13_45 [symbolic = %Inner.F (constants.%Inner.F)]
|
||||
// CHECK:STDOUT: %Inner.F.specific_fn.loc13_45.1: <specific function> = specific_function %F.ref, @Inner.F(constants.%F) [symbolic = %Inner.F.specific_fn.loc13_45.2 (constants.%Inner.F.specific_fn)]
|
||||
// CHECK:STDOUT: %Inner.F.call: init %i32 = call %Inner.F.specific_fn.loc13_45.1()
|
||||
// CHECK:STDOUT: return %Inner.F.call
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !observes:
|
||||
|
||||
@@ -67,15 +67,15 @@ fn A => 0;
|
||||
|
||||
library "[[@TEST_NAME]]";
|
||||
|
||||
// CHECK:STDERR: fail_invalid_file_generic_regression_test.carbon:[[@LINE+8]]:5: error: semantics TODO: `handle invalid parse trees in `check`` [SemanticsTodo]
|
||||
// CHECK:STDERR: var x:! () = ();
|
||||
// CHECK:STDERR: ^~~~~~
|
||||
// CHECK:STDERR: fail_invalid_file_generic_regression_test.carbon:[[@LINE+8]]:13: error: semantics TODO: `handle invalid parse trees in `check`` [SemanticsTodo]
|
||||
// CHECK:STDERR: var generic x: () = ();
|
||||
// CHECK:STDERR: ^~~~~
|
||||
// CHECK:STDERR:
|
||||
// CHECK:STDERR: fail_invalid_file_generic_regression_test.carbon:[[@LINE+4]]:12: error: found `:!` pattern inside `var` pattern [NonRegularBindingInVarDecl]
|
||||
// CHECK:STDERR: var x:! () = ();
|
||||
// CHECK:STDERR: ^
|
||||
// CHECK:STDERR: fail_invalid_file_generic_regression_test.carbon:[[@LINE+4]]:19: error: found generic binding inside `var` pattern [NonRegularBindingInVarDecl]
|
||||
// CHECK:STDERR: var generic x: () = ();
|
||||
// CHECK:STDERR: ^
|
||||
// CHECK:STDERR:
|
||||
var x:! () = ();
|
||||
var generic x: () = ();
|
||||
|
||||
fn A {
|
||||
A();
|
||||
|
||||
@@ -57,23 +57,23 @@ library "[[@TEST_NAME]]";
|
||||
class C {}
|
||||
|
||||
// CHECK:STDERR: fail_only_implicit_params.carbon:[[@LINE+8]]:8: error: implicit parameters of functions must be constant [ImplictParamMustBeConstant]
|
||||
// CHECK:STDERR: fn Foo[a: C];
|
||||
// CHECK:STDERR: ^~~~
|
||||
// CHECK:STDERR: fn Foo[runtime a: C];
|
||||
// CHECK:STDERR: ^~~~~~~~~~~~
|
||||
// CHECK:STDERR:
|
||||
// CHECK:STDERR: fail_only_implicit_params.carbon:[[@LINE+4]]:1: error: semantics TODO: `function with positional parameters` [SemanticsTodo]
|
||||
// CHECK:STDERR: fn Foo[a: C];
|
||||
// CHECK:STDERR: ^~~~~~~~~~~~~
|
||||
// CHECK:STDERR: fn Foo[runtime a: C];
|
||||
// CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~
|
||||
// CHECK:STDERR:
|
||||
fn Foo[a: C];
|
||||
fn Foo[runtime a: C];
|
||||
// CHECK:STDERR: fail_only_implicit_params.carbon:[[@LINE+8]]:8: error: implicit parameters of functions must be constant [ImplictParamMustBeConstant]
|
||||
// CHECK:STDERR: fn Foo[a: (C)] {}
|
||||
// CHECK:STDERR: ^~~~~~
|
||||
// CHECK:STDERR: fn Foo[runtime a: (C)] {}
|
||||
// CHECK:STDERR: ^~~~~~~~~~~~~~
|
||||
// CHECK:STDERR:
|
||||
// CHECK:STDERR: fail_only_implicit_params.carbon:[[@LINE+4]]:1: error: semantics TODO: `function with positional parameters` [SemanticsTodo]
|
||||
// CHECK:STDERR: fn Foo[a: (C)] {}
|
||||
// CHECK:STDERR: ^~~~~~~~~~~~~~~~
|
||||
// CHECK:STDERR: fn Foo[runtime a: (C)] {}
|
||||
// CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~
|
||||
// CHECK:STDERR:
|
||||
fn Foo[a: (C)] {}
|
||||
fn Foo[runtime a: (C)] {}
|
||||
|
||||
// --- fail_raw_identifier.carbon
|
||||
|
||||
@@ -149,15 +149,15 @@ library "[[@TEST_NAME]]";
|
||||
class C {}
|
||||
alias D = C;
|
||||
|
||||
fn Foo[a:! C]();
|
||||
// CHECK:STDERR: fail_deduced_alias.carbon:[[@LINE+7]]:19: error: redeclaration syntax differs here [RedeclParamSyntaxDiffers]
|
||||
// CHECK:STDERR: fn Foo[unused a:! D]() {}
|
||||
// CHECK:STDERR: ^
|
||||
// CHECK:STDERR: fail_deduced_alias.carbon:[[@LINE-4]]:12: note: comparing with previous declaration here [RedeclParamSyntaxPrevious]
|
||||
// CHECK:STDERR: fn Foo[a:! C]();
|
||||
// CHECK:STDERR: ^
|
||||
fn Foo[a: C]();
|
||||
// CHECK:STDERR: fail_deduced_alias.carbon:[[@LINE+7]]:18: error: redeclaration syntax differs here [RedeclParamSyntaxDiffers]
|
||||
// CHECK:STDERR: fn Foo[unused a: D]() {}
|
||||
// CHECK:STDERR: ^
|
||||
// CHECK:STDERR: fail_deduced_alias.carbon:[[@LINE-4]]:11: note: comparing with previous declaration here [RedeclParamSyntaxPrevious]
|
||||
// CHECK:STDERR: fn Foo[a: C]();
|
||||
// CHECK:STDERR: ^
|
||||
// CHECK:STDERR:
|
||||
fn Foo[unused a:! D]() {}
|
||||
fn Foo[unused a: D]() {}
|
||||
|
||||
// --- todo_fail_alias_in_return.carbon
|
||||
|
||||
|
||||
+180
-180
@@ -15,18 +15,18 @@
|
||||
library "[[@TEST_NAME]]";
|
||||
|
||||
//@dump-sem-ir-begin
|
||||
fn Function(T:! Core.Copy, x: T) -> T {
|
||||
fn Function(generic T: Core.Copy, x: T) -> T {
|
||||
return x;
|
||||
}
|
||||
//@dump-sem-ir-end
|
||||
|
||||
fn CallGeneric(T:! Core.Copy, x: T) -> T {
|
||||
fn CallGeneric(generic T: Core.Copy, x: T) -> T {
|
||||
//@dump-sem-ir-begin
|
||||
return Function(T, x);
|
||||
//@dump-sem-ir-end
|
||||
}
|
||||
|
||||
fn CallGenericPtr(T:! type, x: T*) -> T* {
|
||||
fn CallGenericPtr(generic T: type, x: T*) -> T* {
|
||||
//@dump-sem-ir-begin
|
||||
return Function(T*, x);
|
||||
//@dump-sem-ir-end
|
||||
@@ -45,18 +45,18 @@ fn CallSpecific(x: C*) -> C* {
|
||||
library "[[@TEST_NAME]]";
|
||||
|
||||
//@dump-sem-ir-begin
|
||||
fn Function[T:! Core.Copy](x: T) -> T {
|
||||
fn Function[T: Core.Copy](x: T) -> T {
|
||||
return x;
|
||||
}
|
||||
//@dump-sem-ir-end
|
||||
|
||||
fn CallGeneric(T:! Core.Copy, x: T) -> T {
|
||||
fn CallGeneric(generic T: Core.Copy, x: T) -> T {
|
||||
//@dump-sem-ir-begin
|
||||
return Function(x);
|
||||
//@dump-sem-ir-end
|
||||
}
|
||||
|
||||
fn CallGenericPtr(T:! type, x: T*) -> T* {
|
||||
fn CallGenericPtr(generic T: type, x: T*) -> T* {
|
||||
//@dump-sem-ir-begin
|
||||
return Function(x);
|
||||
//@dump-sem-ir-end
|
||||
@@ -149,109 +149,109 @@ fn CallSpecific(x: C*) -> C* {
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: file {
|
||||
// CHECK:STDOUT: %Function.decl: %Function.type = fn_decl @Function [concrete = constants.%Function] {
|
||||
// CHECK:STDOUT: %T.patt.loc5_14.1: %pattern_type.e81 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc5_14.2 (constants.%T.patt.fe6)]
|
||||
// CHECK:STDOUT: %x.param_patt.loc5_29.1: @Function.%pattern_type (%pattern_type.2c66b4.2) = value_param_pattern [symbolic = %x.param_patt.loc5_29.2 (constants.%x.param_patt.1f4)]
|
||||
// CHECK:STDOUT: %x.patt.loc5_29.1: @Function.%pattern_type (%pattern_type.2c66b4.2) = at_binding_pattern x, %x.param_patt.loc5_29.1 [symbolic = %x.patt.loc5_29.2 (constants.%x.patt.f93)]
|
||||
// CHECK:STDOUT: %return.param_patt.loc5_37.1: @Function.%pattern_type (%pattern_type.2c66b4.2) = out_param_pattern [symbolic = %return.param_patt.loc5_37.2 (constants.%return.param_patt.bf4475.2)]
|
||||
// CHECK:STDOUT: %return.patt.loc5_34.1: @Function.%pattern_type (%pattern_type.2c66b4.2) = return_slot_pattern %return.param_patt.loc5_37.1, %.loc5_37.3 [symbolic = %return.patt.loc5_34.2 (constants.%return.patt.f44)]
|
||||
// CHECK:STDOUT: %T.patt.loc5_22.1: %pattern_type.e81 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc5_22.2 (constants.%T.patt.fe6)]
|
||||
// CHECK:STDOUT: %x.param_patt.loc5_36.1: @Function.%pattern_type (%pattern_type.2c66b4.2) = value_param_pattern [symbolic = %x.param_patt.loc5_36.2 (constants.%x.param_patt.1f4)]
|
||||
// CHECK:STDOUT: %x.patt.loc5_36.1: @Function.%pattern_type (%pattern_type.2c66b4.2) = at_binding_pattern x, %x.param_patt.loc5_36.1 [symbolic = %x.patt.loc5_36.2 (constants.%x.patt.f93)]
|
||||
// CHECK:STDOUT: %return.param_patt.loc5_44.1: @Function.%pattern_type (%pattern_type.2c66b4.2) = out_param_pattern [symbolic = %return.param_patt.loc5_44.2 (constants.%return.param_patt.bf4475.2)]
|
||||
// CHECK:STDOUT: %return.patt.loc5_41.1: @Function.%pattern_type (%pattern_type.2c66b4.2) = return_slot_pattern %return.param_patt.loc5_44.1, %.loc5_44.3 [symbolic = %return.patt.loc5_41.2 (constants.%return.patt.f44)]
|
||||
// CHECK:STDOUT: } {
|
||||
// CHECK:STDOUT: %T.ref.loc5_37: %Copy.type = name_ref T, %T.loc5_14.2 [symbolic = %T.loc5_14.1 (constants.%T.f84)]
|
||||
// CHECK:STDOUT: %T.as_type.loc5_37: type = facet_access_type %T.ref.loc5_37 [symbolic = %T.as_type.loc5_31.1 (constants.%T.as_type)]
|
||||
// CHECK:STDOUT: %.loc5_37.3: type = converted %T.ref.loc5_37, %T.as_type.loc5_37 [symbolic = %T.as_type.loc5_31.1 (constants.%T.as_type)]
|
||||
// CHECK:STDOUT: %.loc5_37.4: Core.Form = init_form %.loc5_37.3 [symbolic = %.loc5_37.2 (constants.%.1ce700.2)]
|
||||
// CHECK:STDOUT: %.loc5_21: type = splice_block %Copy.ref [concrete = constants.%Copy.type] {
|
||||
// CHECK:STDOUT: %T.ref.loc5_44: %Copy.type = name_ref T, %T.loc5_22.2 [symbolic = %T.loc5_22.1 (constants.%T.f84)]
|
||||
// CHECK:STDOUT: %T.as_type.loc5_44: type = facet_access_type %T.ref.loc5_44 [symbolic = %T.as_type.loc5_38.1 (constants.%T.as_type)]
|
||||
// CHECK:STDOUT: %.loc5_44.3: type = converted %T.ref.loc5_44, %T.as_type.loc5_44 [symbolic = %T.as_type.loc5_38.1 (constants.%T.as_type)]
|
||||
// CHECK:STDOUT: %.loc5_44.4: Core.Form = init_form %.loc5_44.3 [symbolic = %.loc5_44.2 (constants.%.1ce700.2)]
|
||||
// CHECK:STDOUT: %.loc5_28: type = splice_block %Copy.ref [concrete = constants.%Copy.type] {
|
||||
// CHECK:STDOUT: %.Self.frozen: %type = symbolic_binding .Self [symbolic_self = constants.%.Self.frozen]
|
||||
// CHECK:STDOUT: %Core.ref: <namespace> = name_ref Core, imports.%Core [concrete = imports.%Core]
|
||||
// CHECK:STDOUT: %Copy.ref: type = name_ref Copy, imports.%Core.Copy [concrete = constants.%Copy.type]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %T.loc5_14.2: %Copy.type = symbolic_binding T, 0 [symbolic = %T.loc5_14.1 (constants.%T.f84)]
|
||||
// CHECK:STDOUT: %x.param: @Function.%T.as_type.loc5_31.1 (%T.as_type) = value_param call_param0
|
||||
// CHECK:STDOUT: %.loc5_31.1: type = splice_block %.loc5_31.2 [symbolic = %T.as_type.loc5_31.1 (constants.%T.as_type)] {
|
||||
// CHECK:STDOUT: %T.ref.loc5_31: %Copy.type = name_ref T, %T.loc5_14.2 [symbolic = %T.loc5_14.1 (constants.%T.f84)]
|
||||
// CHECK:STDOUT: %T.as_type.loc5_31.2: type = facet_access_type %T.ref.loc5_31 [symbolic = %T.as_type.loc5_31.1 (constants.%T.as_type)]
|
||||
// CHECK:STDOUT: %.loc5_31.2: type = converted %T.ref.loc5_31, %T.as_type.loc5_31.2 [symbolic = %T.as_type.loc5_31.1 (constants.%T.as_type)]
|
||||
// CHECK:STDOUT: %T.loc5_22.2: %Copy.type = symbolic_binding T, 0 [symbolic = %T.loc5_22.1 (constants.%T.f84)]
|
||||
// CHECK:STDOUT: %x.param: @Function.%T.as_type.loc5_38.1 (%T.as_type) = value_param call_param0
|
||||
// CHECK:STDOUT: %.loc5_38.1: type = splice_block %.loc5_38.2 [symbolic = %T.as_type.loc5_38.1 (constants.%T.as_type)] {
|
||||
// CHECK:STDOUT: %T.ref.loc5_38: %Copy.type = name_ref T, %T.loc5_22.2 [symbolic = %T.loc5_22.1 (constants.%T.f84)]
|
||||
// CHECK:STDOUT: %T.as_type.loc5_38.2: type = facet_access_type %T.ref.loc5_38 [symbolic = %T.as_type.loc5_38.1 (constants.%T.as_type)]
|
||||
// CHECK:STDOUT: %.loc5_38.2: type = converted %T.ref.loc5_38, %T.as_type.loc5_38.2 [symbolic = %T.as_type.loc5_38.1 (constants.%T.as_type)]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %x: @Function.%T.as_type.loc5_31.1 (%T.as_type) = wrapper_binding x, %x.param
|
||||
// CHECK:STDOUT: %return.param: ref @Function.%T.as_type.loc5_31.1 (%T.as_type) = out_param call_param1
|
||||
// CHECK:STDOUT: %return: ref @Function.%T.as_type.loc5_31.1 (%T.as_type) = return_slot %return.param
|
||||
// CHECK:STDOUT: %x: @Function.%T.as_type.loc5_38.1 (%T.as_type) = wrapper_binding x, %x.param
|
||||
// CHECK:STDOUT: %return.param: ref @Function.%T.as_type.loc5_38.1 (%T.as_type) = out_param call_param1
|
||||
// CHECK:STDOUT: %return: ref @Function.%T.as_type.loc5_38.1 (%T.as_type) = return_slot %return.param
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: generic fn @Function(%T.loc5_14.2: %Copy.type) {
|
||||
// CHECK:STDOUT: %T.patt.loc5_14.2: %pattern_type.e81 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc5_14.2 (constants.%T.patt.fe6)]
|
||||
// CHECK:STDOUT: %T.loc5_14.1: %Copy.type = symbolic_binding T, 0 [symbolic = %T.loc5_14.1 (constants.%T.f84)]
|
||||
// CHECK:STDOUT: %T.as_type.loc5_31.1: type = facet_access_type %T.loc5_14.1 [symbolic = %T.as_type.loc5_31.1 (constants.%T.as_type)]
|
||||
// CHECK:STDOUT: %pattern_type: type = pattern_type %T.as_type.loc5_31.1 [symbolic = %pattern_type (constants.%pattern_type.2c66b4.2)]
|
||||
// CHECK:STDOUT: %x.param_patt.loc5_29.2: @Function.%pattern_type (%pattern_type.2c66b4.2) = value_param_pattern [symbolic = %x.param_patt.loc5_29.2 (constants.%x.param_patt.1f4)]
|
||||
// CHECK:STDOUT: %x.patt.loc5_29.2: @Function.%pattern_type (%pattern_type.2c66b4.2) = at_binding_pattern x, %x.param_patt.loc5_29.2 [symbolic = %x.patt.loc5_29.2 (constants.%x.patt.f93)]
|
||||
// CHECK:STDOUT: %.loc5_37.2: Core.Form = init_form %T.as_type.loc5_31.1 [symbolic = %.loc5_37.2 (constants.%.1ce700.2)]
|
||||
// CHECK:STDOUT: %return.param_patt.loc5_37.2: @Function.%pattern_type (%pattern_type.2c66b4.2) = out_param_pattern [symbolic = %return.param_patt.loc5_37.2 (constants.%return.param_patt.bf4475.2)]
|
||||
// CHECK:STDOUT: %return.patt.loc5_34.2: @Function.%pattern_type (%pattern_type.2c66b4.2) = return_slot_pattern %return.param_patt.loc5_37.2, %T.as_type.loc5_31.1 [symbolic = %return.patt.loc5_34.2 (constants.%return.patt.f44)]
|
||||
// CHECK:STDOUT: generic fn @Function(%T.loc5_22.2: %Copy.type) {
|
||||
// CHECK:STDOUT: %T.patt.loc5_22.2: %pattern_type.e81 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc5_22.2 (constants.%T.patt.fe6)]
|
||||
// CHECK:STDOUT: %T.loc5_22.1: %Copy.type = symbolic_binding T, 0 [symbolic = %T.loc5_22.1 (constants.%T.f84)]
|
||||
// CHECK:STDOUT: %T.as_type.loc5_38.1: type = facet_access_type %T.loc5_22.1 [symbolic = %T.as_type.loc5_38.1 (constants.%T.as_type)]
|
||||
// CHECK:STDOUT: %pattern_type: type = pattern_type %T.as_type.loc5_38.1 [symbolic = %pattern_type (constants.%pattern_type.2c66b4.2)]
|
||||
// CHECK:STDOUT: %x.param_patt.loc5_36.2: @Function.%pattern_type (%pattern_type.2c66b4.2) = value_param_pattern [symbolic = %x.param_patt.loc5_36.2 (constants.%x.param_patt.1f4)]
|
||||
// CHECK:STDOUT: %x.patt.loc5_36.2: @Function.%pattern_type (%pattern_type.2c66b4.2) = at_binding_pattern x, %x.param_patt.loc5_36.2 [symbolic = %x.patt.loc5_36.2 (constants.%x.patt.f93)]
|
||||
// CHECK:STDOUT: %.loc5_44.2: Core.Form = init_form %T.as_type.loc5_38.1 [symbolic = %.loc5_44.2 (constants.%.1ce700.2)]
|
||||
// CHECK:STDOUT: %return.param_patt.loc5_44.2: @Function.%pattern_type (%pattern_type.2c66b4.2) = out_param_pattern [symbolic = %return.param_patt.loc5_44.2 (constants.%return.param_patt.bf4475.2)]
|
||||
// CHECK:STDOUT: %return.patt.loc5_41.2: @Function.%pattern_type (%pattern_type.2c66b4.2) = return_slot_pattern %return.param_patt.loc5_44.2, %T.as_type.loc5_38.1 [symbolic = %return.patt.loc5_41.2 (constants.%return.patt.f44)]
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT: %require_complete: <witness> = require_complete_type %T.as_type.loc5_31.1 [symbolic = %require_complete (constants.%require_complete.d83)]
|
||||
// CHECK:STDOUT: %Copy.WithSelf.Op.type: type = fn_type @Copy.WithSelf.Op, @Copy.WithSelf(%T.loc5_14.1) [symbolic = %Copy.WithSelf.Op.type (constants.%Copy.WithSelf.Op.type.c85f21.2)]
|
||||
// CHECK:STDOUT: %.loc6_10.3: type = fn_type_with_self_type %Copy.WithSelf.Op.type, %T.loc5_14.1 [symbolic = %.loc6_10.3 (constants.%.c29)]
|
||||
// CHECK:STDOUT: %Copy.lookup_impl_witness: <witness> = lookup_impl_witness %T.loc5_14.1, @Copy [symbolic = %Copy.lookup_impl_witness (constants.%Copy.lookup_impl_witness.d9c)]
|
||||
// CHECK:STDOUT: %require_complete: <witness> = require_complete_type %T.as_type.loc5_38.1 [symbolic = %require_complete (constants.%require_complete.d83)]
|
||||
// CHECK:STDOUT: %Copy.WithSelf.Op.type: type = fn_type @Copy.WithSelf.Op, @Copy.WithSelf(%T.loc5_22.1) [symbolic = %Copy.WithSelf.Op.type (constants.%Copy.WithSelf.Op.type.c85f21.2)]
|
||||
// CHECK:STDOUT: %.loc6_10.3: type = fn_type_with_self_type %Copy.WithSelf.Op.type, %T.loc5_22.1 [symbolic = %.loc6_10.3 (constants.%.c29)]
|
||||
// CHECK:STDOUT: %Copy.lookup_impl_witness: <witness> = lookup_impl_witness %T.loc5_22.1, @Copy [symbolic = %Copy.lookup_impl_witness (constants.%Copy.lookup_impl_witness.d9c)]
|
||||
// CHECK:STDOUT: %impl.elem0.loc6_10.2: @Function.%.loc6_10.3 (%.c29) = impl_witness_access %Copy.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc6_10.2 (constants.%impl.elem0.bd2)]
|
||||
// CHECK:STDOUT: %specific_impl_fn.loc6_10.2: <specific function> = specific_impl_function %impl.elem0.loc6_10.2, @Copy.WithSelf.Op(%T.loc5_14.1) [symbolic = %specific_impl_fn.loc6_10.2 (constants.%specific_impl_fn.e2a)]
|
||||
// CHECK:STDOUT: %specific_impl_fn.loc6_10.2: <specific function> = specific_impl_function %impl.elem0.loc6_10.2, @Copy.WithSelf.Op(%T.loc5_22.1) [symbolic = %specific_impl_fn.loc6_10.2 (constants.%specific_impl_fn.e2a)]
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn(%x.param: @Function.%T.as_type.loc5_31.1 (%T.as_type)) -> out %return.param: @Function.%T.as_type.loc5_31.1 (%T.as_type) {
|
||||
// CHECK:STDOUT: fn(%x.param: @Function.%T.as_type.loc5_38.1 (%T.as_type)) -> out %return.param: @Function.%T.as_type.loc5_38.1 (%T.as_type) {
|
||||
// CHECK:STDOUT: !entry:
|
||||
// CHECK:STDOUT: %x.ref: @Function.%T.as_type.loc5_31.1 (%T.as_type) = name_ref x, %x
|
||||
// CHECK:STDOUT: %x.ref: @Function.%T.as_type.loc5_38.1 (%T.as_type) = name_ref x, %x
|
||||
// CHECK:STDOUT: %impl.elem0.loc6_10.1: @Function.%.loc6_10.3 (%.c29) = impl_witness_access constants.%Copy.lookup_impl_witness.d9c, element0 [symbolic = %impl.elem0.loc6_10.2 (constants.%impl.elem0.bd2)]
|
||||
// CHECK:STDOUT: %bound_method.loc6_10.1: <bound method> = bound_method %x.ref, %impl.elem0.loc6_10.1
|
||||
// CHECK:STDOUT: %.loc6_10.1: %Copy.type = converted constants.%T.as_type, constants.%T.f84 [symbolic = %T.loc5_14.1 (constants.%T.f84)]
|
||||
// CHECK:STDOUT: %.loc6_10.2: %Copy.type = converted constants.%T.as_type, constants.%T.f84 [symbolic = %T.loc5_14.1 (constants.%T.f84)]
|
||||
// CHECK:STDOUT: %.loc6_10.1: %Copy.type = converted constants.%T.as_type, constants.%T.f84 [symbolic = %T.loc5_22.1 (constants.%T.f84)]
|
||||
// CHECK:STDOUT: %.loc6_10.2: %Copy.type = converted constants.%T.as_type, constants.%T.f84 [symbolic = %T.loc5_22.1 (constants.%T.f84)]
|
||||
// CHECK:STDOUT: %specific_impl_fn.loc6_10.1: <specific function> = specific_impl_function %impl.elem0.loc6_10.1, @Copy.WithSelf.Op(constants.%T.f84) [symbolic = %specific_impl_fn.loc6_10.2 (constants.%specific_impl_fn.e2a)]
|
||||
// CHECK:STDOUT: %bound_method.loc6_10.2: <bound method> = bound_method %x.ref, %specific_impl_fn.loc6_10.1
|
||||
// CHECK:STDOUT: %.loc5_37.1: ref @Function.%T.as_type.loc5_31.1 (%T.as_type) = splice_block %return.param {}
|
||||
// CHECK:STDOUT: %Copy.WithSelf.Op.call: init @Function.%T.as_type.loc5_31.1 (%T.as_type) to %.loc5_37.1 = call %bound_method.loc6_10.2(%x.ref)
|
||||
// CHECK:STDOUT: %.loc5_44.1: ref @Function.%T.as_type.loc5_38.1 (%T.as_type) = splice_block %return.param {}
|
||||
// CHECK:STDOUT: %Copy.WithSelf.Op.call: init @Function.%T.as_type.loc5_38.1 (%T.as_type) to %.loc5_44.1 = call %bound_method.loc6_10.2(%x.ref)
|
||||
// CHECK:STDOUT: return %Copy.WithSelf.Op.call to %return.param
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !observes:
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: generic fn @CallGeneric(%T.loc10_17.2: %Copy.type) {
|
||||
// CHECK:STDOUT: generic fn @CallGeneric(%T.loc10_25.2: %Copy.type) {
|
||||
// CHECK:STDOUT: <elided>
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT: <elided>
|
||||
// CHECK:STDOUT: %Function.specific_fn.loc12_10.2: <specific function> = specific_function constants.%Function, @Function(%T.loc10_17.1) [symbolic = %Function.specific_fn.loc12_10.2 (constants.%Function.specific_fn.4db)]
|
||||
// CHECK:STDOUT: %Function.specific_fn.loc12_10.2: <specific function> = specific_function constants.%Function, @Function(%T.loc10_25.1) [symbolic = %Function.specific_fn.loc12_10.2 (constants.%Function.specific_fn.4db)]
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn(%x.param: @CallGeneric.%T.as_type.loc10_34.1 (%T.as_type)) -> out %return.param: @CallGeneric.%T.as_type.loc10_34.1 (%T.as_type) {
|
||||
// CHECK:STDOUT: fn(%x.param: @CallGeneric.%T.as_type.loc10_41.1 (%T.as_type)) -> out %return.param: @CallGeneric.%T.as_type.loc10_41.1 (%T.as_type) {
|
||||
// CHECK:STDOUT: !entry:
|
||||
// CHECK:STDOUT: %Function.ref: %Function.type = name_ref Function, file.%Function.decl [concrete = constants.%Function]
|
||||
// CHECK:STDOUT: %T.ref.loc12: %Copy.type = name_ref T, %T.loc10_17.2 [symbolic = %T.loc10_17.1 (constants.%T.f84)]
|
||||
// CHECK:STDOUT: %x.ref: @CallGeneric.%T.as_type.loc10_34.1 (%T.as_type) = name_ref x, %x
|
||||
// CHECK:STDOUT: %.loc12_23.1: %Copy.type = converted constants.%T.as_type, constants.%T.f84 [symbolic = %T.loc10_17.1 (constants.%T.f84)]
|
||||
// CHECK:STDOUT: %.loc12_23.2: %Copy.type = converted constants.%T.as_type, constants.%T.f84 [symbolic = %T.loc10_17.1 (constants.%T.f84)]
|
||||
// CHECK:STDOUT: %T.ref.loc12: %Copy.type = name_ref T, %T.loc10_25.2 [symbolic = %T.loc10_25.1 (constants.%T.f84)]
|
||||
// CHECK:STDOUT: %x.ref: @CallGeneric.%T.as_type.loc10_41.1 (%T.as_type) = name_ref x, %x
|
||||
// CHECK:STDOUT: %.loc12_23.1: %Copy.type = converted constants.%T.as_type, constants.%T.f84 [symbolic = %T.loc10_25.1 (constants.%T.f84)]
|
||||
// CHECK:STDOUT: %.loc12_23.2: %Copy.type = converted constants.%T.as_type, constants.%T.f84 [symbolic = %T.loc10_25.1 (constants.%T.f84)]
|
||||
// CHECK:STDOUT: %Function.specific_fn.loc12_10.1: <specific function> = specific_function %Function.ref, @Function(constants.%T.f84) [symbolic = %Function.specific_fn.loc12_10.2 (constants.%Function.specific_fn.4db)]
|
||||
// CHECK:STDOUT: <elided>
|
||||
// CHECK:STDOUT: %Function.call: init @CallGeneric.%T.as_type.loc10_34.1 (%T.as_type) to %.loc10_40.1 = call %Function.specific_fn.loc12_10.1(%x.ref)
|
||||
// CHECK:STDOUT: %Function.call: init @CallGeneric.%T.as_type.loc10_41.1 (%T.as_type) to %.loc10_47.1 = call %Function.specific_fn.loc12_10.1(%x.ref)
|
||||
// CHECK:STDOUT: return %Function.call to %return.param
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !observes:
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: generic fn @CallGenericPtr(%T.loc16_20.2: type) {
|
||||
// CHECK:STDOUT: generic fn @CallGenericPtr(%T.loc16_28.2: type) {
|
||||
// CHECK:STDOUT: <elided>
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT: <elided>
|
||||
// CHECK:STDOUT: %.loc18_24.4: require_specific_def_type = require_specific_def @ptr.as.Copy.impl(%T.loc16_20.1) [symbolic = %.loc18_24.4 (constants.%.0e9)]
|
||||
// CHECK:STDOUT: %Copy.lookup_impl_witness: <witness> = lookup_impl_witness %ptr.loc16_33.1, @Copy [symbolic = %Copy.lookup_impl_witness (constants.%Copy.lookup_impl_witness.1da)]
|
||||
// CHECK:STDOUT: %Copy.facet.loc18_24.4: %Copy.type = facet_value %ptr.loc16_33.1, (%Copy.lookup_impl_witness) [symbolic = %Copy.facet.loc18_24.4 (constants.%Copy.facet.302)]
|
||||
// CHECK:STDOUT: %.loc18_24.4: require_specific_def_type = require_specific_def @ptr.as.Copy.impl(%T.loc16_28.1) [symbolic = %.loc18_24.4 (constants.%.0e9)]
|
||||
// CHECK:STDOUT: %Copy.lookup_impl_witness: <witness> = lookup_impl_witness %ptr.loc16_40.1, @Copy [symbolic = %Copy.lookup_impl_witness (constants.%Copy.lookup_impl_witness.1da)]
|
||||
// CHECK:STDOUT: %Copy.facet.loc18_24.4: %Copy.type = facet_value %ptr.loc16_40.1, (%Copy.lookup_impl_witness) [symbolic = %Copy.facet.loc18_24.4 (constants.%Copy.facet.302)]
|
||||
// CHECK:STDOUT: %Function.specific_fn.loc18_10.2: <specific function> = specific_function constants.%Function, @Function(%Copy.facet.loc18_24.4) [symbolic = %Function.specific_fn.loc18_10.2 (constants.%Function.specific_fn.162)]
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn(%x.param: @CallGenericPtr.%ptr.loc16_33.1 (%ptr.e8f)) -> out %return.param: @CallGenericPtr.%ptr.loc16_33.1 (%ptr.e8f) {
|
||||
// CHECK:STDOUT: fn(%x.param: @CallGenericPtr.%ptr.loc16_40.1 (%ptr.e8f)) -> out %return.param: @CallGenericPtr.%ptr.loc16_40.1 (%ptr.e8f) {
|
||||
// CHECK:STDOUT: !entry:
|
||||
// CHECK:STDOUT: %Function.ref: %Function.type = name_ref Function, file.%Function.decl [concrete = constants.%Function]
|
||||
// CHECK:STDOUT: %T.ref.loc18: type = name_ref T, %T.loc16_20.2 [symbolic = %T.loc16_20.1 (constants.%T.67d)]
|
||||
// CHECK:STDOUT: %ptr.loc18: type = ptr_type %T.ref.loc18 [symbolic = %ptr.loc16_33.1 (constants.%ptr.e8f)]
|
||||
// CHECK:STDOUT: %x.ref: @CallGenericPtr.%ptr.loc16_33.1 (%ptr.e8f) = name_ref x, %x
|
||||
// CHECK:STDOUT: %T.ref.loc18: type = name_ref T, %T.loc16_28.2 [symbolic = %T.loc16_28.1 (constants.%T.67d)]
|
||||
// CHECK:STDOUT: %ptr.loc18: type = ptr_type %T.ref.loc18 [symbolic = %ptr.loc16_40.1 (constants.%ptr.e8f)]
|
||||
// CHECK:STDOUT: %x.ref: @CallGenericPtr.%ptr.loc16_40.1 (%ptr.e8f) = name_ref x, %x
|
||||
// CHECK:STDOUT: %Copy.facet.loc18_24.1: %Copy.type = facet_value %ptr.loc18, (constants.%Copy.lookup_impl_witness.1da) [symbolic = %Copy.facet.loc18_24.4 (constants.%Copy.facet.302)]
|
||||
// CHECK:STDOUT: %.loc18_24.1: %Copy.type = converted %ptr.loc18, %Copy.facet.loc18_24.1 [symbolic = %Copy.facet.loc18_24.4 (constants.%Copy.facet.302)]
|
||||
// CHECK:STDOUT: %Copy.facet.loc18_24.2: %Copy.type = facet_value constants.%ptr.e8f, (constants.%Copy.lookup_impl_witness.1da) [symbolic = %Copy.facet.loc18_24.4 (constants.%Copy.facet.302)]
|
||||
@@ -259,7 +259,7 @@ fn CallSpecific(x: C*) -> C* {
|
||||
// CHECK:STDOUT: %Copy.facet.loc18_24.3: %Copy.type = facet_value constants.%ptr.e8f, (constants.%Copy.lookup_impl_witness.1da) [symbolic = %Copy.facet.loc18_24.4 (constants.%Copy.facet.302)]
|
||||
// CHECK:STDOUT: %.loc18_24.3: %Copy.type = converted constants.%ptr.e8f, %Copy.facet.loc18_24.3 [symbolic = %Copy.facet.loc18_24.4 (constants.%Copy.facet.302)]
|
||||
// CHECK:STDOUT: %Function.specific_fn.loc18_10.1: <specific function> = specific_function %Function.ref, @Function(constants.%Copy.facet.302) [symbolic = %Function.specific_fn.loc18_10.2 (constants.%Function.specific_fn.162)]
|
||||
// CHECK:STDOUT: %Function.call: init @CallGenericPtr.%ptr.loc16_33.1 (%ptr.e8f) = call %Function.specific_fn.loc18_10.1(%x.ref)
|
||||
// CHECK:STDOUT: %Function.call: init @CallGenericPtr.%ptr.loc16_40.1 (%ptr.e8f) = call %Function.specific_fn.loc18_10.1(%x.ref)
|
||||
// CHECK:STDOUT: return %Function.call
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !observes:
|
||||
@@ -286,15 +286,15 @@ fn CallSpecific(x: C*) -> C* {
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific @Function(constants.%T.f84) {
|
||||
// CHECK:STDOUT: %T.patt.loc5_14.2 => constants.%T.patt.fe6
|
||||
// CHECK:STDOUT: %T.loc5_14.1 => constants.%T.f84
|
||||
// CHECK:STDOUT: %T.as_type.loc5_31.1 => constants.%T.as_type
|
||||
// CHECK:STDOUT: %T.patt.loc5_22.2 => constants.%T.patt.fe6
|
||||
// CHECK:STDOUT: %T.loc5_22.1 => constants.%T.f84
|
||||
// CHECK:STDOUT: %T.as_type.loc5_38.1 => constants.%T.as_type
|
||||
// CHECK:STDOUT: %pattern_type => constants.%pattern_type.2c66b4.2
|
||||
// CHECK:STDOUT: %x.param_patt.loc5_29.2 => constants.%x.param_patt.1f4
|
||||
// CHECK:STDOUT: %x.patt.loc5_29.2 => constants.%x.patt.f93
|
||||
// CHECK:STDOUT: %.loc5_37.2 => constants.%.1ce700.2
|
||||
// CHECK:STDOUT: %return.param_patt.loc5_37.2 => constants.%return.param_patt.bf4475.2
|
||||
// CHECK:STDOUT: %return.patt.loc5_34.2 => constants.%return.patt.f44
|
||||
// CHECK:STDOUT: %x.param_patt.loc5_36.2 => constants.%x.param_patt.1f4
|
||||
// CHECK:STDOUT: %x.patt.loc5_36.2 => constants.%x.patt.f93
|
||||
// CHECK:STDOUT: %.loc5_44.2 => constants.%.1ce700.2
|
||||
// CHECK:STDOUT: %return.param_patt.loc5_44.2 => constants.%return.param_patt.bf4475.2
|
||||
// CHECK:STDOUT: %return.patt.loc5_41.2 => constants.%return.patt.f44
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT: %require_complete => constants.%require_complete.d83
|
||||
@@ -306,39 +306,39 @@ fn CallSpecific(x: C*) -> C* {
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific @CallGeneric(constants.%T.f84) {
|
||||
// CHECK:STDOUT: %T.patt.loc10_17.2 => constants.%T.patt.fe6
|
||||
// CHECK:STDOUT: %T.loc10_17.1 => constants.%T.f84
|
||||
// CHECK:STDOUT: %T.as_type.loc10_34.1 => constants.%T.as_type
|
||||
// CHECK:STDOUT: %T.patt.loc10_25.2 => constants.%T.patt.fe6
|
||||
// CHECK:STDOUT: %T.loc10_25.1 => constants.%T.f84
|
||||
// CHECK:STDOUT: %T.as_type.loc10_41.1 => constants.%T.as_type
|
||||
// CHECK:STDOUT: %pattern_type => constants.%pattern_type.2c66b4.2
|
||||
// CHECK:STDOUT: %x.param_patt.loc10_32.2 => constants.%x.param_patt.1f4
|
||||
// CHECK:STDOUT: %x.patt.loc10_32.2 => constants.%x.patt.f93
|
||||
// CHECK:STDOUT: %.loc10_40.2 => constants.%.1ce700.2
|
||||
// CHECK:STDOUT: %return.param_patt.loc10_40.2 => constants.%return.param_patt.bf4475.2
|
||||
// CHECK:STDOUT: %return.patt.loc10_37.2 => constants.%return.patt.f44
|
||||
// CHECK:STDOUT: %x.param_patt.loc10_39.2 => constants.%x.param_patt.1f4
|
||||
// CHECK:STDOUT: %x.patt.loc10_39.2 => constants.%x.patt.f93
|
||||
// CHECK:STDOUT: %.loc10_47.2 => constants.%.1ce700.2
|
||||
// CHECK:STDOUT: %return.param_patt.loc10_47.2 => constants.%return.param_patt.bf4475.2
|
||||
// CHECK:STDOUT: %return.patt.loc10_44.2 => constants.%return.patt.f44
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific @CallGenericPtr(constants.%T.67d) {
|
||||
// CHECK:STDOUT: %T.patt.loc16_20.2 => constants.%T.patt.d47
|
||||
// CHECK:STDOUT: %T.loc16_20.1 => constants.%T.67d
|
||||
// CHECK:STDOUT: %ptr.loc16_33.1 => constants.%ptr.e8f
|
||||
// CHECK:STDOUT: %T.patt.loc16_28.2 => constants.%T.patt.d47
|
||||
// CHECK:STDOUT: %T.loc16_28.1 => constants.%T.67d
|
||||
// CHECK:STDOUT: %ptr.loc16_40.1 => constants.%ptr.e8f
|
||||
// CHECK:STDOUT: %pattern_type => constants.%pattern_type.4f4
|
||||
// CHECK:STDOUT: %x.param_patt.loc16_30.2 => constants.%x.param_patt.b5c
|
||||
// CHECK:STDOUT: %x.patt.loc16_30.2 => constants.%x.patt.b28
|
||||
// CHECK:STDOUT: %.loc16_40.1 => constants.%.cb6
|
||||
// CHECK:STDOUT: %return.param_patt.loc16_40.2 => constants.%return.param_patt.27f
|
||||
// CHECK:STDOUT: %return.patt.loc16_36.2 => constants.%return.patt.d67
|
||||
// CHECK:STDOUT: %x.param_patt.loc16_37.2 => constants.%x.param_patt.b5c
|
||||
// CHECK:STDOUT: %x.patt.loc16_37.2 => constants.%x.patt.b28
|
||||
// CHECK:STDOUT: %.loc16_47.1 => constants.%.cb6
|
||||
// CHECK:STDOUT: %return.param_patt.loc16_47.2 => constants.%return.param_patt.27f
|
||||
// CHECK:STDOUT: %return.patt.loc16_43.2 => constants.%return.patt.d67
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific @Function(constants.%Copy.facet.302) {
|
||||
// CHECK:STDOUT: %T.patt.loc5_14.2 => constants.%T.patt.fe6
|
||||
// CHECK:STDOUT: %T.loc5_14.1 => constants.%Copy.facet.302
|
||||
// CHECK:STDOUT: %T.as_type.loc5_31.1 => constants.%ptr.e8f
|
||||
// CHECK:STDOUT: %T.patt.loc5_22.2 => constants.%T.patt.fe6
|
||||
// CHECK:STDOUT: %T.loc5_22.1 => constants.%Copy.facet.302
|
||||
// CHECK:STDOUT: %T.as_type.loc5_38.1 => constants.%ptr.e8f
|
||||
// CHECK:STDOUT: %pattern_type => constants.%pattern_type.4f4
|
||||
// CHECK:STDOUT: %x.param_patt.loc5_29.2 => constants.%x.param_patt.b5c
|
||||
// CHECK:STDOUT: %x.patt.loc5_29.2 => constants.%x.patt.b28
|
||||
// CHECK:STDOUT: %.loc5_37.2 => constants.%.cb6
|
||||
// CHECK:STDOUT: %return.param_patt.loc5_37.2 => constants.%return.param_patt.27f
|
||||
// CHECK:STDOUT: %return.patt.loc5_34.2 => constants.%return.patt.d67
|
||||
// CHECK:STDOUT: %x.param_patt.loc5_36.2 => constants.%x.param_patt.b5c
|
||||
// CHECK:STDOUT: %x.patt.loc5_36.2 => constants.%x.patt.b28
|
||||
// CHECK:STDOUT: %.loc5_44.2 => constants.%.cb6
|
||||
// CHECK:STDOUT: %return.param_patt.loc5_44.2 => constants.%return.param_patt.27f
|
||||
// CHECK:STDOUT: %return.patt.loc5_41.2 => constants.%return.patt.d67
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT: %require_complete => constants.%require_complete.ef1
|
||||
@@ -350,15 +350,15 @@ fn CallSpecific(x: C*) -> C* {
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific @Function(constants.%Copy.facet.3f0) {
|
||||
// CHECK:STDOUT: %T.patt.loc5_14.2 => constants.%T.patt.fe6
|
||||
// CHECK:STDOUT: %T.loc5_14.1 => constants.%Copy.facet.3f0
|
||||
// CHECK:STDOUT: %T.as_type.loc5_31.1 => constants.%ptr.6b6
|
||||
// CHECK:STDOUT: %T.patt.loc5_22.2 => constants.%T.patt.fe6
|
||||
// CHECK:STDOUT: %T.loc5_22.1 => constants.%Copy.facet.3f0
|
||||
// CHECK:STDOUT: %T.as_type.loc5_38.1 => constants.%ptr.6b6
|
||||
// CHECK:STDOUT: %pattern_type => constants.%pattern_type.fcb
|
||||
// CHECK:STDOUT: %x.param_patt.loc5_29.2 => constants.%x.param_patt.503
|
||||
// CHECK:STDOUT: %x.patt.loc5_29.2 => constants.%x.patt.eca
|
||||
// CHECK:STDOUT: %.loc5_37.2 => constants.%.8fa
|
||||
// CHECK:STDOUT: %return.param_patt.loc5_37.2 => constants.%return.param_patt.ada
|
||||
// CHECK:STDOUT: %return.patt.loc5_34.2 => constants.%return.patt.783
|
||||
// CHECK:STDOUT: %x.param_patt.loc5_36.2 => constants.%x.param_patt.503
|
||||
// CHECK:STDOUT: %x.patt.loc5_36.2 => constants.%x.patt.eca
|
||||
// CHECK:STDOUT: %.loc5_44.2 => constants.%.8fa
|
||||
// CHECK:STDOUT: %return.param_patt.loc5_44.2 => constants.%return.param_patt.ada
|
||||
// CHECK:STDOUT: %return.patt.loc5_41.2 => constants.%return.patt.783
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT: %require_complete => constants.%complete_type.bf9
|
||||
@@ -448,111 +448,111 @@ fn CallSpecific(x: C*) -> C* {
|
||||
// CHECK:STDOUT: file {
|
||||
// CHECK:STDOUT: %Function.decl: %Function.type = fn_decl @Function [concrete = constants.%Function] {
|
||||
// CHECK:STDOUT: %T.patt.loc5_14.1: %pattern_type.e81 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc5_14.2 (constants.%T.patt.fe6)]
|
||||
// CHECK:STDOUT: %x.param_patt.loc5_29.1: @Function.%pattern_type (%pattern_type.2c66b4.2) = value_param_pattern [symbolic = %x.param_patt.loc5_29.2 (constants.%x.param_patt.1f4)]
|
||||
// CHECK:STDOUT: %x.patt.loc5_29.1: @Function.%pattern_type (%pattern_type.2c66b4.2) = at_binding_pattern x, %x.param_patt.loc5_29.1 [symbolic = %x.patt.loc5_29.2 (constants.%x.patt.f93)]
|
||||
// CHECK:STDOUT: %return.param_patt.loc5_37.1: @Function.%pattern_type (%pattern_type.2c66b4.2) = out_param_pattern [symbolic = %return.param_patt.loc5_37.2 (constants.%return.param_patt.bf4475.2)]
|
||||
// CHECK:STDOUT: %return.patt.loc5_34.1: @Function.%pattern_type (%pattern_type.2c66b4.2) = return_slot_pattern %return.param_patt.loc5_37.1, %.loc5_37.3 [symbolic = %return.patt.loc5_34.2 (constants.%return.patt.f44)]
|
||||
// CHECK:STDOUT: %x.param_patt.loc5_28.1: @Function.%pattern_type (%pattern_type.2c66b4.2) = value_param_pattern [symbolic = %x.param_patt.loc5_28.2 (constants.%x.param_patt.1f4)]
|
||||
// CHECK:STDOUT: %x.patt.loc5_28.1: @Function.%pattern_type (%pattern_type.2c66b4.2) = at_binding_pattern x, %x.param_patt.loc5_28.1 [symbolic = %x.patt.loc5_28.2 (constants.%x.patt.f93)]
|
||||
// CHECK:STDOUT: %return.param_patt.loc5_36.1: @Function.%pattern_type (%pattern_type.2c66b4.2) = out_param_pattern [symbolic = %return.param_patt.loc5_36.2 (constants.%return.param_patt.bf4475.2)]
|
||||
// CHECK:STDOUT: %return.patt.loc5_33.1: @Function.%pattern_type (%pattern_type.2c66b4.2) = return_slot_pattern %return.param_patt.loc5_36.1, %.loc5_36.3 [symbolic = %return.patt.loc5_33.2 (constants.%return.patt.f44)]
|
||||
// CHECK:STDOUT: } {
|
||||
// CHECK:STDOUT: %T.ref.loc5_37: %Copy.type = name_ref T, %T.loc5_14.2 [symbolic = %T.loc5_14.1 (constants.%T.f84)]
|
||||
// CHECK:STDOUT: %T.as_type.loc5_37: type = facet_access_type %T.ref.loc5_37 [symbolic = %T.as_type.loc5_31.1 (constants.%T.as_type)]
|
||||
// CHECK:STDOUT: %.loc5_37.3: type = converted %T.ref.loc5_37, %T.as_type.loc5_37 [symbolic = %T.as_type.loc5_31.1 (constants.%T.as_type)]
|
||||
// CHECK:STDOUT: %.loc5_37.4: Core.Form = init_form %.loc5_37.3 [symbolic = %.loc5_37.2 (constants.%.1ce700.2)]
|
||||
// CHECK:STDOUT: %.loc5_21: type = splice_block %Copy.ref [concrete = constants.%Copy.type] {
|
||||
// CHECK:STDOUT: %T.ref.loc5_36: %Copy.type = name_ref T, %T.loc5_14.2 [symbolic = %T.loc5_14.1 (constants.%T.f84)]
|
||||
// CHECK:STDOUT: %T.as_type.loc5_36: type = facet_access_type %T.ref.loc5_36 [symbolic = %T.as_type.loc5_30.1 (constants.%T.as_type)]
|
||||
// CHECK:STDOUT: %.loc5_36.3: type = converted %T.ref.loc5_36, %T.as_type.loc5_36 [symbolic = %T.as_type.loc5_30.1 (constants.%T.as_type)]
|
||||
// CHECK:STDOUT: %.loc5_36.4: Core.Form = init_form %.loc5_36.3 [symbolic = %.loc5_36.2 (constants.%.1ce700.2)]
|
||||
// CHECK:STDOUT: %.loc5_20: type = splice_block %Copy.ref [concrete = constants.%Copy.type] {
|
||||
// CHECK:STDOUT: %.Self.frozen: %type = symbolic_binding .Self [symbolic_self = constants.%.Self.frozen]
|
||||
// CHECK:STDOUT: %Core.ref: <namespace> = name_ref Core, imports.%Core [concrete = imports.%Core]
|
||||
// CHECK:STDOUT: %Copy.ref: type = name_ref Copy, imports.%Core.Copy [concrete = constants.%Copy.type]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %T.loc5_14.2: %Copy.type = symbolic_binding T, 0 [symbolic = %T.loc5_14.1 (constants.%T.f84)]
|
||||
// CHECK:STDOUT: %x.param: @Function.%T.as_type.loc5_31.1 (%T.as_type) = value_param call_param0
|
||||
// CHECK:STDOUT: %.loc5_31.1: type = splice_block %.loc5_31.2 [symbolic = %T.as_type.loc5_31.1 (constants.%T.as_type)] {
|
||||
// CHECK:STDOUT: %T.ref.loc5_31: %Copy.type = name_ref T, %T.loc5_14.2 [symbolic = %T.loc5_14.1 (constants.%T.f84)]
|
||||
// CHECK:STDOUT: %T.as_type.loc5_31.2: type = facet_access_type %T.ref.loc5_31 [symbolic = %T.as_type.loc5_31.1 (constants.%T.as_type)]
|
||||
// CHECK:STDOUT: %.loc5_31.2: type = converted %T.ref.loc5_31, %T.as_type.loc5_31.2 [symbolic = %T.as_type.loc5_31.1 (constants.%T.as_type)]
|
||||
// CHECK:STDOUT: %x.param: @Function.%T.as_type.loc5_30.1 (%T.as_type) = value_param call_param0
|
||||
// CHECK:STDOUT: %.loc5_30.1: type = splice_block %.loc5_30.2 [symbolic = %T.as_type.loc5_30.1 (constants.%T.as_type)] {
|
||||
// CHECK:STDOUT: %T.ref.loc5_30: %Copy.type = name_ref T, %T.loc5_14.2 [symbolic = %T.loc5_14.1 (constants.%T.f84)]
|
||||
// CHECK:STDOUT: %T.as_type.loc5_30.2: type = facet_access_type %T.ref.loc5_30 [symbolic = %T.as_type.loc5_30.1 (constants.%T.as_type)]
|
||||
// CHECK:STDOUT: %.loc5_30.2: type = converted %T.ref.loc5_30, %T.as_type.loc5_30.2 [symbolic = %T.as_type.loc5_30.1 (constants.%T.as_type)]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %x: @Function.%T.as_type.loc5_31.1 (%T.as_type) = wrapper_binding x, %x.param
|
||||
// CHECK:STDOUT: %return.param: ref @Function.%T.as_type.loc5_31.1 (%T.as_type) = out_param call_param1
|
||||
// CHECK:STDOUT: %return: ref @Function.%T.as_type.loc5_31.1 (%T.as_type) = return_slot %return.param
|
||||
// CHECK:STDOUT: %x: @Function.%T.as_type.loc5_30.1 (%T.as_type) = wrapper_binding x, %x.param
|
||||
// CHECK:STDOUT: %return.param: ref @Function.%T.as_type.loc5_30.1 (%T.as_type) = out_param call_param1
|
||||
// CHECK:STDOUT: %return: ref @Function.%T.as_type.loc5_30.1 (%T.as_type) = return_slot %return.param
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: generic fn @Function(%T.loc5_14.2: %Copy.type) {
|
||||
// CHECK:STDOUT: %T.patt.loc5_14.2: %pattern_type.e81 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc5_14.2 (constants.%T.patt.fe6)]
|
||||
// CHECK:STDOUT: %T.loc5_14.1: %Copy.type = symbolic_binding T, 0 [symbolic = %T.loc5_14.1 (constants.%T.f84)]
|
||||
// CHECK:STDOUT: %T.as_type.loc5_31.1: type = facet_access_type %T.loc5_14.1 [symbolic = %T.as_type.loc5_31.1 (constants.%T.as_type)]
|
||||
// CHECK:STDOUT: %pattern_type: type = pattern_type %T.as_type.loc5_31.1 [symbolic = %pattern_type (constants.%pattern_type.2c66b4.2)]
|
||||
// CHECK:STDOUT: %x.param_patt.loc5_29.2: @Function.%pattern_type (%pattern_type.2c66b4.2) = value_param_pattern [symbolic = %x.param_patt.loc5_29.2 (constants.%x.param_patt.1f4)]
|
||||
// CHECK:STDOUT: %x.patt.loc5_29.2: @Function.%pattern_type (%pattern_type.2c66b4.2) = at_binding_pattern x, %x.param_patt.loc5_29.2 [symbolic = %x.patt.loc5_29.2 (constants.%x.patt.f93)]
|
||||
// CHECK:STDOUT: %.loc5_37.2: Core.Form = init_form %T.as_type.loc5_31.1 [symbolic = %.loc5_37.2 (constants.%.1ce700.2)]
|
||||
// CHECK:STDOUT: %return.param_patt.loc5_37.2: @Function.%pattern_type (%pattern_type.2c66b4.2) = out_param_pattern [symbolic = %return.param_patt.loc5_37.2 (constants.%return.param_patt.bf4475.2)]
|
||||
// CHECK:STDOUT: %return.patt.loc5_34.2: @Function.%pattern_type (%pattern_type.2c66b4.2) = return_slot_pattern %return.param_patt.loc5_37.2, %T.as_type.loc5_31.1 [symbolic = %return.patt.loc5_34.2 (constants.%return.patt.f44)]
|
||||
// CHECK:STDOUT: %T.as_type.loc5_30.1: type = facet_access_type %T.loc5_14.1 [symbolic = %T.as_type.loc5_30.1 (constants.%T.as_type)]
|
||||
// CHECK:STDOUT: %pattern_type: type = pattern_type %T.as_type.loc5_30.1 [symbolic = %pattern_type (constants.%pattern_type.2c66b4.2)]
|
||||
// CHECK:STDOUT: %x.param_patt.loc5_28.2: @Function.%pattern_type (%pattern_type.2c66b4.2) = value_param_pattern [symbolic = %x.param_patt.loc5_28.2 (constants.%x.param_patt.1f4)]
|
||||
// CHECK:STDOUT: %x.patt.loc5_28.2: @Function.%pattern_type (%pattern_type.2c66b4.2) = at_binding_pattern x, %x.param_patt.loc5_28.2 [symbolic = %x.patt.loc5_28.2 (constants.%x.patt.f93)]
|
||||
// CHECK:STDOUT: %.loc5_36.2: Core.Form = init_form %T.as_type.loc5_30.1 [symbolic = %.loc5_36.2 (constants.%.1ce700.2)]
|
||||
// CHECK:STDOUT: %return.param_patt.loc5_36.2: @Function.%pattern_type (%pattern_type.2c66b4.2) = out_param_pattern [symbolic = %return.param_patt.loc5_36.2 (constants.%return.param_patt.bf4475.2)]
|
||||
// CHECK:STDOUT: %return.patt.loc5_33.2: @Function.%pattern_type (%pattern_type.2c66b4.2) = return_slot_pattern %return.param_patt.loc5_36.2, %T.as_type.loc5_30.1 [symbolic = %return.patt.loc5_33.2 (constants.%return.patt.f44)]
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT: %require_complete: <witness> = require_complete_type %T.as_type.loc5_31.1 [symbolic = %require_complete (constants.%require_complete.d83)]
|
||||
// CHECK:STDOUT: %require_complete: <witness> = require_complete_type %T.as_type.loc5_30.1 [symbolic = %require_complete (constants.%require_complete.d83)]
|
||||
// CHECK:STDOUT: %Copy.WithSelf.Op.type: type = fn_type @Copy.WithSelf.Op, @Copy.WithSelf(%T.loc5_14.1) [symbolic = %Copy.WithSelf.Op.type (constants.%Copy.WithSelf.Op.type.c85f21.2)]
|
||||
// CHECK:STDOUT: %.loc6_10.3: type = fn_type_with_self_type %Copy.WithSelf.Op.type, %T.loc5_14.1 [symbolic = %.loc6_10.3 (constants.%.c29)]
|
||||
// CHECK:STDOUT: %Copy.lookup_impl_witness: <witness> = lookup_impl_witness %T.loc5_14.1, @Copy [symbolic = %Copy.lookup_impl_witness (constants.%Copy.lookup_impl_witness.d9c)]
|
||||
// CHECK:STDOUT: %impl.elem0.loc6_10.2: @Function.%.loc6_10.3 (%.c29) = impl_witness_access %Copy.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc6_10.2 (constants.%impl.elem0.bd2)]
|
||||
// CHECK:STDOUT: %specific_impl_fn.loc6_10.2: <specific function> = specific_impl_function %impl.elem0.loc6_10.2, @Copy.WithSelf.Op(%T.loc5_14.1) [symbolic = %specific_impl_fn.loc6_10.2 (constants.%specific_impl_fn.e2a)]
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn(%x.param: @Function.%T.as_type.loc5_31.1 (%T.as_type)) -> out %return.param: @Function.%T.as_type.loc5_31.1 (%T.as_type) {
|
||||
// CHECK:STDOUT: fn(%x.param: @Function.%T.as_type.loc5_30.1 (%T.as_type)) -> out %return.param: @Function.%T.as_type.loc5_30.1 (%T.as_type) {
|
||||
// CHECK:STDOUT: !entry:
|
||||
// CHECK:STDOUT: %x.ref: @Function.%T.as_type.loc5_31.1 (%T.as_type) = name_ref x, %x
|
||||
// CHECK:STDOUT: %x.ref: @Function.%T.as_type.loc5_30.1 (%T.as_type) = name_ref x, %x
|
||||
// CHECK:STDOUT: %impl.elem0.loc6_10.1: @Function.%.loc6_10.3 (%.c29) = impl_witness_access constants.%Copy.lookup_impl_witness.d9c, element0 [symbolic = %impl.elem0.loc6_10.2 (constants.%impl.elem0.bd2)]
|
||||
// CHECK:STDOUT: %bound_method.loc6_10.1: <bound method> = bound_method %x.ref, %impl.elem0.loc6_10.1
|
||||
// CHECK:STDOUT: %.loc6_10.1: %Copy.type = converted constants.%T.as_type, constants.%T.f84 [symbolic = %T.loc5_14.1 (constants.%T.f84)]
|
||||
// CHECK:STDOUT: %.loc6_10.2: %Copy.type = converted constants.%T.as_type, constants.%T.f84 [symbolic = %T.loc5_14.1 (constants.%T.f84)]
|
||||
// CHECK:STDOUT: %specific_impl_fn.loc6_10.1: <specific function> = specific_impl_function %impl.elem0.loc6_10.1, @Copy.WithSelf.Op(constants.%T.f84) [symbolic = %specific_impl_fn.loc6_10.2 (constants.%specific_impl_fn.e2a)]
|
||||
// CHECK:STDOUT: %bound_method.loc6_10.2: <bound method> = bound_method %x.ref, %specific_impl_fn.loc6_10.1
|
||||
// CHECK:STDOUT: %.loc5_37.1: ref @Function.%T.as_type.loc5_31.1 (%T.as_type) = splice_block %return.param {}
|
||||
// CHECK:STDOUT: %Copy.WithSelf.Op.call: init @Function.%T.as_type.loc5_31.1 (%T.as_type) to %.loc5_37.1 = call %bound_method.loc6_10.2(%x.ref)
|
||||
// CHECK:STDOUT: %.loc5_36.1: ref @Function.%T.as_type.loc5_30.1 (%T.as_type) = splice_block %return.param {}
|
||||
// CHECK:STDOUT: %Copy.WithSelf.Op.call: init @Function.%T.as_type.loc5_30.1 (%T.as_type) to %.loc5_36.1 = call %bound_method.loc6_10.2(%x.ref)
|
||||
// CHECK:STDOUT: return %Copy.WithSelf.Op.call to %return.param
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !observes:
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: generic fn @CallGeneric(%T.loc10_17.2: %Copy.type) {
|
||||
// CHECK:STDOUT: generic fn @CallGeneric(%T.loc10_25.2: %Copy.type) {
|
||||
// CHECK:STDOUT: <elided>
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT: <elided>
|
||||
// CHECK:STDOUT: %Function.specific_fn.loc12_10.2: <specific function> = specific_function constants.%Function, @Function(%T.loc10_17.1) [symbolic = %Function.specific_fn.loc12_10.2 (constants.%Function.specific_fn.4db)]
|
||||
// CHECK:STDOUT: %Function.specific_fn.loc12_10.2: <specific function> = specific_function constants.%Function, @Function(%T.loc10_25.1) [symbolic = %Function.specific_fn.loc12_10.2 (constants.%Function.specific_fn.4db)]
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn(%x.param: @CallGeneric.%T.as_type.loc10_34.1 (%T.as_type)) -> out %return.param: @CallGeneric.%T.as_type.loc10_34.1 (%T.as_type) {
|
||||
// CHECK:STDOUT: fn(%x.param: @CallGeneric.%T.as_type.loc10_41.1 (%T.as_type)) -> out %return.param: @CallGeneric.%T.as_type.loc10_41.1 (%T.as_type) {
|
||||
// CHECK:STDOUT: !entry:
|
||||
// CHECK:STDOUT: %Function.ref: %Function.type = name_ref Function, file.%Function.decl [concrete = constants.%Function]
|
||||
// CHECK:STDOUT: %x.ref: @CallGeneric.%T.as_type.loc10_34.1 (%T.as_type) = name_ref x, %x
|
||||
// CHECK:STDOUT: %.loc12_20.1: %Copy.type = converted constants.%T.as_type, constants.%T.f84 [symbolic = %T.loc10_17.1 (constants.%T.f84)]
|
||||
// CHECK:STDOUT: %.loc12_20.2: %Copy.type = converted constants.%T.as_type, constants.%T.f84 [symbolic = %T.loc10_17.1 (constants.%T.f84)]
|
||||
// CHECK:STDOUT: %x.ref: @CallGeneric.%T.as_type.loc10_41.1 (%T.as_type) = name_ref x, %x
|
||||
// CHECK:STDOUT: %.loc12_20.1: %Copy.type = converted constants.%T.as_type, constants.%T.f84 [symbolic = %T.loc10_25.1 (constants.%T.f84)]
|
||||
// CHECK:STDOUT: %.loc12_20.2: %Copy.type = converted constants.%T.as_type, constants.%T.f84 [symbolic = %T.loc10_25.1 (constants.%T.f84)]
|
||||
// CHECK:STDOUT: %Function.specific_fn.loc12_10.1: <specific function> = specific_function %Function.ref, @Function(constants.%T.f84) [symbolic = %Function.specific_fn.loc12_10.2 (constants.%Function.specific_fn.4db)]
|
||||
// CHECK:STDOUT: <elided>
|
||||
// CHECK:STDOUT: %Function.call: init @CallGeneric.%T.as_type.loc10_34.1 (%T.as_type) to %.loc10_40.1 = call %Function.specific_fn.loc12_10.1(%x.ref)
|
||||
// CHECK:STDOUT: %Function.call: init @CallGeneric.%T.as_type.loc10_41.1 (%T.as_type) to %.loc10_47.1 = call %Function.specific_fn.loc12_10.1(%x.ref)
|
||||
// CHECK:STDOUT: return %Function.call to %return.param
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !observes:
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: generic fn @CallGenericPtr(%T.loc16_20.2: type) {
|
||||
// CHECK:STDOUT: generic fn @CallGenericPtr(%T.loc16_28.2: type) {
|
||||
// CHECK:STDOUT: <elided>
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT: <elided>
|
||||
// CHECK:STDOUT: %.loc18_20.3: require_specific_def_type = require_specific_def @ptr.as.Copy.impl(%T.loc16_20.1) [symbolic = %.loc18_20.3 (constants.%.0e9)]
|
||||
// CHECK:STDOUT: %Copy.lookup_impl_witness: <witness> = lookup_impl_witness %ptr.loc16_33.1, @Copy [symbolic = %Copy.lookup_impl_witness (constants.%Copy.lookup_impl_witness.1da)]
|
||||
// CHECK:STDOUT: %Copy.facet.loc18_20.3: %Copy.type = facet_value %ptr.loc16_33.1, (%Copy.lookup_impl_witness) [symbolic = %Copy.facet.loc18_20.3 (constants.%Copy.facet.302)]
|
||||
// CHECK:STDOUT: %.loc18_20.3: require_specific_def_type = require_specific_def @ptr.as.Copy.impl(%T.loc16_28.1) [symbolic = %.loc18_20.3 (constants.%.0e9)]
|
||||
// CHECK:STDOUT: %Copy.lookup_impl_witness: <witness> = lookup_impl_witness %ptr.loc16_40.1, @Copy [symbolic = %Copy.lookup_impl_witness (constants.%Copy.lookup_impl_witness.1da)]
|
||||
// CHECK:STDOUT: %Copy.facet.loc18_20.3: %Copy.type = facet_value %ptr.loc16_40.1, (%Copy.lookup_impl_witness) [symbolic = %Copy.facet.loc18_20.3 (constants.%Copy.facet.302)]
|
||||
// CHECK:STDOUT: %Function.specific_fn.loc18_10.2: <specific function> = specific_function constants.%Function, @Function(%Copy.facet.loc18_20.3) [symbolic = %Function.specific_fn.loc18_10.2 (constants.%Function.specific_fn.162)]
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn(%x.param: @CallGenericPtr.%ptr.loc16_33.1 (%ptr.e8f)) -> out %return.param: @CallGenericPtr.%ptr.loc16_33.1 (%ptr.e8f) {
|
||||
// CHECK:STDOUT: fn(%x.param: @CallGenericPtr.%ptr.loc16_40.1 (%ptr.e8f)) -> out %return.param: @CallGenericPtr.%ptr.loc16_40.1 (%ptr.e8f) {
|
||||
// CHECK:STDOUT: !entry:
|
||||
// CHECK:STDOUT: %Function.ref: %Function.type = name_ref Function, file.%Function.decl [concrete = constants.%Function]
|
||||
// CHECK:STDOUT: %x.ref: @CallGenericPtr.%ptr.loc16_33.1 (%ptr.e8f) = name_ref x, %x
|
||||
// CHECK:STDOUT: %x.ref: @CallGenericPtr.%ptr.loc16_40.1 (%ptr.e8f) = name_ref x, %x
|
||||
// CHECK:STDOUT: %Copy.facet.loc18_20.1: %Copy.type = facet_value constants.%ptr.e8f, (constants.%Copy.lookup_impl_witness.1da) [symbolic = %Copy.facet.loc18_20.3 (constants.%Copy.facet.302)]
|
||||
// CHECK:STDOUT: %.loc18_20.1: %Copy.type = converted constants.%ptr.e8f, %Copy.facet.loc18_20.1 [symbolic = %Copy.facet.loc18_20.3 (constants.%Copy.facet.302)]
|
||||
// CHECK:STDOUT: %Copy.facet.loc18_20.2: %Copy.type = facet_value constants.%ptr.e8f, (constants.%Copy.lookup_impl_witness.1da) [symbolic = %Copy.facet.loc18_20.3 (constants.%Copy.facet.302)]
|
||||
// CHECK:STDOUT: %.loc18_20.2: %Copy.type = converted constants.%ptr.e8f, %Copy.facet.loc18_20.2 [symbolic = %Copy.facet.loc18_20.3 (constants.%Copy.facet.302)]
|
||||
// CHECK:STDOUT: %Function.specific_fn.loc18_10.1: <specific function> = specific_function %Function.ref, @Function(constants.%Copy.facet.302) [symbolic = %Function.specific_fn.loc18_10.2 (constants.%Function.specific_fn.162)]
|
||||
// CHECK:STDOUT: %Function.call: init @CallGenericPtr.%ptr.loc16_33.1 (%ptr.e8f) = call %Function.specific_fn.loc18_10.1(%x.ref)
|
||||
// CHECK:STDOUT: %Function.call: init @CallGenericPtr.%ptr.loc16_40.1 (%ptr.e8f) = call %Function.specific_fn.loc18_10.1(%x.ref)
|
||||
// CHECK:STDOUT: return %Function.call
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !observes:
|
||||
@@ -577,13 +577,13 @@ fn CallSpecific(x: C*) -> C* {
|
||||
// CHECK:STDOUT: specific @Function(constants.%T.f84) {
|
||||
// CHECK:STDOUT: %T.patt.loc5_14.2 => constants.%T.patt.fe6
|
||||
// CHECK:STDOUT: %T.loc5_14.1 => constants.%T.f84
|
||||
// CHECK:STDOUT: %T.as_type.loc5_31.1 => constants.%T.as_type
|
||||
// CHECK:STDOUT: %T.as_type.loc5_30.1 => constants.%T.as_type
|
||||
// CHECK:STDOUT: %pattern_type => constants.%pattern_type.2c66b4.2
|
||||
// CHECK:STDOUT: %x.param_patt.loc5_29.2 => constants.%x.param_patt.1f4
|
||||
// CHECK:STDOUT: %x.patt.loc5_29.2 => constants.%x.patt.f93
|
||||
// CHECK:STDOUT: %.loc5_37.2 => constants.%.1ce700.2
|
||||
// CHECK:STDOUT: %return.param_patt.loc5_37.2 => constants.%return.param_patt.bf4475.2
|
||||
// CHECK:STDOUT: %return.patt.loc5_34.2 => constants.%return.patt.f44
|
||||
// CHECK:STDOUT: %x.param_patt.loc5_28.2 => constants.%x.param_patt.1f4
|
||||
// CHECK:STDOUT: %x.patt.loc5_28.2 => constants.%x.patt.f93
|
||||
// CHECK:STDOUT: %.loc5_36.2 => constants.%.1ce700.2
|
||||
// CHECK:STDOUT: %return.param_patt.loc5_36.2 => constants.%return.param_patt.bf4475.2
|
||||
// CHECK:STDOUT: %return.patt.loc5_33.2 => constants.%return.patt.f44
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT: %require_complete => constants.%require_complete.d83
|
||||
@@ -595,39 +595,39 @@ fn CallSpecific(x: C*) -> C* {
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific @CallGeneric(constants.%T.f84) {
|
||||
// CHECK:STDOUT: %T.patt.loc10_17.2 => constants.%T.patt.fe6
|
||||
// CHECK:STDOUT: %T.loc10_17.1 => constants.%T.f84
|
||||
// CHECK:STDOUT: %T.as_type.loc10_34.1 => constants.%T.as_type
|
||||
// CHECK:STDOUT: %T.patt.loc10_25.2 => constants.%T.patt.fe6
|
||||
// CHECK:STDOUT: %T.loc10_25.1 => constants.%T.f84
|
||||
// CHECK:STDOUT: %T.as_type.loc10_41.1 => constants.%T.as_type
|
||||
// CHECK:STDOUT: %pattern_type => constants.%pattern_type.2c66b4.2
|
||||
// CHECK:STDOUT: %x.param_patt.loc10_32.2 => constants.%x.param_patt.1f4
|
||||
// CHECK:STDOUT: %x.patt.loc10_32.2 => constants.%x.patt.f93
|
||||
// CHECK:STDOUT: %.loc10_40.2 => constants.%.1ce700.2
|
||||
// CHECK:STDOUT: %return.param_patt.loc10_40.2 => constants.%return.param_patt.bf4475.2
|
||||
// CHECK:STDOUT: %return.patt.loc10_37.2 => constants.%return.patt.f44
|
||||
// CHECK:STDOUT: %x.param_patt.loc10_39.2 => constants.%x.param_patt.1f4
|
||||
// CHECK:STDOUT: %x.patt.loc10_39.2 => constants.%x.patt.f93
|
||||
// CHECK:STDOUT: %.loc10_47.2 => constants.%.1ce700.2
|
||||
// CHECK:STDOUT: %return.param_patt.loc10_47.2 => constants.%return.param_patt.bf4475.2
|
||||
// CHECK:STDOUT: %return.patt.loc10_44.2 => constants.%return.patt.f44
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific @CallGenericPtr(constants.%T.67d) {
|
||||
// CHECK:STDOUT: %T.patt.loc16_20.2 => constants.%T.patt.d47
|
||||
// CHECK:STDOUT: %T.loc16_20.1 => constants.%T.67d
|
||||
// CHECK:STDOUT: %ptr.loc16_33.1 => constants.%ptr.e8f
|
||||
// CHECK:STDOUT: %T.patt.loc16_28.2 => constants.%T.patt.d47
|
||||
// CHECK:STDOUT: %T.loc16_28.1 => constants.%T.67d
|
||||
// CHECK:STDOUT: %ptr.loc16_40.1 => constants.%ptr.e8f
|
||||
// CHECK:STDOUT: %pattern_type => constants.%pattern_type.4f4
|
||||
// CHECK:STDOUT: %x.param_patt.loc16_30.2 => constants.%x.param_patt.b5c
|
||||
// CHECK:STDOUT: %x.patt.loc16_30.2 => constants.%x.patt.b28
|
||||
// CHECK:STDOUT: %.loc16_40.1 => constants.%.cb6
|
||||
// CHECK:STDOUT: %return.param_patt.loc16_40.2 => constants.%return.param_patt.27f
|
||||
// CHECK:STDOUT: %return.patt.loc16_36.2 => constants.%return.patt.d67
|
||||
// CHECK:STDOUT: %x.param_patt.loc16_37.2 => constants.%x.param_patt.b5c
|
||||
// CHECK:STDOUT: %x.patt.loc16_37.2 => constants.%x.patt.b28
|
||||
// CHECK:STDOUT: %.loc16_47.1 => constants.%.cb6
|
||||
// CHECK:STDOUT: %return.param_patt.loc16_47.2 => constants.%return.param_patt.27f
|
||||
// CHECK:STDOUT: %return.patt.loc16_43.2 => constants.%return.patt.d67
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific @Function(constants.%Copy.facet.302) {
|
||||
// CHECK:STDOUT: %T.patt.loc5_14.2 => constants.%T.patt.fe6
|
||||
// CHECK:STDOUT: %T.loc5_14.1 => constants.%Copy.facet.302
|
||||
// CHECK:STDOUT: %T.as_type.loc5_31.1 => constants.%ptr.e8f
|
||||
// CHECK:STDOUT: %T.as_type.loc5_30.1 => constants.%ptr.e8f
|
||||
// CHECK:STDOUT: %pattern_type => constants.%pattern_type.4f4
|
||||
// CHECK:STDOUT: %x.param_patt.loc5_29.2 => constants.%x.param_patt.b5c
|
||||
// CHECK:STDOUT: %x.patt.loc5_29.2 => constants.%x.patt.b28
|
||||
// CHECK:STDOUT: %.loc5_37.2 => constants.%.cb6
|
||||
// CHECK:STDOUT: %return.param_patt.loc5_37.2 => constants.%return.param_patt.27f
|
||||
// CHECK:STDOUT: %return.patt.loc5_34.2 => constants.%return.patt.d67
|
||||
// CHECK:STDOUT: %x.param_patt.loc5_28.2 => constants.%x.param_patt.b5c
|
||||
// CHECK:STDOUT: %x.patt.loc5_28.2 => constants.%x.patt.b28
|
||||
// CHECK:STDOUT: %.loc5_36.2 => constants.%.cb6
|
||||
// CHECK:STDOUT: %return.param_patt.loc5_36.2 => constants.%return.param_patt.27f
|
||||
// CHECK:STDOUT: %return.patt.loc5_33.2 => constants.%return.patt.d67
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT: %require_complete => constants.%require_complete.ef1
|
||||
@@ -641,13 +641,13 @@ fn CallSpecific(x: C*) -> C* {
|
||||
// CHECK:STDOUT: specific @Function(constants.%Copy.facet.3f0) {
|
||||
// CHECK:STDOUT: %T.patt.loc5_14.2 => constants.%T.patt.fe6
|
||||
// CHECK:STDOUT: %T.loc5_14.1 => constants.%Copy.facet.3f0
|
||||
// CHECK:STDOUT: %T.as_type.loc5_31.1 => constants.%ptr.6b6
|
||||
// CHECK:STDOUT: %T.as_type.loc5_30.1 => constants.%ptr.6b6
|
||||
// CHECK:STDOUT: %pattern_type => constants.%pattern_type.fcb
|
||||
// CHECK:STDOUT: %x.param_patt.loc5_29.2 => constants.%x.param_patt.503
|
||||
// CHECK:STDOUT: %x.patt.loc5_29.2 => constants.%x.patt.eca
|
||||
// CHECK:STDOUT: %.loc5_37.2 => constants.%.8fa
|
||||
// CHECK:STDOUT: %return.param_patt.loc5_37.2 => constants.%return.param_patt.ada
|
||||
// CHECK:STDOUT: %return.patt.loc5_34.2 => constants.%return.patt.783
|
||||
// CHECK:STDOUT: %x.param_patt.loc5_28.2 => constants.%x.param_patt.503
|
||||
// CHECK:STDOUT: %x.patt.loc5_28.2 => constants.%x.patt.eca
|
||||
// CHECK:STDOUT: %.loc5_36.2 => constants.%.8fa
|
||||
// CHECK:STDOUT: %return.param_patt.loc5_36.2 => constants.%return.param_patt.ada
|
||||
// CHECK:STDOUT: %return.patt.loc5_33.2 => constants.%return.patt.783
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT: %require_complete => constants.%complete_type.bf9
|
||||
|
||||
+46
-46
@@ -12,7 +12,7 @@
|
||||
// TIP: To dump output, run:
|
||||
// TIP: bazel run //toolchain/testing:file_test -- --dump_output --file_tests=toolchain/check/testdata/function/generic/call_method_on_generic_facet.carbon
|
||||
|
||||
interface Generic(Scalar:! type) {
|
||||
interface Generic(Scalar: type) {
|
||||
fn F();
|
||||
}
|
||||
|
||||
@@ -30,7 +30,7 @@ impl ImplsGeneric as Other {
|
||||
fn G();
|
||||
}
|
||||
|
||||
fn CallGenericMethod(T:! type, U:! Generic(T)) {
|
||||
fn CallGenericMethod(generic T: type, generic U: Generic(T)) {
|
||||
U.F();
|
||||
}
|
||||
|
||||
@@ -134,9 +134,9 @@ fn G() {
|
||||
// CHECK:STDOUT: %Generic.decl: %Generic.type.30d = interface_decl @Generic [concrete = constants.%Generic.generic] {
|
||||
// CHECK:STDOUT: %Scalar.patt.loc15_25.1: %pattern_type.98f = symbolic_binding_pattern Scalar, 0 [symbolic = %Scalar.patt.loc15_25.2 (constants.%Scalar.patt)]
|
||||
// CHECK:STDOUT: } {
|
||||
// CHECK:STDOUT: %.loc15_28.1: type = splice_block %.loc15_28.2 [concrete = type] {
|
||||
// CHECK:STDOUT: %.loc15_27.1: type = splice_block %.loc15_27.2 [concrete = type] {
|
||||
// CHECK:STDOUT: %.Self.frozen: %type = symbolic_binding .Self [symbolic_self = constants.%.Self.frozen]
|
||||
// CHECK:STDOUT: %.loc15_28.2: type = type_literal type [concrete = type]
|
||||
// CHECK:STDOUT: %.loc15_27.2: type = type_literal type [concrete = type]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %Scalar.loc15_25.2: type = symbolic_binding Scalar, 0 [symbolic = %Scalar.loc15_25.1 (constants.%Scalar)]
|
||||
// CHECK:STDOUT: }
|
||||
@@ -154,21 +154,21 @@ fn G() {
|
||||
// CHECK:STDOUT: %Other.ref: type = name_ref Other, file.%Other.decl [concrete = constants.%Other.type]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %CallGenericMethod.decl: %CallGenericMethod.type = fn_decl @CallGenericMethod [concrete = constants.%CallGenericMethod] {
|
||||
// CHECK:STDOUT: %T.patt.loc33_23.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc33_23.2 (constants.%T.patt)]
|
||||
// CHECK:STDOUT: %U.patt.loc33_33.1: @CallGenericMethod.%pattern_type (%pattern_type.4e0) = symbolic_binding_pattern U, 1 [symbolic = %U.patt.loc33_33.2 (constants.%U.patt.8a6)]
|
||||
// CHECK:STDOUT: %T.patt.loc33_31.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc33_31.2 (constants.%T.patt)]
|
||||
// CHECK:STDOUT: %U.patt.loc33_48.1: @CallGenericMethod.%pattern_type (%pattern_type.4e0) = symbolic_binding_pattern U, 1 [symbolic = %U.patt.loc33_48.2 (constants.%U.patt.8a6)]
|
||||
// CHECK:STDOUT: } {
|
||||
// CHECK:STDOUT: %.loc33_26.1: type = splice_block %.loc33_26.2 [concrete = type] {
|
||||
// CHECK:STDOUT: %.Self.frozen.loc33_23: %type = symbolic_binding .Self [symbolic_self = constants.%.Self.frozen]
|
||||
// CHECK:STDOUT: %.loc33_26.2: type = type_literal type [concrete = type]
|
||||
// CHECK:STDOUT: %.loc33_33.1: type = splice_block %.loc33_33.2 [concrete = type] {
|
||||
// CHECK:STDOUT: %.Self.frozen.loc33_31: %type = symbolic_binding .Self [symbolic_self = constants.%.Self.frozen]
|
||||
// CHECK:STDOUT: %.loc33_33.2: type = type_literal type [concrete = type]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %T.loc33_23.2: type = symbolic_binding T, 0 [symbolic = %T.loc33_23.1 (constants.%T)]
|
||||
// CHECK:STDOUT: %.loc33_45: type = splice_block %Generic.type.loc33_45.2 [symbolic = %Generic.type.loc33_45.1 (constants.%Generic.type.ee14e9.2)] {
|
||||
// CHECK:STDOUT: %.Self.frozen.loc33_33: %type = symbolic_binding .Self [symbolic_self = constants.%.Self.frozen]
|
||||
// CHECK:STDOUT: %T.loc33_31.2: type = symbolic_binding T, 0 [symbolic = %T.loc33_31.1 (constants.%T)]
|
||||
// CHECK:STDOUT: %.loc33_59: type = splice_block %Generic.type.loc33_59.2 [symbolic = %Generic.type.loc33_59.1 (constants.%Generic.type.ee14e9.2)] {
|
||||
// CHECK:STDOUT: %.Self.frozen.loc33_48: %type = symbolic_binding .Self [symbolic_self = constants.%.Self.frozen]
|
||||
// CHECK:STDOUT: %Generic.ref: %Generic.type.30d = name_ref Generic, file.%Generic.decl [concrete = constants.%Generic.generic]
|
||||
// CHECK:STDOUT: %T.ref: type = name_ref T, %T.loc33_23.2 [symbolic = %T.loc33_23.1 (constants.%T)]
|
||||
// CHECK:STDOUT: %Generic.type.loc33_45.2: type = facet_type <@Generic, @Generic(constants.%T)> [symbolic = %Generic.type.loc33_45.1 (constants.%Generic.type.ee14e9.2)]
|
||||
// CHECK:STDOUT: %T.ref: type = name_ref T, %T.loc33_31.2 [symbolic = %T.loc33_31.1 (constants.%T)]
|
||||
// CHECK:STDOUT: %Generic.type.loc33_59.2: type = facet_type <@Generic, @Generic(constants.%T)> [symbolic = %Generic.type.loc33_59.1 (constants.%Generic.type.ee14e9.2)]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %U.loc33_33.2: @CallGenericMethod.%Generic.type.loc33_45.1 (%Generic.type.ee14e9.2) = symbolic_binding U, 1 [symbolic = %U.loc33_33.1 (constants.%U)]
|
||||
// CHECK:STDOUT: %U.loc33_48.2: @CallGenericMethod.%Generic.type.loc33_59.1 (%Generic.type.ee14e9.2) = symbolic_binding U, 1 [symbolic = %U.loc33_48.1 (constants.%U)]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] {} {}
|
||||
// CHECK:STDOUT: }
|
||||
@@ -179,10 +179,10 @@ fn G() {
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT: %Generic.type: type = facet_type <@Generic, @Generic(%Scalar.loc15_25.1)> [symbolic = %Generic.type (constants.%Generic.type.ee14e9.1)]
|
||||
// CHECK:STDOUT: %Self.loc15_34.2: @Generic.%Generic.type (%Generic.type.ee14e9.1) = symbolic_binding Self, 1 [symbolic = %Self.loc15_34.2 (constants.%Self.8ea1ea.1)]
|
||||
// CHECK:STDOUT: %Self.loc15_33.2: @Generic.%Generic.type (%Generic.type.ee14e9.1) = symbolic_binding Self, 1 [symbolic = %Self.loc15_33.2 (constants.%Self.8ea1ea.1)]
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: interface {
|
||||
// CHECK:STDOUT: %Self.loc15_34.1: @Generic.%Generic.type (%Generic.type.ee14e9.1) = symbolic_binding Self, 1 [symbolic = %Self.loc15_34.2 (constants.%Self.8ea1ea.1)]
|
||||
// CHECK:STDOUT: %Self.loc15_33.1: @Generic.%Generic.type (%Generic.type.ee14e9.1) = symbolic_binding Self, 1 [symbolic = %Self.loc15_33.2 (constants.%Self.8ea1ea.1)]
|
||||
// CHECK:STDOUT: %Generic.WithSelf.decl = interface_with_self_decl @Generic [concrete]
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !with Self:
|
||||
@@ -190,7 +190,7 @@ fn G() {
|
||||
// CHECK:STDOUT: %assoc0.loc16_9.1: @Generic.WithSelf.%Generic.assoc_type (%Generic.assoc_type.d7021d.1) = assoc_entity element0, %Generic.WithSelf.F.decl [symbolic = %assoc0.loc16_9.2 (constants.%assoc0.31052a.1)]
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !members:
|
||||
// CHECK:STDOUT: .Self = %Self.loc15_34.1
|
||||
// CHECK:STDOUT: .Self = %Self.loc15_33.1
|
||||
// CHECK:STDOUT: .F = @Generic.WithSelf.%assoc0.loc16_9.1
|
||||
// CHECK:STDOUT: witness = (@Generic.WithSelf.%Generic.WithSelf.F.decl)
|
||||
// CHECK:STDOUT:
|
||||
@@ -256,7 +256,7 @@ fn G() {
|
||||
// CHECK:STDOUT: .Self = constants.%ImplsGeneric
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: generic fn @Generic.WithSelf.F(@Generic.%Scalar.loc15_25.2: type, @Generic.%Self.loc15_34.1: @Generic.%Generic.type (%Generic.type.ee14e9.1)) {
|
||||
// CHECK:STDOUT: generic fn @Generic.WithSelf.F(@Generic.%Scalar.loc15_25.2: type, @Generic.%Self.loc15_33.1: @Generic.%Generic.type (%Generic.type.ee14e9.1)) {
|
||||
// CHECK:STDOUT: fn();
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
@@ -273,28 +273,28 @@ fn G() {
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn @ImplsGeneric.as.Other.impl.G();
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: generic fn @CallGenericMethod(%T.loc33_23.2: type, %U.loc33_33.2: @CallGenericMethod.%Generic.type.loc33_45.1 (%Generic.type.ee14e9.2)) {
|
||||
// CHECK:STDOUT: %T.patt.loc33_23.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc33_23.2 (constants.%T.patt)]
|
||||
// CHECK:STDOUT: %T.loc33_23.1: type = symbolic_binding T, 0 [symbolic = %T.loc33_23.1 (constants.%T)]
|
||||
// CHECK:STDOUT: %Generic.type.loc33_45.1: type = facet_type <@Generic, @Generic(%T.loc33_23.1)> [symbolic = %Generic.type.loc33_45.1 (constants.%Generic.type.ee14e9.2)]
|
||||
// CHECK:STDOUT: %pattern_type: type = pattern_type %Generic.type.loc33_45.1 [symbolic = %pattern_type (constants.%pattern_type.4e0)]
|
||||
// CHECK:STDOUT: %U.patt.loc33_33.2: @CallGenericMethod.%pattern_type (%pattern_type.4e0) = symbolic_binding_pattern U, 1 [symbolic = %U.patt.loc33_33.2 (constants.%U.patt.8a6)]
|
||||
// CHECK:STDOUT: %U.loc33_33.1: @CallGenericMethod.%Generic.type.loc33_45.1 (%Generic.type.ee14e9.2) = symbolic_binding U, 1 [symbolic = %U.loc33_33.1 (constants.%U)]
|
||||
// CHECK:STDOUT: generic fn @CallGenericMethod(%T.loc33_31.2: type, %U.loc33_48.2: @CallGenericMethod.%Generic.type.loc33_59.1 (%Generic.type.ee14e9.2)) {
|
||||
// CHECK:STDOUT: %T.patt.loc33_31.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc33_31.2 (constants.%T.patt)]
|
||||
// CHECK:STDOUT: %T.loc33_31.1: type = symbolic_binding T, 0 [symbolic = %T.loc33_31.1 (constants.%T)]
|
||||
// CHECK:STDOUT: %Generic.type.loc33_59.1: type = facet_type <@Generic, @Generic(%T.loc33_31.1)> [symbolic = %Generic.type.loc33_59.1 (constants.%Generic.type.ee14e9.2)]
|
||||
// CHECK:STDOUT: %pattern_type: type = pattern_type %Generic.type.loc33_59.1 [symbolic = %pattern_type (constants.%pattern_type.4e0)]
|
||||
// CHECK:STDOUT: %U.patt.loc33_48.2: @CallGenericMethod.%pattern_type (%pattern_type.4e0) = symbolic_binding_pattern U, 1 [symbolic = %U.patt.loc33_48.2 (constants.%U.patt.8a6)]
|
||||
// CHECK:STDOUT: %U.loc33_48.1: @CallGenericMethod.%Generic.type.loc33_59.1 (%Generic.type.ee14e9.2) = symbolic_binding U, 1 [symbolic = %U.loc33_48.1 (constants.%U)]
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT: %require_complete: <witness> = require_complete_type %Generic.type.loc33_45.1 [symbolic = %require_complete (constants.%require_complete)]
|
||||
// CHECK:STDOUT: %U.as_type.loc34_4.2: type = facet_access_type %U.loc33_33.1 [symbolic = %U.as_type.loc34_4.2 (constants.%U.as_type)]
|
||||
// CHECK:STDOUT: %Generic.assoc_type: type = assoc_entity_type @Generic, @Generic(%T.loc33_23.1) [symbolic = %Generic.assoc_type (constants.%Generic.assoc_type.d7021d.2)]
|
||||
// CHECK:STDOUT: %require_complete: <witness> = require_complete_type %Generic.type.loc33_59.1 [symbolic = %require_complete (constants.%require_complete)]
|
||||
// CHECK:STDOUT: %U.as_type.loc34_4.2: type = facet_access_type %U.loc33_48.1 [symbolic = %U.as_type.loc34_4.2 (constants.%U.as_type)]
|
||||
// CHECK:STDOUT: %Generic.assoc_type: type = assoc_entity_type @Generic, @Generic(%T.loc33_31.1) [symbolic = %Generic.assoc_type (constants.%Generic.assoc_type.d7021d.2)]
|
||||
// CHECK:STDOUT: %assoc0: @CallGenericMethod.%Generic.assoc_type (%Generic.assoc_type.d7021d.2) = assoc_entity element0, @Generic.WithSelf.%Generic.WithSelf.F.decl [symbolic = %assoc0 (constants.%assoc0.31052a.2)]
|
||||
// CHECK:STDOUT: %Generic.WithSelf.F.type: type = fn_type @Generic.WithSelf.F, @Generic.WithSelf(%T.loc33_23.1, %U.loc33_33.1) [symbolic = %Generic.WithSelf.F.type (constants.%Generic.WithSelf.F.type.a70)]
|
||||
// CHECK:STDOUT: %.loc34_4.3: type = fn_type_with_self_type %Generic.WithSelf.F.type, %U.loc33_33.1 [symbolic = %.loc34_4.3 (constants.%.aca)]
|
||||
// CHECK:STDOUT: %Generic.lookup_impl_witness: <witness> = lookup_impl_witness %U.loc33_33.1, @Generic, @Generic(%T.loc33_23.1) [symbolic = %Generic.lookup_impl_witness (constants.%Generic.lookup_impl_witness)]
|
||||
// CHECK:STDOUT: %Generic.WithSelf.F.type: type = fn_type @Generic.WithSelf.F, @Generic.WithSelf(%T.loc33_31.1, %U.loc33_48.1) [symbolic = %Generic.WithSelf.F.type (constants.%Generic.WithSelf.F.type.a70)]
|
||||
// CHECK:STDOUT: %.loc34_4.3: type = fn_type_with_self_type %Generic.WithSelf.F.type, %U.loc33_48.1 [symbolic = %.loc34_4.3 (constants.%.aca)]
|
||||
// CHECK:STDOUT: %Generic.lookup_impl_witness: <witness> = lookup_impl_witness %U.loc33_48.1, @Generic, @Generic(%T.loc33_31.1) [symbolic = %Generic.lookup_impl_witness (constants.%Generic.lookup_impl_witness)]
|
||||
// CHECK:STDOUT: %impl.elem0.loc34_4.2: @CallGenericMethod.%.loc34_4.3 (%.aca) = impl_witness_access %Generic.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc34_4.2 (constants.%impl.elem0)]
|
||||
// CHECK:STDOUT: %specific_impl_fn.loc34_4.2: <specific function> = specific_impl_function %impl.elem0.loc34_4.2, @Generic.WithSelf.F(%T.loc33_23.1, %U.loc33_33.1) [symbolic = %specific_impl_fn.loc34_4.2 (constants.%specific_impl_fn)]
|
||||
// CHECK:STDOUT: %specific_impl_fn.loc34_4.2: <specific function> = specific_impl_function %impl.elem0.loc34_4.2, @Generic.WithSelf.F(%T.loc33_31.1, %U.loc33_48.1) [symbolic = %specific_impl_fn.loc34_4.2 (constants.%specific_impl_fn)]
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn() {
|
||||
// CHECK:STDOUT: !entry:
|
||||
// CHECK:STDOUT: %U.ref: @CallGenericMethod.%Generic.type.loc33_45.1 (%Generic.type.ee14e9.2) = name_ref U, %U.loc33_33.2 [symbolic = %U.loc33_33.1 (constants.%U)]
|
||||
// CHECK:STDOUT: %U.ref: @CallGenericMethod.%Generic.type.loc33_59.1 (%Generic.type.ee14e9.2) = name_ref U, %U.loc33_48.2 [symbolic = %U.loc33_48.1 (constants.%U)]
|
||||
// CHECK:STDOUT: %U.as_type.loc34_4.1: type = facet_access_type %U.ref [symbolic = %U.as_type.loc34_4.2 (constants.%U.as_type)]
|
||||
// CHECK:STDOUT: %.loc34_4.1: type = converted %U.ref, %U.as_type.loc34_4.1 [symbolic = %U.as_type.loc34_4.2 (constants.%U.as_type)]
|
||||
// CHECK:STDOUT: %.loc34_4.2: @CallGenericMethod.%Generic.assoc_type (%Generic.assoc_type.d7021d.2) = specific_constant @Generic.WithSelf.%assoc0.loc16_9.1, @Generic.WithSelf(constants.%T, constants.%U) [symbolic = %assoc0 (constants.%assoc0.31052a.2)]
|
||||
@@ -337,7 +337,7 @@ fn G() {
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT: %Generic.type => constants.%Generic.type.b40
|
||||
// CHECK:STDOUT: %Self.loc15_34.2 => constants.%Self.685
|
||||
// CHECK:STDOUT: %Self.loc15_33.2 => constants.%Self.685
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific @Generic.WithSelf(constants.%GenericParam, constants.%Self.8ea1ea.1) {
|
||||
@@ -388,16 +388,16 @@ fn G() {
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT: %Generic.type => constants.%Generic.type.ee14e9.2
|
||||
// CHECK:STDOUT: %Self.loc15_34.2 => constants.%Self.8ea1ea.2
|
||||
// CHECK:STDOUT: %Self.loc15_33.2 => constants.%Self.8ea1ea.2
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific @CallGenericMethod(constants.%T, constants.%U) {
|
||||
// CHECK:STDOUT: %T.patt.loc33_23.2 => constants.%T.patt
|
||||
// CHECK:STDOUT: %T.loc33_23.1 => constants.%T
|
||||
// CHECK:STDOUT: %Generic.type.loc33_45.1 => constants.%Generic.type.ee14e9.2
|
||||
// CHECK:STDOUT: %T.patt.loc33_31.2 => constants.%T.patt
|
||||
// CHECK:STDOUT: %T.loc33_31.1 => constants.%T
|
||||
// CHECK:STDOUT: %Generic.type.loc33_59.1 => constants.%Generic.type.ee14e9.2
|
||||
// CHECK:STDOUT: %pattern_type => constants.%pattern_type.4e0
|
||||
// CHECK:STDOUT: %U.patt.loc33_33.2 => constants.%U.patt.8a6
|
||||
// CHECK:STDOUT: %U.loc33_33.1 => constants.%U
|
||||
// CHECK:STDOUT: %U.patt.loc33_48.2 => constants.%U.patt.8a6
|
||||
// CHECK:STDOUT: %U.loc33_48.1 => constants.%U
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific @Generic.WithSelf(constants.%T, constants.%Self.8ea1ea.1) {
|
||||
@@ -425,12 +425,12 @@ fn G() {
|
||||
// CHECK:STDOUT: specific @Generic.WithSelf.F(constants.%T, constants.%U) {}
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific @CallGenericMethod(constants.%GenericParam, constants.%Generic.facet) {
|
||||
// CHECK:STDOUT: %T.patt.loc33_23.2 => constants.%T.patt
|
||||
// CHECK:STDOUT: %T.loc33_23.1 => constants.%GenericParam
|
||||
// CHECK:STDOUT: %Generic.type.loc33_45.1 => constants.%Generic.type.b40
|
||||
// CHECK:STDOUT: %T.patt.loc33_31.2 => constants.%T.patt
|
||||
// CHECK:STDOUT: %T.loc33_31.1 => constants.%GenericParam
|
||||
// CHECK:STDOUT: %Generic.type.loc33_59.1 => constants.%Generic.type.b40
|
||||
// CHECK:STDOUT: %pattern_type => constants.%pattern_type.de1
|
||||
// CHECK:STDOUT: %U.patt.loc33_33.2 => constants.%U.patt.e09
|
||||
// CHECK:STDOUT: %U.loc33_33.1 => constants.%Generic.facet
|
||||
// CHECK:STDOUT: %U.patt.loc33_48.2 => constants.%U.patt.e09
|
||||
// CHECK:STDOUT: %U.loc33_48.1 => constants.%Generic.facet
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT: %require_complete => constants.%complete_type.35b
|
||||
|
||||
+466
-466
File diff suppressed because it is too large
Load Diff
+24
-24
@@ -24,14 +24,14 @@ impl DD as Y {}
|
||||
impl DD as W {}
|
||||
|
||||
// CC requires D to implement Y.
|
||||
class CC(D:! Y) {}
|
||||
class CC(D: Y) {}
|
||||
|
||||
interface Z {}
|
||||
|
||||
// The `D` interface provides `Y` but not `W`, so we need to see that the
|
||||
// parameter to `CC` is `DD` which provides `Y & W`, not just a FacetValue
|
||||
// abstractly providing `Y.
|
||||
impl forall [E:! Y & W] CC(E) as Z {}
|
||||
impl forall [E: Y & W] CC(E) as Z {}
|
||||
|
||||
fn F() {
|
||||
(CC(DD)) as Z;
|
||||
@@ -137,20 +137,20 @@ fn F() {
|
||||
// CHECK:STDOUT: } {
|
||||
// CHECK:STDOUT: %CC.ref: %CC.type = name_ref CC, file.%CC.decl [concrete = constants.%CC.generic]
|
||||
// CHECK:STDOUT: %E.ref: %facet_type = name_ref E, %E.loc19_15.1 [symbolic = %E.loc19_15.2 (constants.%E)]
|
||||
// CHECK:STDOUT: %E.as_type.loc19_29.1: type = facet_access_type %E.ref [symbolic = %E.as_type.loc19_29.2 (constants.%E.as_type)]
|
||||
// CHECK:STDOUT: %Y.facet.loc19_29.1: %Y.type = facet_value %E.as_type.loc19_29.1, (constants.%Y.lookup_impl_witness) [symbolic = %Y.facet.loc19_29.2 (constants.%Y.facet.18f)]
|
||||
// CHECK:STDOUT: %.loc19_29: %Y.type = converted %E.ref, %Y.facet.loc19_29.1 [symbolic = %Y.facet.loc19_29.2 (constants.%Y.facet.18f)]
|
||||
// CHECK:STDOUT: %CC.loc19_29.1: type = class_type @CC, @CC(constants.%Y.facet.18f) [symbolic = %CC.loc19_29.2 (constants.%CC.db5)]
|
||||
// CHECK:STDOUT: %E.as_type.loc19_28.1: type = facet_access_type %E.ref [symbolic = %E.as_type.loc19_28.2 (constants.%E.as_type)]
|
||||
// CHECK:STDOUT: %Y.facet.loc19_28.1: %Y.type = facet_value %E.as_type.loc19_28.1, (constants.%Y.lookup_impl_witness) [symbolic = %Y.facet.loc19_28.2 (constants.%Y.facet.18f)]
|
||||
// CHECK:STDOUT: %.loc19_28: %Y.type = converted %E.ref, %Y.facet.loc19_28.1 [symbolic = %Y.facet.loc19_28.2 (constants.%Y.facet.18f)]
|
||||
// CHECK:STDOUT: %CC.loc19_28.1: type = class_type @CC, @CC(constants.%Y.facet.18f) [symbolic = %CC.loc19_28.2 (constants.%CC.db5)]
|
||||
// CHECK:STDOUT: %Z.ref: type = name_ref Z, file.%Z.decl [concrete = constants.%Z.type]
|
||||
// CHECK:STDOUT: %.loc19_20.1: type = splice_block %.loc19_20.3 [concrete = constants.%facet_type] {
|
||||
// CHECK:STDOUT: %.loc19_19.1: type = splice_block %.loc19_19.3 [concrete = constants.%facet_type] {
|
||||
// CHECK:STDOUT: %.Self.frozen: %type = symbolic_binding .Self [symbolic_self = constants.%.Self.frozen]
|
||||
// CHECK:STDOUT: %Y.ref: type = name_ref Y, file.%Y.decl [concrete = constants.%Y.type]
|
||||
// CHECK:STDOUT: %W.ref: type = name_ref W, file.%W.decl [concrete = constants.%W.type]
|
||||
// CHECK:STDOUT: %impl.elem0: %.d56 = impl_witness_access constants.%BitAndWith.impl_witness, element0 [concrete = constants.%type.as.BitAndWith.impl.Op]
|
||||
// CHECK:STDOUT: %bound_method: <bound method> = bound_method %Y.ref, %impl.elem0 [concrete = constants.%type.as.BitAndWith.impl.Op.bound]
|
||||
// CHECK:STDOUT: %type.as.BitAndWith.impl.Op.call: init type = call %bound_method(%Y.ref, %W.ref) [concrete = constants.%facet_type]
|
||||
// CHECK:STDOUT: %.loc19_20.2: type = value_of_initializer %type.as.BitAndWith.impl.Op.call [concrete = constants.%facet_type]
|
||||
// CHECK:STDOUT: %.loc19_20.3: type = converted %type.as.BitAndWith.impl.Op.call, %.loc19_20.2 [concrete = constants.%facet_type]
|
||||
// CHECK:STDOUT: %.loc19_19.2: type = value_of_initializer %type.as.BitAndWith.impl.Op.call [concrete = constants.%facet_type]
|
||||
// CHECK:STDOUT: %.loc19_19.3: type = converted %type.as.BitAndWith.impl.Op.call, %.loc19_19.2 [concrete = constants.%facet_type]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %E.loc19_15.1: %facet_type = symbolic_binding E, 0 [symbolic = %E.loc19_15.2 (constants.%E)]
|
||||
// CHECK:STDOUT: }
|
||||
@@ -217,21 +217,21 @@ fn F() {
|
||||
// CHECK:STDOUT: generic impl @CC.as.Z.impl(%E.loc19_15.1: %facet_type) {
|
||||
// CHECK:STDOUT: %E.patt.loc19_15.2: %pattern_type.bd4 = symbolic_binding_pattern E, 0 [symbolic = %E.patt.loc19_15.2 (constants.%E.patt)]
|
||||
// CHECK:STDOUT: %E.loc19_15.2: %facet_type = symbolic_binding E, 0 [symbolic = %E.loc19_15.2 (constants.%E)]
|
||||
// CHECK:STDOUT: %E.as_type.loc19_29.2: type = facet_access_type %E.loc19_15.2 [symbolic = %E.as_type.loc19_29.2 (constants.%E.as_type)]
|
||||
// CHECK:STDOUT: %E.as_type.loc19_28.2: type = facet_access_type %E.loc19_15.2 [symbolic = %E.as_type.loc19_28.2 (constants.%E.as_type)]
|
||||
// CHECK:STDOUT: %Y.lookup_impl_witness: <witness> = lookup_impl_witness %E.loc19_15.2, @Y [symbolic = %Y.lookup_impl_witness (constants.%Y.lookup_impl_witness)]
|
||||
// CHECK:STDOUT: %Y.facet.loc19_29.2: %Y.type = facet_value %E.as_type.loc19_29.2, (%Y.lookup_impl_witness) [symbolic = %Y.facet.loc19_29.2 (constants.%Y.facet.18f)]
|
||||
// CHECK:STDOUT: %CC.loc19_29.2: type = class_type @CC, @CC(%Y.facet.loc19_29.2) [symbolic = %CC.loc19_29.2 (constants.%CC.db5)]
|
||||
// CHECK:STDOUT: %Z.impl_witness.loc19_36.2: <witness> = impl_witness %Z.impl_witness_table, @CC.as.Z.impl(%E.loc19_15.2) [symbolic = %Z.impl_witness.loc19_36.2 (constants.%Z.impl_witness.6a9)]
|
||||
// CHECK:STDOUT: %Y.facet.loc19_28.2: %Y.type = facet_value %E.as_type.loc19_28.2, (%Y.lookup_impl_witness) [symbolic = %Y.facet.loc19_28.2 (constants.%Y.facet.18f)]
|
||||
// CHECK:STDOUT: %CC.loc19_28.2: type = class_type @CC, @CC(%Y.facet.loc19_28.2) [symbolic = %CC.loc19_28.2 (constants.%CC.db5)]
|
||||
// CHECK:STDOUT: %Z.impl_witness.loc19_35.2: <witness> = impl_witness %Z.impl_witness_table, @CC.as.Z.impl(%E.loc19_15.2) [symbolic = %Z.impl_witness.loc19_35.2 (constants.%Z.impl_witness.6a9)]
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: impl: %CC.loc19_29.1 as %Z.ref {
|
||||
// CHECK:STDOUT: impl: %CC.loc19_28.1 as %Z.ref {
|
||||
// CHECK:STDOUT: %Z.impl_witness_table = impl_witness_table (), @CC.as.Z.impl [concrete]
|
||||
// CHECK:STDOUT: %Z.impl_witness.loc19_36.1: <witness> = impl_witness %Z.impl_witness_table, @CC.as.Z.impl(constants.%E) [symbolic = %Z.impl_witness.loc19_36.2 (constants.%Z.impl_witness.6a9)]
|
||||
// CHECK:STDOUT: %Z.impl_witness.loc19_35.1: <witness> = impl_witness %Z.impl_witness_table, @CC.as.Z.impl(constants.%E) [symbolic = %Z.impl_witness.loc19_35.2 (constants.%Z.impl_witness.6a9)]
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !members:
|
||||
// CHECK:STDOUT: extend %Z.ref
|
||||
// CHECK:STDOUT: witness = %Z.impl_witness.loc19_36.1
|
||||
// CHECK:STDOUT: witness = %Z.impl_witness.loc19_35.1
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
@@ -306,11 +306,11 @@ fn F() {
|
||||
// CHECK:STDOUT: specific @CC.as.Z.impl(constants.%E) {
|
||||
// CHECK:STDOUT: %E.patt.loc19_15.2 => constants.%E.patt
|
||||
// CHECK:STDOUT: %E.loc19_15.2 => constants.%E
|
||||
// CHECK:STDOUT: %E.as_type.loc19_29.2 => constants.%E.as_type
|
||||
// CHECK:STDOUT: %E.as_type.loc19_28.2 => constants.%E.as_type
|
||||
// CHECK:STDOUT: %Y.lookup_impl_witness => constants.%Y.lookup_impl_witness
|
||||
// CHECK:STDOUT: %Y.facet.loc19_29.2 => constants.%Y.facet.18f
|
||||
// CHECK:STDOUT: %CC.loc19_29.2 => constants.%CC.db5
|
||||
// CHECK:STDOUT: %Z.impl_witness.loc19_36.2 => constants.%Z.impl_witness.6a9
|
||||
// CHECK:STDOUT: %Y.facet.loc19_28.2 => constants.%Y.facet.18f
|
||||
// CHECK:STDOUT: %CC.loc19_28.2 => constants.%CC.db5
|
||||
// CHECK:STDOUT: %Z.impl_witness.loc19_35.2 => constants.%Z.impl_witness.6a9
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific @Z.WithSelf(constants.%Z.facet.674) {
|
||||
@@ -325,11 +325,11 @@ fn F() {
|
||||
// CHECK:STDOUT: specific @CC.as.Z.impl(constants.%facet_value) {
|
||||
// CHECK:STDOUT: %E.patt.loc19_15.2 => constants.%E.patt
|
||||
// CHECK:STDOUT: %E.loc19_15.2 => constants.%facet_value
|
||||
// CHECK:STDOUT: %E.as_type.loc19_29.2 => constants.%DD
|
||||
// CHECK:STDOUT: %E.as_type.loc19_28.2 => constants.%DD
|
||||
// CHECK:STDOUT: %Y.lookup_impl_witness => constants.%Y.impl_witness
|
||||
// CHECK:STDOUT: %Y.facet.loc19_29.2 => constants.%Y.facet.2a4
|
||||
// CHECK:STDOUT: %CC.loc19_29.2 => constants.%CC.d62
|
||||
// CHECK:STDOUT: %Z.impl_witness.loc19_36.2 => constants.%Z.impl_witness.b3a
|
||||
// CHECK:STDOUT: %Y.facet.loc19_28.2 => constants.%Y.facet.2a4
|
||||
// CHECK:STDOUT: %CC.loc19_28.2 => constants.%CC.d62
|
||||
// CHECK:STDOUT: %Z.impl_witness.loc19_35.2 => constants.%Z.impl_witness.b3a
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT: }
|
||||
|
||||
+46
-46
@@ -16,21 +16,21 @@
|
||||
package Lib;
|
||||
|
||||
interface Z {}
|
||||
fn A[T:! Z](unused x: {.a: T}) {}
|
||||
fn A[T: Z](unused x: {.a: T}) {}
|
||||
|
||||
// --- fail_deduce_imported_function.carbon
|
||||
|
||||
import Lib;
|
||||
|
||||
fn A[T:! Lib.Z](unused x: {.a: T}) {}
|
||||
fn A[T: Lib.Z](unused x: {.a: T}) {}
|
||||
|
||||
fn B() {
|
||||
// CHECK:STDERR: fail_deduce_imported_function.carbon:[[@LINE+7]]:3: error: cannot deduce value for generic parameter `T` [DeductionIncomplete]
|
||||
// CHECK:STDERR: A({.b = {}});
|
||||
// CHECK:STDERR: ^~~~~~~~~~~~
|
||||
// CHECK:STDERR: fail_deduce_imported_function.carbon:[[@LINE-6]]:1: note: while deducing parameters of generic declared here [DeductionGenericHere]
|
||||
// CHECK:STDERR: fn A[T:! Lib.Z](unused x: {.a: T}) {}
|
||||
// CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
// CHECK:STDERR: fn A[T: Lib.Z](unused x: {.a: T}) {}
|
||||
// CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
// CHECK:STDERR:
|
||||
A({.b = {}});
|
||||
|
||||
@@ -39,8 +39,8 @@ fn B() {
|
||||
// CHECK:STDERR: ^~~~~~~~~~~~~~~~
|
||||
// CHECK:STDERR: fail_deduce_imported_function.carbon:[[@LINE-17]]:1: in import [InImport]
|
||||
// CHECK:STDERR: lib.carbon:4:1: note: while deducing parameters of generic declared here [DeductionGenericHere]
|
||||
// CHECK:STDERR: fn A[T:! Z](unused x: {.a: T}) {}
|
||||
// CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
// CHECK:STDERR: fn A[T: Z](unused x: {.a: T}) {}
|
||||
// CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
// CHECK:STDERR:
|
||||
Lib.A({.b = {}});
|
||||
}
|
||||
@@ -73,22 +73,22 @@ fn B() {
|
||||
// CHECK:STDOUT: %Z.decl: type = interface_decl @Z [concrete = constants.%Z.type] {} {}
|
||||
// CHECK:STDOUT: %A.decl: %A.type = fn_decl @A [concrete = constants.%A] {
|
||||
// CHECK:STDOUT: %T.patt.loc4_7.1: %pattern_type.1d1 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_7.2 (constants.%T.patt)]
|
||||
// CHECK:STDOUT: %x.param_patt.loc4_21.1: @A.%pattern_type (%pattern_type.662) = value_param_pattern [symbolic = %x.param_patt.loc4_21.2 (constants.%x.param_patt)]
|
||||
// CHECK:STDOUT: %x.patt.loc4_21.1: @A.%pattern_type (%pattern_type.662) = at_binding_pattern x, %x.param_patt.loc4_21.1 [symbolic = %x.patt.loc4_21.2 (constants.%x.patt)]
|
||||
// CHECK:STDOUT: %x.param_patt.loc4_20.1: @A.%pattern_type (%pattern_type.662) = value_param_pattern [symbolic = %x.param_patt.loc4_20.2 (constants.%x.param_patt)]
|
||||
// CHECK:STDOUT: %x.patt.loc4_20.1: @A.%pattern_type (%pattern_type.662) = at_binding_pattern x, %x.param_patt.loc4_20.1 [symbolic = %x.patt.loc4_20.2 (constants.%x.patt)]
|
||||
// CHECK:STDOUT: } {
|
||||
// CHECK:STDOUT: %.loc4_10: type = splice_block %Z.ref [concrete = constants.%Z.type] {
|
||||
// CHECK:STDOUT: %.loc4_9: type = splice_block %Z.ref [concrete = constants.%Z.type] {
|
||||
// CHECK:STDOUT: %.Self.frozen: %type = symbolic_binding .Self [symbolic_self = constants.%.Self.frozen]
|
||||
// CHECK:STDOUT: %Z.ref: type = name_ref Z, file.%Z.decl [concrete = constants.%Z.type]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %T.loc4_7.2: %Z.type = symbolic_binding T, 0 [symbolic = %T.loc4_7.1 (constants.%T)]
|
||||
// CHECK:STDOUT: %x.param: @A.%struct_type.a.loc4_29.1 (%struct_type.a) = value_param call_param0
|
||||
// CHECK:STDOUT: %.loc4_29: type = splice_block %struct_type.a.loc4_29.2 [symbolic = %struct_type.a.loc4_29.1 (constants.%struct_type.a)] {
|
||||
// CHECK:STDOUT: %x.param: @A.%struct_type.a.loc4_28.1 (%struct_type.a) = value_param call_param0
|
||||
// CHECK:STDOUT: %.loc4_28: type = splice_block %struct_type.a.loc4_28.2 [symbolic = %struct_type.a.loc4_28.1 (constants.%struct_type.a)] {
|
||||
// CHECK:STDOUT: %T.ref: %Z.type = name_ref T, %T.loc4_7.2 [symbolic = %T.loc4_7.1 (constants.%T)]
|
||||
// CHECK:STDOUT: %T.as_type.loc4_28.2: type = facet_access_type %T.ref [symbolic = %T.as_type.loc4_28.1 (constants.%T.as_type)]
|
||||
// CHECK:STDOUT: %.loc4_28: type = converted %T.ref, %T.as_type.loc4_28.2 [symbolic = %T.as_type.loc4_28.1 (constants.%T.as_type)]
|
||||
// CHECK:STDOUT: %struct_type.a.loc4_29.2: type = struct_type {.a: @A.%T.as_type.loc4_28.1 (%T.as_type)} [symbolic = %struct_type.a.loc4_29.1 (constants.%struct_type.a)]
|
||||
// CHECK:STDOUT: %T.as_type.loc4_27.2: type = facet_access_type %T.ref [symbolic = %T.as_type.loc4_27.1 (constants.%T.as_type)]
|
||||
// CHECK:STDOUT: %.loc4_27: type = converted %T.ref, %T.as_type.loc4_27.2 [symbolic = %T.as_type.loc4_27.1 (constants.%T.as_type)]
|
||||
// CHECK:STDOUT: %struct_type.a.loc4_28.2: type = struct_type {.a: @A.%T.as_type.loc4_27.1 (%T.as_type)} [symbolic = %struct_type.a.loc4_28.1 (constants.%struct_type.a)]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %x: @A.%struct_type.a.loc4_29.1 (%struct_type.a) = wrapper_binding x, %x.param
|
||||
// CHECK:STDOUT: %x: @A.%struct_type.a.loc4_28.1 (%struct_type.a) = wrapper_binding x, %x.param
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
@@ -108,16 +108,16 @@ fn B() {
|
||||
// CHECK:STDOUT: generic fn @A(%T.loc4_7.2: %Z.type) {
|
||||
// CHECK:STDOUT: %T.patt.loc4_7.2: %pattern_type.1d1 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_7.2 (constants.%T.patt)]
|
||||
// CHECK:STDOUT: %T.loc4_7.1: %Z.type = symbolic_binding T, 0 [symbolic = %T.loc4_7.1 (constants.%T)]
|
||||
// CHECK:STDOUT: %T.as_type.loc4_28.1: type = facet_access_type %T.loc4_7.1 [symbolic = %T.as_type.loc4_28.1 (constants.%T.as_type)]
|
||||
// CHECK:STDOUT: %struct_type.a.loc4_29.1: type = struct_type {.a: @A.%T.as_type.loc4_28.1 (%T.as_type)} [symbolic = %struct_type.a.loc4_29.1 (constants.%struct_type.a)]
|
||||
// CHECK:STDOUT: %pattern_type: type = pattern_type %struct_type.a.loc4_29.1 [symbolic = %pattern_type (constants.%pattern_type.662)]
|
||||
// CHECK:STDOUT: %x.param_patt.loc4_21.2: @A.%pattern_type (%pattern_type.662) = value_param_pattern [symbolic = %x.param_patt.loc4_21.2 (constants.%x.param_patt)]
|
||||
// CHECK:STDOUT: %x.patt.loc4_21.2: @A.%pattern_type (%pattern_type.662) = at_binding_pattern x, %x.param_patt.loc4_21.2 [symbolic = %x.patt.loc4_21.2 (constants.%x.patt)]
|
||||
// CHECK:STDOUT: %T.as_type.loc4_27.1: type = facet_access_type %T.loc4_7.1 [symbolic = %T.as_type.loc4_27.1 (constants.%T.as_type)]
|
||||
// CHECK:STDOUT: %struct_type.a.loc4_28.1: type = struct_type {.a: @A.%T.as_type.loc4_27.1 (%T.as_type)} [symbolic = %struct_type.a.loc4_28.1 (constants.%struct_type.a)]
|
||||
// CHECK:STDOUT: %pattern_type: type = pattern_type %struct_type.a.loc4_28.1 [symbolic = %pattern_type (constants.%pattern_type.662)]
|
||||
// CHECK:STDOUT: %x.param_patt.loc4_20.2: @A.%pattern_type (%pattern_type.662) = value_param_pattern [symbolic = %x.param_patt.loc4_20.2 (constants.%x.param_patt)]
|
||||
// CHECK:STDOUT: %x.patt.loc4_20.2: @A.%pattern_type (%pattern_type.662) = at_binding_pattern x, %x.param_patt.loc4_20.2 [symbolic = %x.patt.loc4_20.2 (constants.%x.patt)]
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT: %require_complete: <witness> = require_complete_type %struct_type.a.loc4_29.1 [symbolic = %require_complete (constants.%require_complete)]
|
||||
// CHECK:STDOUT: %require_complete: <witness> = require_complete_type %struct_type.a.loc4_28.1 [symbolic = %require_complete (constants.%require_complete)]
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn(%x.param: @A.%struct_type.a.loc4_29.1 (%struct_type.a)) {
|
||||
// CHECK:STDOUT: fn(%x.param: @A.%struct_type.a.loc4_28.1 (%struct_type.a)) {
|
||||
// CHECK:STDOUT: !entry:
|
||||
// CHECK:STDOUT: return
|
||||
// CHECK:STDOUT:
|
||||
@@ -132,11 +132,11 @@ fn B() {
|
||||
// CHECK:STDOUT: specific @A(constants.%T) {
|
||||
// CHECK:STDOUT: %T.patt.loc4_7.2 => constants.%T.patt
|
||||
// CHECK:STDOUT: %T.loc4_7.1 => constants.%T
|
||||
// CHECK:STDOUT: %T.as_type.loc4_28.1 => constants.%T.as_type
|
||||
// CHECK:STDOUT: %struct_type.a.loc4_29.1 => constants.%struct_type.a
|
||||
// CHECK:STDOUT: %T.as_type.loc4_27.1 => constants.%T.as_type
|
||||
// CHECK:STDOUT: %struct_type.a.loc4_28.1 => constants.%struct_type.a
|
||||
// CHECK:STDOUT: %pattern_type => constants.%pattern_type.662
|
||||
// CHECK:STDOUT: %x.param_patt.loc4_21.2 => constants.%x.param_patt
|
||||
// CHECK:STDOUT: %x.patt.loc4_21.2 => constants.%x.patt
|
||||
// CHECK:STDOUT: %x.param_patt.loc4_20.2 => constants.%x.param_patt
|
||||
// CHECK:STDOUT: %x.patt.loc4_20.2 => constants.%x.patt
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: --- fail_deduce_imported_function.carbon
|
||||
@@ -189,23 +189,23 @@ fn B() {
|
||||
// CHECK:STDOUT: %Lib.import = import Lib
|
||||
// CHECK:STDOUT: %A.decl: %A.type.9f4 = fn_decl @A.loc4 [concrete = constants.%A.921] {
|
||||
// CHECK:STDOUT: %T.patt.loc4_7.1: %pattern_type.1d1 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_7.2 (constants.%T.patt)]
|
||||
// CHECK:STDOUT: %x.param_patt.loc4_25.1: @A.loc4.%pattern_type (%pattern_type.662) = value_param_pattern [symbolic = %x.param_patt.loc4_25.2 (constants.%x.param_patt)]
|
||||
// CHECK:STDOUT: %x.patt.loc4_25.1: @A.loc4.%pattern_type (%pattern_type.662) = at_binding_pattern x, %x.param_patt.loc4_25.1 [symbolic = %x.patt.loc4_25.2 (constants.%x.patt.fcf7db.1)]
|
||||
// CHECK:STDOUT: %x.param_patt.loc4_24.1: @A.loc4.%pattern_type (%pattern_type.662) = value_param_pattern [symbolic = %x.param_patt.loc4_24.2 (constants.%x.param_patt)]
|
||||
// CHECK:STDOUT: %x.patt.loc4_24.1: @A.loc4.%pattern_type (%pattern_type.662) = at_binding_pattern x, %x.param_patt.loc4_24.1 [symbolic = %x.patt.loc4_24.2 (constants.%x.patt.fcf7db.1)]
|
||||
// CHECK:STDOUT: } {
|
||||
// CHECK:STDOUT: %.loc4_13: type = splice_block %Z.ref [concrete = constants.%Z.type] {
|
||||
// CHECK:STDOUT: %.loc4_12: type = splice_block %Z.ref [concrete = constants.%Z.type] {
|
||||
// CHECK:STDOUT: %.Self.frozen: %type = symbolic_binding .Self [symbolic_self = constants.%.Self.frozen]
|
||||
// CHECK:STDOUT: %Lib.ref: <namespace> = name_ref Lib, imports.%Lib [concrete = imports.%Lib]
|
||||
// CHECK:STDOUT: %Z.ref: type = name_ref Z, imports.%Lib.Z [concrete = constants.%Z.type]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %T.loc4_7.2: %Z.type = symbolic_binding T, 0 [symbolic = %T.loc4_7.1 (constants.%T)]
|
||||
// CHECK:STDOUT: %x.param: @A.loc4.%struct_type.a.loc4_33.1 (%struct_type.a) = value_param call_param0
|
||||
// CHECK:STDOUT: %.loc4_33: type = splice_block %struct_type.a.loc4_33.2 [symbolic = %struct_type.a.loc4_33.1 (constants.%struct_type.a)] {
|
||||
// CHECK:STDOUT: %x.param: @A.loc4.%struct_type.a.loc4_32.1 (%struct_type.a) = value_param call_param0
|
||||
// CHECK:STDOUT: %.loc4_32: type = splice_block %struct_type.a.loc4_32.2 [symbolic = %struct_type.a.loc4_32.1 (constants.%struct_type.a)] {
|
||||
// CHECK:STDOUT: %T.ref: %Z.type = name_ref T, %T.loc4_7.2 [symbolic = %T.loc4_7.1 (constants.%T)]
|
||||
// CHECK:STDOUT: %T.as_type.loc4_32.2: type = facet_access_type %T.ref [symbolic = %T.as_type.loc4_32.1 (constants.%T.as_type)]
|
||||
// CHECK:STDOUT: %.loc4_32: type = converted %T.ref, %T.as_type.loc4_32.2 [symbolic = %T.as_type.loc4_32.1 (constants.%T.as_type)]
|
||||
// CHECK:STDOUT: %struct_type.a.loc4_33.2: type = struct_type {.a: @A.loc4.%T.as_type.loc4_32.1 (%T.as_type)} [symbolic = %struct_type.a.loc4_33.1 (constants.%struct_type.a)]
|
||||
// CHECK:STDOUT: %T.as_type.loc4_31.2: type = facet_access_type %T.ref [symbolic = %T.as_type.loc4_31.1 (constants.%T.as_type)]
|
||||
// CHECK:STDOUT: %.loc4_31: type = converted %T.ref, %T.as_type.loc4_31.2 [symbolic = %T.as_type.loc4_31.1 (constants.%T.as_type)]
|
||||
// CHECK:STDOUT: %struct_type.a.loc4_32.2: type = struct_type {.a: @A.loc4.%T.as_type.loc4_31.1 (%T.as_type)} [symbolic = %struct_type.a.loc4_32.1 (constants.%struct_type.a)]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %x: @A.loc4.%struct_type.a.loc4_33.1 (%struct_type.a) = wrapper_binding x, %x.param
|
||||
// CHECK:STDOUT: %x: @A.loc4.%struct_type.a.loc4_32.1 (%struct_type.a) = wrapper_binding x, %x.param
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %B.decl: %B.type = fn_decl @B [concrete = constants.%B] {} {}
|
||||
// CHECK:STDOUT: }
|
||||
@@ -223,16 +223,16 @@ fn B() {
|
||||
// CHECK:STDOUT: generic fn @A.loc4(%T.loc4_7.2: %Z.type) {
|
||||
// CHECK:STDOUT: %T.patt.loc4_7.2: %pattern_type.1d1 = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_7.2 (constants.%T.patt)]
|
||||
// CHECK:STDOUT: %T.loc4_7.1: %Z.type = symbolic_binding T, 0 [symbolic = %T.loc4_7.1 (constants.%T)]
|
||||
// CHECK:STDOUT: %T.as_type.loc4_32.1: type = facet_access_type %T.loc4_7.1 [symbolic = %T.as_type.loc4_32.1 (constants.%T.as_type)]
|
||||
// CHECK:STDOUT: %struct_type.a.loc4_33.1: type = struct_type {.a: @A.loc4.%T.as_type.loc4_32.1 (%T.as_type)} [symbolic = %struct_type.a.loc4_33.1 (constants.%struct_type.a)]
|
||||
// CHECK:STDOUT: %pattern_type: type = pattern_type %struct_type.a.loc4_33.1 [symbolic = %pattern_type (constants.%pattern_type.662)]
|
||||
// CHECK:STDOUT: %x.param_patt.loc4_25.2: @A.loc4.%pattern_type (%pattern_type.662) = value_param_pattern [symbolic = %x.param_patt.loc4_25.2 (constants.%x.param_patt)]
|
||||
// CHECK:STDOUT: %x.patt.loc4_25.2: @A.loc4.%pattern_type (%pattern_type.662) = at_binding_pattern x, %x.param_patt.loc4_25.2 [symbolic = %x.patt.loc4_25.2 (constants.%x.patt.fcf7db.1)]
|
||||
// CHECK:STDOUT: %T.as_type.loc4_31.1: type = facet_access_type %T.loc4_7.1 [symbolic = %T.as_type.loc4_31.1 (constants.%T.as_type)]
|
||||
// CHECK:STDOUT: %struct_type.a.loc4_32.1: type = struct_type {.a: @A.loc4.%T.as_type.loc4_31.1 (%T.as_type)} [symbolic = %struct_type.a.loc4_32.1 (constants.%struct_type.a)]
|
||||
// CHECK:STDOUT: %pattern_type: type = pattern_type %struct_type.a.loc4_32.1 [symbolic = %pattern_type (constants.%pattern_type.662)]
|
||||
// CHECK:STDOUT: %x.param_patt.loc4_24.2: @A.loc4.%pattern_type (%pattern_type.662) = value_param_pattern [symbolic = %x.param_patt.loc4_24.2 (constants.%x.param_patt)]
|
||||
// CHECK:STDOUT: %x.patt.loc4_24.2: @A.loc4.%pattern_type (%pattern_type.662) = at_binding_pattern x, %x.param_patt.loc4_24.2 [symbolic = %x.patt.loc4_24.2 (constants.%x.patt.fcf7db.1)]
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT: %require_complete: <witness> = require_complete_type %struct_type.a.loc4_33.1 [symbolic = %require_complete (constants.%require_complete)]
|
||||
// CHECK:STDOUT: %require_complete: <witness> = require_complete_type %struct_type.a.loc4_32.1 [symbolic = %require_complete (constants.%require_complete)]
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn(%x.param: @A.loc4.%struct_type.a.loc4_33.1 (%struct_type.a)) {
|
||||
// CHECK:STDOUT: fn(%x.param: @A.loc4.%struct_type.a.loc4_32.1 (%struct_type.a)) {
|
||||
// CHECK:STDOUT: !entry:
|
||||
// CHECK:STDOUT: return
|
||||
// CHECK:STDOUT:
|
||||
@@ -276,11 +276,11 @@ fn B() {
|
||||
// CHECK:STDOUT: specific @A.loc4(constants.%T) {
|
||||
// CHECK:STDOUT: %T.patt.loc4_7.2 => constants.%T.patt
|
||||
// CHECK:STDOUT: %T.loc4_7.1 => constants.%T
|
||||
// CHECK:STDOUT: %T.as_type.loc4_32.1 => constants.%T.as_type
|
||||
// CHECK:STDOUT: %struct_type.a.loc4_33.1 => constants.%struct_type.a
|
||||
// CHECK:STDOUT: %T.as_type.loc4_31.1 => constants.%T.as_type
|
||||
// CHECK:STDOUT: %struct_type.a.loc4_32.1 => constants.%struct_type.a
|
||||
// CHECK:STDOUT: %pattern_type => constants.%pattern_type.662
|
||||
// CHECK:STDOUT: %x.param_patt.loc4_25.2 => constants.%x.param_patt
|
||||
// CHECK:STDOUT: %x.patt.loc4_25.2 => constants.%x.patt.fcf7db.1
|
||||
// CHECK:STDOUT: %x.param_patt.loc4_24.2 => constants.%x.param_patt
|
||||
// CHECK:STDOUT: %x.patt.loc4_24.2 => constants.%x.patt.fcf7db.1
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific @A.1(constants.%T) {
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
// TIP: To dump output, run:
|
||||
// TIP: bazel run //toolchain/testing:file_test -- --dump_output --file_tests=toolchain/check/testdata/function/generic/fail_type_param_mismatch.carbon
|
||||
|
||||
fn F(T:! type, U:! type) {
|
||||
fn F(generic T: type, generic U: type) {
|
||||
var p: T*;
|
||||
// CHECK:STDERR: fail_type_param_mismatch.carbon:[[@LINE+7]]:21: error: cannot implicitly convert expression of type `T` to `U` [ConversionFailure]
|
||||
// CHECK:STDERR: let unused n: U = *p;
|
||||
|
||||
+10
-10
@@ -12,7 +12,7 @@
|
||||
// TIP: To dump output, run:
|
||||
// TIP: bazel run //toolchain/testing:file_test -- --dump_output --file_tests=toolchain/check/testdata/function/generic/forward_decl.carbon
|
||||
|
||||
fn F(T:! type);
|
||||
fn F(generic T: type);
|
||||
|
||||
// CHECK:STDOUT: --- forward_decl.carbon
|
||||
// CHECK:STDOUT:
|
||||
@@ -31,25 +31,25 @@ fn F(T:! type);
|
||||
// CHECK:STDOUT: .F = %F.decl
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] {
|
||||
// CHECK:STDOUT: %T.patt.loc15_7.1: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc15_7.2 (constants.%T.patt)]
|
||||
// CHECK:STDOUT: %T.patt.loc15_15.1: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc15_15.2 (constants.%T.patt)]
|
||||
// CHECK:STDOUT: } {
|
||||
// CHECK:STDOUT: %.loc15_10.1: type = splice_block %.loc15_10.2 [concrete = type] {
|
||||
// CHECK:STDOUT: %.loc15_17.1: type = splice_block %.loc15_17.2 [concrete = type] {
|
||||
// CHECK:STDOUT: %.Self.frozen: %type = symbolic_binding .Self [symbolic_self = constants.%.Self.frozen]
|
||||
// CHECK:STDOUT: %.loc15_10.2: type = type_literal type [concrete = type]
|
||||
// CHECK:STDOUT: %.loc15_17.2: type = type_literal type [concrete = type]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %T.loc15_7.2: type = symbolic_binding T, 0 [symbolic = %T.loc15_7.1 (constants.%T)]
|
||||
// CHECK:STDOUT: %T.loc15_15.2: type = symbolic_binding T, 0 [symbolic = %T.loc15_15.1 (constants.%T)]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: generic fn @F(%T.loc15_7.2: type) {
|
||||
// CHECK:STDOUT: %T.patt.loc15_7.2: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc15_7.2 (constants.%T.patt)]
|
||||
// CHECK:STDOUT: %T.loc15_7.1: type = symbolic_binding T, 0 [symbolic = %T.loc15_7.1 (constants.%T)]
|
||||
// CHECK:STDOUT: generic fn @F(%T.loc15_15.2: type) {
|
||||
// CHECK:STDOUT: %T.patt.loc15_15.2: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc15_15.2 (constants.%T.patt)]
|
||||
// CHECK:STDOUT: %T.loc15_15.1: type = symbolic_binding T, 0 [symbolic = %T.loc15_15.1 (constants.%T)]
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn();
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific @F(constants.%T) {
|
||||
// CHECK:STDOUT: %T.patt.loc15_7.2 => constants.%T.patt
|
||||
// CHECK:STDOUT: %T.loc15_7.1 => constants.%T
|
||||
// CHECK:STDOUT: %T.patt.loc15_15.2 => constants.%T.patt
|
||||
// CHECK:STDOUT: %T.loc15_15.1 => constants.%T
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
|
||||
@@ -16,10 +16,10 @@
|
||||
|
||||
library "[[@TEST_NAME]]";
|
||||
|
||||
fn F(unused T:! type) {
|
||||
fn F(unused generic T: type) {
|
||||
}
|
||||
|
||||
fn G(T:! type) {
|
||||
fn G(generic T: type) {
|
||||
F(T);
|
||||
}
|
||||
|
||||
@@ -62,28 +62,28 @@ fn H() {
|
||||
// CHECK:STDOUT: .G = %G.decl
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] {
|
||||
// CHECK:STDOUT: %T.patt.loc4_14.1: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_14.2 (constants.%T.patt.d47011.1)]
|
||||
// CHECK:STDOUT: %T.patt.loc4_22.1: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_22.2 (constants.%T.patt.d47011.1)]
|
||||
// CHECK:STDOUT: } {
|
||||
// CHECK:STDOUT: %.loc4_17.1: type = splice_block %.loc4_17.2 [concrete = type] {
|
||||
// CHECK:STDOUT: %.loc4_24.1: type = splice_block %.loc4_24.2 [concrete = type] {
|
||||
// CHECK:STDOUT: %.Self.frozen: %type = symbolic_binding .Self [symbolic_self = constants.%.Self.frozen]
|
||||
// CHECK:STDOUT: %.loc4_17.2: type = type_literal type [concrete = type]
|
||||
// CHECK:STDOUT: %.loc4_24.2: type = type_literal type [concrete = type]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %T.loc4_14.2: type = symbolic_binding T, 0 [symbolic = %T.loc4_14.1 (constants.%T.67db0b.1)]
|
||||
// CHECK:STDOUT: %T.loc4_22.2: type = symbolic_binding T, 0 [symbolic = %T.loc4_22.1 (constants.%T.67db0b.1)]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] {
|
||||
// CHECK:STDOUT: %T.patt.loc7_7.1: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc7_7.2 (constants.%T.patt.d47011.2)]
|
||||
// CHECK:STDOUT: %T.patt.loc7_15.1: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc7_15.2 (constants.%T.patt.d47011.2)]
|
||||
// CHECK:STDOUT: } {
|
||||
// CHECK:STDOUT: %.loc7_10.1: type = splice_block %.loc7_10.2 [concrete = type] {
|
||||
// CHECK:STDOUT: %.loc7_17.1: type = splice_block %.loc7_17.2 [concrete = type] {
|
||||
// CHECK:STDOUT: %.Self.frozen: %type = symbolic_binding .Self [symbolic_self = constants.%.Self.frozen]
|
||||
// CHECK:STDOUT: %.loc7_10.2: type = type_literal type [concrete = type]
|
||||
// CHECK:STDOUT: %.loc7_17.2: type = type_literal type [concrete = type]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %T.loc7_7.2: type = symbolic_binding T, 0 [symbolic = %T.loc7_7.1 (constants.%T.67db0b.2)]
|
||||
// CHECK:STDOUT: %T.loc7_15.2: type = symbolic_binding T, 0 [symbolic = %T.loc7_15.1 (constants.%T.67db0b.2)]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: generic fn @F(%T.loc4_14.2: type) {
|
||||
// CHECK:STDOUT: %T.patt.loc4_14.2: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_14.2 (constants.%T.patt.d47011.1)]
|
||||
// CHECK:STDOUT: %T.loc4_14.1: type = symbolic_binding T, 0 [symbolic = %T.loc4_14.1 (constants.%T.67db0b.1)]
|
||||
// CHECK:STDOUT: generic fn @F(%T.loc4_22.2: type) {
|
||||
// CHECK:STDOUT: %T.patt.loc4_22.2: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_22.2 (constants.%T.patt.d47011.1)]
|
||||
// CHECK:STDOUT: %T.loc4_22.1: type = symbolic_binding T, 0 [symbolic = %T.loc4_22.1 (constants.%T.67db0b.1)]
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT:
|
||||
@@ -95,17 +95,17 @@ fn H() {
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: generic fn @G(%T.loc7_7.2: type) {
|
||||
// CHECK:STDOUT: %T.patt.loc7_7.2: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc7_7.2 (constants.%T.patt.d47011.2)]
|
||||
// CHECK:STDOUT: %T.loc7_7.1: type = symbolic_binding T, 0 [symbolic = %T.loc7_7.1 (constants.%T.67db0b.2)]
|
||||
// CHECK:STDOUT: generic fn @G(%T.loc7_15.2: type) {
|
||||
// CHECK:STDOUT: %T.patt.loc7_15.2: %pattern_type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc7_15.2 (constants.%T.patt.d47011.2)]
|
||||
// CHECK:STDOUT: %T.loc7_15.1: type = symbolic_binding T, 0 [symbolic = %T.loc7_15.1 (constants.%T.67db0b.2)]
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT: %F.specific_fn.loc8_3.2: <specific function> = specific_function constants.%F, @F(%T.loc7_7.1) [symbolic = %F.specific_fn.loc8_3.2 (constants.%F.specific_fn)]
|
||||
// CHECK:STDOUT: %F.specific_fn.loc8_3.2: <specific function> = specific_function constants.%F, @F(%T.loc7_15.1) [symbolic = %F.specific_fn.loc8_3.2 (constants.%F.specific_fn)]
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn() {
|
||||
// CHECK:STDOUT: !entry:
|
||||
// CHECK:STDOUT: %F.ref: %F.type = name_ref F, file.%F.decl [concrete = constants.%F]
|
||||
// CHECK:STDOUT: %T.ref: type = name_ref T, %T.loc7_7.2 [symbolic = %T.loc7_7.1 (constants.%T.67db0b.2)]
|
||||
// CHECK:STDOUT: %T.ref: type = name_ref T, %T.loc7_15.2 [symbolic = %T.loc7_15.1 (constants.%T.67db0b.2)]
|
||||
// CHECK:STDOUT: %F.specific_fn.loc8_3.1: <specific function> = specific_function %F.ref, @F(constants.%T.67db0b.2) [symbolic = %F.specific_fn.loc8_3.2 (constants.%F.specific_fn)]
|
||||
// CHECK:STDOUT: %F.call: init %empty_tuple.type = call %F.specific_fn.loc8_3.1()
|
||||
// CHECK:STDOUT: return
|
||||
@@ -115,18 +115,18 @@ fn H() {
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific @F(constants.%T.67db0b.1) {
|
||||
// CHECK:STDOUT: %T.patt.loc4_14.2 => constants.%T.patt.d47011.1
|
||||
// CHECK:STDOUT: %T.loc4_14.1 => constants.%T.67db0b.1
|
||||
// CHECK:STDOUT: %T.patt.loc4_22.2 => constants.%T.patt.d47011.1
|
||||
// CHECK:STDOUT: %T.loc4_22.1 => constants.%T.67db0b.1
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific @G(constants.%T.67db0b.2) {
|
||||
// CHECK:STDOUT: %T.patt.loc7_7.2 => constants.%T.patt.d47011.2
|
||||
// CHECK:STDOUT: %T.loc7_7.1 => constants.%T.67db0b.2
|
||||
// CHECK:STDOUT: %T.patt.loc7_15.2 => constants.%T.patt.d47011.2
|
||||
// CHECK:STDOUT: %T.loc7_15.1 => constants.%T.67db0b.2
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific @F(constants.%T.67db0b.2) {
|
||||
// CHECK:STDOUT: %T.patt.loc4_14.2 => constants.%T.patt.d47011.1
|
||||
// CHECK:STDOUT: %T.loc4_14.1 => constants.%T.67db0b.2
|
||||
// CHECK:STDOUT: %T.patt.loc4_22.2 => constants.%T.patt.d47011.1
|
||||
// CHECK:STDOUT: %T.loc4_22.1 => constants.%T.67db0b.2
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT: }
|
||||
@@ -156,8 +156,8 @@ fn H() {
|
||||
// CHECK:STDOUT: imports {
|
||||
// CHECK:STDOUT: %Main.F: %F.type = import_ref Main//library, F, loaded [concrete = constants.%F]
|
||||
// CHECK:STDOUT: %Main.G: %G.type = import_ref Main//library, G, loaded [concrete = constants.%G]
|
||||
// CHECK:STDOUT: %Main.import_ref.b3bc94.1: type = import_ref Main//library, loc4_14, loaded [symbolic = @F.%T (constants.%T.67db0b.1)]
|
||||
// CHECK:STDOUT: %Main.import_ref.b3bc94.2: type = import_ref Main//library, loc7_7, loaded [symbolic = @G.%T (constants.%T.67db0b.2)]
|
||||
// CHECK:STDOUT: %Main.import_ref.b3bc94.1: type = import_ref Main//library, loc4_22, loaded [symbolic = @F.%T (constants.%T.67db0b.1)]
|
||||
// CHECK:STDOUT: %Main.import_ref.b3bc94.2: type = import_ref Main//library, loc7_15, loaded [symbolic = @G.%T (constants.%T.67db0b.2)]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: file {
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
|
||||
library "[[@TEST_NAME]]";
|
||||
|
||||
fn F(T:! type, p: T**) -> T* {
|
||||
fn F(generic T: type, p: T**) -> T* {
|
||||
//@dump-sem-ir-begin
|
||||
return *p;
|
||||
//@dump-sem-ir-end
|
||||
@@ -46,24 +46,24 @@ fn F(T:! type, p: T**) -> T* {
|
||||
// CHECK:STDOUT: %specific_impl_fn.a76: <specific function> = specific_impl_function %impl.elem0.484, @Copy.WithSelf.Op(%Copy.facet) [symbolic]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: generic fn @F(%T.loc4_7.2: type) {
|
||||
// CHECK:STDOUT: generic fn @F(%T.loc4_15.2: type) {
|
||||
// CHECK:STDOUT: <elided>
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT: <elided>
|
||||
// CHECK:STDOUT: %.loc6_10.5: require_specific_def_type = require_specific_def @ptr.as.Copy.impl(%T.loc4_7.1) [symbolic = %.loc6_10.5 (constants.%.0e9)]
|
||||
// CHECK:STDOUT: %Copy.lookup_impl_witness: <witness> = lookup_impl_witness %ptr.loc4_20.1, @Copy [symbolic = %Copy.lookup_impl_witness (constants.%Copy.lookup_impl_witness.1da)]
|
||||
// CHECK:STDOUT: %Copy.facet.loc6_10.3: %Copy.type = facet_value %ptr.loc4_20.1, (%Copy.lookup_impl_witness) [symbolic = %Copy.facet.loc6_10.3 (constants.%Copy.facet)]
|
||||
// CHECK:STDOUT: %.loc6_10.5: require_specific_def_type = require_specific_def @ptr.as.Copy.impl(%T.loc4_15.1) [symbolic = %.loc6_10.5 (constants.%.0e9)]
|
||||
// CHECK:STDOUT: %Copy.lookup_impl_witness: <witness> = lookup_impl_witness %ptr.loc4_27.1, @Copy [symbolic = %Copy.lookup_impl_witness (constants.%Copy.lookup_impl_witness.1da)]
|
||||
// CHECK:STDOUT: %Copy.facet.loc6_10.3: %Copy.type = facet_value %ptr.loc4_27.1, (%Copy.lookup_impl_witness) [symbolic = %Copy.facet.loc6_10.3 (constants.%Copy.facet)]
|
||||
// CHECK:STDOUT: %Copy.WithSelf.Op.type: type = fn_type @Copy.WithSelf.Op, @Copy.WithSelf(%Copy.facet.loc6_10.3) [symbolic = %Copy.WithSelf.Op.type (constants.%Copy.WithSelf.Op.type.884)]
|
||||
// CHECK:STDOUT: %.loc6_10.6: type = fn_type_with_self_type %Copy.WithSelf.Op.type, %Copy.facet.loc6_10.3 [symbolic = %.loc6_10.6 (constants.%.be5)]
|
||||
// CHECK:STDOUT: %impl.elem0.loc6_10.2: @F.%.loc6_10.6 (%.be5) = impl_witness_access %Copy.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc6_10.2 (constants.%impl.elem0.484)]
|
||||
// CHECK:STDOUT: %specific_impl_fn.loc6_10.2: <specific function> = specific_impl_function %impl.elem0.loc6_10.2, @Copy.WithSelf.Op(%Copy.facet.loc6_10.3) [symbolic = %specific_impl_fn.loc6_10.2 (constants.%specific_impl_fn.a76)]
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn(%p.param: @F.%ptr.loc4_21.1 (%ptr.125)) -> out %return.param: @F.%ptr.loc4_20.1 (%ptr.e8f) {
|
||||
// CHECK:STDOUT: fn(%p.param: @F.%ptr.loc4_28.1 (%ptr.125)) -> out %return.param: @F.%ptr.loc4_27.1 (%ptr.e8f) {
|
||||
// CHECK:STDOUT: !entry:
|
||||
// CHECK:STDOUT: %p.ref: @F.%ptr.loc4_21.1 (%ptr.125) = name_ref p, %p
|
||||
// CHECK:STDOUT: %.loc6_10.1: ref @F.%ptr.loc4_20.1 (%ptr.e8f) = deref %p.ref
|
||||
// CHECK:STDOUT: %.loc6_10.2: @F.%ptr.loc4_20.1 (%ptr.e8f) = acquire_value %.loc6_10.1
|
||||
// CHECK:STDOUT: %p.ref: @F.%ptr.loc4_28.1 (%ptr.125) = name_ref p, %p
|
||||
// CHECK:STDOUT: %.loc6_10.1: ref @F.%ptr.loc4_27.1 (%ptr.e8f) = deref %p.ref
|
||||
// CHECK:STDOUT: %.loc6_10.2: @F.%ptr.loc4_27.1 (%ptr.e8f) = acquire_value %.loc6_10.1
|
||||
// CHECK:STDOUT: %impl.elem0.loc6_10.1: @F.%.loc6_10.6 (%.be5) = impl_witness_access constants.%Copy.lookup_impl_witness.1da, element0 [symbolic = %impl.elem0.loc6_10.2 (constants.%impl.elem0.484)]
|
||||
// CHECK:STDOUT: %bound_method.loc6_10.1: <bound method> = bound_method %.loc6_10.2, %impl.elem0.loc6_10.1
|
||||
// CHECK:STDOUT: %Copy.facet.loc6_10.1: %Copy.type = facet_value constants.%ptr.e8f, (constants.%Copy.lookup_impl_witness.1da) [symbolic = %Copy.facet.loc6_10.3 (constants.%Copy.facet)]
|
||||
@@ -72,7 +72,7 @@ fn F(T:! type, p: T**) -> T* {
|
||||
// CHECK:STDOUT: %.loc6_10.4: %Copy.type = converted constants.%ptr.e8f, %Copy.facet.loc6_10.2 [symbolic = %Copy.facet.loc6_10.3 (constants.%Copy.facet)]
|
||||
// CHECK:STDOUT: %specific_impl_fn.loc6_10.1: <specific function> = specific_impl_function %impl.elem0.loc6_10.1, @Copy.WithSelf.Op(constants.%Copy.facet) [symbolic = %specific_impl_fn.loc6_10.2 (constants.%specific_impl_fn.a76)]
|
||||
// CHECK:STDOUT: %bound_method.loc6_10.2: <bound method> = bound_method %.loc6_10.2, %specific_impl_fn.loc6_10.1
|
||||
// CHECK:STDOUT: %Copy.WithSelf.Op.call: init @F.%ptr.loc4_20.1 (%ptr.e8f) = call %bound_method.loc6_10.2(%.loc6_10.2)
|
||||
// CHECK:STDOUT: %Copy.WithSelf.Op.call: init @F.%ptr.loc4_27.1 (%ptr.e8f) = call %bound_method.loc6_10.2(%.loc6_10.2)
|
||||
// CHECK:STDOUT: return %Copy.WithSelf.Op.call
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !observes:
|
||||
@@ -80,16 +80,16 @@ fn F(T:! type, p: T**) -> T* {
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific @F(constants.%T.67d) {
|
||||
// CHECK:STDOUT: %T.patt.loc4_7.2 => constants.%T.patt.d47
|
||||
// CHECK:STDOUT: %T.loc4_7.1 => constants.%T.67d
|
||||
// CHECK:STDOUT: %ptr.loc4_20.1 => constants.%ptr.e8f
|
||||
// CHECK:STDOUT: %ptr.loc4_21.1 => constants.%ptr.125
|
||||
// CHECK:STDOUT: %pattern_type.loc4_17 => constants.%pattern_type.8bb
|
||||
// CHECK:STDOUT: %p.param_patt.loc4_17.2 => constants.%p.param_patt
|
||||
// CHECK:STDOUT: %p.patt.loc4_17.2 => constants.%p.patt
|
||||
// CHECK:STDOUT: %.loc4_28.1 => constants.%.cb6
|
||||
// CHECK:STDOUT: %pattern_type.loc4_28 => constants.%pattern_type.4f4
|
||||
// CHECK:STDOUT: %return.param_patt.loc4_28.2 => constants.%return.param_patt.27f
|
||||
// CHECK:STDOUT: %return.patt.loc4_24.2 => constants.%return.patt.d67
|
||||
// CHECK:STDOUT: %T.patt.loc4_15.2 => constants.%T.patt.d47
|
||||
// CHECK:STDOUT: %T.loc4_15.1 => constants.%T.67d
|
||||
// CHECK:STDOUT: %ptr.loc4_27.1 => constants.%ptr.e8f
|
||||
// CHECK:STDOUT: %ptr.loc4_28.1 => constants.%ptr.125
|
||||
// CHECK:STDOUT: %pattern_type.loc4_24 => constants.%pattern_type.8bb
|
||||
// CHECK:STDOUT: %p.param_patt.loc4_24.2 => constants.%p.param_patt
|
||||
// CHECK:STDOUT: %p.patt.loc4_24.2 => constants.%p.patt
|
||||
// CHECK:STDOUT: %.loc4_35.1 => constants.%.cb6
|
||||
// CHECK:STDOUT: %pattern_type.loc4_35 => constants.%pattern_type.4f4
|
||||
// CHECK:STDOUT: %return.param_patt.loc4_35.2 => constants.%return.param_patt.27f
|
||||
// CHECK:STDOUT: %return.patt.loc4_31.2 => constants.%return.patt.d67
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
|
||||
+39
-39
@@ -12,7 +12,7 @@
|
||||
// TIP: To dump output, run:
|
||||
// TIP: bazel run //toolchain/testing:file_test -- --dump_output --file_tests=toolchain/check/testdata/function/generic/param_in_type.carbon
|
||||
|
||||
fn F(N:! i32, a: array(i32, N)*);
|
||||
fn F(generic N: i32, a: array(i32, N)*);
|
||||
|
||||
// CHECK:STDOUT: --- param_in_type.carbon
|
||||
// CHECK:STDOUT:
|
||||
@@ -71,58 +71,58 @@ fn F(N:! i32, a: array(i32, N)*);
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %Core.import = import Core
|
||||
// CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] {
|
||||
// CHECK:STDOUT: %N.patt.loc15_7.1: %pattern_type.6b6 = symbolic_binding_pattern N, 0 [symbolic = %N.patt.loc15_7.2 (constants.%N.patt.38a)]
|
||||
// CHECK:STDOUT: %a.param_patt.loc15_16.1: @F.%pattern_type (%pattern_type.5a4) = value_param_pattern [symbolic = %a.param_patt.loc15_16.2 (constants.%a.param_patt)]
|
||||
// CHECK:STDOUT: %a.patt.loc15_16.1: @F.%pattern_type (%pattern_type.5a4) = at_binding_pattern a, %a.param_patt.loc15_16.1 [symbolic = %a.patt.loc15_16.2 (constants.%a.patt)]
|
||||
// CHECK:STDOUT: %N.patt.loc15_15.1: %pattern_type.6b6 = symbolic_binding_pattern N, 0 [symbolic = %N.patt.loc15_15.2 (constants.%N.patt.38a)]
|
||||
// CHECK:STDOUT: %a.param_patt.loc15_23.1: @F.%pattern_type (%pattern_type.5a4) = value_param_pattern [symbolic = %a.param_patt.loc15_23.2 (constants.%a.param_patt)]
|
||||
// CHECK:STDOUT: %a.patt.loc15_23.1: @F.%pattern_type (%pattern_type.5a4) = at_binding_pattern a, %a.param_patt.loc15_23.1 [symbolic = %a.patt.loc15_23.2 (constants.%a.patt)]
|
||||
// CHECK:STDOUT: } {
|
||||
// CHECK:STDOUT: %.loc15_10: type = splice_block %i32.loc15_10 [concrete = constants.%i32] {
|
||||
// CHECK:STDOUT: %.loc15_17: type = splice_block %i32.loc15_17 [concrete = constants.%i32] {
|
||||
// CHECK:STDOUT: %.Self.frozen: %type = symbolic_binding .Self [symbolic_self = constants.%.Self.frozen]
|
||||
// CHECK:STDOUT: %i32.loc15_10: type = type_literal constants.%i32 [concrete = constants.%i32]
|
||||
// CHECK:STDOUT: %i32.loc15_17: type = type_literal constants.%i32 [concrete = constants.%i32]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %N.loc15_7.2: %i32 = symbolic_binding N, 0 [symbolic = %N.loc15_7.1 (constants.%N.37f)]
|
||||
// CHECK:STDOUT: %a.param: @F.%ptr.loc15_31.1 (%ptr) = value_param call_param0
|
||||
// CHECK:STDOUT: %.loc15_31: type = splice_block %ptr.loc15_31.2 [symbolic = %ptr.loc15_31.1 (constants.%ptr)] {
|
||||
// CHECK:STDOUT: %i32.loc15_24: type = type_literal constants.%i32 [concrete = constants.%i32]
|
||||
// CHECK:STDOUT: %N.ref: %i32 = name_ref N, %N.loc15_7.2 [symbolic = %N.loc15_7.1 (constants.%N.37f)]
|
||||
// CHECK:STDOUT: %N.loc15_15.2: %i32 = symbolic_binding N, 0 [symbolic = %N.loc15_15.1 (constants.%N.37f)]
|
||||
// CHECK:STDOUT: %a.param: @F.%ptr.loc15_38.1 (%ptr) = value_param call_param0
|
||||
// CHECK:STDOUT: %.loc15_38: type = splice_block %ptr.loc15_38.2 [symbolic = %ptr.loc15_38.1 (constants.%ptr)] {
|
||||
// CHECK:STDOUT: %i32.loc15_31: type = type_literal constants.%i32 [concrete = constants.%i32]
|
||||
// CHECK:STDOUT: %N.ref: %i32 = name_ref N, %N.loc15_15.2 [symbolic = %N.loc15_15.1 (constants.%N.37f)]
|
||||
// CHECK:STDOUT: %impl.elem0: %.b08 = impl_witness_access constants.%ImplicitAs.impl_witness.416, element0 [concrete = constants.%Int.as.ImplicitAs.impl.Convert.69e]
|
||||
// CHECK:STDOUT: %bound_method.loc15_29.2: <bound method> = bound_method %N.ref, %impl.elem0 [symbolic = %Int.as.ImplicitAs.impl.Convert.bound (constants.%Int.as.ImplicitAs.impl.Convert.bound)]
|
||||
// CHECK:STDOUT: %bound_method.loc15_36.2: <bound method> = bound_method %N.ref, %impl.elem0 [symbolic = %Int.as.ImplicitAs.impl.Convert.bound (constants.%Int.as.ImplicitAs.impl.Convert.bound)]
|
||||
// CHECK:STDOUT: %specific_fn: <specific function> = specific_function %impl.elem0, @Int.as.ImplicitAs.impl.Convert(constants.%int_32) [concrete = constants.%Int.as.ImplicitAs.impl.Convert.specific_fn]
|
||||
// CHECK:STDOUT: %bound_method.loc15_29.3: <bound method> = bound_method %N.ref, %specific_fn [symbolic = %bound_method.loc15_29.1 (constants.%bound_method)]
|
||||
// CHECK:STDOUT: %Int.as.ImplicitAs.impl.Convert.call.loc15_29.2: init Core.IntLiteral = call %bound_method.loc15_29.3(%N.ref) [symbolic = %Int.as.ImplicitAs.impl.Convert.call.loc15_29.1 (constants.%Int.as.ImplicitAs.impl.Convert.call)]
|
||||
// CHECK:STDOUT: %.loc15_29.1: Core.IntLiteral = value_of_initializer %Int.as.ImplicitAs.impl.Convert.call.loc15_29.2 [symbolic = %Int.as.ImplicitAs.impl.Convert.call.loc15_29.1 (constants.%Int.as.ImplicitAs.impl.Convert.call)]
|
||||
// CHECK:STDOUT: %.loc15_29.2: Core.IntLiteral = converted %N.ref, %.loc15_29.1 [symbolic = %Int.as.ImplicitAs.impl.Convert.call.loc15_29.1 (constants.%Int.as.ImplicitAs.impl.Convert.call)]
|
||||
// CHECK:STDOUT: %array_type.loc15_30.2: type = array_type %.loc15_29.2, %i32.loc15_24 [symbolic = %array_type.loc15_30.1 (constants.%array_type)]
|
||||
// CHECK:STDOUT: %ptr.loc15_31.2: type = ptr_type %array_type.loc15_30.2 [symbolic = %ptr.loc15_31.1 (constants.%ptr)]
|
||||
// CHECK:STDOUT: %bound_method.loc15_36.3: <bound method> = bound_method %N.ref, %specific_fn [symbolic = %bound_method.loc15_36.1 (constants.%bound_method)]
|
||||
// CHECK:STDOUT: %Int.as.ImplicitAs.impl.Convert.call.loc15_36.2: init Core.IntLiteral = call %bound_method.loc15_36.3(%N.ref) [symbolic = %Int.as.ImplicitAs.impl.Convert.call.loc15_36.1 (constants.%Int.as.ImplicitAs.impl.Convert.call)]
|
||||
// CHECK:STDOUT: %.loc15_36.1: Core.IntLiteral = value_of_initializer %Int.as.ImplicitAs.impl.Convert.call.loc15_36.2 [symbolic = %Int.as.ImplicitAs.impl.Convert.call.loc15_36.1 (constants.%Int.as.ImplicitAs.impl.Convert.call)]
|
||||
// CHECK:STDOUT: %.loc15_36.2: Core.IntLiteral = converted %N.ref, %.loc15_36.1 [symbolic = %Int.as.ImplicitAs.impl.Convert.call.loc15_36.1 (constants.%Int.as.ImplicitAs.impl.Convert.call)]
|
||||
// CHECK:STDOUT: %array_type.loc15_37.2: type = array_type %.loc15_36.2, %i32.loc15_31 [symbolic = %array_type.loc15_37.1 (constants.%array_type)]
|
||||
// CHECK:STDOUT: %ptr.loc15_38.2: type = ptr_type %array_type.loc15_37.2 [symbolic = %ptr.loc15_38.1 (constants.%ptr)]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %a: @F.%ptr.loc15_31.1 (%ptr) = wrapper_binding a, %a.param
|
||||
// CHECK:STDOUT: %a: @F.%ptr.loc15_38.1 (%ptr) = wrapper_binding a, %a.param
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: generic fn @F(%N.loc15_7.2: %i32) {
|
||||
// CHECK:STDOUT: %N.patt.loc15_7.2: %pattern_type.6b6 = symbolic_binding_pattern N, 0 [symbolic = %N.patt.loc15_7.2 (constants.%N.patt.38a)]
|
||||
// CHECK:STDOUT: %N.loc15_7.1: %i32 = symbolic_binding N, 0 [symbolic = %N.loc15_7.1 (constants.%N.37f)]
|
||||
// CHECK:STDOUT: %Int.as.ImplicitAs.impl.Convert.bound: <bound method> = bound_method %N.loc15_7.1, constants.%Int.as.ImplicitAs.impl.Convert.69e [symbolic = %Int.as.ImplicitAs.impl.Convert.bound (constants.%Int.as.ImplicitAs.impl.Convert.bound)]
|
||||
// CHECK:STDOUT: %bound_method.loc15_29.1: <bound method> = bound_method %N.loc15_7.1, constants.%Int.as.ImplicitAs.impl.Convert.specific_fn [symbolic = %bound_method.loc15_29.1 (constants.%bound_method)]
|
||||
// CHECK:STDOUT: %Int.as.ImplicitAs.impl.Convert.call.loc15_29.1: init Core.IntLiteral = call %bound_method.loc15_29.1(%N.loc15_7.1) [symbolic = %Int.as.ImplicitAs.impl.Convert.call.loc15_29.1 (constants.%Int.as.ImplicitAs.impl.Convert.call)]
|
||||
// CHECK:STDOUT: %array_type.loc15_30.1: type = array_type %Int.as.ImplicitAs.impl.Convert.call.loc15_29.1, constants.%i32 [symbolic = %array_type.loc15_30.1 (constants.%array_type)]
|
||||
// CHECK:STDOUT: %ptr.loc15_31.1: type = ptr_type %array_type.loc15_30.1 [symbolic = %ptr.loc15_31.1 (constants.%ptr)]
|
||||
// CHECK:STDOUT: %pattern_type: type = pattern_type %ptr.loc15_31.1 [symbolic = %pattern_type (constants.%pattern_type.5a4)]
|
||||
// CHECK:STDOUT: %a.param_patt.loc15_16.2: @F.%pattern_type (%pattern_type.5a4) = value_param_pattern [symbolic = %a.param_patt.loc15_16.2 (constants.%a.param_patt)]
|
||||
// CHECK:STDOUT: %a.patt.loc15_16.2: @F.%pattern_type (%pattern_type.5a4) = at_binding_pattern a, %a.param_patt.loc15_16.2 [symbolic = %a.patt.loc15_16.2 (constants.%a.patt)]
|
||||
// CHECK:STDOUT: generic fn @F(%N.loc15_15.2: %i32) {
|
||||
// CHECK:STDOUT: %N.patt.loc15_15.2: %pattern_type.6b6 = symbolic_binding_pattern N, 0 [symbolic = %N.patt.loc15_15.2 (constants.%N.patt.38a)]
|
||||
// CHECK:STDOUT: %N.loc15_15.1: %i32 = symbolic_binding N, 0 [symbolic = %N.loc15_15.1 (constants.%N.37f)]
|
||||
// CHECK:STDOUT: %Int.as.ImplicitAs.impl.Convert.bound: <bound method> = bound_method %N.loc15_15.1, constants.%Int.as.ImplicitAs.impl.Convert.69e [symbolic = %Int.as.ImplicitAs.impl.Convert.bound (constants.%Int.as.ImplicitAs.impl.Convert.bound)]
|
||||
// CHECK:STDOUT: %bound_method.loc15_36.1: <bound method> = bound_method %N.loc15_15.1, constants.%Int.as.ImplicitAs.impl.Convert.specific_fn [symbolic = %bound_method.loc15_36.1 (constants.%bound_method)]
|
||||
// CHECK:STDOUT: %Int.as.ImplicitAs.impl.Convert.call.loc15_36.1: init Core.IntLiteral = call %bound_method.loc15_36.1(%N.loc15_15.1) [symbolic = %Int.as.ImplicitAs.impl.Convert.call.loc15_36.1 (constants.%Int.as.ImplicitAs.impl.Convert.call)]
|
||||
// CHECK:STDOUT: %array_type.loc15_37.1: type = array_type %Int.as.ImplicitAs.impl.Convert.call.loc15_36.1, constants.%i32 [symbolic = %array_type.loc15_37.1 (constants.%array_type)]
|
||||
// CHECK:STDOUT: %ptr.loc15_38.1: type = ptr_type %array_type.loc15_37.1 [symbolic = %ptr.loc15_38.1 (constants.%ptr)]
|
||||
// CHECK:STDOUT: %pattern_type: type = pattern_type %ptr.loc15_38.1 [symbolic = %pattern_type (constants.%pattern_type.5a4)]
|
||||
// CHECK:STDOUT: %a.param_patt.loc15_23.2: @F.%pattern_type (%pattern_type.5a4) = value_param_pattern [symbolic = %a.param_patt.loc15_23.2 (constants.%a.param_patt)]
|
||||
// CHECK:STDOUT: %a.patt.loc15_23.2: @F.%pattern_type (%pattern_type.5a4) = at_binding_pattern a, %a.param_patt.loc15_23.2 [symbolic = %a.patt.loc15_23.2 (constants.%a.patt)]
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn(%a.param: @F.%ptr.loc15_31.1 (%ptr));
|
||||
// CHECK:STDOUT: fn(%a.param: @F.%ptr.loc15_38.1 (%ptr));
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific @F(constants.%N.37f) {
|
||||
// CHECK:STDOUT: %N.patt.loc15_7.2 => constants.%N.patt.38a
|
||||
// CHECK:STDOUT: %N.loc15_7.1 => constants.%N.37f
|
||||
// CHECK:STDOUT: %N.patt.loc15_15.2 => constants.%N.patt.38a
|
||||
// CHECK:STDOUT: %N.loc15_15.1 => constants.%N.37f
|
||||
// CHECK:STDOUT: %Int.as.ImplicitAs.impl.Convert.bound => constants.%Int.as.ImplicitAs.impl.Convert.bound
|
||||
// CHECK:STDOUT: %bound_method.loc15_29.1 => constants.%bound_method
|
||||
// CHECK:STDOUT: %Int.as.ImplicitAs.impl.Convert.call.loc15_29.1 => constants.%Int.as.ImplicitAs.impl.Convert.call
|
||||
// CHECK:STDOUT: %array_type.loc15_30.1 => constants.%array_type
|
||||
// CHECK:STDOUT: %ptr.loc15_31.1 => constants.%ptr
|
||||
// CHECK:STDOUT: %bound_method.loc15_36.1 => constants.%bound_method
|
||||
// CHECK:STDOUT: %Int.as.ImplicitAs.impl.Convert.call.loc15_36.1 => constants.%Int.as.ImplicitAs.impl.Convert.call
|
||||
// CHECK:STDOUT: %array_type.loc15_37.1 => constants.%array_type
|
||||
// CHECK:STDOUT: %ptr.loc15_38.1 => constants.%ptr
|
||||
// CHECK:STDOUT: %pattern_type => constants.%pattern_type.5a4
|
||||
// CHECK:STDOUT: %a.param_patt.loc15_16.2 => constants.%a.param_patt
|
||||
// CHECK:STDOUT: %a.patt.loc15_16.2 => constants.%a.patt
|
||||
// CHECK:STDOUT: %a.param_patt.loc15_23.2 => constants.%a.param_patt
|
||||
// CHECK:STDOUT: %a.patt.loc15_23.2 => constants.%a.patt
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
|
||||
+282
-282
@@ -16,9 +16,9 @@
|
||||
|
||||
library "[[@TEST_NAME]]";
|
||||
|
||||
fn F(T:! type) -> T*;
|
||||
fn F(generic T: type) -> T*;
|
||||
|
||||
fn F(T:! type) -> T* {
|
||||
fn F(generic T: type) -> T* {
|
||||
return F(T);
|
||||
}
|
||||
|
||||
@@ -26,22 +26,22 @@ fn F(T:! type) -> T* {
|
||||
|
||||
library "[[@TEST_NAME]]";
|
||||
|
||||
fn F(T:! type, U:! type) -> T*;
|
||||
fn F(generic T: type, generic U: type) -> T*;
|
||||
|
||||
// CHECK:STDERR: fail_different_return_type.carbon:[[@LINE+7]]:1: error: function redeclaration differs because return type is `U*` [FunctionRedeclReturnTypeDiffers]
|
||||
// CHECK:STDERR: fn F(T:! type, U:! type) -> U* {
|
||||
// CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
// CHECK:STDERR: fn F(generic T: type, generic U: type) -> U* {
|
||||
// CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
// CHECK:STDERR: fail_different_return_type.carbon:[[@LINE-5]]:1: note: previously declared with return type `T*` [FunctionRedeclReturnTypePrevious]
|
||||
// CHECK:STDERR: fn F(T:! type, U:! type) -> T*;
|
||||
// CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
// CHECK:STDERR: fn F(generic T: type, generic U: type) -> T*;
|
||||
// CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
// CHECK:STDERR:
|
||||
fn F(T:! type, U:! type) -> U* {
|
||||
fn F(generic T: type, generic U: type) -> U* {
|
||||
// CHECK:STDERR: fail_different_return_type.carbon:[[@LINE+7]]:10: error: 1 argument passed to function expecting 2 arguments [CallArgCountMismatch]
|
||||
// CHECK:STDERR: return F(T);
|
||||
// CHECK:STDERR: ^~~~
|
||||
// CHECK:STDERR: fail_different_return_type.carbon:[[@LINE-13]]:1: note: calling function declared here [InCallToEntity]
|
||||
// CHECK:STDERR: fn F(T:! type, U:! type) -> T*;
|
||||
// CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
// CHECK:STDERR: fn F(generic T: type, generic U: type) -> T*;
|
||||
// CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
// CHECK:STDERR:
|
||||
return F(T);
|
||||
}
|
||||
@@ -50,22 +50,22 @@ fn F(T:! type, U:! type) -> U* {
|
||||
|
||||
library "[[@TEST_NAME]]";
|
||||
|
||||
fn F(T:! type, U:! type) -> T*;
|
||||
fn F(generic T: type, generic U: type) -> T*;
|
||||
|
||||
// CHECK:STDERR: fail_reorder.carbon:[[@LINE+7]]:13: error: redeclaration differs at parameter 1 [RedeclParamDiffers]
|
||||
// CHECK:STDERR: fn F(unused U:! type, T:! type) -> T* {
|
||||
// CHECK:STDERR: ^~~~~~~~
|
||||
// CHECK:STDERR: fail_reorder.carbon:[[@LINE-5]]:6: note: previous declaration's corresponding parameter here [RedeclParamPrevious]
|
||||
// CHECK:STDERR: fn F(T:! type, U:! type) -> T*;
|
||||
// CHECK:STDERR: ^~~~~~~~
|
||||
// CHECK:STDERR: fail_reorder.carbon:[[@LINE+7]]:21: error: redeclaration differs at parameter 1 [RedeclParamDiffers]
|
||||
// CHECK:STDERR: fn F(unused generic U: type, generic T: type) -> T* {
|
||||
// CHECK:STDERR: ^~~~~~~
|
||||
// CHECK:STDERR: fail_reorder.carbon:[[@LINE-5]]:14: note: previous declaration's corresponding parameter here [RedeclParamPrevious]
|
||||
// CHECK:STDERR: fn F(generic T: type, generic U: type) -> T*;
|
||||
// CHECK:STDERR: ^~~~~~~
|
||||
// CHECK:STDERR:
|
||||
fn F(unused U:! type, T:! type) -> T* {
|
||||
fn F(unused generic U: type, generic T: type) -> T* {
|
||||
// CHECK:STDERR: fail_reorder.carbon:[[@LINE+7]]:10: error: 1 argument passed to function expecting 2 arguments [CallArgCountMismatch]
|
||||
// CHECK:STDERR: return F(T);
|
||||
// CHECK:STDERR: ^~~~
|
||||
// CHECK:STDERR: fail_reorder.carbon:[[@LINE-13]]:1: note: calling function declared here [InCallToEntity]
|
||||
// CHECK:STDERR: fn F(T:! type, U:! type) -> T*;
|
||||
// CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
// CHECK:STDERR: fn F(generic T: type, generic U: type) -> T*;
|
||||
// CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
// CHECK:STDERR:
|
||||
return F(T);
|
||||
}
|
||||
@@ -74,22 +74,22 @@ fn F(unused U:! type, T:! type) -> T* {
|
||||
|
||||
library "[[@TEST_NAME]]";
|
||||
|
||||
fn F(T:! type, U:! type) -> T*;
|
||||
fn F(generic T: type, generic U: type) -> T*;
|
||||
|
||||
// CHECK:STDERR: fail_rename.carbon:[[@LINE+7]]:6: error: redeclaration differs at parameter 1 [RedeclParamDiffers]
|
||||
// CHECK:STDERR: fn F(U:! type, T:! type) -> U* {
|
||||
// CHECK:STDERR: ^~~~~~~~
|
||||
// CHECK:STDERR: fail_rename.carbon:[[@LINE-5]]:6: note: previous declaration's corresponding parameter here [RedeclParamPrevious]
|
||||
// CHECK:STDERR: fn F(T:! type, U:! type) -> T*;
|
||||
// CHECK:STDERR: ^~~~~~~~
|
||||
// CHECK:STDERR: fail_rename.carbon:[[@LINE+7]]:14: error: redeclaration differs at parameter 1 [RedeclParamDiffers]
|
||||
// CHECK:STDERR: fn F(generic U: type, generic T: type) -> U* {
|
||||
// CHECK:STDERR: ^~~~~~~
|
||||
// CHECK:STDERR: fail_rename.carbon:[[@LINE-5]]:14: note: previous declaration's corresponding parameter here [RedeclParamPrevious]
|
||||
// CHECK:STDERR: fn F(generic T: type, generic U: type) -> T*;
|
||||
// CHECK:STDERR: ^~~~~~~
|
||||
// CHECK:STDERR:
|
||||
fn F(U:! type, T:! type) -> U* {
|
||||
fn F(generic U: type, generic T: type) -> U* {
|
||||
// CHECK:STDERR: fail_rename.carbon:[[@LINE+7]]:10: error: 1 argument passed to function expecting 2 arguments [CallArgCountMismatch]
|
||||
// CHECK:STDERR: return F(T);
|
||||
// CHECK:STDERR: ^~~~
|
||||
// CHECK:STDERR: fail_rename.carbon:[[@LINE-13]]:1: note: calling function declared here [InCallToEntity]
|
||||
// CHECK:STDERR: fn F(T:! type, U:! type) -> T*;
|
||||
// CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
// CHECK:STDERR: fn F(generic T: type, generic U: type) -> T*;
|
||||
// CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
// CHECK:STDERR:
|
||||
return F(T);
|
||||
}
|
||||
@@ -131,54 +131,54 @@ fn F(U:! type, T:! type) -> U* {
|
||||
// CHECK:STDOUT: %return.param_patt.loc6: @F.%pattern_type (%pattern_type.4f4) = out_param_pattern [symbolic = %return.param_patt.loc4 (constants.%return.param_patt)]
|
||||
// CHECK:STDOUT: %return.patt.loc6: @F.%pattern_type (%pattern_type.4f4) = return_slot_pattern %return.param_patt.loc6, %ptr.loc6 [symbolic = %return.patt.loc4 (constants.%return.patt)]
|
||||
// CHECK:STDOUT: } {
|
||||
// CHECK:STDOUT: %T.ref.loc4: type = name_ref T, %T.loc4_7.2 [symbolic = %T.loc4_7.1 (constants.%T)]
|
||||
// CHECK:STDOUT: %ptr.loc4_20.2: type = ptr_type %T.ref.loc4 [symbolic = %ptr.loc4_20.1 (constants.%ptr)]
|
||||
// CHECK:STDOUT: %.loc4_20.2: Core.Form = init_form %ptr.loc4_20.2 [symbolic = %.loc4_20.1 (constants.%.cb6)]
|
||||
// CHECK:STDOUT: %.loc4_10.1: type = splice_block %.loc4_10.2 [concrete = type] {
|
||||
// CHECK:STDOUT: %T.ref.loc4: type = name_ref T, %T.loc4_15.2 [symbolic = %T.loc4_15.1 (constants.%T)]
|
||||
// CHECK:STDOUT: %ptr.loc4_27.2: type = ptr_type %T.ref.loc4 [symbolic = %ptr.loc4_27.1 (constants.%ptr)]
|
||||
// CHECK:STDOUT: %.loc4_27.2: Core.Form = init_form %ptr.loc4_27.2 [symbolic = %.loc4_27.1 (constants.%.cb6)]
|
||||
// CHECK:STDOUT: %.loc4_17.1: type = splice_block %.loc4_17.2 [concrete = type] {
|
||||
// CHECK:STDOUT: %.Self.frozen.loc4: %type = symbolic_binding .Self [symbolic_self = constants.%.Self.frozen]
|
||||
// CHECK:STDOUT: %.loc4_10.2: type = type_literal type [concrete = type]
|
||||
// CHECK:STDOUT: %.loc4_17.2: type = type_literal type [concrete = type]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %T.loc4_7.2: type = symbolic_binding T, 0 [symbolic = %T.loc4_7.1 (constants.%T)]
|
||||
// CHECK:STDOUT: %return.param.loc4: ref @F.%ptr.loc4_20.1 (%ptr) = out_param call_param0
|
||||
// CHECK:STDOUT: %return.loc4: ref @F.%ptr.loc4_20.1 (%ptr) = return_slot %return.param.loc4
|
||||
// CHECK:STDOUT: %T.loc4_15.2: type = symbolic_binding T, 0 [symbolic = %T.loc4_15.1 (constants.%T)]
|
||||
// CHECK:STDOUT: %return.param.loc4: ref @F.%ptr.loc4_27.1 (%ptr) = out_param call_param0
|
||||
// CHECK:STDOUT: %return.loc4: ref @F.%ptr.loc4_27.1 (%ptr) = return_slot %return.param.loc4
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %F.decl.loc6: %F.type = fn_decl @F [concrete = constants.%F] {
|
||||
// CHECK:STDOUT: %T.patt.loc6: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4 (constants.%T.patt)]
|
||||
// CHECK:STDOUT: %return.param_patt.loc6: @F.%pattern_type (%pattern_type.4f4) = out_param_pattern [symbolic = %return.param_patt.loc4 (constants.%return.param_patt)]
|
||||
// CHECK:STDOUT: %return.patt.loc6: @F.%pattern_type (%pattern_type.4f4) = return_slot_pattern %return.param_patt.loc6, %ptr.loc6 [symbolic = %return.patt.loc4 (constants.%return.patt)]
|
||||
// CHECK:STDOUT: } {
|
||||
// CHECK:STDOUT: %T.ref.loc6: type = name_ref T, %T.loc6 [symbolic = %T.loc4_7.1 (constants.%T)]
|
||||
// CHECK:STDOUT: %ptr.loc6: type = ptr_type %T.ref.loc6 [symbolic = %ptr.loc4_20.1 (constants.%ptr)]
|
||||
// CHECK:STDOUT: %.loc6_20: Core.Form = init_form %ptr.loc6 [symbolic = %.loc4_20.1 (constants.%.cb6)]
|
||||
// CHECK:STDOUT: %.loc6_10.1: type = splice_block %.loc6_10.2 [concrete = type] {
|
||||
// CHECK:STDOUT: %T.ref.loc6: type = name_ref T, %T.loc6 [symbolic = %T.loc4_15.1 (constants.%T)]
|
||||
// CHECK:STDOUT: %ptr.loc6: type = ptr_type %T.ref.loc6 [symbolic = %ptr.loc4_27.1 (constants.%ptr)]
|
||||
// CHECK:STDOUT: %.loc6_27: Core.Form = init_form %ptr.loc6 [symbolic = %.loc4_27.1 (constants.%.cb6)]
|
||||
// CHECK:STDOUT: %.loc6_17.1: type = splice_block %.loc6_17.2 [concrete = type] {
|
||||
// CHECK:STDOUT: %.Self.frozen.loc6: %type = symbolic_binding .Self [symbolic_self = constants.%.Self.frozen]
|
||||
// CHECK:STDOUT: %.loc6_10.2: type = type_literal type [concrete = type]
|
||||
// CHECK:STDOUT: %.loc6_17.2: type = type_literal type [concrete = type]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %T.loc6: type = symbolic_binding T, 0 [symbolic = %T.loc4_7.1 (constants.%T)]
|
||||
// CHECK:STDOUT: %return.param.loc6: ref @F.%ptr.loc4_20.1 (%ptr) = out_param call_param0
|
||||
// CHECK:STDOUT: %return.loc6: ref @F.%ptr.loc4_20.1 (%ptr) = return_slot %return.param.loc6
|
||||
// CHECK:STDOUT: %T.loc6: type = symbolic_binding T, 0 [symbolic = %T.loc4_15.1 (constants.%T)]
|
||||
// CHECK:STDOUT: %return.param.loc6: ref @F.%ptr.loc4_27.1 (%ptr) = out_param call_param0
|
||||
// CHECK:STDOUT: %return.loc6: ref @F.%ptr.loc4_27.1 (%ptr) = return_slot %return.param.loc6
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: generic fn @F(%T.loc4_7.2: type) {
|
||||
// CHECK:STDOUT: generic fn @F(%T.loc4_15.2: type) {
|
||||
// CHECK:STDOUT: %T.patt.loc4: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4 (constants.%T.patt)]
|
||||
// CHECK:STDOUT: %T.loc4_7.1: type = symbolic_binding T, 0 [symbolic = %T.loc4_7.1 (constants.%T)]
|
||||
// CHECK:STDOUT: %ptr.loc4_20.1: type = ptr_type %T.loc4_7.1 [symbolic = %ptr.loc4_20.1 (constants.%ptr)]
|
||||
// CHECK:STDOUT: %.loc4_20.1: Core.Form = init_form %ptr.loc4_20.1 [symbolic = %.loc4_20.1 (constants.%.cb6)]
|
||||
// CHECK:STDOUT: %pattern_type: type = pattern_type %ptr.loc4_20.1 [symbolic = %pattern_type (constants.%pattern_type.4f4)]
|
||||
// CHECK:STDOUT: %T.loc4_15.1: type = symbolic_binding T, 0 [symbolic = %T.loc4_15.1 (constants.%T)]
|
||||
// CHECK:STDOUT: %ptr.loc4_27.1: type = ptr_type %T.loc4_15.1 [symbolic = %ptr.loc4_27.1 (constants.%ptr)]
|
||||
// CHECK:STDOUT: %.loc4_27.1: Core.Form = init_form %ptr.loc4_27.1 [symbolic = %.loc4_27.1 (constants.%.cb6)]
|
||||
// CHECK:STDOUT: %pattern_type: type = pattern_type %ptr.loc4_27.1 [symbolic = %pattern_type (constants.%pattern_type.4f4)]
|
||||
// CHECK:STDOUT: %return.param_patt.loc4: @F.%pattern_type (%pattern_type.4f4) = out_param_pattern [symbolic = %return.param_patt.loc4 (constants.%return.param_patt)]
|
||||
// CHECK:STDOUT: %return.patt.loc4: @F.%pattern_type (%pattern_type.4f4) = return_slot_pattern %return.param_patt.loc4, %ptr.loc4_20.1 [symbolic = %return.patt.loc4 (constants.%return.patt)]
|
||||
// CHECK:STDOUT: %return.patt.loc4: @F.%pattern_type (%pattern_type.4f4) = return_slot_pattern %return.param_patt.loc4, %ptr.loc4_27.1 [symbolic = %return.patt.loc4 (constants.%return.patt)]
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT: %require_complete: <witness> = require_complete_type %ptr.loc4_20.1 [symbolic = %require_complete (constants.%require_complete)]
|
||||
// CHECK:STDOUT: %F.specific_fn.loc7_10.2: <specific function> = specific_function constants.%F, @F(%T.loc4_7.1) [symbolic = %F.specific_fn.loc7_10.2 (constants.%F.specific_fn)]
|
||||
// CHECK:STDOUT: %require_complete: <witness> = require_complete_type %ptr.loc4_27.1 [symbolic = %require_complete (constants.%require_complete)]
|
||||
// CHECK:STDOUT: %F.specific_fn.loc7_10.2: <specific function> = specific_function constants.%F, @F(%T.loc4_15.1) [symbolic = %F.specific_fn.loc7_10.2 (constants.%F.specific_fn)]
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn() -> out %return.param.loc6: @F.%ptr.loc4_20.1 (%ptr) {
|
||||
// CHECK:STDOUT: fn() -> out %return.param.loc6: @F.%ptr.loc4_27.1 (%ptr) {
|
||||
// CHECK:STDOUT: !entry:
|
||||
// CHECK:STDOUT: %F.ref: %F.type = name_ref F, file.%F.decl.loc4 [concrete = constants.%F]
|
||||
// CHECK:STDOUT: %T.ref.loc7: type = name_ref T, %T.loc6 [symbolic = %T.loc4_7.1 (constants.%T)]
|
||||
// CHECK:STDOUT: %T.ref.loc7: type = name_ref T, %T.loc6 [symbolic = %T.loc4_15.1 (constants.%T)]
|
||||
// CHECK:STDOUT: %F.specific_fn.loc7_10.1: <specific function> = specific_function %F.ref, @F(constants.%T) [symbolic = %F.specific_fn.loc7_10.2 (constants.%F.specific_fn)]
|
||||
// CHECK:STDOUT: %F.call: init @F.%ptr.loc4_20.1 (%ptr) = call %F.specific_fn.loc7_10.1()
|
||||
// CHECK:STDOUT: %F.call: init @F.%ptr.loc4_27.1 (%ptr) = call %F.specific_fn.loc7_10.1()
|
||||
// CHECK:STDOUT: return %F.call
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !observes:
|
||||
@@ -187,9 +187,9 @@ fn F(U:! type, T:! type) -> U* {
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific @F(constants.%T) {
|
||||
// CHECK:STDOUT: %T.patt.loc4 => constants.%T.patt
|
||||
// CHECK:STDOUT: %T.loc4_7.1 => constants.%T
|
||||
// CHECK:STDOUT: %ptr.loc4_20.1 => constants.%ptr
|
||||
// CHECK:STDOUT: %.loc4_20.1 => constants.%.cb6
|
||||
// CHECK:STDOUT: %T.loc4_15.1 => constants.%T
|
||||
// CHECK:STDOUT: %ptr.loc4_27.1 => constants.%ptr
|
||||
// CHECK:STDOUT: %.loc4_27.1 => constants.%.cb6
|
||||
// CHECK:STDOUT: %pattern_type => constants.%pattern_type.4f4
|
||||
// CHECK:STDOUT: %return.param_patt.loc4 => constants.%return.param_patt
|
||||
// CHECK:STDOUT: %return.patt.loc4 => constants.%return.patt
|
||||
@@ -240,83 +240,83 @@ fn F(U:! type, T:! type) -> U* {
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %Core.import = import Core
|
||||
// CHECK:STDOUT: %F.decl.loc4: %F.type.eb3ec9.1 = fn_decl @F.loc4 [concrete = constants.%F.7088cc.1] {
|
||||
// CHECK:STDOUT: %T.patt.loc4_7.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_7.2 (constants.%T.patt)]
|
||||
// CHECK:STDOUT: %U.patt.loc4_17.1: %pattern_type.98f = symbolic_binding_pattern U, 1 [symbolic = %U.patt.loc4_17.2 (constants.%U.patt)]
|
||||
// CHECK:STDOUT: %return.param_patt.loc4_30.1: @F.loc4.%pattern_type (%pattern_type.4f4) = out_param_pattern [symbolic = %return.param_patt.loc4_30.2 (constants.%return.param_patt.27f)]
|
||||
// CHECK:STDOUT: %return.patt.loc4_26.1: @F.loc4.%pattern_type (%pattern_type.4f4) = return_slot_pattern %return.param_patt.loc4_30.1, %ptr.loc4_30.2 [symbolic = %return.patt.loc4_26.2 (constants.%return.patt.d67)]
|
||||
// CHECK:STDOUT: %T.patt.loc4_15.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_15.2 (constants.%T.patt)]
|
||||
// CHECK:STDOUT: %U.patt.loc4_32.1: %pattern_type.98f = symbolic_binding_pattern U, 1 [symbolic = %U.patt.loc4_32.2 (constants.%U.patt)]
|
||||
// CHECK:STDOUT: %return.param_patt.loc4_44.1: @F.loc4.%pattern_type (%pattern_type.4f4) = out_param_pattern [symbolic = %return.param_patt.loc4_44.2 (constants.%return.param_patt.27f)]
|
||||
// CHECK:STDOUT: %return.patt.loc4_40.1: @F.loc4.%pattern_type (%pattern_type.4f4) = return_slot_pattern %return.param_patt.loc4_44.1, %ptr.loc4_44.2 [symbolic = %return.patt.loc4_40.2 (constants.%return.patt.d67)]
|
||||
// CHECK:STDOUT: } {
|
||||
// CHECK:STDOUT: %T.ref: type = name_ref T, %T.loc4_7.2 [symbolic = %T.loc4_7.1 (constants.%T)]
|
||||
// CHECK:STDOUT: %ptr.loc4_30.2: type = ptr_type %T.ref [symbolic = %ptr.loc4_30.1 (constants.%ptr.e8f)]
|
||||
// CHECK:STDOUT: %.loc4_30.2: Core.Form = init_form %ptr.loc4_30.2 [symbolic = %.loc4_30.1 (constants.%.cb6)]
|
||||
// CHECK:STDOUT: %.loc4_10.1: type = splice_block %.loc4_10.2 [concrete = type] {
|
||||
// CHECK:STDOUT: %.Self.frozen.loc4_7: %type = symbolic_binding .Self [symbolic_self = constants.%.Self.frozen]
|
||||
// CHECK:STDOUT: %.loc4_10.2: type = type_literal type [concrete = type]
|
||||
// CHECK:STDOUT: %T.ref: type = name_ref T, %T.loc4_15.2 [symbolic = %T.loc4_15.1 (constants.%T)]
|
||||
// CHECK:STDOUT: %ptr.loc4_44.2: type = ptr_type %T.ref [symbolic = %ptr.loc4_44.1 (constants.%ptr.e8f)]
|
||||
// CHECK:STDOUT: %.loc4_44.2: Core.Form = init_form %ptr.loc4_44.2 [symbolic = %.loc4_44.1 (constants.%.cb6)]
|
||||
// CHECK:STDOUT: %.loc4_17.1: type = splice_block %.loc4_17.2 [concrete = type] {
|
||||
// CHECK:STDOUT: %.Self.frozen.loc4_15: %type = symbolic_binding .Self [symbolic_self = constants.%.Self.frozen]
|
||||
// CHECK:STDOUT: %.loc4_17.2: type = type_literal type [concrete = type]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %T.loc4_7.2: type = symbolic_binding T, 0 [symbolic = %T.loc4_7.1 (constants.%T)]
|
||||
// CHECK:STDOUT: %.loc4_20.1: type = splice_block %.loc4_20.2 [concrete = type] {
|
||||
// CHECK:STDOUT: %.Self.frozen.loc4_17: %type = symbolic_binding .Self [symbolic_self = constants.%.Self.frozen]
|
||||
// CHECK:STDOUT: %.loc4_20.2: type = type_literal type [concrete = type]
|
||||
// CHECK:STDOUT: %T.loc4_15.2: type = symbolic_binding T, 0 [symbolic = %T.loc4_15.1 (constants.%T)]
|
||||
// CHECK:STDOUT: %.loc4_34.1: type = splice_block %.loc4_34.2 [concrete = type] {
|
||||
// CHECK:STDOUT: %.Self.frozen.loc4_32: %type = symbolic_binding .Self [symbolic_self = constants.%.Self.frozen]
|
||||
// CHECK:STDOUT: %.loc4_34.2: type = type_literal type [concrete = type]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %U.loc4_17.2: type = symbolic_binding U, 1 [symbolic = %U.loc4_17.1 (constants.%U)]
|
||||
// CHECK:STDOUT: %return.param: ref @F.loc4.%ptr.loc4_30.1 (%ptr.e8f) = out_param call_param0
|
||||
// CHECK:STDOUT: %return: ref @F.loc4.%ptr.loc4_30.1 (%ptr.e8f) = return_slot %return.param
|
||||
// CHECK:STDOUT: %U.loc4_32.2: type = symbolic_binding U, 1 [symbolic = %U.loc4_32.1 (constants.%U)]
|
||||
// CHECK:STDOUT: %return.param: ref @F.loc4.%ptr.loc4_44.1 (%ptr.e8f) = out_param call_param0
|
||||
// CHECK:STDOUT: %return: ref @F.loc4.%ptr.loc4_44.1 (%ptr.e8f) = return_slot %return.param
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %F.decl.loc13: %F.type.eb3ec9.2 = fn_decl @F.loc13 [concrete = constants.%F.7088cc.2] {
|
||||
// CHECK:STDOUT: %T.patt.loc13_7.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc13_7.2 (constants.%T.patt)]
|
||||
// CHECK:STDOUT: %U.patt.loc13_17.1: %pattern_type.98f = symbolic_binding_pattern U, 1 [symbolic = %U.patt.loc13_17.2 (constants.%U.patt)]
|
||||
// CHECK:STDOUT: %return.param_patt.loc13_30.1: @F.loc13.%pattern_type (%pattern_type.423) = out_param_pattern [symbolic = %return.param_patt.loc13_30.2 (constants.%return.param_patt.534)]
|
||||
// CHECK:STDOUT: %return.patt.loc13_26.1: @F.loc13.%pattern_type (%pattern_type.423) = return_slot_pattern %return.param_patt.loc13_30.1, %ptr.loc13_30.2 [symbolic = %return.patt.loc13_26.2 (constants.%return.patt.669)]
|
||||
// CHECK:STDOUT: %T.patt.loc13_15.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc13_15.2 (constants.%T.patt)]
|
||||
// CHECK:STDOUT: %U.patt.loc13_32.1: %pattern_type.98f = symbolic_binding_pattern U, 1 [symbolic = %U.patt.loc13_32.2 (constants.%U.patt)]
|
||||
// CHECK:STDOUT: %return.param_patt.loc13_44.1: @F.loc13.%pattern_type (%pattern_type.423) = out_param_pattern [symbolic = %return.param_patt.loc13_44.2 (constants.%return.param_patt.534)]
|
||||
// CHECK:STDOUT: %return.patt.loc13_40.1: @F.loc13.%pattern_type (%pattern_type.423) = return_slot_pattern %return.param_patt.loc13_44.1, %ptr.loc13_44.2 [symbolic = %return.patt.loc13_40.2 (constants.%return.patt.669)]
|
||||
// CHECK:STDOUT: } {
|
||||
// CHECK:STDOUT: %U.ref: type = name_ref U, %U.loc13_17.2 [symbolic = %U.loc13_17.1 (constants.%U)]
|
||||
// CHECK:STDOUT: %ptr.loc13_30.2: type = ptr_type %U.ref [symbolic = %ptr.loc13_30.1 (constants.%ptr.18e)]
|
||||
// CHECK:STDOUT: %.loc13_30.2: Core.Form = init_form %ptr.loc13_30.2 [symbolic = %.loc13_30.1 (constants.%.6d8)]
|
||||
// CHECK:STDOUT: %.loc13_10.1: type = splice_block %.loc13_10.2 [concrete = type] {
|
||||
// CHECK:STDOUT: %.Self.frozen.loc13_7: %type = symbolic_binding .Self [symbolic_self = constants.%.Self.frozen]
|
||||
// CHECK:STDOUT: %.loc13_10.2: type = type_literal type [concrete = type]
|
||||
// CHECK:STDOUT: %U.ref: type = name_ref U, %U.loc13_32.2 [symbolic = %U.loc13_32.1 (constants.%U)]
|
||||
// CHECK:STDOUT: %ptr.loc13_44.2: type = ptr_type %U.ref [symbolic = %ptr.loc13_44.1 (constants.%ptr.18e)]
|
||||
// CHECK:STDOUT: %.loc13_44.2: Core.Form = init_form %ptr.loc13_44.2 [symbolic = %.loc13_44.1 (constants.%.6d8)]
|
||||
// CHECK:STDOUT: %.loc13_17.1: type = splice_block %.loc13_17.2 [concrete = type] {
|
||||
// CHECK:STDOUT: %.Self.frozen.loc13_15: %type = symbolic_binding .Self [symbolic_self = constants.%.Self.frozen]
|
||||
// CHECK:STDOUT: %.loc13_17.2: type = type_literal type [concrete = type]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %T.loc13_7.2: type = symbolic_binding T, 0 [symbolic = %T.loc13_7.1 (constants.%T)]
|
||||
// CHECK:STDOUT: %.loc13_20.1: type = splice_block %.loc13_20.2 [concrete = type] {
|
||||
// CHECK:STDOUT: %.Self.frozen.loc13_17: %type = symbolic_binding .Self [symbolic_self = constants.%.Self.frozen]
|
||||
// CHECK:STDOUT: %.loc13_20.2: type = type_literal type [concrete = type]
|
||||
// CHECK:STDOUT: %T.loc13_15.2: type = symbolic_binding T, 0 [symbolic = %T.loc13_15.1 (constants.%T)]
|
||||
// CHECK:STDOUT: %.loc13_34.1: type = splice_block %.loc13_34.2 [concrete = type] {
|
||||
// CHECK:STDOUT: %.Self.frozen.loc13_32: %type = symbolic_binding .Self [symbolic_self = constants.%.Self.frozen]
|
||||
// CHECK:STDOUT: %.loc13_34.2: type = type_literal type [concrete = type]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %U.loc13_17.2: type = symbolic_binding U, 1 [symbolic = %U.loc13_17.1 (constants.%U)]
|
||||
// CHECK:STDOUT: %return.param: ref @F.loc13.%ptr.loc13_30.1 (%ptr.18e) = out_param call_param0
|
||||
// CHECK:STDOUT: %return: ref @F.loc13.%ptr.loc13_30.1 (%ptr.18e) = return_slot %return.param
|
||||
// CHECK:STDOUT: %U.loc13_32.2: type = symbolic_binding U, 1 [symbolic = %U.loc13_32.1 (constants.%U)]
|
||||
// CHECK:STDOUT: %return.param: ref @F.loc13.%ptr.loc13_44.1 (%ptr.18e) = out_param call_param0
|
||||
// CHECK:STDOUT: %return: ref @F.loc13.%ptr.loc13_44.1 (%ptr.18e) = return_slot %return.param
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: generic fn @F.loc4(%T.loc4_7.2: type, %U.loc4_17.2: type) {
|
||||
// CHECK:STDOUT: %T.patt.loc4_7.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_7.2 (constants.%T.patt)]
|
||||
// CHECK:STDOUT: %T.loc4_7.1: type = symbolic_binding T, 0 [symbolic = %T.loc4_7.1 (constants.%T)]
|
||||
// CHECK:STDOUT: %U.patt.loc4_17.2: %pattern_type.98f = symbolic_binding_pattern U, 1 [symbolic = %U.patt.loc4_17.2 (constants.%U.patt)]
|
||||
// CHECK:STDOUT: %U.loc4_17.1: type = symbolic_binding U, 1 [symbolic = %U.loc4_17.1 (constants.%U)]
|
||||
// CHECK:STDOUT: %ptr.loc4_30.1: type = ptr_type %T.loc4_7.1 [symbolic = %ptr.loc4_30.1 (constants.%ptr.e8f)]
|
||||
// CHECK:STDOUT: %.loc4_30.1: Core.Form = init_form %ptr.loc4_30.1 [symbolic = %.loc4_30.1 (constants.%.cb6)]
|
||||
// CHECK:STDOUT: %pattern_type: type = pattern_type %ptr.loc4_30.1 [symbolic = %pattern_type (constants.%pattern_type.4f4)]
|
||||
// CHECK:STDOUT: %return.param_patt.loc4_30.2: @F.loc4.%pattern_type (%pattern_type.4f4) = out_param_pattern [symbolic = %return.param_patt.loc4_30.2 (constants.%return.param_patt.27f)]
|
||||
// CHECK:STDOUT: %return.patt.loc4_26.2: @F.loc4.%pattern_type (%pattern_type.4f4) = return_slot_pattern %return.param_patt.loc4_30.2, %ptr.loc4_30.1 [symbolic = %return.patt.loc4_26.2 (constants.%return.patt.d67)]
|
||||
// CHECK:STDOUT: generic fn @F.loc4(%T.loc4_15.2: type, %U.loc4_32.2: type) {
|
||||
// CHECK:STDOUT: %T.patt.loc4_15.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_15.2 (constants.%T.patt)]
|
||||
// CHECK:STDOUT: %T.loc4_15.1: type = symbolic_binding T, 0 [symbolic = %T.loc4_15.1 (constants.%T)]
|
||||
// CHECK:STDOUT: %U.patt.loc4_32.2: %pattern_type.98f = symbolic_binding_pattern U, 1 [symbolic = %U.patt.loc4_32.2 (constants.%U.patt)]
|
||||
// CHECK:STDOUT: %U.loc4_32.1: type = symbolic_binding U, 1 [symbolic = %U.loc4_32.1 (constants.%U)]
|
||||
// CHECK:STDOUT: %ptr.loc4_44.1: type = ptr_type %T.loc4_15.1 [symbolic = %ptr.loc4_44.1 (constants.%ptr.e8f)]
|
||||
// CHECK:STDOUT: %.loc4_44.1: Core.Form = init_form %ptr.loc4_44.1 [symbolic = %.loc4_44.1 (constants.%.cb6)]
|
||||
// CHECK:STDOUT: %pattern_type: type = pattern_type %ptr.loc4_44.1 [symbolic = %pattern_type (constants.%pattern_type.4f4)]
|
||||
// CHECK:STDOUT: %return.param_patt.loc4_44.2: @F.loc4.%pattern_type (%pattern_type.4f4) = out_param_pattern [symbolic = %return.param_patt.loc4_44.2 (constants.%return.param_patt.27f)]
|
||||
// CHECK:STDOUT: %return.patt.loc4_40.2: @F.loc4.%pattern_type (%pattern_type.4f4) = return_slot_pattern %return.param_patt.loc4_44.2, %ptr.loc4_44.1 [symbolic = %return.patt.loc4_40.2 (constants.%return.patt.d67)]
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn() -> out %return.param: @F.loc4.%ptr.loc4_30.1 (%ptr.e8f);
|
||||
// CHECK:STDOUT: fn() -> out %return.param: @F.loc4.%ptr.loc4_44.1 (%ptr.e8f);
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: generic fn @F.loc13(%T.loc13_7.2: type, %U.loc13_17.2: type) {
|
||||
// CHECK:STDOUT: %T.patt.loc13_7.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc13_7.2 (constants.%T.patt)]
|
||||
// CHECK:STDOUT: %T.loc13_7.1: type = symbolic_binding T, 0 [symbolic = %T.loc13_7.1 (constants.%T)]
|
||||
// CHECK:STDOUT: %U.patt.loc13_17.2: %pattern_type.98f = symbolic_binding_pattern U, 1 [symbolic = %U.patt.loc13_17.2 (constants.%U.patt)]
|
||||
// CHECK:STDOUT: %U.loc13_17.1: type = symbolic_binding U, 1 [symbolic = %U.loc13_17.1 (constants.%U)]
|
||||
// CHECK:STDOUT: %ptr.loc13_30.1: type = ptr_type %U.loc13_17.1 [symbolic = %ptr.loc13_30.1 (constants.%ptr.18e)]
|
||||
// CHECK:STDOUT: %.loc13_30.1: Core.Form = init_form %ptr.loc13_30.1 [symbolic = %.loc13_30.1 (constants.%.6d8)]
|
||||
// CHECK:STDOUT: %pattern_type: type = pattern_type %ptr.loc13_30.1 [symbolic = %pattern_type (constants.%pattern_type.423)]
|
||||
// CHECK:STDOUT: %return.param_patt.loc13_30.2: @F.loc13.%pattern_type (%pattern_type.423) = out_param_pattern [symbolic = %return.param_patt.loc13_30.2 (constants.%return.param_patt.534)]
|
||||
// CHECK:STDOUT: %return.patt.loc13_26.2: @F.loc13.%pattern_type (%pattern_type.423) = return_slot_pattern %return.param_patt.loc13_30.2, %ptr.loc13_30.1 [symbolic = %return.patt.loc13_26.2 (constants.%return.patt.669)]
|
||||
// CHECK:STDOUT: generic fn @F.loc13(%T.loc13_15.2: type, %U.loc13_32.2: type) {
|
||||
// CHECK:STDOUT: %T.patt.loc13_15.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc13_15.2 (constants.%T.patt)]
|
||||
// CHECK:STDOUT: %T.loc13_15.1: type = symbolic_binding T, 0 [symbolic = %T.loc13_15.1 (constants.%T)]
|
||||
// CHECK:STDOUT: %U.patt.loc13_32.2: %pattern_type.98f = symbolic_binding_pattern U, 1 [symbolic = %U.patt.loc13_32.2 (constants.%U.patt)]
|
||||
// CHECK:STDOUT: %U.loc13_32.1: type = symbolic_binding U, 1 [symbolic = %U.loc13_32.1 (constants.%U)]
|
||||
// CHECK:STDOUT: %ptr.loc13_44.1: type = ptr_type %U.loc13_32.1 [symbolic = %ptr.loc13_44.1 (constants.%ptr.18e)]
|
||||
// CHECK:STDOUT: %.loc13_44.1: Core.Form = init_form %ptr.loc13_44.1 [symbolic = %.loc13_44.1 (constants.%.6d8)]
|
||||
// CHECK:STDOUT: %pattern_type: type = pattern_type %ptr.loc13_44.1 [symbolic = %pattern_type (constants.%pattern_type.423)]
|
||||
// CHECK:STDOUT: %return.param_patt.loc13_44.2: @F.loc13.%pattern_type (%pattern_type.423) = out_param_pattern [symbolic = %return.param_patt.loc13_44.2 (constants.%return.param_patt.534)]
|
||||
// CHECK:STDOUT: %return.patt.loc13_40.2: @F.loc13.%pattern_type (%pattern_type.423) = return_slot_pattern %return.param_patt.loc13_44.2, %ptr.loc13_44.1 [symbolic = %return.patt.loc13_40.2 (constants.%return.patt.669)]
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT: %require_complete: <witness> = require_complete_type %ptr.loc13_30.1 [symbolic = %require_complete (constants.%require_complete)]
|
||||
// CHECK:STDOUT: %require_complete: <witness> = require_complete_type %ptr.loc13_44.1 [symbolic = %require_complete (constants.%require_complete)]
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn() -> out %return.param: @F.loc13.%ptr.loc13_30.1 (%ptr.18e) {
|
||||
// CHECK:STDOUT: fn() -> out %return.param: @F.loc13.%ptr.loc13_44.1 (%ptr.18e) {
|
||||
// CHECK:STDOUT: !entry:
|
||||
// CHECK:STDOUT: %F.ref: %F.type.eb3ec9.1 = name_ref F, file.%F.decl.loc4 [concrete = constants.%F.7088cc.1]
|
||||
// CHECK:STDOUT: %T.ref: type = name_ref T, %T.loc13_7.2 [symbolic = %T.loc13_7.1 (constants.%T)]
|
||||
// CHECK:STDOUT: %T.ref: type = name_ref T, %T.loc13_15.2 [symbolic = %T.loc13_15.1 (constants.%T)]
|
||||
// CHECK:STDOUT: return <error>
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !observes:
|
||||
@@ -324,27 +324,27 @@ fn F(U:! type, T:! type) -> U* {
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific @F.loc4(constants.%T, constants.%U) {
|
||||
// CHECK:STDOUT: %T.patt.loc4_7.2 => constants.%T.patt
|
||||
// CHECK:STDOUT: %T.loc4_7.1 => constants.%T
|
||||
// CHECK:STDOUT: %U.patt.loc4_17.2 => constants.%U.patt
|
||||
// CHECK:STDOUT: %U.loc4_17.1 => constants.%U
|
||||
// CHECK:STDOUT: %ptr.loc4_30.1 => constants.%ptr.e8f
|
||||
// CHECK:STDOUT: %.loc4_30.1 => constants.%.cb6
|
||||
// CHECK:STDOUT: %T.patt.loc4_15.2 => constants.%T.patt
|
||||
// CHECK:STDOUT: %T.loc4_15.1 => constants.%T
|
||||
// CHECK:STDOUT: %U.patt.loc4_32.2 => constants.%U.patt
|
||||
// CHECK:STDOUT: %U.loc4_32.1 => constants.%U
|
||||
// CHECK:STDOUT: %ptr.loc4_44.1 => constants.%ptr.e8f
|
||||
// CHECK:STDOUT: %.loc4_44.1 => constants.%.cb6
|
||||
// CHECK:STDOUT: %pattern_type => constants.%pattern_type.4f4
|
||||
// CHECK:STDOUT: %return.param_patt.loc4_30.2 => constants.%return.param_patt.27f
|
||||
// CHECK:STDOUT: %return.patt.loc4_26.2 => constants.%return.patt.d67
|
||||
// CHECK:STDOUT: %return.param_patt.loc4_44.2 => constants.%return.param_patt.27f
|
||||
// CHECK:STDOUT: %return.patt.loc4_40.2 => constants.%return.patt.d67
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific @F.loc13(constants.%T, constants.%U) {
|
||||
// CHECK:STDOUT: %T.patt.loc13_7.2 => constants.%T.patt
|
||||
// CHECK:STDOUT: %T.loc13_7.1 => constants.%T
|
||||
// CHECK:STDOUT: %U.patt.loc13_17.2 => constants.%U.patt
|
||||
// CHECK:STDOUT: %U.loc13_17.1 => constants.%U
|
||||
// CHECK:STDOUT: %ptr.loc13_30.1 => constants.%ptr.18e
|
||||
// CHECK:STDOUT: %.loc13_30.1 => constants.%.6d8
|
||||
// CHECK:STDOUT: %T.patt.loc13_15.2 => constants.%T.patt
|
||||
// CHECK:STDOUT: %T.loc13_15.1 => constants.%T
|
||||
// CHECK:STDOUT: %U.patt.loc13_32.2 => constants.%U.patt
|
||||
// CHECK:STDOUT: %U.loc13_32.1 => constants.%U
|
||||
// CHECK:STDOUT: %ptr.loc13_44.1 => constants.%ptr.18e
|
||||
// CHECK:STDOUT: %.loc13_44.1 => constants.%.6d8
|
||||
// CHECK:STDOUT: %pattern_type => constants.%pattern_type.423
|
||||
// CHECK:STDOUT: %return.param_patt.loc13_30.2 => constants.%return.param_patt.534
|
||||
// CHECK:STDOUT: %return.patt.loc13_26.2 => constants.%return.patt.669
|
||||
// CHECK:STDOUT: %return.param_patt.loc13_44.2 => constants.%return.param_patt.534
|
||||
// CHECK:STDOUT: %return.patt.loc13_40.2 => constants.%return.patt.669
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: --- fail_reorder.carbon
|
||||
@@ -392,83 +392,83 @@ fn F(U:! type, T:! type) -> U* {
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %Core.import = import Core
|
||||
// CHECK:STDOUT: %F.decl.loc4: %F.type.eb3ec9.1 = fn_decl @F.loc4 [concrete = constants.%F.7088cc.1] {
|
||||
// CHECK:STDOUT: %T.patt.loc4_7.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_7.2 (constants.%T.patt.d47)]
|
||||
// CHECK:STDOUT: %U.patt.loc4_17.1: %pattern_type.98f = symbolic_binding_pattern U, 1 [symbolic = %U.patt.loc4_17.2 (constants.%U.patt.014)]
|
||||
// CHECK:STDOUT: %return.param_patt.loc4_30.1: @F.loc4.%pattern_type (%pattern_type.4f4) = out_param_pattern [symbolic = %return.param_patt.loc4_30.2 (constants.%return.param_patt.27f)]
|
||||
// CHECK:STDOUT: %return.patt.loc4_26.1: @F.loc4.%pattern_type (%pattern_type.4f4) = return_slot_pattern %return.param_patt.loc4_30.1, %ptr.loc4_30.2 [symbolic = %return.patt.loc4_26.2 (constants.%return.patt.d67)]
|
||||
// CHECK:STDOUT: %T.patt.loc4_15.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_15.2 (constants.%T.patt.d47)]
|
||||
// CHECK:STDOUT: %U.patt.loc4_32.1: %pattern_type.98f = symbolic_binding_pattern U, 1 [symbolic = %U.patt.loc4_32.2 (constants.%U.patt.014)]
|
||||
// CHECK:STDOUT: %return.param_patt.loc4_44.1: @F.loc4.%pattern_type (%pattern_type.4f4) = out_param_pattern [symbolic = %return.param_patt.loc4_44.2 (constants.%return.param_patt.27f)]
|
||||
// CHECK:STDOUT: %return.patt.loc4_40.1: @F.loc4.%pattern_type (%pattern_type.4f4) = return_slot_pattern %return.param_patt.loc4_44.1, %ptr.loc4_44.2 [symbolic = %return.patt.loc4_40.2 (constants.%return.patt.d67)]
|
||||
// CHECK:STDOUT: } {
|
||||
// CHECK:STDOUT: %T.ref: type = name_ref T, %T.loc4_7.2 [symbolic = %T.loc4_7.1 (constants.%T.67d)]
|
||||
// CHECK:STDOUT: %ptr.loc4_30.2: type = ptr_type %T.ref [symbolic = %ptr.loc4_30.1 (constants.%ptr.e8f)]
|
||||
// CHECK:STDOUT: %.loc4_30.2: Core.Form = init_form %ptr.loc4_30.2 [symbolic = %.loc4_30.1 (constants.%.cb6)]
|
||||
// CHECK:STDOUT: %.loc4_10.1: type = splice_block %.loc4_10.2 [concrete = type] {
|
||||
// CHECK:STDOUT: %.Self.frozen.loc4_7: %type = symbolic_binding .Self [symbolic_self = constants.%.Self.frozen]
|
||||
// CHECK:STDOUT: %.loc4_10.2: type = type_literal type [concrete = type]
|
||||
// CHECK:STDOUT: %T.ref: type = name_ref T, %T.loc4_15.2 [symbolic = %T.loc4_15.1 (constants.%T.67d)]
|
||||
// CHECK:STDOUT: %ptr.loc4_44.2: type = ptr_type %T.ref [symbolic = %ptr.loc4_44.1 (constants.%ptr.e8f)]
|
||||
// CHECK:STDOUT: %.loc4_44.2: Core.Form = init_form %ptr.loc4_44.2 [symbolic = %.loc4_44.1 (constants.%.cb6)]
|
||||
// CHECK:STDOUT: %.loc4_17.1: type = splice_block %.loc4_17.2 [concrete = type] {
|
||||
// CHECK:STDOUT: %.Self.frozen.loc4_15: %type = symbolic_binding .Self [symbolic_self = constants.%.Self.frozen]
|
||||
// CHECK:STDOUT: %.loc4_17.2: type = type_literal type [concrete = type]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %T.loc4_7.2: type = symbolic_binding T, 0 [symbolic = %T.loc4_7.1 (constants.%T.67d)]
|
||||
// CHECK:STDOUT: %.loc4_20.1: type = splice_block %.loc4_20.2 [concrete = type] {
|
||||
// CHECK:STDOUT: %.Self.frozen.loc4_17: %type = symbolic_binding .Self [symbolic_self = constants.%.Self.frozen]
|
||||
// CHECK:STDOUT: %.loc4_20.2: type = type_literal type [concrete = type]
|
||||
// CHECK:STDOUT: %T.loc4_15.2: type = symbolic_binding T, 0 [symbolic = %T.loc4_15.1 (constants.%T.67d)]
|
||||
// CHECK:STDOUT: %.loc4_34.1: type = splice_block %.loc4_34.2 [concrete = type] {
|
||||
// CHECK:STDOUT: %.Self.frozen.loc4_32: %type = symbolic_binding .Self [symbolic_self = constants.%.Self.frozen]
|
||||
// CHECK:STDOUT: %.loc4_34.2: type = type_literal type [concrete = type]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %U.loc4_17.2: type = symbolic_binding U, 1 [symbolic = %U.loc4_17.1 (constants.%U.091)]
|
||||
// CHECK:STDOUT: %return.param: ref @F.loc4.%ptr.loc4_30.1 (%ptr.e8f) = out_param call_param0
|
||||
// CHECK:STDOUT: %return: ref @F.loc4.%ptr.loc4_30.1 (%ptr.e8f) = return_slot %return.param
|
||||
// CHECK:STDOUT: %U.loc4_32.2: type = symbolic_binding U, 1 [symbolic = %U.loc4_32.1 (constants.%U.091)]
|
||||
// CHECK:STDOUT: %return.param: ref @F.loc4.%ptr.loc4_44.1 (%ptr.e8f) = out_param call_param0
|
||||
// CHECK:STDOUT: %return: ref @F.loc4.%ptr.loc4_44.1 (%ptr.e8f) = return_slot %return.param
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %F.decl.loc13: %F.type.eb3ec9.2 = fn_decl @F.loc13 [concrete = constants.%F.7088cc.2] {
|
||||
// CHECK:STDOUT: %U.patt.loc13_14.1: %pattern_type.98f = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc13_14.2 (constants.%U.patt.d47)]
|
||||
// CHECK:STDOUT: %T.patt.loc13_24.1: %pattern_type.98f = symbolic_binding_pattern T, 1 [symbolic = %T.patt.loc13_24.2 (constants.%T.patt.014)]
|
||||
// CHECK:STDOUT: %return.param_patt.loc13_37.1: @F.loc13.%pattern_type (%pattern_type.423) = out_param_pattern [symbolic = %return.param_patt.loc13_37.2 (constants.%return.param_patt.534)]
|
||||
// CHECK:STDOUT: %return.patt.loc13_33.1: @F.loc13.%pattern_type (%pattern_type.423) = return_slot_pattern %return.param_patt.loc13_37.1, %ptr.loc13_37.2 [symbolic = %return.patt.loc13_33.2 (constants.%return.patt.669)]
|
||||
// CHECK:STDOUT: %U.patt.loc13_22.1: %pattern_type.98f = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc13_22.2 (constants.%U.patt.d47)]
|
||||
// CHECK:STDOUT: %T.patt.loc13_39.1: %pattern_type.98f = symbolic_binding_pattern T, 1 [symbolic = %T.patt.loc13_39.2 (constants.%T.patt.014)]
|
||||
// CHECK:STDOUT: %return.param_patt.loc13_51.1: @F.loc13.%pattern_type (%pattern_type.423) = out_param_pattern [symbolic = %return.param_patt.loc13_51.2 (constants.%return.param_patt.534)]
|
||||
// CHECK:STDOUT: %return.patt.loc13_47.1: @F.loc13.%pattern_type (%pattern_type.423) = return_slot_pattern %return.param_patt.loc13_51.1, %ptr.loc13_51.2 [symbolic = %return.patt.loc13_47.2 (constants.%return.patt.669)]
|
||||
// CHECK:STDOUT: } {
|
||||
// CHECK:STDOUT: %T.ref.loc13: type = name_ref T, %T.loc13_24.2 [symbolic = %T.loc13_24.1 (constants.%T.091)]
|
||||
// CHECK:STDOUT: %ptr.loc13_37.2: type = ptr_type %T.ref.loc13 [symbolic = %ptr.loc13_37.1 (constants.%ptr.18e)]
|
||||
// CHECK:STDOUT: %.loc13_37.2: Core.Form = init_form %ptr.loc13_37.2 [symbolic = %.loc13_37.1 (constants.%.6d8)]
|
||||
// CHECK:STDOUT: %.loc13_17.1: type = splice_block %.loc13_17.2 [concrete = type] {
|
||||
// CHECK:STDOUT: %.Self.frozen.loc13_14: %type = symbolic_binding .Self [symbolic_self = constants.%.Self.frozen]
|
||||
// CHECK:STDOUT: %.loc13_17.2: type = type_literal type [concrete = type]
|
||||
// CHECK:STDOUT: %T.ref.loc13: type = name_ref T, %T.loc13_39.2 [symbolic = %T.loc13_39.1 (constants.%T.091)]
|
||||
// CHECK:STDOUT: %ptr.loc13_51.2: type = ptr_type %T.ref.loc13 [symbolic = %ptr.loc13_51.1 (constants.%ptr.18e)]
|
||||
// CHECK:STDOUT: %.loc13_51.2: Core.Form = init_form %ptr.loc13_51.2 [symbolic = %.loc13_51.1 (constants.%.6d8)]
|
||||
// CHECK:STDOUT: %.loc13_24.1: type = splice_block %.loc13_24.2 [concrete = type] {
|
||||
// CHECK:STDOUT: %.Self.frozen.loc13_22: %type = symbolic_binding .Self [symbolic_self = constants.%.Self.frozen]
|
||||
// CHECK:STDOUT: %.loc13_24.2: type = type_literal type [concrete = type]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %U.loc13_14.2: type = symbolic_binding U, 0 [symbolic = %U.loc13_14.1 (constants.%U.67d)]
|
||||
// CHECK:STDOUT: %.loc13_27.1: type = splice_block %.loc13_27.2 [concrete = type] {
|
||||
// CHECK:STDOUT: %.Self.frozen.loc13_24: %type = symbolic_binding .Self [symbolic_self = constants.%.Self.frozen]
|
||||
// CHECK:STDOUT: %.loc13_27.2: type = type_literal type [concrete = type]
|
||||
// CHECK:STDOUT: %U.loc13_22.2: type = symbolic_binding U, 0 [symbolic = %U.loc13_22.1 (constants.%U.67d)]
|
||||
// CHECK:STDOUT: %.loc13_41.1: type = splice_block %.loc13_41.2 [concrete = type] {
|
||||
// CHECK:STDOUT: %.Self.frozen.loc13_39: %type = symbolic_binding .Self [symbolic_self = constants.%.Self.frozen]
|
||||
// CHECK:STDOUT: %.loc13_41.2: type = type_literal type [concrete = type]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %T.loc13_24.2: type = symbolic_binding T, 1 [symbolic = %T.loc13_24.1 (constants.%T.091)]
|
||||
// CHECK:STDOUT: %return.param: ref @F.loc13.%ptr.loc13_37.1 (%ptr.18e) = out_param call_param0
|
||||
// CHECK:STDOUT: %return: ref @F.loc13.%ptr.loc13_37.1 (%ptr.18e) = return_slot %return.param
|
||||
// CHECK:STDOUT: %T.loc13_39.2: type = symbolic_binding T, 1 [symbolic = %T.loc13_39.1 (constants.%T.091)]
|
||||
// CHECK:STDOUT: %return.param: ref @F.loc13.%ptr.loc13_51.1 (%ptr.18e) = out_param call_param0
|
||||
// CHECK:STDOUT: %return: ref @F.loc13.%ptr.loc13_51.1 (%ptr.18e) = return_slot %return.param
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: generic fn @F.loc4(%T.loc4_7.2: type, %U.loc4_17.2: type) {
|
||||
// CHECK:STDOUT: %T.patt.loc4_7.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_7.2 (constants.%T.patt.d47)]
|
||||
// CHECK:STDOUT: %T.loc4_7.1: type = symbolic_binding T, 0 [symbolic = %T.loc4_7.1 (constants.%T.67d)]
|
||||
// CHECK:STDOUT: %U.patt.loc4_17.2: %pattern_type.98f = symbolic_binding_pattern U, 1 [symbolic = %U.patt.loc4_17.2 (constants.%U.patt.014)]
|
||||
// CHECK:STDOUT: %U.loc4_17.1: type = symbolic_binding U, 1 [symbolic = %U.loc4_17.1 (constants.%U.091)]
|
||||
// CHECK:STDOUT: %ptr.loc4_30.1: type = ptr_type %T.loc4_7.1 [symbolic = %ptr.loc4_30.1 (constants.%ptr.e8f)]
|
||||
// CHECK:STDOUT: %.loc4_30.1: Core.Form = init_form %ptr.loc4_30.1 [symbolic = %.loc4_30.1 (constants.%.cb6)]
|
||||
// CHECK:STDOUT: %pattern_type: type = pattern_type %ptr.loc4_30.1 [symbolic = %pattern_type (constants.%pattern_type.4f4)]
|
||||
// CHECK:STDOUT: %return.param_patt.loc4_30.2: @F.loc4.%pattern_type (%pattern_type.4f4) = out_param_pattern [symbolic = %return.param_patt.loc4_30.2 (constants.%return.param_patt.27f)]
|
||||
// CHECK:STDOUT: %return.patt.loc4_26.2: @F.loc4.%pattern_type (%pattern_type.4f4) = return_slot_pattern %return.param_patt.loc4_30.2, %ptr.loc4_30.1 [symbolic = %return.patt.loc4_26.2 (constants.%return.patt.d67)]
|
||||
// CHECK:STDOUT: generic fn @F.loc4(%T.loc4_15.2: type, %U.loc4_32.2: type) {
|
||||
// CHECK:STDOUT: %T.patt.loc4_15.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_15.2 (constants.%T.patt.d47)]
|
||||
// CHECK:STDOUT: %T.loc4_15.1: type = symbolic_binding T, 0 [symbolic = %T.loc4_15.1 (constants.%T.67d)]
|
||||
// CHECK:STDOUT: %U.patt.loc4_32.2: %pattern_type.98f = symbolic_binding_pattern U, 1 [symbolic = %U.patt.loc4_32.2 (constants.%U.patt.014)]
|
||||
// CHECK:STDOUT: %U.loc4_32.1: type = symbolic_binding U, 1 [symbolic = %U.loc4_32.1 (constants.%U.091)]
|
||||
// CHECK:STDOUT: %ptr.loc4_44.1: type = ptr_type %T.loc4_15.1 [symbolic = %ptr.loc4_44.1 (constants.%ptr.e8f)]
|
||||
// CHECK:STDOUT: %.loc4_44.1: Core.Form = init_form %ptr.loc4_44.1 [symbolic = %.loc4_44.1 (constants.%.cb6)]
|
||||
// CHECK:STDOUT: %pattern_type: type = pattern_type %ptr.loc4_44.1 [symbolic = %pattern_type (constants.%pattern_type.4f4)]
|
||||
// CHECK:STDOUT: %return.param_patt.loc4_44.2: @F.loc4.%pattern_type (%pattern_type.4f4) = out_param_pattern [symbolic = %return.param_patt.loc4_44.2 (constants.%return.param_patt.27f)]
|
||||
// CHECK:STDOUT: %return.patt.loc4_40.2: @F.loc4.%pattern_type (%pattern_type.4f4) = return_slot_pattern %return.param_patt.loc4_44.2, %ptr.loc4_44.1 [symbolic = %return.patt.loc4_40.2 (constants.%return.patt.d67)]
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn() -> out %return.param: @F.loc4.%ptr.loc4_30.1 (%ptr.e8f);
|
||||
// CHECK:STDOUT: fn() -> out %return.param: @F.loc4.%ptr.loc4_44.1 (%ptr.e8f);
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: generic fn @F.loc13(%U.loc13_14.2: type, %T.loc13_24.2: type) {
|
||||
// CHECK:STDOUT: %U.patt.loc13_14.2: %pattern_type.98f = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc13_14.2 (constants.%U.patt.d47)]
|
||||
// CHECK:STDOUT: %U.loc13_14.1: type = symbolic_binding U, 0 [symbolic = %U.loc13_14.1 (constants.%U.67d)]
|
||||
// CHECK:STDOUT: %T.patt.loc13_24.2: %pattern_type.98f = symbolic_binding_pattern T, 1 [symbolic = %T.patt.loc13_24.2 (constants.%T.patt.014)]
|
||||
// CHECK:STDOUT: %T.loc13_24.1: type = symbolic_binding T, 1 [symbolic = %T.loc13_24.1 (constants.%T.091)]
|
||||
// CHECK:STDOUT: %ptr.loc13_37.1: type = ptr_type %T.loc13_24.1 [symbolic = %ptr.loc13_37.1 (constants.%ptr.18e)]
|
||||
// CHECK:STDOUT: %.loc13_37.1: Core.Form = init_form %ptr.loc13_37.1 [symbolic = %.loc13_37.1 (constants.%.6d8)]
|
||||
// CHECK:STDOUT: %pattern_type: type = pattern_type %ptr.loc13_37.1 [symbolic = %pattern_type (constants.%pattern_type.423)]
|
||||
// CHECK:STDOUT: %return.param_patt.loc13_37.2: @F.loc13.%pattern_type (%pattern_type.423) = out_param_pattern [symbolic = %return.param_patt.loc13_37.2 (constants.%return.param_patt.534)]
|
||||
// CHECK:STDOUT: %return.patt.loc13_33.2: @F.loc13.%pattern_type (%pattern_type.423) = return_slot_pattern %return.param_patt.loc13_37.2, %ptr.loc13_37.1 [symbolic = %return.patt.loc13_33.2 (constants.%return.patt.669)]
|
||||
// CHECK:STDOUT: generic fn @F.loc13(%U.loc13_22.2: type, %T.loc13_39.2: type) {
|
||||
// CHECK:STDOUT: %U.patt.loc13_22.2: %pattern_type.98f = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc13_22.2 (constants.%U.patt.d47)]
|
||||
// CHECK:STDOUT: %U.loc13_22.1: type = symbolic_binding U, 0 [symbolic = %U.loc13_22.1 (constants.%U.67d)]
|
||||
// CHECK:STDOUT: %T.patt.loc13_39.2: %pattern_type.98f = symbolic_binding_pattern T, 1 [symbolic = %T.patt.loc13_39.2 (constants.%T.patt.014)]
|
||||
// CHECK:STDOUT: %T.loc13_39.1: type = symbolic_binding T, 1 [symbolic = %T.loc13_39.1 (constants.%T.091)]
|
||||
// CHECK:STDOUT: %ptr.loc13_51.1: type = ptr_type %T.loc13_39.1 [symbolic = %ptr.loc13_51.1 (constants.%ptr.18e)]
|
||||
// CHECK:STDOUT: %.loc13_51.1: Core.Form = init_form %ptr.loc13_51.1 [symbolic = %.loc13_51.1 (constants.%.6d8)]
|
||||
// CHECK:STDOUT: %pattern_type: type = pattern_type %ptr.loc13_51.1 [symbolic = %pattern_type (constants.%pattern_type.423)]
|
||||
// CHECK:STDOUT: %return.param_patt.loc13_51.2: @F.loc13.%pattern_type (%pattern_type.423) = out_param_pattern [symbolic = %return.param_patt.loc13_51.2 (constants.%return.param_patt.534)]
|
||||
// CHECK:STDOUT: %return.patt.loc13_47.2: @F.loc13.%pattern_type (%pattern_type.423) = return_slot_pattern %return.param_patt.loc13_51.2, %ptr.loc13_51.1 [symbolic = %return.patt.loc13_47.2 (constants.%return.patt.669)]
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT: %require_complete: <witness> = require_complete_type %ptr.loc13_37.1 [symbolic = %require_complete (constants.%require_complete)]
|
||||
// CHECK:STDOUT: %require_complete: <witness> = require_complete_type %ptr.loc13_51.1 [symbolic = %require_complete (constants.%require_complete)]
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn() -> out %return.param: @F.loc13.%ptr.loc13_37.1 (%ptr.18e) {
|
||||
// CHECK:STDOUT: fn() -> out %return.param: @F.loc13.%ptr.loc13_51.1 (%ptr.18e) {
|
||||
// CHECK:STDOUT: !entry:
|
||||
// CHECK:STDOUT: %F.ref: %F.type.eb3ec9.1 = name_ref F, file.%F.decl.loc4 [concrete = constants.%F.7088cc.1]
|
||||
// CHECK:STDOUT: %T.ref.loc21: type = name_ref T, %T.loc13_24.2 [symbolic = %T.loc13_24.1 (constants.%T.091)]
|
||||
// CHECK:STDOUT: %T.ref.loc21: type = name_ref T, %T.loc13_39.2 [symbolic = %T.loc13_39.1 (constants.%T.091)]
|
||||
// CHECK:STDOUT: return <error>
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !observes:
|
||||
@@ -476,27 +476,27 @@ fn F(U:! type, T:! type) -> U* {
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific @F.loc4(constants.%T.67d, constants.%U.091) {
|
||||
// CHECK:STDOUT: %T.patt.loc4_7.2 => constants.%T.patt.d47
|
||||
// CHECK:STDOUT: %T.loc4_7.1 => constants.%T.67d
|
||||
// CHECK:STDOUT: %U.patt.loc4_17.2 => constants.%U.patt.014
|
||||
// CHECK:STDOUT: %U.loc4_17.1 => constants.%U.091
|
||||
// CHECK:STDOUT: %ptr.loc4_30.1 => constants.%ptr.e8f
|
||||
// CHECK:STDOUT: %.loc4_30.1 => constants.%.cb6
|
||||
// CHECK:STDOUT: %T.patt.loc4_15.2 => constants.%T.patt.d47
|
||||
// CHECK:STDOUT: %T.loc4_15.1 => constants.%T.67d
|
||||
// CHECK:STDOUT: %U.patt.loc4_32.2 => constants.%U.patt.014
|
||||
// CHECK:STDOUT: %U.loc4_32.1 => constants.%U.091
|
||||
// CHECK:STDOUT: %ptr.loc4_44.1 => constants.%ptr.e8f
|
||||
// CHECK:STDOUT: %.loc4_44.1 => constants.%.cb6
|
||||
// CHECK:STDOUT: %pattern_type => constants.%pattern_type.4f4
|
||||
// CHECK:STDOUT: %return.param_patt.loc4_30.2 => constants.%return.param_patt.27f
|
||||
// CHECK:STDOUT: %return.patt.loc4_26.2 => constants.%return.patt.d67
|
||||
// CHECK:STDOUT: %return.param_patt.loc4_44.2 => constants.%return.param_patt.27f
|
||||
// CHECK:STDOUT: %return.patt.loc4_40.2 => constants.%return.patt.d67
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific @F.loc13(constants.%U.67d, constants.%T.091) {
|
||||
// CHECK:STDOUT: %U.patt.loc13_14.2 => constants.%U.patt.d47
|
||||
// CHECK:STDOUT: %U.loc13_14.1 => constants.%U.67d
|
||||
// CHECK:STDOUT: %T.patt.loc13_24.2 => constants.%T.patt.014
|
||||
// CHECK:STDOUT: %T.loc13_24.1 => constants.%T.091
|
||||
// CHECK:STDOUT: %ptr.loc13_37.1 => constants.%ptr.18e
|
||||
// CHECK:STDOUT: %.loc13_37.1 => constants.%.6d8
|
||||
// CHECK:STDOUT: %U.patt.loc13_22.2 => constants.%U.patt.d47
|
||||
// CHECK:STDOUT: %U.loc13_22.1 => constants.%U.67d
|
||||
// CHECK:STDOUT: %T.patt.loc13_39.2 => constants.%T.patt.014
|
||||
// CHECK:STDOUT: %T.loc13_39.1 => constants.%T.091
|
||||
// CHECK:STDOUT: %ptr.loc13_51.1 => constants.%ptr.18e
|
||||
// CHECK:STDOUT: %.loc13_51.1 => constants.%.6d8
|
||||
// CHECK:STDOUT: %pattern_type => constants.%pattern_type.423
|
||||
// CHECK:STDOUT: %return.param_patt.loc13_37.2 => constants.%return.param_patt.534
|
||||
// CHECK:STDOUT: %return.patt.loc13_33.2 => constants.%return.patt.669
|
||||
// CHECK:STDOUT: %return.param_patt.loc13_51.2 => constants.%return.param_patt.534
|
||||
// CHECK:STDOUT: %return.patt.loc13_47.2 => constants.%return.patt.669
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: --- fail_rename.carbon
|
||||
@@ -544,83 +544,83 @@ fn F(U:! type, T:! type) -> U* {
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %Core.import = import Core
|
||||
// CHECK:STDOUT: %F.decl.loc4: %F.type.eb3ec9.1 = fn_decl @F.loc4 [concrete = constants.%F.7088cc.1] {
|
||||
// CHECK:STDOUT: %T.patt.loc4_7.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_7.2 (constants.%T.patt.d47)]
|
||||
// CHECK:STDOUT: %U.patt.loc4_17.1: %pattern_type.98f = symbolic_binding_pattern U, 1 [symbolic = %U.patt.loc4_17.2 (constants.%U.patt.014)]
|
||||
// CHECK:STDOUT: %return.param_patt.loc4_30.1: @F.loc4.%pattern_type (%pattern_type.4f4b84.1) = out_param_pattern [symbolic = %return.param_patt.loc4_30.2 (constants.%return.param_patt.27f587.1)]
|
||||
// CHECK:STDOUT: %return.patt.loc4_26.1: @F.loc4.%pattern_type (%pattern_type.4f4b84.1) = return_slot_pattern %return.param_patt.loc4_30.1, %ptr.loc4_30.2 [symbolic = %return.patt.loc4_26.2 (constants.%return.patt.d67681.1)]
|
||||
// CHECK:STDOUT: %T.patt.loc4_15.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_15.2 (constants.%T.patt.d47)]
|
||||
// CHECK:STDOUT: %U.patt.loc4_32.1: %pattern_type.98f = symbolic_binding_pattern U, 1 [symbolic = %U.patt.loc4_32.2 (constants.%U.patt.014)]
|
||||
// CHECK:STDOUT: %return.param_patt.loc4_44.1: @F.loc4.%pattern_type (%pattern_type.4f4b84.1) = out_param_pattern [symbolic = %return.param_patt.loc4_44.2 (constants.%return.param_patt.27f587.1)]
|
||||
// CHECK:STDOUT: %return.patt.loc4_40.1: @F.loc4.%pattern_type (%pattern_type.4f4b84.1) = return_slot_pattern %return.param_patt.loc4_44.1, %ptr.loc4_44.2 [symbolic = %return.patt.loc4_40.2 (constants.%return.patt.d67681.1)]
|
||||
// CHECK:STDOUT: } {
|
||||
// CHECK:STDOUT: %T.ref: type = name_ref T, %T.loc4_7.2 [symbolic = %T.loc4_7.1 (constants.%T.67d)]
|
||||
// CHECK:STDOUT: %ptr.loc4_30.2: type = ptr_type %T.ref [symbolic = %ptr.loc4_30.1 (constants.%ptr.e8f8f9.1)]
|
||||
// CHECK:STDOUT: %.loc4_30.2: Core.Form = init_form %ptr.loc4_30.2 [symbolic = %.loc4_30.1 (constants.%.cb6cb9.1)]
|
||||
// CHECK:STDOUT: %.loc4_10.1: type = splice_block %.loc4_10.2 [concrete = type] {
|
||||
// CHECK:STDOUT: %.Self.frozen.loc4_7: %type = symbolic_binding .Self [symbolic_self = constants.%.Self.frozen]
|
||||
// CHECK:STDOUT: %.loc4_10.2: type = type_literal type [concrete = type]
|
||||
// CHECK:STDOUT: %T.ref: type = name_ref T, %T.loc4_15.2 [symbolic = %T.loc4_15.1 (constants.%T.67d)]
|
||||
// CHECK:STDOUT: %ptr.loc4_44.2: type = ptr_type %T.ref [symbolic = %ptr.loc4_44.1 (constants.%ptr.e8f8f9.1)]
|
||||
// CHECK:STDOUT: %.loc4_44.2: Core.Form = init_form %ptr.loc4_44.2 [symbolic = %.loc4_44.1 (constants.%.cb6cb9.1)]
|
||||
// CHECK:STDOUT: %.loc4_17.1: type = splice_block %.loc4_17.2 [concrete = type] {
|
||||
// CHECK:STDOUT: %.Self.frozen.loc4_15: %type = symbolic_binding .Self [symbolic_self = constants.%.Self.frozen]
|
||||
// CHECK:STDOUT: %.loc4_17.2: type = type_literal type [concrete = type]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %T.loc4_7.2: type = symbolic_binding T, 0 [symbolic = %T.loc4_7.1 (constants.%T.67d)]
|
||||
// CHECK:STDOUT: %.loc4_20.1: type = splice_block %.loc4_20.2 [concrete = type] {
|
||||
// CHECK:STDOUT: %.Self.frozen.loc4_17: %type = symbolic_binding .Self [symbolic_self = constants.%.Self.frozen]
|
||||
// CHECK:STDOUT: %.loc4_20.2: type = type_literal type [concrete = type]
|
||||
// CHECK:STDOUT: %T.loc4_15.2: type = symbolic_binding T, 0 [symbolic = %T.loc4_15.1 (constants.%T.67d)]
|
||||
// CHECK:STDOUT: %.loc4_34.1: type = splice_block %.loc4_34.2 [concrete = type] {
|
||||
// CHECK:STDOUT: %.Self.frozen.loc4_32: %type = symbolic_binding .Self [symbolic_self = constants.%.Self.frozen]
|
||||
// CHECK:STDOUT: %.loc4_34.2: type = type_literal type [concrete = type]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %U.loc4_17.2: type = symbolic_binding U, 1 [symbolic = %U.loc4_17.1 (constants.%U.091)]
|
||||
// CHECK:STDOUT: %return.param: ref @F.loc4.%ptr.loc4_30.1 (%ptr.e8f8f9.1) = out_param call_param0
|
||||
// CHECK:STDOUT: %return: ref @F.loc4.%ptr.loc4_30.1 (%ptr.e8f8f9.1) = return_slot %return.param
|
||||
// CHECK:STDOUT: %U.loc4_32.2: type = symbolic_binding U, 1 [symbolic = %U.loc4_32.1 (constants.%U.091)]
|
||||
// CHECK:STDOUT: %return.param: ref @F.loc4.%ptr.loc4_44.1 (%ptr.e8f8f9.1) = out_param call_param0
|
||||
// CHECK:STDOUT: %return: ref @F.loc4.%ptr.loc4_44.1 (%ptr.e8f8f9.1) = return_slot %return.param
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %F.decl.loc13: %F.type.eb3ec9.2 = fn_decl @F.loc13 [concrete = constants.%F.7088cc.2] {
|
||||
// CHECK:STDOUT: %U.patt.loc13_7.1: %pattern_type.98f = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc13_7.2 (constants.%U.patt.d47)]
|
||||
// CHECK:STDOUT: %T.patt.loc13_17.1: %pattern_type.98f = symbolic_binding_pattern T, 1 [symbolic = %T.patt.loc13_17.2 (constants.%T.patt.014)]
|
||||
// CHECK:STDOUT: %return.param_patt.loc13_30.1: @F.loc13.%pattern_type (%pattern_type.4f4b84.2) = out_param_pattern [symbolic = %return.param_patt.loc13_30.2 (constants.%return.param_patt.27f587.2)]
|
||||
// CHECK:STDOUT: %return.patt.loc13_26.1: @F.loc13.%pattern_type (%pattern_type.4f4b84.2) = return_slot_pattern %return.param_patt.loc13_30.1, %ptr.loc13_30.2 [symbolic = %return.patt.loc13_26.2 (constants.%return.patt.d67681.2)]
|
||||
// CHECK:STDOUT: %U.patt.loc13_15.1: %pattern_type.98f = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc13_15.2 (constants.%U.patt.d47)]
|
||||
// CHECK:STDOUT: %T.patt.loc13_32.1: %pattern_type.98f = symbolic_binding_pattern T, 1 [symbolic = %T.patt.loc13_32.2 (constants.%T.patt.014)]
|
||||
// CHECK:STDOUT: %return.param_patt.loc13_44.1: @F.loc13.%pattern_type (%pattern_type.4f4b84.2) = out_param_pattern [symbolic = %return.param_patt.loc13_44.2 (constants.%return.param_patt.27f587.2)]
|
||||
// CHECK:STDOUT: %return.patt.loc13_40.1: @F.loc13.%pattern_type (%pattern_type.4f4b84.2) = return_slot_pattern %return.param_patt.loc13_44.1, %ptr.loc13_44.2 [symbolic = %return.patt.loc13_40.2 (constants.%return.patt.d67681.2)]
|
||||
// CHECK:STDOUT: } {
|
||||
// CHECK:STDOUT: %U.ref: type = name_ref U, %U.loc13_7.2 [symbolic = %U.loc13_7.1 (constants.%U.67d)]
|
||||
// CHECK:STDOUT: %ptr.loc13_30.2: type = ptr_type %U.ref [symbolic = %ptr.loc13_30.1 (constants.%ptr.e8f8f9.2)]
|
||||
// CHECK:STDOUT: %.loc13_30.2: Core.Form = init_form %ptr.loc13_30.2 [symbolic = %.loc13_30.1 (constants.%.cb6cb9.2)]
|
||||
// CHECK:STDOUT: %.loc13_10.1: type = splice_block %.loc13_10.2 [concrete = type] {
|
||||
// CHECK:STDOUT: %.Self.frozen.loc13_7: %type = symbolic_binding .Self [symbolic_self = constants.%.Self.frozen]
|
||||
// CHECK:STDOUT: %.loc13_10.2: type = type_literal type [concrete = type]
|
||||
// CHECK:STDOUT: %U.ref: type = name_ref U, %U.loc13_15.2 [symbolic = %U.loc13_15.1 (constants.%U.67d)]
|
||||
// CHECK:STDOUT: %ptr.loc13_44.2: type = ptr_type %U.ref [symbolic = %ptr.loc13_44.1 (constants.%ptr.e8f8f9.2)]
|
||||
// CHECK:STDOUT: %.loc13_44.2: Core.Form = init_form %ptr.loc13_44.2 [symbolic = %.loc13_44.1 (constants.%.cb6cb9.2)]
|
||||
// CHECK:STDOUT: %.loc13_17.1: type = splice_block %.loc13_17.2 [concrete = type] {
|
||||
// CHECK:STDOUT: %.Self.frozen.loc13_15: %type = symbolic_binding .Self [symbolic_self = constants.%.Self.frozen]
|
||||
// CHECK:STDOUT: %.loc13_17.2: type = type_literal type [concrete = type]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %U.loc13_7.2: type = symbolic_binding U, 0 [symbolic = %U.loc13_7.1 (constants.%U.67d)]
|
||||
// CHECK:STDOUT: %.loc13_20.1: type = splice_block %.loc13_20.2 [concrete = type] {
|
||||
// CHECK:STDOUT: %.Self.frozen.loc13_17: %type = symbolic_binding .Self [symbolic_self = constants.%.Self.frozen]
|
||||
// CHECK:STDOUT: %.loc13_20.2: type = type_literal type [concrete = type]
|
||||
// CHECK:STDOUT: %U.loc13_15.2: type = symbolic_binding U, 0 [symbolic = %U.loc13_15.1 (constants.%U.67d)]
|
||||
// CHECK:STDOUT: %.loc13_34.1: type = splice_block %.loc13_34.2 [concrete = type] {
|
||||
// CHECK:STDOUT: %.Self.frozen.loc13_32: %type = symbolic_binding .Self [symbolic_self = constants.%.Self.frozen]
|
||||
// CHECK:STDOUT: %.loc13_34.2: type = type_literal type [concrete = type]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %T.loc13_17.2: type = symbolic_binding T, 1 [symbolic = %T.loc13_17.1 (constants.%T.091)]
|
||||
// CHECK:STDOUT: %return.param: ref @F.loc13.%ptr.loc13_30.1 (%ptr.e8f8f9.2) = out_param call_param0
|
||||
// CHECK:STDOUT: %return: ref @F.loc13.%ptr.loc13_30.1 (%ptr.e8f8f9.2) = return_slot %return.param
|
||||
// CHECK:STDOUT: %T.loc13_32.2: type = symbolic_binding T, 1 [symbolic = %T.loc13_32.1 (constants.%T.091)]
|
||||
// CHECK:STDOUT: %return.param: ref @F.loc13.%ptr.loc13_44.1 (%ptr.e8f8f9.2) = out_param call_param0
|
||||
// CHECK:STDOUT: %return: ref @F.loc13.%ptr.loc13_44.1 (%ptr.e8f8f9.2) = return_slot %return.param
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: generic fn @F.loc4(%T.loc4_7.2: type, %U.loc4_17.2: type) {
|
||||
// CHECK:STDOUT: %T.patt.loc4_7.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_7.2 (constants.%T.patt.d47)]
|
||||
// CHECK:STDOUT: %T.loc4_7.1: type = symbolic_binding T, 0 [symbolic = %T.loc4_7.1 (constants.%T.67d)]
|
||||
// CHECK:STDOUT: %U.patt.loc4_17.2: %pattern_type.98f = symbolic_binding_pattern U, 1 [symbolic = %U.patt.loc4_17.2 (constants.%U.patt.014)]
|
||||
// CHECK:STDOUT: %U.loc4_17.1: type = symbolic_binding U, 1 [symbolic = %U.loc4_17.1 (constants.%U.091)]
|
||||
// CHECK:STDOUT: %ptr.loc4_30.1: type = ptr_type %T.loc4_7.1 [symbolic = %ptr.loc4_30.1 (constants.%ptr.e8f8f9.1)]
|
||||
// CHECK:STDOUT: %.loc4_30.1: Core.Form = init_form %ptr.loc4_30.1 [symbolic = %.loc4_30.1 (constants.%.cb6cb9.1)]
|
||||
// CHECK:STDOUT: %pattern_type: type = pattern_type %ptr.loc4_30.1 [symbolic = %pattern_type (constants.%pattern_type.4f4b84.1)]
|
||||
// CHECK:STDOUT: %return.param_patt.loc4_30.2: @F.loc4.%pattern_type (%pattern_type.4f4b84.1) = out_param_pattern [symbolic = %return.param_patt.loc4_30.2 (constants.%return.param_patt.27f587.1)]
|
||||
// CHECK:STDOUT: %return.patt.loc4_26.2: @F.loc4.%pattern_type (%pattern_type.4f4b84.1) = return_slot_pattern %return.param_patt.loc4_30.2, %ptr.loc4_30.1 [symbolic = %return.patt.loc4_26.2 (constants.%return.patt.d67681.1)]
|
||||
// CHECK:STDOUT: generic fn @F.loc4(%T.loc4_15.2: type, %U.loc4_32.2: type) {
|
||||
// CHECK:STDOUT: %T.patt.loc4_15.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_15.2 (constants.%T.patt.d47)]
|
||||
// CHECK:STDOUT: %T.loc4_15.1: type = symbolic_binding T, 0 [symbolic = %T.loc4_15.1 (constants.%T.67d)]
|
||||
// CHECK:STDOUT: %U.patt.loc4_32.2: %pattern_type.98f = symbolic_binding_pattern U, 1 [symbolic = %U.patt.loc4_32.2 (constants.%U.patt.014)]
|
||||
// CHECK:STDOUT: %U.loc4_32.1: type = symbolic_binding U, 1 [symbolic = %U.loc4_32.1 (constants.%U.091)]
|
||||
// CHECK:STDOUT: %ptr.loc4_44.1: type = ptr_type %T.loc4_15.1 [symbolic = %ptr.loc4_44.1 (constants.%ptr.e8f8f9.1)]
|
||||
// CHECK:STDOUT: %.loc4_44.1: Core.Form = init_form %ptr.loc4_44.1 [symbolic = %.loc4_44.1 (constants.%.cb6cb9.1)]
|
||||
// CHECK:STDOUT: %pattern_type: type = pattern_type %ptr.loc4_44.1 [symbolic = %pattern_type (constants.%pattern_type.4f4b84.1)]
|
||||
// CHECK:STDOUT: %return.param_patt.loc4_44.2: @F.loc4.%pattern_type (%pattern_type.4f4b84.1) = out_param_pattern [symbolic = %return.param_patt.loc4_44.2 (constants.%return.param_patt.27f587.1)]
|
||||
// CHECK:STDOUT: %return.patt.loc4_40.2: @F.loc4.%pattern_type (%pattern_type.4f4b84.1) = return_slot_pattern %return.param_patt.loc4_44.2, %ptr.loc4_44.1 [symbolic = %return.patt.loc4_40.2 (constants.%return.patt.d67681.1)]
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn() -> out %return.param: @F.loc4.%ptr.loc4_30.1 (%ptr.e8f8f9.1);
|
||||
// CHECK:STDOUT: fn() -> out %return.param: @F.loc4.%ptr.loc4_44.1 (%ptr.e8f8f9.1);
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: generic fn @F.loc13(%U.loc13_7.2: type, %T.loc13_17.2: type) {
|
||||
// CHECK:STDOUT: %U.patt.loc13_7.2: %pattern_type.98f = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc13_7.2 (constants.%U.patt.d47)]
|
||||
// CHECK:STDOUT: %U.loc13_7.1: type = symbolic_binding U, 0 [symbolic = %U.loc13_7.1 (constants.%U.67d)]
|
||||
// CHECK:STDOUT: %T.patt.loc13_17.2: %pattern_type.98f = symbolic_binding_pattern T, 1 [symbolic = %T.patt.loc13_17.2 (constants.%T.patt.014)]
|
||||
// CHECK:STDOUT: %T.loc13_17.1: type = symbolic_binding T, 1 [symbolic = %T.loc13_17.1 (constants.%T.091)]
|
||||
// CHECK:STDOUT: %ptr.loc13_30.1: type = ptr_type %U.loc13_7.1 [symbolic = %ptr.loc13_30.1 (constants.%ptr.e8f8f9.2)]
|
||||
// CHECK:STDOUT: %.loc13_30.1: Core.Form = init_form %ptr.loc13_30.1 [symbolic = %.loc13_30.1 (constants.%.cb6cb9.2)]
|
||||
// CHECK:STDOUT: %pattern_type: type = pattern_type %ptr.loc13_30.1 [symbolic = %pattern_type (constants.%pattern_type.4f4b84.2)]
|
||||
// CHECK:STDOUT: %return.param_patt.loc13_30.2: @F.loc13.%pattern_type (%pattern_type.4f4b84.2) = out_param_pattern [symbolic = %return.param_patt.loc13_30.2 (constants.%return.param_patt.27f587.2)]
|
||||
// CHECK:STDOUT: %return.patt.loc13_26.2: @F.loc13.%pattern_type (%pattern_type.4f4b84.2) = return_slot_pattern %return.param_patt.loc13_30.2, %ptr.loc13_30.1 [symbolic = %return.patt.loc13_26.2 (constants.%return.patt.d67681.2)]
|
||||
// CHECK:STDOUT: generic fn @F.loc13(%U.loc13_15.2: type, %T.loc13_32.2: type) {
|
||||
// CHECK:STDOUT: %U.patt.loc13_15.2: %pattern_type.98f = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc13_15.2 (constants.%U.patt.d47)]
|
||||
// CHECK:STDOUT: %U.loc13_15.1: type = symbolic_binding U, 0 [symbolic = %U.loc13_15.1 (constants.%U.67d)]
|
||||
// CHECK:STDOUT: %T.patt.loc13_32.2: %pattern_type.98f = symbolic_binding_pattern T, 1 [symbolic = %T.patt.loc13_32.2 (constants.%T.patt.014)]
|
||||
// CHECK:STDOUT: %T.loc13_32.1: type = symbolic_binding T, 1 [symbolic = %T.loc13_32.1 (constants.%T.091)]
|
||||
// CHECK:STDOUT: %ptr.loc13_44.1: type = ptr_type %U.loc13_15.1 [symbolic = %ptr.loc13_44.1 (constants.%ptr.e8f8f9.2)]
|
||||
// CHECK:STDOUT: %.loc13_44.1: Core.Form = init_form %ptr.loc13_44.1 [symbolic = %.loc13_44.1 (constants.%.cb6cb9.2)]
|
||||
// CHECK:STDOUT: %pattern_type: type = pattern_type %ptr.loc13_44.1 [symbolic = %pattern_type (constants.%pattern_type.4f4b84.2)]
|
||||
// CHECK:STDOUT: %return.param_patt.loc13_44.2: @F.loc13.%pattern_type (%pattern_type.4f4b84.2) = out_param_pattern [symbolic = %return.param_patt.loc13_44.2 (constants.%return.param_patt.27f587.2)]
|
||||
// CHECK:STDOUT: %return.patt.loc13_40.2: @F.loc13.%pattern_type (%pattern_type.4f4b84.2) = return_slot_pattern %return.param_patt.loc13_44.2, %ptr.loc13_44.1 [symbolic = %return.patt.loc13_40.2 (constants.%return.patt.d67681.2)]
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT: %require_complete: <witness> = require_complete_type %ptr.loc13_30.1 [symbolic = %require_complete (constants.%require_complete)]
|
||||
// CHECK:STDOUT: %require_complete: <witness> = require_complete_type %ptr.loc13_44.1 [symbolic = %require_complete (constants.%require_complete)]
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn() -> out %return.param: @F.loc13.%ptr.loc13_30.1 (%ptr.e8f8f9.2) {
|
||||
// CHECK:STDOUT: fn() -> out %return.param: @F.loc13.%ptr.loc13_44.1 (%ptr.e8f8f9.2) {
|
||||
// CHECK:STDOUT: !entry:
|
||||
// CHECK:STDOUT: %F.ref: %F.type.eb3ec9.1 = name_ref F, file.%F.decl.loc4 [concrete = constants.%F.7088cc.1]
|
||||
// CHECK:STDOUT: %T.ref: type = name_ref T, %T.loc13_17.2 [symbolic = %T.loc13_17.1 (constants.%T.091)]
|
||||
// CHECK:STDOUT: %T.ref: type = name_ref T, %T.loc13_32.2 [symbolic = %T.loc13_32.1 (constants.%T.091)]
|
||||
// CHECK:STDOUT: return <error>
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !observes:
|
||||
@@ -628,26 +628,26 @@ fn F(U:! type, T:! type) -> U* {
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific @F.loc4(constants.%T.67d, constants.%U.091) {
|
||||
// CHECK:STDOUT: %T.patt.loc4_7.2 => constants.%T.patt.d47
|
||||
// CHECK:STDOUT: %T.loc4_7.1 => constants.%T.67d
|
||||
// CHECK:STDOUT: %U.patt.loc4_17.2 => constants.%U.patt.014
|
||||
// CHECK:STDOUT: %U.loc4_17.1 => constants.%U.091
|
||||
// CHECK:STDOUT: %ptr.loc4_30.1 => constants.%ptr.e8f8f9.1
|
||||
// CHECK:STDOUT: %.loc4_30.1 => constants.%.cb6cb9.1
|
||||
// CHECK:STDOUT: %T.patt.loc4_15.2 => constants.%T.patt.d47
|
||||
// CHECK:STDOUT: %T.loc4_15.1 => constants.%T.67d
|
||||
// CHECK:STDOUT: %U.patt.loc4_32.2 => constants.%U.patt.014
|
||||
// CHECK:STDOUT: %U.loc4_32.1 => constants.%U.091
|
||||
// CHECK:STDOUT: %ptr.loc4_44.1 => constants.%ptr.e8f8f9.1
|
||||
// CHECK:STDOUT: %.loc4_44.1 => constants.%.cb6cb9.1
|
||||
// CHECK:STDOUT: %pattern_type => constants.%pattern_type.4f4b84.1
|
||||
// CHECK:STDOUT: %return.param_patt.loc4_30.2 => constants.%return.param_patt.27f587.1
|
||||
// CHECK:STDOUT: %return.patt.loc4_26.2 => constants.%return.patt.d67681.1
|
||||
// CHECK:STDOUT: %return.param_patt.loc4_44.2 => constants.%return.param_patt.27f587.1
|
||||
// CHECK:STDOUT: %return.patt.loc4_40.2 => constants.%return.patt.d67681.1
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific @F.loc13(constants.%U.67d, constants.%T.091) {
|
||||
// CHECK:STDOUT: %U.patt.loc13_7.2 => constants.%U.patt.d47
|
||||
// CHECK:STDOUT: %U.loc13_7.1 => constants.%U.67d
|
||||
// CHECK:STDOUT: %T.patt.loc13_17.2 => constants.%T.patt.014
|
||||
// CHECK:STDOUT: %T.loc13_17.1 => constants.%T.091
|
||||
// CHECK:STDOUT: %ptr.loc13_30.1 => constants.%ptr.e8f8f9.2
|
||||
// CHECK:STDOUT: %.loc13_30.1 => constants.%.cb6cb9.2
|
||||
// CHECK:STDOUT: %U.patt.loc13_15.2 => constants.%U.patt.d47
|
||||
// CHECK:STDOUT: %U.loc13_15.1 => constants.%U.67d
|
||||
// CHECK:STDOUT: %T.patt.loc13_32.2 => constants.%T.patt.014
|
||||
// CHECK:STDOUT: %T.loc13_32.1 => constants.%T.091
|
||||
// CHECK:STDOUT: %ptr.loc13_44.1 => constants.%ptr.e8f8f9.2
|
||||
// CHECK:STDOUT: %.loc13_44.1 => constants.%.cb6cb9.2
|
||||
// CHECK:STDOUT: %pattern_type => constants.%pattern_type.4f4b84.2
|
||||
// CHECK:STDOUT: %return.param_patt.loc13_30.2 => constants.%return.param_patt.27f587.2
|
||||
// CHECK:STDOUT: %return.patt.loc13_26.2 => constants.%return.patt.d67681.2
|
||||
// CHECK:STDOUT: %return.param_patt.loc13_44.2 => constants.%return.param_patt.27f587.2
|
||||
// CHECK:STDOUT: %return.patt.loc13_40.2 => constants.%return.patt.d67681.2
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
|
||||
+12
-12
@@ -16,7 +16,7 @@
|
||||
|
||||
library "[[@TEST_NAME]]";
|
||||
|
||||
fn ErrorIfNIsZero(N:! Core.IntLiteral) {
|
||||
fn ErrorIfNIsZero(generic N: Core.IntLiteral) {
|
||||
// Check that we resolve the definition of a used specific function by
|
||||
// ensuring we produce an error when doing so. Notionally this error is
|
||||
// produced as a result of instantiating the `Core.Int` template, although
|
||||
@@ -124,24 +124,24 @@ fn CallNegative() {
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %Core.import = import Core
|
||||
// CHECK:STDOUT: %ErrorIfNIsZero.decl: %ErrorIfNIsZero.type = fn_decl @ErrorIfNIsZero [concrete = constants.%ErrorIfNIsZero] {
|
||||
// CHECK:STDOUT: %N.patt.loc4_20.1: %pattern_type.dc0 = symbolic_binding_pattern N, 0 [symbolic = %N.patt.loc4_20.2 (constants.%N.patt)]
|
||||
// CHECK:STDOUT: %N.patt.loc4_28.1: %pattern_type.dc0 = symbolic_binding_pattern N, 0 [symbolic = %N.patt.loc4_28.2 (constants.%N.patt)]
|
||||
// CHECK:STDOUT: } {
|
||||
// CHECK:STDOUT: %.loc4: type = splice_block %IntLiteral.ref [concrete = Core.IntLiteral] {
|
||||
// CHECK:STDOUT: %.Self.frozen: %type = symbolic_binding .Self [symbolic_self = constants.%.Self.frozen]
|
||||
// CHECK:STDOUT: %Core.ref.loc4: <namespace> = name_ref Core, imports.%Core [concrete = imports.%Core]
|
||||
// CHECK:STDOUT: %IntLiteral.ref: type = name_ref IntLiteral, imports.%Core.IntLiteral [concrete = Core.IntLiteral]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %N.loc4_20.2: Core.IntLiteral = symbolic_binding N, 0 [symbolic = %N.loc4_20.1 (constants.%N)]
|
||||
// CHECK:STDOUT: %N.loc4_28.2: Core.IntLiteral = symbolic_binding N, 0 [symbolic = %N.loc4_28.1 (constants.%N)]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %CallNegative.decl: %CallNegative.type = fn_decl @CallNegative [concrete = constants.%CallNegative] {} {}
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: generic fn @ErrorIfNIsZero(%N.loc4_20.2: Core.IntLiteral) {
|
||||
// CHECK:STDOUT: %N.patt.loc4_20.2: %pattern_type.dc0 = symbolic_binding_pattern N, 0 [symbolic = %N.patt.loc4_20.2 (constants.%N.patt)]
|
||||
// CHECK:STDOUT: %N.loc4_20.1: Core.IntLiteral = symbolic_binding N, 0 [symbolic = %N.loc4_20.1 (constants.%N)]
|
||||
// CHECK:STDOUT: generic fn @ErrorIfNIsZero(%N.loc4_28.2: Core.IntLiteral) {
|
||||
// CHECK:STDOUT: %N.patt.loc4_28.2: %pattern_type.dc0 = symbolic_binding_pattern N, 0 [symbolic = %N.patt.loc4_28.2 (constants.%N.patt)]
|
||||
// CHECK:STDOUT: %N.loc4_28.1: Core.IntLiteral = symbolic_binding N, 0 [symbolic = %N.loc4_28.1 (constants.%N)]
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT: %Int.loc9_27.2: type = class_type @Int, @Int(%N.loc4_20.1) [symbolic = %Int.loc9_27.2 (constants.%Int)]
|
||||
// CHECK:STDOUT: %Int.loc9_27.2: type = class_type @Int, @Int(%N.loc4_28.1) [symbolic = %Int.loc9_27.2 (constants.%Int)]
|
||||
// CHECK:STDOUT: %require_complete: <witness> = require_complete_type %Int.loc9_27.2 [symbolic = %require_complete (constants.%require_complete.4df)]
|
||||
// CHECK:STDOUT: %pattern_type: type = pattern_type %Int.loc9_27.2 [symbolic = %pattern_type (constants.%pattern_type.142)]
|
||||
// CHECK:STDOUT: %v.patt.loc9_15.2: @ErrorIfNIsZero.%pattern_type (%pattern_type.142) = ref_binding_pattern v [symbolic = %v.patt.loc9_15.2 (constants.%v.patt.834)]
|
||||
@@ -174,7 +174,7 @@ fn CallNegative() {
|
||||
// CHECK:STDOUT: %.loc9_27: type = splice_block %Int.loc9_27.1 [symbolic = %Int.loc9_27.2 (constants.%Int)] {
|
||||
// CHECK:STDOUT: %Core.ref.loc9: <namespace> = name_ref Core, imports.%Core [concrete = imports.%Core]
|
||||
// CHECK:STDOUT: %Int.ref: %Int.type = name_ref Int, imports.%Core.Int [concrete = constants.%Int.generic]
|
||||
// CHECK:STDOUT: %N.ref: Core.IntLiteral = name_ref N, %N.loc4_20.2 [symbolic = %N.loc4_20.1 (constants.%N)]
|
||||
// CHECK:STDOUT: %N.ref: Core.IntLiteral = name_ref N, %N.loc4_28.2 [symbolic = %N.loc4_28.1 (constants.%N)]
|
||||
// CHECK:STDOUT: %Int.loc9_27.1: type = class_type @Int, @Int(constants.%N) [symbolic = %Int.loc9_27.2 (constants.%Int)]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %v: ref @ErrorIfNIsZero.%Int.loc9_27.2 (%Int) = wrapper_binding v, %v.var
|
||||
@@ -216,13 +216,13 @@ fn CallNegative() {
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific @ErrorIfNIsZero(constants.%N) {
|
||||
// CHECK:STDOUT: %N.patt.loc4_20.2 => constants.%N.patt
|
||||
// CHECK:STDOUT: %N.loc4_20.1 => constants.%N
|
||||
// CHECK:STDOUT: %N.patt.loc4_28.2 => constants.%N.patt
|
||||
// CHECK:STDOUT: %N.loc4_28.1 => constants.%N
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific @ErrorIfNIsZero(constants.%int_0) {
|
||||
// CHECK:STDOUT: %N.patt.loc4_20.2 => constants.%N.patt
|
||||
// CHECK:STDOUT: %N.loc4_20.1 => constants.%int_0
|
||||
// CHECK:STDOUT: %N.patt.loc4_28.2 => constants.%N.patt
|
||||
// CHECK:STDOUT: %N.loc4_28.1 => constants.%int_0
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT: %Int.loc9_27.2 => constants.%i0
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
// TIP: To dump output, run:
|
||||
// TIP: bazel run //toolchain/testing:file_test -- --dump_output --file_tests=toolchain/check/testdata/function/generic/return_slot.carbon
|
||||
|
||||
class Wrap(T:! type) {
|
||||
class Wrap(T: type) {
|
||||
fn Make() -> T { return Make(); }
|
||||
}
|
||||
|
||||
@@ -123,9 +123,9 @@ fn G() {
|
||||
// CHECK:STDOUT: %Wrap.decl: %Wrap.type = class_decl @Wrap [concrete = constants.%Wrap.generic] {
|
||||
// CHECK:STDOUT: %T.patt.loc15_13.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc15_13.2 (constants.%T.patt)]
|
||||
// CHECK:STDOUT: } {
|
||||
// CHECK:STDOUT: %.loc15_16.1: type = splice_block %.loc15_16.2 [concrete = type] {
|
||||
// CHECK:STDOUT: %.loc15_15.1: type = splice_block %.loc15_15.2 [concrete = type] {
|
||||
// CHECK:STDOUT: %.Self.frozen: %type = symbolic_binding .Self [symbolic_self = constants.%.Self.frozen]
|
||||
// CHECK:STDOUT: %.loc15_16.2: type = type_literal type [concrete = type]
|
||||
// CHECK:STDOUT: %.loc15_15.2: type = type_literal type [concrete = type]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %T.loc15_13.2: type = symbolic_binding T, 0 [symbolic = %T.loc15_13.1 (constants.%T)]
|
||||
// CHECK:STDOUT: }
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
|
||||
library "[[@TEST_NAME]]";
|
||||
|
||||
fn F(unused template T:! type) {
|
||||
fn F(unused template T: type) {
|
||||
}
|
||||
|
||||
fn G() {
|
||||
@@ -49,9 +49,9 @@ fn G() {
|
||||
// CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] {
|
||||
// CHECK:STDOUT: %T.patt.loc4_23.1: %pattern_type = symbolic_binding_pattern T, 0, template [template = %T.patt.loc4_23.2 (constants.%T.patt)]
|
||||
// CHECK:STDOUT: } {
|
||||
// CHECK:STDOUT: %.loc4_26.1: type = splice_block %.loc4_26.2 [concrete = type] {
|
||||
// CHECK:STDOUT: %.loc4_25.1: type = splice_block %.loc4_25.2 [concrete = type] {
|
||||
// CHECK:STDOUT: %.Self.frozen: %type = symbolic_binding .Self [symbolic_self = constants.%.Self.frozen]
|
||||
// CHECK:STDOUT: %.loc4_26.2: type = type_literal type [concrete = type]
|
||||
// CHECK:STDOUT: %.loc4_25.2: type = type_literal type [concrete = type]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %T.loc4_23.2: type = symbolic_binding T, 0, template [template = %T.loc4_23.1 (constants.%T)]
|
||||
// CHECK:STDOUT: }
|
||||
|
||||
+18
-18
@@ -12,7 +12,7 @@
|
||||
// TIP: To dump output, run:
|
||||
// TIP: bazel run //toolchain/testing:file_test -- --dump_output --file_tests=toolchain/check/testdata/function/generic/type_param.carbon
|
||||
|
||||
fn F(T:! type) {
|
||||
fn F(generic T: type) {
|
||||
var p: T*;
|
||||
let unused n: T = *p;
|
||||
}
|
||||
@@ -72,22 +72,22 @@ fn F(T:! type) {
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %Core.import = import Core
|
||||
// CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] {
|
||||
// CHECK:STDOUT: %T.patt.loc15_7.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc15_7.2 (constants.%T.patt.d47)]
|
||||
// CHECK:STDOUT: %T.patt.loc15_15.1: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc15_15.2 (constants.%T.patt.d47)]
|
||||
// CHECK:STDOUT: } {
|
||||
// CHECK:STDOUT: %.loc15_10.1: type = splice_block %.loc15_10.2 [concrete = type] {
|
||||
// CHECK:STDOUT: %.loc15_17.1: type = splice_block %.loc15_17.2 [concrete = type] {
|
||||
// CHECK:STDOUT: %.Self.frozen: %type = symbolic_binding .Self [symbolic_self = constants.%.Self.frozen]
|
||||
// CHECK:STDOUT: %.loc15_10.2: type = type_literal type [concrete = type]
|
||||
// CHECK:STDOUT: %.loc15_17.2: type = type_literal type [concrete = type]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %T.loc15_7.2: type = symbolic_binding T, 0 [symbolic = %T.loc15_7.1 (constants.%T.67d)]
|
||||
// CHECK:STDOUT: %T.loc15_15.2: type = symbolic_binding T, 0 [symbolic = %T.loc15_15.1 (constants.%T.67d)]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: generic fn @F(%T.loc15_7.2: type) {
|
||||
// CHECK:STDOUT: %T.patt.loc15_7.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc15_7.2 (constants.%T.patt.d47)]
|
||||
// CHECK:STDOUT: %T.loc15_7.1: type = symbolic_binding T, 0 [symbolic = %T.loc15_7.1 (constants.%T.67d)]
|
||||
// CHECK:STDOUT: generic fn @F(%T.loc15_15.2: type) {
|
||||
// CHECK:STDOUT: %T.patt.loc15_15.2: %pattern_type.98f = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc15_15.2 (constants.%T.patt.d47)]
|
||||
// CHECK:STDOUT: %T.loc15_15.1: type = symbolic_binding T, 0 [symbolic = %T.loc15_15.1 (constants.%T.67d)]
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT: %ptr.loc16_11.2: type = ptr_type %T.loc15_7.1 [symbolic = %ptr.loc16_11.2 (constants.%ptr)]
|
||||
// CHECK:STDOUT: %ptr.loc16_11.2: type = ptr_type %T.loc15_15.1 [symbolic = %ptr.loc16_11.2 (constants.%ptr)]
|
||||
// CHECK:STDOUT: %require_complete.loc16: <witness> = require_complete_type %ptr.loc16_11.2 [symbolic = %require_complete.loc16 (constants.%require_complete.ef1)]
|
||||
// CHECK:STDOUT: %pattern_type.loc16: type = pattern_type %ptr.loc16_11.2 [symbolic = %pattern_type.loc16 (constants.%pattern_type.4f4)]
|
||||
// CHECK:STDOUT: %p.patt.loc16_8.2: @F.%pattern_type.loc16 (%pattern_type.4f4) = ref_binding_pattern p [symbolic = %p.patt.loc16_8.2 (constants.%p.patt)]
|
||||
@@ -99,8 +99,8 @@ fn F(T:! type) {
|
||||
// CHECK:STDOUT: %.loc16_12.4: type = fn_type_with_self_type %DefaultOrUnformed.WithSelf.Op.type, %DefaultOrUnformed.facet.loc16_12.2 [symbolic = %.loc16_12.4 (constants.%.2e6)]
|
||||
// CHECK:STDOUT: %impl.elem0.loc16_12.2: @F.%.loc16_12.4 (%.2e6) = impl_witness_access %DefaultOrUnformed.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc16_12.2 (constants.%impl.elem0.66d)]
|
||||
// CHECK:STDOUT: %specific_impl_fn.loc16_12.2: <specific function> = specific_impl_function %impl.elem0.loc16_12.2, @DefaultOrUnformed.WithSelf.Op(%DefaultOrUnformed.facet.loc16_12.2) [symbolic = %specific_impl_fn.loc16_12.2 (constants.%specific_impl_fn.53b)]
|
||||
// CHECK:STDOUT: %require_complete.loc17: <witness> = require_complete_type %T.loc15_7.1 [symbolic = %require_complete.loc17 (constants.%require_complete.944)]
|
||||
// CHECK:STDOUT: %pattern_type.loc17: type = pattern_type %T.loc15_7.1 [symbolic = %pattern_type.loc17 (constants.%pattern_type.51d)]
|
||||
// CHECK:STDOUT: %require_complete.loc17: <witness> = require_complete_type %T.loc15_15.1 [symbolic = %require_complete.loc17 (constants.%require_complete.944)]
|
||||
// CHECK:STDOUT: %pattern_type.loc17: type = pattern_type %T.loc15_15.1 [symbolic = %pattern_type.loc17 (constants.%pattern_type.51d)]
|
||||
// CHECK:STDOUT: %n.patt.loc17_15.2: @F.%pattern_type.loc17 (%pattern_type.51d) = value_binding_pattern n [symbolic = %n.patt.loc17_15.2 (constants.%n.patt)]
|
||||
// CHECK:STDOUT: %Destroy.lookup_impl_witness: <witness> = lookup_impl_witness %ptr.loc16_11.2, @Destroy [symbolic = %Destroy.lookup_impl_witness (constants.%Destroy.lookup_impl_witness)]
|
||||
// CHECK:STDOUT: %Destroy.facet.loc16_3.3: %Destroy.type = facet_value %ptr.loc16_11.2, (%Destroy.lookup_impl_witness) [symbolic = %Destroy.facet.loc16_3.3 (constants.%Destroy.facet)]
|
||||
@@ -121,7 +121,7 @@ fn F(T:! type) {
|
||||
// CHECK:STDOUT: %DefaultOrUnformed.WithSelf.Op.call: init @F.%ptr.loc16_11.2 (%ptr) = call %specific_impl_fn.loc16_12.1()
|
||||
// CHECK:STDOUT: assign %p.var, %DefaultOrUnformed.WithSelf.Op.call
|
||||
// CHECK:STDOUT: %.loc16_11: type = splice_block %ptr.loc16_11.1 [symbolic = %ptr.loc16_11.2 (constants.%ptr)] {
|
||||
// CHECK:STDOUT: %T.ref.loc16: type = name_ref T, %T.loc15_7.2 [symbolic = %T.loc15_7.1 (constants.%T.67d)]
|
||||
// CHECK:STDOUT: %T.ref.loc16: type = name_ref T, %T.loc15_15.2 [symbolic = %T.loc15_15.1 (constants.%T.67d)]
|
||||
// CHECK:STDOUT: %ptr.loc16_11.1: type = ptr_type %T.ref.loc16 [symbolic = %ptr.loc16_11.2 (constants.%ptr)]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %p: ref @F.%ptr.loc16_11.2 (%ptr) = wrapper_binding p, %p.var
|
||||
@@ -131,10 +131,10 @@ fn F(T:! type) {
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %p.ref: ref @F.%ptr.loc16_11.2 (%ptr) = name_ref p, %p
|
||||
// CHECK:STDOUT: %.loc17_22: @F.%ptr.loc16_11.2 (%ptr) = acquire_value %p.ref
|
||||
// CHECK:STDOUT: %.loc17_21.1: ref @F.%T.loc15_7.1 (%T.67d) = deref %.loc17_22
|
||||
// CHECK:STDOUT: %.loc17_21.2: @F.%T.loc15_7.1 (%T.67d) = acquire_value %.loc17_21.1
|
||||
// CHECK:STDOUT: %T.ref.loc17: type = name_ref T, %T.loc15_7.2 [symbolic = %T.loc15_7.1 (constants.%T.67d)]
|
||||
// CHECK:STDOUT: %n: @F.%T.loc15_7.1 (%T.67d) = wrapper_binding n, %.loc17_21.2
|
||||
// CHECK:STDOUT: %.loc17_21.1: ref @F.%T.loc15_15.1 (%T.67d) = deref %.loc17_22
|
||||
// CHECK:STDOUT: %.loc17_21.2: @F.%T.loc15_15.1 (%T.67d) = acquire_value %.loc17_21.1
|
||||
// CHECK:STDOUT: %T.ref.loc17: type = name_ref T, %T.loc15_15.2 [symbolic = %T.loc15_15.1 (constants.%T.67d)]
|
||||
// CHECK:STDOUT: %n: @F.%T.loc15_15.1 (%T.67d) = wrapper_binding n, %.loc17_21.2
|
||||
// CHECK:STDOUT: name_binding_decl {
|
||||
// CHECK:STDOUT: %n.patt.loc17_15.1: @F.%pattern_type.loc17 (%pattern_type.51d) = value_binding_pattern n [symbolic = %n.patt.loc17_15.2 (constants.%n.patt)]
|
||||
// CHECK:STDOUT: }
|
||||
@@ -154,7 +154,7 @@ fn F(T:! type) {
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific @F(constants.%T.67d) {
|
||||
// CHECK:STDOUT: %T.patt.loc15_7.2 => constants.%T.patt.d47
|
||||
// CHECK:STDOUT: %T.loc15_7.1 => constants.%T.67d
|
||||
// CHECK:STDOUT: %T.patt.loc15_15.2 => constants.%T.patt.d47
|
||||
// CHECK:STDOUT: %T.loc15_15.1 => constants.%T.67d
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
|
||||
library "[[@TEST_NAME]]";
|
||||
|
||||
fn F(T:! type, n: T*) -> T* {
|
||||
fn F(generic T: type, n: T*) -> T* {
|
||||
//@dump-sem-ir-begin
|
||||
let m: T* = n;
|
||||
return m;
|
||||
@@ -46,32 +46,32 @@ fn F(T:! type, n: T*) -> T* {
|
||||
// CHECK:STDOUT: %specific_impl_fn.a76: <specific function> = specific_impl_function %impl.elem0.484, @Copy.WithSelf.Op(%Copy.facet) [symbolic]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: generic fn @F(%T.loc4_7.2: type) {
|
||||
// CHECK:STDOUT: generic fn @F(%T.loc4_15.2: type) {
|
||||
// CHECK:STDOUT: <elided>
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT: <elided>
|
||||
// CHECK:STDOUT: %m.patt.loc6_8.2: @F.%pattern_type (%pattern_type.4f4) = value_binding_pattern m [symbolic = %m.patt.loc6_8.2 (constants.%m.patt)]
|
||||
// CHECK:STDOUT: %.loc7_10.3: require_specific_def_type = require_specific_def @ptr.as.Copy.impl(%T.loc4_7.1) [symbolic = %.loc7_10.3 (constants.%.0e9)]
|
||||
// CHECK:STDOUT: %Copy.lookup_impl_witness: <witness> = lookup_impl_witness %ptr.loc4_20.1, @Copy [symbolic = %Copy.lookup_impl_witness (constants.%Copy.lookup_impl_witness.1da)]
|
||||
// CHECK:STDOUT: %Copy.facet.loc7_10.3: %Copy.type = facet_value %ptr.loc4_20.1, (%Copy.lookup_impl_witness) [symbolic = %Copy.facet.loc7_10.3 (constants.%Copy.facet)]
|
||||
// CHECK:STDOUT: %.loc7_10.3: require_specific_def_type = require_specific_def @ptr.as.Copy.impl(%T.loc4_15.1) [symbolic = %.loc7_10.3 (constants.%.0e9)]
|
||||
// CHECK:STDOUT: %Copy.lookup_impl_witness: <witness> = lookup_impl_witness %ptr.loc4_27.1, @Copy [symbolic = %Copy.lookup_impl_witness (constants.%Copy.lookup_impl_witness.1da)]
|
||||
// CHECK:STDOUT: %Copy.facet.loc7_10.3: %Copy.type = facet_value %ptr.loc4_27.1, (%Copy.lookup_impl_witness) [symbolic = %Copy.facet.loc7_10.3 (constants.%Copy.facet)]
|
||||
// CHECK:STDOUT: %Copy.WithSelf.Op.type: type = fn_type @Copy.WithSelf.Op, @Copy.WithSelf(%Copy.facet.loc7_10.3) [symbolic = %Copy.WithSelf.Op.type (constants.%Copy.WithSelf.Op.type.884)]
|
||||
// CHECK:STDOUT: %.loc7_10.4: type = fn_type_with_self_type %Copy.WithSelf.Op.type, %Copy.facet.loc7_10.3 [symbolic = %.loc7_10.4 (constants.%.be5)]
|
||||
// CHECK:STDOUT: %impl.elem0.loc7_10.2: @F.%.loc7_10.4 (%.be5) = impl_witness_access %Copy.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc7_10.2 (constants.%impl.elem0.484)]
|
||||
// CHECK:STDOUT: %specific_impl_fn.loc7_10.2: <specific function> = specific_impl_function %impl.elem0.loc7_10.2, @Copy.WithSelf.Op(%Copy.facet.loc7_10.3) [symbolic = %specific_impl_fn.loc7_10.2 (constants.%specific_impl_fn.a76)]
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn(%n.param: @F.%ptr.loc4_20.1 (%ptr)) -> out %return.param: @F.%ptr.loc4_20.1 (%ptr) {
|
||||
// CHECK:STDOUT: fn(%n.param: @F.%ptr.loc4_27.1 (%ptr)) -> out %return.param: @F.%ptr.loc4_27.1 (%ptr) {
|
||||
// CHECK:STDOUT: !entry:
|
||||
// CHECK:STDOUT: %n.ref: @F.%ptr.loc4_20.1 (%ptr) = name_ref n, %n
|
||||
// CHECK:STDOUT: %.loc6: type = splice_block %ptr.loc6 [symbolic = %ptr.loc4_20.1 (constants.%ptr)] {
|
||||
// CHECK:STDOUT: %T.ref.loc6: type = name_ref T, %T.loc4_7.2 [symbolic = %T.loc4_7.1 (constants.%T.67d)]
|
||||
// CHECK:STDOUT: %ptr.loc6: type = ptr_type %T.ref.loc6 [symbolic = %ptr.loc4_20.1 (constants.%ptr)]
|
||||
// CHECK:STDOUT: %n.ref: @F.%ptr.loc4_27.1 (%ptr) = name_ref n, %n
|
||||
// CHECK:STDOUT: %.loc6: type = splice_block %ptr.loc6 [symbolic = %ptr.loc4_27.1 (constants.%ptr)] {
|
||||
// CHECK:STDOUT: %T.ref.loc6: type = name_ref T, %T.loc4_15.2 [symbolic = %T.loc4_15.1 (constants.%T.67d)]
|
||||
// CHECK:STDOUT: %ptr.loc6: type = ptr_type %T.ref.loc6 [symbolic = %ptr.loc4_27.1 (constants.%ptr)]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %m: @F.%ptr.loc4_20.1 (%ptr) = wrapper_binding m, %n.ref
|
||||
// CHECK:STDOUT: %m: @F.%ptr.loc4_27.1 (%ptr) = wrapper_binding m, %n.ref
|
||||
// CHECK:STDOUT: name_binding_decl {
|
||||
// CHECK:STDOUT: %m.patt.loc6_8.1: @F.%pattern_type (%pattern_type.4f4) = value_binding_pattern m [symbolic = %m.patt.loc6_8.2 (constants.%m.patt)]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %m.ref: @F.%ptr.loc4_20.1 (%ptr) = name_ref m, %m
|
||||
// CHECK:STDOUT: %m.ref: @F.%ptr.loc4_27.1 (%ptr) = name_ref m, %m
|
||||
// CHECK:STDOUT: %impl.elem0.loc7_10.1: @F.%.loc7_10.4 (%.be5) = impl_witness_access constants.%Copy.lookup_impl_witness.1da, element0 [symbolic = %impl.elem0.loc7_10.2 (constants.%impl.elem0.484)]
|
||||
// CHECK:STDOUT: %bound_method.loc7_10.1: <bound method> = bound_method %m.ref, %impl.elem0.loc7_10.1
|
||||
// CHECK:STDOUT: %Copy.facet.loc7_10.1: %Copy.type = facet_value constants.%ptr, (constants.%Copy.lookup_impl_witness.1da) [symbolic = %Copy.facet.loc7_10.3 (constants.%Copy.facet)]
|
||||
@@ -80,7 +80,7 @@ fn F(T:! type, n: T*) -> T* {
|
||||
// CHECK:STDOUT: %.loc7_10.2: %Copy.type = converted constants.%ptr, %Copy.facet.loc7_10.2 [symbolic = %Copy.facet.loc7_10.3 (constants.%Copy.facet)]
|
||||
// CHECK:STDOUT: %specific_impl_fn.loc7_10.1: <specific function> = specific_impl_function %impl.elem0.loc7_10.1, @Copy.WithSelf.Op(constants.%Copy.facet) [symbolic = %specific_impl_fn.loc7_10.2 (constants.%specific_impl_fn.a76)]
|
||||
// CHECK:STDOUT: %bound_method.loc7_10.2: <bound method> = bound_method %m.ref, %specific_impl_fn.loc7_10.1
|
||||
// CHECK:STDOUT: %Copy.WithSelf.Op.call: init @F.%ptr.loc4_20.1 (%ptr) = call %bound_method.loc7_10.2(%m.ref)
|
||||
// CHECK:STDOUT: %Copy.WithSelf.Op.call: init @F.%ptr.loc4_27.1 (%ptr) = call %bound_method.loc7_10.2(%m.ref)
|
||||
// CHECK:STDOUT: return %Copy.WithSelf.Op.call
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !observes:
|
||||
@@ -88,14 +88,14 @@ fn F(T:! type, n: T*) -> T* {
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific @F(constants.%T.67d) {
|
||||
// CHECK:STDOUT: %T.patt.loc4_7.2 => constants.%T.patt.d47
|
||||
// CHECK:STDOUT: %T.loc4_7.1 => constants.%T.67d
|
||||
// CHECK:STDOUT: %ptr.loc4_20.1 => constants.%ptr
|
||||
// CHECK:STDOUT: %T.patt.loc4_15.2 => constants.%T.patt.d47
|
||||
// CHECK:STDOUT: %T.loc4_15.1 => constants.%T.67d
|
||||
// CHECK:STDOUT: %ptr.loc4_27.1 => constants.%ptr
|
||||
// CHECK:STDOUT: %pattern_type => constants.%pattern_type.4f4
|
||||
// CHECK:STDOUT: %n.param_patt.loc4_17.2 => constants.%n.param_patt
|
||||
// CHECK:STDOUT: %n.patt.loc4_17.2 => constants.%n.patt
|
||||
// CHECK:STDOUT: %.loc4_27.1 => constants.%.cb6
|
||||
// CHECK:STDOUT: %return.param_patt.loc4_27.2 => constants.%return.param_patt.27f
|
||||
// CHECK:STDOUT: %return.patt.loc4_23.2 => constants.%return.patt.d67
|
||||
// CHECK:STDOUT: %n.param_patt.loc4_24.2 => constants.%n.param_patt
|
||||
// CHECK:STDOUT: %n.patt.loc4_24.2 => constants.%n.patt
|
||||
// CHECK:STDOUT: %.loc4_34.1 => constants.%.cb6
|
||||
// CHECK:STDOUT: %return.param_patt.loc4_34.2 => constants.%return.param_patt.27f
|
||||
// CHECK:STDOUT: %return.patt.loc4_30.2 => constants.%return.patt.d67
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
|
||||
library "[[@TEST_NAME]]";
|
||||
|
||||
fn Defined[T:! type](unused x: T) {}
|
||||
fn Defined[T: type](unused x: T) {}
|
||||
|
||||
fn CallDefined() {
|
||||
Defined(0 as i32);
|
||||
@@ -24,27 +24,27 @@ fn CallDefined() {
|
||||
|
||||
library "[[@TEST_NAME]]";
|
||||
|
||||
fn Defined[T:! type](x: T);
|
||||
fn Defined[T: type](x: T);
|
||||
|
||||
fn CallDefined() {
|
||||
Defined(0 as i32);
|
||||
}
|
||||
|
||||
fn Defined[T:! type](unused x: T) {}
|
||||
fn Defined[T: type](unused x: T) {}
|
||||
|
||||
// --- fail_call_undefined.carbon
|
||||
|
||||
library "[[@TEST_NAME]]";
|
||||
|
||||
fn Undefined[T:! type](x: T);
|
||||
fn Undefined[T: type](x: T);
|
||||
|
||||
fn CallUndefined() {
|
||||
// CHECK:STDERR: fail_call_undefined.carbon:[[@LINE+7]]:3: error: use of undefined generic function [MissingGenericFunctionDefinition]
|
||||
// CHECK:STDERR: Undefined(0 as i32);
|
||||
// CHECK:STDERR: ^~~~~~~~~
|
||||
// CHECK:STDERR: fail_call_undefined.carbon:[[@LINE-6]]:1: note: generic function declared here [MissingGenericFunctionDefinitionHere]
|
||||
// CHECK:STDERR: fn Undefined[T:! type](x: T);
|
||||
// CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
// CHECK:STDERR: fn Undefined[T: type](x: T);
|
||||
// CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
// CHECK:STDERR:
|
||||
Undefined(0 as i32);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user