@@ -62,6 +62,20 @@ fn G(T:! Generic(B)) {
6262 F (T);
6363}
6464
65+ // --- fail_args_count_mismatch.carbon
66+ library "[[@TEST_NAME]]" ;
67+
68+ interface Generic (T:! type ) {}
69+
70+ // CHECK:STDERR: fail_args_count_mismatch.carbon:[[@LINE+7]]:10: error: 2 arguments passed to generic interface expecting 1 argument [CallArgCountMismatch]
71+ // CHECK:STDERR: fn F(T:! Generic((), ())) {}
72+ // CHECK:STDERR: ^~~~~~~~~~~~~~~
73+ // CHECK:STDERR: fail_args_count_mismatch.carbon:[[@LINE-5]]:1: note: calling generic interface declared here [InCallToEntity]
74+ // CHECK:STDERR: interface Generic(T:! type) {}
75+ // CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
76+ // CHECK:STDERR:
77+ fn F (T:! Generic ((), ())) {}
78+
6579// CHECK:STDOUT: --- generic.carbon
6680// CHECK:STDOUT:
6781// CHECK:STDOUT: constants {
@@ -519,3 +533,74 @@ fn G(T:! Generic(B)) {
519533// CHECK:STDOUT: %T.loc10_6.1 => constants.%T.7ca
520534// CHECK:STDOUT: }
521535// CHECK:STDOUT:
536+ // CHECK:STDOUT: --- fail_args_count_mismatch.carbon
537+ // CHECK:STDOUT:
538+ // CHECK:STDOUT: constants {
539+ // CHECK:STDOUT: %type: type = facet_type <type> [concrete]
540+ // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self]
541+ // CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic]
542+ // CHECK:STDOUT: %pattern_type: type = pattern_type type [concrete]
543+ // CHECK:STDOUT: %Generic.type.c21: type = generic_interface_type @Generic [concrete]
544+ // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete]
545+ // CHECK:STDOUT: %Generic.generic: %Generic.type.c21 = struct_value () [concrete]
546+ // CHECK:STDOUT: %Generic.type.68b: type = facet_type <@Generic, @Generic(%T)> [symbolic]
547+ // CHECK:STDOUT: %Self: %Generic.type.68b = symbolic_binding Self, 1 [symbolic]
548+ // CHECK:STDOUT: %F.type: type = fn_type @F [concrete]
549+ // CHECK:STDOUT: %F: %F.type = struct_value () [concrete]
550+ // CHECK:STDOUT: }
551+ // CHECK:STDOUT:
552+ // CHECK:STDOUT: file {
553+ // CHECK:STDOUT: package: <namespace> = namespace [concrete] {
554+ // CHECK:STDOUT: .Generic = %Generic.decl
555+ // CHECK:STDOUT: .F = %F.decl
556+ // CHECK:STDOUT: }
557+ // CHECK:STDOUT: %Generic.decl: %Generic.type.c21 = interface_decl @Generic [concrete = constants.%Generic.generic] {
558+ // CHECK:STDOUT: %T.patt: %pattern_type = symbolic_binding_pattern T, 0 [concrete]
559+ // CHECK:STDOUT: } {
560+ // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self]
561+ // CHECK:STDOUT: %T.loc3_19.2: type = symbolic_binding T, 0 [symbolic = %T.loc3_19.1 (constants.%T)]
562+ // CHECK:STDOUT: }
563+ // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] {
564+ // CHECK:STDOUT: %T.patt: <error> = symbolic_binding_pattern T, 0 [concrete]
565+ // CHECK:STDOUT: } {
566+ // CHECK:STDOUT: %.1: <error> = splice_block <error> [concrete = <error>] {
567+ // CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self]
568+ // CHECK:STDOUT: %Generic.ref: %Generic.type.c21 = name_ref Generic, file.%Generic.decl [concrete = constants.%Generic.generic]
569+ // CHECK:STDOUT: %.loc12_19: %empty_tuple.type = tuple_literal ()
570+ // CHECK:STDOUT: %.loc12_23: %empty_tuple.type = tuple_literal ()
571+ // CHECK:STDOUT: }
572+ // CHECK:STDOUT: %T: <error> = symbolic_binding T, 0 [concrete = <error>]
573+ // CHECK:STDOUT: }
574+ // CHECK:STDOUT: }
575+ // CHECK:STDOUT:
576+ // CHECK:STDOUT: generic interface @Generic(%T.loc3_19.2: type) {
577+ // CHECK:STDOUT: %T.loc3_19.1: type = symbolic_binding T, 0 [symbolic = %T.loc3_19.1 (constants.%T)]
578+ // CHECK:STDOUT:
579+ // CHECK:STDOUT: !definition:
580+ // CHECK:STDOUT: %Generic.type: type = facet_type <@Generic, @Generic(%T.loc3_19.1)> [symbolic = %Generic.type (constants.%Generic.type.68b)]
581+ // CHECK:STDOUT: %Self.2: @Generic.%Generic.type (%Generic.type.68b) = symbolic_binding Self, 1 [symbolic = %Self.2 (constants.%Self)]
582+ // CHECK:STDOUT:
583+ // CHECK:STDOUT: interface {
584+ // CHECK:STDOUT: %Self.1: @Generic.%Generic.type (%Generic.type.68b) = symbolic_binding Self, 1 [symbolic = %Self.2 (constants.%Self)]
585+ // CHECK:STDOUT:
586+ // CHECK:STDOUT: !members:
587+ // CHECK:STDOUT: .Self = %Self.1
588+ // CHECK:STDOUT: witness = ()
589+ // CHECK:STDOUT: }
590+ // CHECK:STDOUT: }
591+ // CHECK:STDOUT:
592+ // CHECK:STDOUT: generic fn @F(%T: <error>) {
593+ // CHECK:STDOUT: !definition:
594+ // CHECK:STDOUT:
595+ // CHECK:STDOUT: fn() {
596+ // CHECK:STDOUT: !entry:
597+ // CHECK:STDOUT: return
598+ // CHECK:STDOUT: }
599+ // CHECK:STDOUT: }
600+ // CHECK:STDOUT:
601+ // CHECK:STDOUT: specific @Generic(constants.%T) {
602+ // CHECK:STDOUT: %T.loc3_19.1 => constants.%T
603+ // CHECK:STDOUT: }
604+ // CHECK:STDOUT:
605+ // CHECK:STDOUT: specific @F(<error>) {}
606+ // CHECK:STDOUT:
0 commit comments