msg_347.c revision 1.5
11.5Srillig/*	$NetBSD: msg_347.c,v 1.5 2023/03/28 14:44:35 rillig Exp $	*/
21.1Srillig# 3 "msg_347.c"
31.1Srillig
41.1Srillig// Test for message: redeclaration of '%s' with type '%s', expected '%s' [347]
51.1Srillig
61.5Srillig/* lint1-extra-flags: -r -X 351 */
71.1Srillig
81.1Srillig/*
91.1Srillig * Message 27 already covers redeclarations, but it doesn't include enough
101.1Srillig * details to make any sense of it.
111.1Srillig */
121.1Srillig
131.1Srillig/*
141.1Srillig * As of 2021-09-12, lint complains about mismatched types.
151.1Srillig * GCC and Clang accept this.
161.1Srillig *
171.1Srillig * Above:
181.1Srillig *     function(pointer to void, int) returning void
191.1Srillig *
201.1Srillig * Below: function(
211.1Srillig *     pointer to void,
221.1Srillig *     pointer to function(pointer to void, int) returning pointer to double
231.1Srillig * ) returning void
241.1Srillig */
251.1Srillig/* FIXME: the type of the second parameter is not 'int' */
261.4Srillig/* expect+1: previous declaration of 'function_parameter' [260] */
271.1Srilligvoid function_parameter(void *, double *(void *, int));
281.1Srillig/* expect+1: error: redeclaration of 'function_parameter' with type 'function(pointer to void, pointer to function(pointer to void, int) returning pointer to double) returning void', expected 'function(pointer to void, int) returning void' [347] */
291.1Srilligvoid function_parameter(void *fs, double *func(void *, int));
301.2Srillig
311.2Srillig
321.4Srillig/* expect+1: warning: struct 'last_arg' never defined [233] */
331.2Srilligstruct last_arg;
341.2Srillig/*
351.2Srillig * FIXME: The following error is completely wrong.
361.3Srillig *  There is no argument that has 'struct last_arg', there are only pointers
371.3Srillig *  to it.
381.2Srillig */
391.2Srillig/* expect+2: error: '<unnamed>' has incomplete type 'incomplete struct last_arg' [31] */
401.4Srillig/* expect+1: previous declaration of 'last_arg_struct' [260] */
411.2Srilligvoid last_arg_struct(double, double *(struct last_arg *));
421.2Srillig/* expect+1: error: redeclaration of 'last_arg_struct' with type 'function(double, pointer to function(pointer to incomplete struct last_arg) returning pointer to double) returning void', expected 'function(double, incomplete struct last_arg) returning void' [347] */
431.2Srilligvoid last_arg_struct(double d, double *fn(struct last_arg *));
441.3Srillig
451.3Srillig
461.3Srilligstruct last_param {
471.3Srillig	int member;
481.3Srillig};
491.3Srillig
501.4Srillig/* expect+1: previous declaration of 'last_param' [260] */
511.3Srilligvoid last_param(double, double *(struct last_param));
521.3Srillig
531.3Srillig/*
541.3Srillig * FIXME: The type of last_param is completely wrong.  The second parameter
551.3Srillig *  must be a function, not a struct.
561.3Srillig */
571.3Srillig/* expect+1: error: cannot initialize 'double' from 'pointer to function(double, struct last_param) returning void' [185] */
581.3Srilligdouble reveal_type_of_last_param_abstract = last_param;
591.3Srillig
601.3Srillig/* expect+1: error: redeclaration of 'last_param' with type 'function(double, pointer to function(struct last_param) returning pointer to double) returning void', expected 'function(double, struct last_param) returning void' [347] */
611.3Srilligvoid last_param(double d, double *fn(struct last_param));
621.3Srillig
631.3Srillig/* expect+1: error: cannot initialize 'double' from 'pointer to function(double, pointer to function(struct last_param) returning pointer to double) returning void' [185] */
641.3Srilligdouble reveal_type_of_last_param_named = last_param;
65