msg_347.c revision 1.4
11.4Srillig/* $NetBSD: msg_347.c,v 1.4 2022/06/11 11:52:13 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.1Srillig/* lint1-extra-flags: -r */ 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