1 1.12 rillig /* $NetBSD: msg_155.c,v 1.12 2023/03/28 14:44:35 rillig Exp $ */ 2 1.1 rillig # 3 "msg_155.c" 3 1.1 rillig 4 1.4 rillig // Test for message: passing '%s' to incompatible '%s', arg #%d [155] 5 1.4 rillig 6 1.12 rillig /* lint1-extra-flags: -X 351 */ 7 1.12 rillig 8 1.1 rillig 9 1.3 rillig void c99_6_7_6_example_a(int); 10 1.3 rillig void c99_6_7_6_example_b(int *); 11 1.3 rillig void c99_6_7_6_example_c(int *[3]); 12 1.3 rillig void c99_6_7_6_example_d(int (*)[3]); 13 1.6 rillig void c99_6_7_6_example_e(int (*)[*]); 14 1.10 rillig /* Wrong type before decl.c 1.256 from 2022-04-01. */ 15 1.10 rillig void c99_6_7_6_example_f(int *()); 16 1.3 rillig void c99_6_7_6_example_g(int (*)(void)); 17 1.3 rillig void c99_6_7_6_example_h(int (*const[])(unsigned int, ...)); 18 1.3 rillig 19 1.3 rillig struct incompatible { 20 1.3 rillig int member; 21 1.3 rillig }; 22 1.3 rillig 23 1.3 rillig void 24 1.3 rillig provoke_error_messages(struct incompatible arg) 25 1.3 rillig { 26 1.11 rillig /* expect+1: ... 'int', ... */ 27 1.3 rillig c99_6_7_6_example_a(arg); 28 1.3 rillig 29 1.11 rillig /* expect+1: ... 'pointer to int', ... */ 30 1.3 rillig c99_6_7_6_example_b(arg); 31 1.3 rillig 32 1.4 rillig /* C99 says 'array[3] of pointer to int', which is close enough. */ 33 1.11 rillig /* expect+1: ... 'pointer to pointer to int', ... */ 34 1.3 rillig c99_6_7_6_example_c(arg); 35 1.3 rillig 36 1.11 rillig /* expect+1: ... 'pointer to array[3] of int', ... */ 37 1.3 rillig c99_6_7_6_example_d(arg); 38 1.3 rillig 39 1.11 rillig /* expect+1: ... 'pointer to array[unknown_size] of int', ... */ 40 1.3 rillig c99_6_7_6_example_e(arg); 41 1.3 rillig 42 1.10 rillig /* Wrong type before decl.c 1.256 from 2022-04-01. */ 43 1.11 rillig /* expect+1: ... 'pointer to function() returning pointer to int', ... */ 44 1.9 rillig c99_6_7_6_example_f(arg); 45 1.3 rillig 46 1.11 rillig /* expect+1: ... 'pointer to function(void) returning int', ... */ 47 1.3 rillig c99_6_7_6_example_g(arg); 48 1.3 rillig 49 1.11 rillig /* expect+1: ... 'pointer to const pointer to function(unsigned int, ...) returning int', ... */ 50 1.3 rillig c99_6_7_6_example_h(arg); 51 1.3 rillig } 52 1.8 rillig 53 1.8 rillig extern void sink(struct incompatible); 54 1.8 rillig 55 1.8 rillig /* 56 1.8 rillig * The function type_name has a special case for an enum type that has been 57 1.8 rillig * implicitly converted to an int. Such a type is still output as the enum 58 1.8 rillig * type. 59 1.8 rillig * 60 1.8 rillig * XXX: The expressions 'day + 0' and '0 + day' should result in the same 61 1.8 rillig * type. 62 1.8 rillig */ 63 1.8 rillig void 64 1.8 rillig type_name_of_enum(void) 65 1.8 rillig { 66 1.8 rillig enum Day { 67 1.8 rillig MONDAY 68 1.8 rillig } day = MONDAY; 69 1.8 rillig 70 1.11 rillig /* expect+1: ... passing 'enum Day' ... */ 71 1.8 rillig sink(day); 72 1.8 rillig 73 1.11 rillig /* expect+1: ... passing 'enum Day' ... */ 74 1.8 rillig sink(day + 0); 75 1.8 rillig 76 1.11 rillig /* expect+1: ... passing 'int' ... */ 77 1.8 rillig sink(0 + day); 78 1.8 rillig 79 1.11 rillig /* expect+1: ... passing 'int' ... */ 80 1.8 rillig sink(0); 81 1.8 rillig } 82