|
12 | 12 |
|
13 | 13 | library "[[@TEST_NAME]]"; |
14 | 14 |
|
15 | | -// CHECK:STDERR: fail_left_where_not_facet.carbon:[[@LINE+3]]:10: error: left argument of `where` operator must be a facet type [WhereOnNonFacetType] |
| 15 | +// CHECK:STDERR: fail_left_where_not_facet.carbon:[[@LINE+4]]:10: error: left argument of `where` operator must be a facet type [WhereOnNonFacetType] |
16 | 16 | // CHECK:STDERR: fn F(T:! i32 where .Self == bool); |
17 | 17 | // CHECK:STDERR: ^~~ |
| 18 | +// CHECK:STDERR: |
18 | 19 | fn F(T:! i32 where .Self == bool); |
19 | 20 |
|
| 21 | +// --- fail_left_where_unknown.carbon |
| 22 | + |
| 23 | +library "[[@TEST_NAME]]"; |
| 24 | + |
| 25 | +// CHECK:STDERR: fail_left_where_unknown.carbon:[[@LINE+8]]:10: error: name `NOT_DECLARED` not found [NameNotFound] |
| 26 | +// CHECK:STDERR: fn G(U:! NOT_DECLARED where .Self == bool); |
| 27 | +// CHECK:STDERR: ^~~~~~~~~~~~ |
| 28 | +// CHECK:STDERR: |
| 29 | +// CHECK:STDERR: fail_left_where_unknown.carbon:[[@LINE+4]]:10: error: left argument of `where` operator must be a facet type [WhereOnNonFacetType] |
| 30 | +// CHECK:STDERR: fn G(U:! NOT_DECLARED where .Self == bool); |
| 31 | +// CHECK:STDERR: ^~~~~~~~~~~~ |
| 32 | +// CHECK:STDERR: |
| 33 | +fn G(U:! NOT_DECLARED where .Self == bool); |
| 34 | + |
| 35 | +// --- fail_var.carbon |
| 36 | + |
| 37 | +library "[[@TEST_NAME]]"; |
| 38 | + |
| 39 | +// CHECK:STDERR: fail_var.carbon:[[@LINE+7]]:8: error: name `e` not found [NameNotFound] |
| 40 | +// CHECK:STDERR: var v: e where .x = 3; |
| 41 | +// CHECK:STDERR: ^ |
| 42 | +// CHECK:STDERR: |
| 43 | +// CHECK:STDERR: fail_var.carbon:[[@LINE+3]]:8: error: left argument of `where` operator must be a facet type [WhereOnNonFacetType] |
| 44 | +// CHECK:STDERR: var v: e where .x = 3; |
| 45 | +// CHECK:STDERR: ^ |
| 46 | +var v: e where .x = 3; |
| 47 | + |
20 | 48 | // CHECK:STDOUT: --- fail_left_where_not_facet.carbon |
21 | 49 | // CHECK:STDOUT: |
22 | 50 | // CHECK:STDOUT: constants { |
@@ -56,36 +84,137 @@ fn F(T:! i32 where .Self == bool); |
56 | 84 | // CHECK:STDOUT: } |
57 | 85 | // CHECK:STDOUT: %Core.import = import Core |
58 | 86 | // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [template = constants.%F] { |
59 | | -// CHECK:STDOUT: %T.patt.loc7_6.1: <error> = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc7_6.2 (constants.%T.patt)] |
60 | | -// CHECK:STDOUT: %T.param_patt: <error> = value_param_pattern %T.patt.loc7_6.1, runtime_param<invalid> [symbolic = %T.patt.loc7_6.2 (constants.%T.patt)] |
| 87 | +// CHECK:STDOUT: %T.patt.loc8_6.1: <error> = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_6.2 (constants.%T.patt)] |
| 88 | +// CHECK:STDOUT: %T.param_patt: <error> = value_param_pattern %T.patt.loc8_6.1, runtime_param<invalid> [symbolic = %T.patt.loc8_6.2 (constants.%T.patt)] |
61 | 89 | // CHECK:STDOUT: } { |
62 | 90 | // CHECK:STDOUT: %int.make_type_32: init type = call constants.%Int32() [template = i32] |
63 | | -// CHECK:STDOUT: %.loc7_10.1: type = value_of_initializer %int.make_type_32 [template = i32] |
64 | | -// CHECK:STDOUT: %.loc7_10.2: type = converted %int.make_type_32, %.loc7_10.1 [template = i32] |
| 91 | +// CHECK:STDOUT: %.loc8_10.1: type = value_of_initializer %int.make_type_32 [template = i32] |
| 92 | +// CHECK:STDOUT: %.loc8_10.2: type = converted %int.make_type_32, %.loc8_10.1 [template = i32] |
65 | 93 | // CHECK:STDOUT: %.Self: <error> = bind_symbolic_name .Self, 0 [symbolic = constants.%.Self] |
66 | 94 | // CHECK:STDOUT: %.Self.ref: <error> = name_ref .Self, %.Self [symbolic = constants.%.Self] |
67 | 95 | // CHECK:STDOUT: %bool.make_type: init type = call constants.%Bool() [template = bool] |
68 | | -// CHECK:STDOUT: %.loc7_14: type = where_expr %.Self [template = <error>] { |
| 96 | +// CHECK:STDOUT: %.loc8_14: type = where_expr %.Self [template = <error>] { |
69 | 97 | // CHECK:STDOUT: requirement_equivalent %.Self.ref, %bool.make_type |
70 | 98 | // CHECK:STDOUT: } |
71 | 99 | // CHECK:STDOUT: %T.param: <error> = value_param runtime_param<invalid> |
72 | | -// CHECK:STDOUT: %T.loc7_6.1: <error> = bind_symbolic_name T, 0, %T.param [symbolic = %T.loc7_6.2 (constants.%T)] |
| 100 | +// CHECK:STDOUT: %T.loc8_6.1: <error> = bind_symbolic_name T, 0, %T.param [symbolic = %T.loc8_6.2 (constants.%T)] |
73 | 101 | // CHECK:STDOUT: } |
74 | 102 | // CHECK:STDOUT: } |
75 | 103 | // CHECK:STDOUT: |
76 | 104 | // CHECK:STDOUT: fn @Int32() -> type = "int.make_type_32"; |
77 | 105 | // CHECK:STDOUT: |
78 | 106 | // CHECK:STDOUT: fn @Bool() -> type = "bool.make_type"; |
79 | 107 | // CHECK:STDOUT: |
80 | | -// CHECK:STDOUT: generic fn @F(%T.loc7_6.1: <error>) { |
81 | | -// CHECK:STDOUT: %T.loc7_6.2: <error> = bind_symbolic_name T, 0 [symbolic = %T.loc7_6.2 (constants.%T)] |
82 | | -// CHECK:STDOUT: %T.patt.loc7_6.2: <error> = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc7_6.2 (constants.%T.patt)] |
| 108 | +// CHECK:STDOUT: generic fn @F(%T.loc8_6.1: <error>) { |
| 109 | +// CHECK:STDOUT: %T.loc8_6.2: <error> = bind_symbolic_name T, 0 [symbolic = %T.loc8_6.2 (constants.%T)] |
| 110 | +// CHECK:STDOUT: %T.patt.loc8_6.2: <error> = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_6.2 (constants.%T.patt)] |
83 | 111 | // CHECK:STDOUT: |
84 | 112 | // CHECK:STDOUT: fn(%T.param_patt: <error>); |
85 | 113 | // CHECK:STDOUT: } |
86 | 114 | // CHECK:STDOUT: |
87 | 115 | // CHECK:STDOUT: specific @F(constants.%T) { |
88 | | -// CHECK:STDOUT: %T.loc7_6.2 => constants.%T |
89 | | -// CHECK:STDOUT: %T.patt.loc7_6.2 => constants.%T |
| 116 | +// CHECK:STDOUT: %T.loc8_6.2 => constants.%T |
| 117 | +// CHECK:STDOUT: %T.patt.loc8_6.2 => constants.%T |
| 118 | +// CHECK:STDOUT: } |
| 119 | +// CHECK:STDOUT: |
| 120 | +// CHECK:STDOUT: --- fail_left_where_unknown.carbon |
| 121 | +// CHECK:STDOUT: |
| 122 | +// CHECK:STDOUT: constants { |
| 123 | +// CHECK:STDOUT: %.Self: <error> = bind_symbolic_name .Self, 0 [symbolic] |
| 124 | +// CHECK:STDOUT: %Bool.type: type = fn_type @Bool [template] |
| 125 | +// CHECK:STDOUT: %.1: type = tuple_type () [template] |
| 126 | +// CHECK:STDOUT: %Bool: %Bool.type = struct_value () [template] |
| 127 | +// CHECK:STDOUT: %U: <error> = bind_symbolic_name U, 0 [symbolic] |
| 128 | +// CHECK:STDOUT: %U.patt: <error> = symbolic_binding_pattern U, 0 [symbolic] |
| 129 | +// CHECK:STDOUT: %G.type: type = fn_type @G [template] |
| 130 | +// CHECK:STDOUT: %G: %G.type = struct_value () [template] |
| 131 | +// CHECK:STDOUT: } |
| 132 | +// CHECK:STDOUT: |
| 133 | +// CHECK:STDOUT: imports { |
| 134 | +// CHECK:STDOUT: %Core: <namespace> = namespace file.%Core.import, [template] { |
| 135 | +// CHECK:STDOUT: .Bool = %import_ref |
| 136 | +// CHECK:STDOUT: import Core//prelude |
| 137 | +// CHECK:STDOUT: import Core//prelude/operators |
| 138 | +// CHECK:STDOUT: import Core//prelude/types |
| 139 | +// CHECK:STDOUT: import Core//prelude/operators/arithmetic |
| 140 | +// CHECK:STDOUT: import Core//prelude/operators/as |
| 141 | +// CHECK:STDOUT: import Core//prelude/operators/bitwise |
| 142 | +// CHECK:STDOUT: import Core//prelude/operators/comparison |
| 143 | +// CHECK:STDOUT: import Core//prelude/types/bool |
| 144 | +// CHECK:STDOUT: } |
| 145 | +// CHECK:STDOUT: %import_ref: %Bool.type = import_ref Core//prelude/types/bool, inst+5, loaded [template = constants.%Bool] |
| 146 | +// CHECK:STDOUT: } |
| 147 | +// CHECK:STDOUT: |
| 148 | +// CHECK:STDOUT: file { |
| 149 | +// CHECK:STDOUT: package: <namespace> = namespace [template] { |
| 150 | +// CHECK:STDOUT: .Core = imports.%Core |
| 151 | +// CHECK:STDOUT: .G = %G.decl |
| 152 | +// CHECK:STDOUT: } |
| 153 | +// CHECK:STDOUT: %Core.import = import Core |
| 154 | +// CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [template = constants.%G] { |
| 155 | +// CHECK:STDOUT: %U.patt.loc12_6.1: <error> = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc12_6.2 (constants.%U.patt)] |
| 156 | +// CHECK:STDOUT: %U.param_patt: <error> = value_param_pattern %U.patt.loc12_6.1, runtime_param<invalid> [symbolic = %U.patt.loc12_6.2 (constants.%U.patt)] |
| 157 | +// CHECK:STDOUT: } { |
| 158 | +// CHECK:STDOUT: %NOT_DECLARED.ref: <error> = name_ref NOT_DECLARED, <error> [template = <error>] |
| 159 | +// CHECK:STDOUT: %.Self: <error> = bind_symbolic_name .Self, 0 [symbolic = constants.%.Self] |
| 160 | +// CHECK:STDOUT: %.Self.ref: <error> = name_ref .Self, %.Self [symbolic = constants.%.Self] |
| 161 | +// CHECK:STDOUT: %bool.make_type: init type = call constants.%Bool() [template = bool] |
| 162 | +// CHECK:STDOUT: %.loc12: type = where_expr %.Self [template = <error>] { |
| 163 | +// CHECK:STDOUT: requirement_equivalent %.Self.ref, %bool.make_type |
| 164 | +// CHECK:STDOUT: } |
| 165 | +// CHECK:STDOUT: %U.param: <error> = value_param runtime_param<invalid> |
| 166 | +// CHECK:STDOUT: %U.loc12_6.1: <error> = bind_symbolic_name U, 0, %U.param [symbolic = %U.loc12_6.2 (constants.%U)] |
| 167 | +// CHECK:STDOUT: } |
| 168 | +// CHECK:STDOUT: } |
| 169 | +// CHECK:STDOUT: |
| 170 | +// CHECK:STDOUT: fn @Bool() -> type = "bool.make_type"; |
| 171 | +// CHECK:STDOUT: |
| 172 | +// CHECK:STDOUT: generic fn @G(%U.loc12_6.1: <error>) { |
| 173 | +// CHECK:STDOUT: %U.loc12_6.2: <error> = bind_symbolic_name U, 0 [symbolic = %U.loc12_6.2 (constants.%U)] |
| 174 | +// CHECK:STDOUT: %U.patt.loc12_6.2: <error> = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc12_6.2 (constants.%U.patt)] |
| 175 | +// CHECK:STDOUT: |
| 176 | +// CHECK:STDOUT: fn(%U.param_patt: <error>); |
| 177 | +// CHECK:STDOUT: } |
| 178 | +// CHECK:STDOUT: |
| 179 | +// CHECK:STDOUT: specific @G(constants.%U) { |
| 180 | +// CHECK:STDOUT: %U.loc12_6.2 => constants.%U |
| 181 | +// CHECK:STDOUT: %U.patt.loc12_6.2 => constants.%U |
| 182 | +// CHECK:STDOUT: } |
| 183 | +// CHECK:STDOUT: |
| 184 | +// CHECK:STDOUT: --- fail_var.carbon |
| 185 | +// CHECK:STDOUT: |
| 186 | +// CHECK:STDOUT: constants { |
| 187 | +// CHECK:STDOUT: %.Self: <error> = bind_symbolic_name .Self, 0 [symbolic] |
| 188 | +// CHECK:STDOUT: %.1: i32 = int_literal 3 [template] |
| 189 | +// CHECK:STDOUT: } |
| 190 | +// CHECK:STDOUT: |
| 191 | +// CHECK:STDOUT: imports { |
| 192 | +// CHECK:STDOUT: %Core: <namespace> = namespace file.%Core.import, [template] { |
| 193 | +// CHECK:STDOUT: import Core//prelude |
| 194 | +// CHECK:STDOUT: import Core//prelude/operators |
| 195 | +// CHECK:STDOUT: import Core//prelude/types |
| 196 | +// CHECK:STDOUT: import Core//prelude/operators/arithmetic |
| 197 | +// CHECK:STDOUT: import Core//prelude/operators/as |
| 198 | +// CHECK:STDOUT: import Core//prelude/operators/bitwise |
| 199 | +// CHECK:STDOUT: import Core//prelude/operators/comparison |
| 200 | +// CHECK:STDOUT: import Core//prelude/types/bool |
| 201 | +// CHECK:STDOUT: } |
| 202 | +// CHECK:STDOUT: } |
| 203 | +// CHECK:STDOUT: |
| 204 | +// CHECK:STDOUT: file { |
| 205 | +// CHECK:STDOUT: package: <namespace> = namespace [template] { |
| 206 | +// CHECK:STDOUT: .Core = imports.%Core |
| 207 | +// CHECK:STDOUT: .v = %v |
| 208 | +// CHECK:STDOUT: } |
| 209 | +// CHECK:STDOUT: %Core.import = import Core |
| 210 | +// CHECK:STDOUT: %e.ref: <error> = name_ref e, <error> [template = <error>] |
| 211 | +// CHECK:STDOUT: %.Self: <error> = bind_symbolic_name .Self, 0 [symbolic = constants.%.Self] |
| 212 | +// CHECK:STDOUT: %.Self.ref: <error> = name_ref .Self, %.Self [symbolic = constants.%.Self] |
| 213 | +// CHECK:STDOUT: %.loc11_21: i32 = int_literal 3 [template = constants.%.1] |
| 214 | +// CHECK:STDOUT: %.loc11_10: type = where_expr %.Self [template = <error>] { |
| 215 | +// CHECK:STDOUT: requirement_rewrite <error>, <error> |
| 216 | +// CHECK:STDOUT: } |
| 217 | +// CHECK:STDOUT: %v.var: ref <error> = var v |
| 218 | +// CHECK:STDOUT: %v: ref <error> = bind_name v, %v.var |
90 | 219 | // CHECK:STDOUT: } |
91 | 220 | // CHECK:STDOUT: |
0 commit comments