@@ -46,6 +46,24 @@ fn F(c: C) {
46
46
let a: I = c.ij;
47
47
}
48
48
49
+ // --- fail_todo_member_lookup_in_runtime_value.carbon
50
+
51
+ interface Z (T:! type ) {
52
+ let X:! type ;
53
+ }
54
+
55
+ class C {}
56
+
57
+ final impl forall [T:! type ] T as Z (C) where .X = () {}
58
+
59
+ // CHECK:STDERR: fail_todo_member_lookup_in_runtime_value.carbon:[[@LINE+4]]:18: error: semantics TODO: `associated value lookup on runtime facet value` [SemanticsTodo]
60
+ // CHECK:STDERR: fn F(T: Z(C)) -> T.(Z(C).X) {
61
+ // CHECK:STDERR: ^~~~~~~~~~
62
+ // CHECK:STDERR:
63
+ fn F (T: Z (C)) - > T.(Z (C).X) {
64
+ return ();
65
+ }
66
+
49
67
// CHECK:STDOUT: --- facet_value_copy_from_reference.carbon
50
68
// CHECK:STDOUT:
51
69
// CHECK:STDOUT: constants {
@@ -311,6 +329,187 @@ fn F(c: C) {
311
329
// CHECK:STDOUT: !definition:
312
330
// CHECK:STDOUT: }
313
331
// CHECK:STDOUT:
332
+ // CHECK:STDOUT: --- fail_todo_member_lookup_in_runtime_value.carbon
333
+ // CHECK:STDOUT:
334
+ // CHECK:STDOUT: constants {
335
+ // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic]
336
+ // CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic]
337
+ // CHECK:STDOUT: %Z.type.9fb: type = generic_interface_type @Z [concrete]
338
+ // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete]
339
+ // CHECK:STDOUT: %Z.generic: %Z.type.9fb = struct_value () [concrete]
340
+ // CHECK:STDOUT: %Z.type.a61: type = facet_type <@Z, @Z(%T)> [symbolic]
341
+ // CHECK:STDOUT: %Self.2bc: %Z.type.a61 = bind_symbolic_name Self, 1 [symbolic]
342
+ // CHECK:STDOUT: %Z.assoc_type.40c: type = assoc_entity_type %Z.type.a61 [symbolic]
343
+ // CHECK:STDOUT: %assoc0.3aa: %Z.assoc_type.40c = assoc_entity element0, @Z.%X [symbolic]
344
+ // CHECK:STDOUT: %C: type = class_type @C [concrete]
345
+ // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete]
346
+ // CHECK:STDOUT: %complete_type: <witness> = complete_type_witness %empty_struct_type [concrete]
347
+ // CHECK:STDOUT: %Z.type.049: type = facet_type <@Z, @Z(%C)> [concrete]
348
+ // CHECK:STDOUT: %.Self: %Z.type.049 = bind_symbolic_name .Self [symbolic_self]
349
+ // CHECK:STDOUT: %Self.a38: %Z.type.049 = bind_symbolic_name Self, 1 [symbolic]
350
+ // CHECK:STDOUT: %Z.assoc_type.444: type = assoc_entity_type %Z.type.049 [concrete]
351
+ // CHECK:STDOUT: %assoc0.1c8: %Z.assoc_type.444 = assoc_entity element0, @Z.%X [concrete]
352
+ // CHECK:STDOUT: %.Self.as_type: type = facet_access_type %.Self [symbolic_self]
353
+ // CHECK:STDOUT: %.Self.as_wit.iface0: <witness> = facet_access_witness %.Self, element0 [symbolic_self]
354
+ // CHECK:STDOUT: %Z.facet: %Z.type.049 = facet_value %.Self.as_type, (%.Self.as_wit.iface0) [symbolic_self]
355
+ // CHECK:STDOUT: %impl.elem0: type = impl_witness_access %.Self.as_wit.iface0, element0 [symbolic_self]
356
+ // CHECK:STDOUT: %Z_where.type: type = facet_type <@Z, @Z(%C) where %impl.elem0 = %empty_tuple.type> [concrete]
357
+ // CHECK:STDOUT: %impl_witness: <witness> = impl_witness (%empty_tuple.type), @impl(%T) [symbolic]
358
+ // CHECK:STDOUT: %F.type: type = fn_type @F [concrete]
359
+ // CHECK:STDOUT: %F: %F.type = struct_value () [concrete]
360
+ // CHECK:STDOUT: }
361
+ // CHECK:STDOUT:
362
+ // CHECK:STDOUT: imports {
363
+ // CHECK:STDOUT: %Core: <namespace> = namespace file.%Core.import, [concrete] {
364
+ // CHECK:STDOUT: import Core//prelude
365
+ // CHECK:STDOUT: }
366
+ // CHECK:STDOUT: }
367
+ // CHECK:STDOUT:
368
+ // CHECK:STDOUT: file {
369
+ // CHECK:STDOUT: package: <namespace> = namespace [concrete] {
370
+ // CHECK:STDOUT: .Core = imports.%Core
371
+ // CHECK:STDOUT: .Z = %Z.decl
372
+ // CHECK:STDOUT: .C = %C.decl
373
+ // CHECK:STDOUT: .F = %F.decl
374
+ // CHECK:STDOUT: }
375
+ // CHECK:STDOUT: %Core.import = import Core
376
+ // CHECK:STDOUT: %Z.decl: %Z.type.9fb = interface_decl @Z [concrete = constants.%Z.generic] {
377
+ // CHECK:STDOUT: %T.patt.loc2_13.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc2_13.2 (constants.%T.patt)]
378
+ // CHECK:STDOUT: } {
379
+ // CHECK:STDOUT: %T.loc2_13.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc2_13.2 (constants.%T)]
380
+ // CHECK:STDOUT: }
381
+ // CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {}
382
+ // CHECK:STDOUT: impl_decl @impl [concrete] {
383
+ // CHECK:STDOUT: %T.patt.loc8_20.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_20.2 (constants.%T.patt)]
384
+ // CHECK:STDOUT: } {
385
+ // CHECK:STDOUT: %T.ref: type = name_ref T, %T.loc8_20.1 [symbolic = %T.loc8_20.2 (constants.%T)]
386
+ // CHECK:STDOUT: %Z.ref: %Z.type.9fb = name_ref Z, file.%Z.decl [concrete = constants.%Z.generic]
387
+ // CHECK:STDOUT: %C.ref: type = name_ref C, file.%C.decl [concrete = constants.%C]
388
+ // CHECK:STDOUT: %Z.type: type = facet_type <@Z, @Z(constants.%C)> [concrete = constants.%Z.type.049]
389
+ // CHECK:STDOUT: %.Self: %Z.type.049 = bind_symbolic_name .Self [symbolic_self = constants.%.Self]
390
+ // CHECK:STDOUT: %.Self.ref: %Z.type.049 = name_ref .Self, %.Self [symbolic_self = constants.%.Self]
391
+ // CHECK:STDOUT: %.loc8_46.1: %Z.assoc_type.444 = specific_constant @X.%assoc0, @Z(constants.%C) [concrete = constants.%assoc0.1c8]
392
+ // CHECK:STDOUT: %X.ref: %Z.assoc_type.444 = name_ref X, %.loc8_46.1 [concrete = constants.%assoc0.1c8]
393
+ // CHECK:STDOUT: %.Self.as_type: type = facet_access_type %.Self.ref [symbolic_self = constants.%.Self.as_type]
394
+ // CHECK:STDOUT: %.loc8_46.2: type = converted %.Self.ref, %.Self.as_type [symbolic_self = constants.%.Self.as_type]
395
+ // CHECK:STDOUT: %.Self.as_wit.iface0: <witness> = facet_access_witness %.Self.ref, element0 [symbolic_self = constants.%.Self.as_wit.iface0]
396
+ // CHECK:STDOUT: %impl.elem0: type = impl_witness_access %.Self.as_wit.iface0, element0 [symbolic_self = constants.%impl.elem0]
397
+ // CHECK:STDOUT: %.loc8_52.1: %empty_tuple.type = tuple_literal ()
398
+ // CHECK:STDOUT: %.loc8_52.2: type = converted %.loc8_52.1, constants.%empty_tuple.type [concrete = constants.%empty_tuple.type]
399
+ // CHECK:STDOUT: %.loc8_40: type = where_expr %.Self [concrete = constants.%Z_where.type] {
400
+ // CHECK:STDOUT: requirement_rewrite %impl.elem0, %.loc8_52.2
401
+ // CHECK:STDOUT: }
402
+ // CHECK:STDOUT: %T.loc8_20.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc8_20.2 (constants.%T)]
403
+ // CHECK:STDOUT: }
404
+ // CHECK:STDOUT: %impl_witness: <witness> = impl_witness (constants.%empty_tuple.type), @impl(constants.%T) [symbolic = @impl.%impl_witness (constants.%impl_witness)]
405
+ // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] {
406
+ // CHECK:STDOUT: %T.patt: %Z.type.049 = binding_pattern T
407
+ // CHECK:STDOUT: %T.param_patt: %Z.type.049 = value_param_pattern %T.patt, call_param0
408
+ // CHECK:STDOUT: %return.patt: <error> = return_slot_pattern
409
+ // CHECK:STDOUT: %return.param_patt: <error> = out_param_pattern %return.patt, call_param1
410
+ // CHECK:STDOUT: } {
411
+ // CHECK:STDOUT: %T.ref: %Z.type.049 = name_ref T, %T
412
+ // CHECK:STDOUT: %Z.ref.loc14_21: %Z.type.9fb = name_ref Z, file.%Z.decl [concrete = constants.%Z.generic]
413
+ // CHECK:STDOUT: %C.ref.loc14_23: type = name_ref C, file.%C.decl [concrete = constants.%C]
414
+ // CHECK:STDOUT: %Z.type.loc14_24: type = facet_type <@Z, @Z(constants.%C)> [concrete = constants.%Z.type.049]
415
+ // CHECK:STDOUT: %.loc14_25: %Z.assoc_type.444 = specific_constant @X.%assoc0, @Z(constants.%C) [concrete = constants.%assoc0.1c8]
416
+ // CHECK:STDOUT: %X.ref: %Z.assoc_type.444 = name_ref X, %.loc14_25 [concrete = constants.%assoc0.1c8]
417
+ // CHECK:STDOUT: %T.param: %Z.type.049 = value_param call_param0
418
+ // CHECK:STDOUT: %.loc14_12: type = splice_block %Z.type.loc14_12 [concrete = constants.%Z.type.049] {
419
+ // CHECK:STDOUT: %Z.ref.loc14_9: %Z.type.9fb = name_ref Z, file.%Z.decl [concrete = constants.%Z.generic]
420
+ // CHECK:STDOUT: %C.ref.loc14_11: type = name_ref C, file.%C.decl [concrete = constants.%C]
421
+ // CHECK:STDOUT: %Z.type.loc14_12: type = facet_type <@Z, @Z(constants.%C)> [concrete = constants.%Z.type.049]
422
+ // CHECK:STDOUT: }
423
+ // CHECK:STDOUT: %T: %Z.type.049 = bind_name T, %T.param
424
+ // CHECK:STDOUT: %return.param: ref <error> = out_param call_param1
425
+ // CHECK:STDOUT: %return: ref <error> = return_slot %return.param
426
+ // CHECK:STDOUT: }
427
+ // CHECK:STDOUT: }
428
+ // CHECK:STDOUT:
429
+ // CHECK:STDOUT: generic interface @Z(%T.loc2_13.1: type) {
430
+ // CHECK:STDOUT: %T.loc2_13.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc2_13.2 (constants.%T)]
431
+ // CHECK:STDOUT: %T.patt.loc2_13.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc2_13.2 (constants.%T.patt)]
432
+ // CHECK:STDOUT:
433
+ // CHECK:STDOUT: !definition:
434
+ // CHECK:STDOUT: %Z.type: type = facet_type <@Z, @Z(%T.loc2_13.2)> [symbolic = %Z.type (constants.%Z.type.a61)]
435
+ // CHECK:STDOUT: %Self.2: @Z.%Z.type (%Z.type.a61) = bind_symbolic_name Self, 1 [symbolic = %Self.2 (constants.%Self.2bc)]
436
+ // CHECK:STDOUT: %Z.assoc_type: type = assoc_entity_type @Z.%Z.type (%Z.type.a61) [symbolic = %Z.assoc_type (constants.%Z.assoc_type.40c)]
437
+ // CHECK:STDOUT: %assoc0: @Z.%Z.assoc_type (%Z.assoc_type.40c) = assoc_entity element0, %X [symbolic = %assoc0 (constants.%assoc0.3aa)]
438
+ // CHECK:STDOUT:
439
+ // CHECK:STDOUT: interface {
440
+ // CHECK:STDOUT: %Self.1: @Z.%Z.type (%Z.type.a61) = bind_symbolic_name Self, 1 [symbolic = %Self.2 (constants.%Self.2bc)]
441
+ // CHECK:STDOUT: %X: type = assoc_const_decl @X [concrete] {
442
+ // CHECK:STDOUT: %assoc0: @Z.%Z.assoc_type (%Z.assoc_type.40c) = assoc_entity element0, @Z.%X [symbolic = @Z.%assoc0 (constants.%assoc0.3aa)]
443
+ // CHECK:STDOUT: }
444
+ // CHECK:STDOUT:
445
+ // CHECK:STDOUT: !members:
446
+ // CHECK:STDOUT: .Self = %Self.1
447
+ // CHECK:STDOUT: .X = @X.%assoc0
448
+ // CHECK:STDOUT: witness = (%X)
449
+ // CHECK:STDOUT: }
450
+ // CHECK:STDOUT: }
451
+ // CHECK:STDOUT:
452
+ // CHECK:STDOUT: generic assoc_const @X(@Z.%T.loc2_13.1: type, @Z.%Self.1: @Z.%Z.type (%Z.type.a61)) {
453
+ // CHECK:STDOUT: assoc_const X:! type;
454
+ // CHECK:STDOUT: }
455
+ // CHECK:STDOUT:
456
+ // CHECK:STDOUT: generic impl @impl(%T.loc8_20.1: type) {
457
+ // CHECK:STDOUT: %T.loc8_20.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc8_20.2 (constants.%T)]
458
+ // CHECK:STDOUT: %T.patt.loc8_20.2: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_20.2 (constants.%T.patt)]
459
+ // CHECK:STDOUT: %impl_witness: <witness> = impl_witness (constants.%empty_tuple.type), @impl(%T.loc8_20.2) [symbolic = %impl_witness (constants.%impl_witness)]
460
+ // CHECK:STDOUT:
461
+ // CHECK:STDOUT: !definition:
462
+ // CHECK:STDOUT:
463
+ // CHECK:STDOUT: impl: %T.ref as %.loc8_40 {
464
+ // CHECK:STDOUT: !members:
465
+ // CHECK:STDOUT: witness = file.%impl_witness
466
+ // CHECK:STDOUT: }
467
+ // CHECK:STDOUT: }
468
+ // CHECK:STDOUT:
469
+ // CHECK:STDOUT: class @C {
470
+ // CHECK:STDOUT: %complete_type: <witness> = complete_type_witness %empty_struct_type [concrete = constants.%complete_type]
471
+ // CHECK:STDOUT: complete_type_witness = %complete_type
472
+ // CHECK:STDOUT:
473
+ // CHECK:STDOUT: !members:
474
+ // CHECK:STDOUT: .Self = constants.%C
475
+ // CHECK:STDOUT: }
476
+ // CHECK:STDOUT:
477
+ // CHECK:STDOUT: fn @F(%T.param_patt: %Z.type.049) -> <error> {
478
+ // CHECK:STDOUT: !entry:
479
+ // CHECK:STDOUT: %.loc15: %empty_tuple.type = tuple_literal ()
480
+ // CHECK:STDOUT: return <error>
481
+ // CHECK:STDOUT: }
482
+ // CHECK:STDOUT:
483
+ // CHECK:STDOUT: specific @Z(constants.%T) {
484
+ // CHECK:STDOUT: %T.loc2_13.2 => constants.%T
485
+ // CHECK:STDOUT: %T.patt.loc2_13.2 => constants.%T.patt
486
+ // CHECK:STDOUT: }
487
+ // CHECK:STDOUT:
488
+ // CHECK:STDOUT: specific @X(constants.%T, constants.%Self.2bc) {}
489
+ // CHECK:STDOUT:
490
+ // CHECK:STDOUT: specific @Z(%T.loc2_13.2) {}
491
+ // CHECK:STDOUT:
492
+ // CHECK:STDOUT: specific @Z(constants.%C) {
493
+ // CHECK:STDOUT: %T.loc2_13.2 => constants.%C
494
+ // CHECK:STDOUT: %T.patt.loc2_13.2 => constants.%T.patt
495
+ // CHECK:STDOUT:
496
+ // CHECK:STDOUT: !definition:
497
+ // CHECK:STDOUT: %Z.type => constants.%Z.type.049
498
+ // CHECK:STDOUT: %Self.2 => constants.%Self.a38
499
+ // CHECK:STDOUT: %Z.assoc_type => constants.%Z.assoc_type.444
500
+ // CHECK:STDOUT: %assoc0 => constants.%assoc0.1c8
501
+ // CHECK:STDOUT: }
502
+ // CHECK:STDOUT:
503
+ // CHECK:STDOUT: specific @X(constants.%C, constants.%Z.facet) {}
504
+ // CHECK:STDOUT:
505
+ // CHECK:STDOUT: specific @impl(constants.%T) {
506
+ // CHECK:STDOUT: %T.loc8_20.2 => constants.%T
507
+ // CHECK:STDOUT: %T.patt.loc8_20.2 => constants.%T.patt
508
+ // CHECK:STDOUT: %impl_witness => constants.%impl_witness
509
+ // CHECK:STDOUT: }
510
+ // CHECK:STDOUT:
511
+ // CHECK:STDOUT: specific @impl(%T.loc8_20.2) {}
512
+ // CHECK:STDOUT:
314
513
// CHECK:STDOUT: --- include_files/facet_types.carbon
315
514
// CHECK:STDOUT:
316
515
// CHECK:STDOUT: constants {
0 commit comments