11.4Srillig/*	$NetBSD: msg_383.c,v 1.4 2025/05/04 09:40:03 rillig Exp $	*/
21.1Srillig# 3 "msg_383.c"
31.1Srillig
41.2Srillig// Test for message: passing '%s' as argument %d to '%s' discards '%s' [383]
51.1Srillig
61.1Srillig/* lint1-extra-flags: -X 351 */
71.1Srillig
81.1Srilligvoid sink_char(char *, const char *, volatile char *, const volatile char *);
91.1Srilligvoid sink_int(int *, const int *, volatile int *, const volatile int *);
101.1Srillig
111.2Srilligvoid (*indirect_char)(char *, const char *, volatile char *, const volatile char *);
121.2Srillig
131.2Srilligstruct {
141.2Srillig	void (*member_char)(char *, const char *, volatile char *, const volatile char *);
151.2Srillig} doubly_indirect;
161.2Srillig
171.1Srilligvoid
181.1Srilligcaller(const volatile char *cvcp, const volatile int *cvip, int (*fn)(void))
191.1Srillig{
201.2Srillig	/* expect+3: warning: passing 'pointer to const volatile char' as argument 1 to 'sink_char' discards 'const volatile' [383] */
211.2Srillig	/* expect+2: warning: passing 'pointer to const volatile char' as argument 2 to 'sink_char' discards 'volatile' [383] */
221.2Srillig	/* expect+1: warning: passing 'pointer to const volatile char' as argument 3 to 'sink_char' discards 'const' [383] */
231.1Srillig	sink_char(cvcp, cvcp, cvcp, cvcp);
241.2Srillig	/* expect+3: warning: passing 'pointer to const volatile int' as argument 1 to 'sink_int' discards 'const volatile' [383] */
251.2Srillig	/* expect+2: warning: passing 'pointer to const volatile int' as argument 2 to 'sink_int' discards 'volatile' [383] */
261.2Srillig	/* expect+1: warning: passing 'pointer to const volatile int' as argument 3 to 'sink_int' discards 'const' [383] */
271.1Srillig	sink_int(cvip, cvip, cvip, cvip);
281.1Srillig	/* expect+4: warning: converting 'pointer to function(void) returning int' to incompatible 'pointer to char' for argument 1 [153] */
291.1Srillig	/* expect+3: warning: converting 'pointer to function(void) returning int' to incompatible 'pointer to const char' for argument 2 [153] */
301.1Srillig	/* expect+2: warning: converting 'pointer to function(void) returning int' to incompatible 'pointer to volatile char' for argument 3 [153] */
311.1Srillig	/* expect+1: warning: converting 'pointer to function(void) returning int' to incompatible 'pointer to const volatile char' for argument 4 [153] */
321.1Srillig	sink_char(fn, fn, fn, fn);
331.2Srillig
341.2Srillig	/* expect+3: warning: passing 'pointer to const volatile char' as argument 1 to 'indirect_char' discards 'const volatile' [383] */
351.2Srillig	/* expect+2: warning: passing 'pointer to const volatile char' as argument 2 to 'indirect_char' discards 'volatile' [383] */
361.2Srillig	/* expect+1: warning: passing 'pointer to const volatile char' as argument 3 to 'indirect_char' discards 'const' [383] */
371.2Srillig	indirect_char(cvcp, cvcp, cvcp, cvcp);
381.2Srillig
391.2Srillig	/* expect+3: warning: passing 'pointer to const volatile char' as argument 1 to 'function(pointer to char, pointer to const char, pointer to volatile char, pointer to const volatile char) returning void' discards 'const volatile' [383] */
401.2Srillig	/* expect+2: warning: passing 'pointer to const volatile char' as argument 2 to 'function(pointer to char, pointer to const char, pointer to volatile char, pointer to const volatile char) returning void' discards 'volatile' [383] */
411.2Srillig	/* expect+1: warning: passing 'pointer to const volatile char' as argument 3 to 'function(pointer to char, pointer to const char, pointer to volatile char, pointer to const volatile char) returning void' discards 'const' [383] */
421.2Srillig	doubly_indirect.member_char(cvcp, cvcp, cvcp, cvcp);
431.1Srillig}
441.3Srillig
451.3Srillig
461.3Srilligtypedef int array[8];
471.3Srilligtypedef const int *pointer_to_const_array;
481.3Srillig
491.4Srillig// The 'const' applies to the pointer target, making it 'const int *'.
501.3Srilligint const_array_callee(const array);
511.3Srillig
521.3Srilligstatic inline int
531.3Srilligconst_array_caller(pointer_to_const_array ptr)
541.3Srillig{
551.3Srillig	return const_array_callee(ptr);
561.3Srillig}
57