Module Name: src Committed By: rillig Date: Thu Feb 20 20:59:34 UTC 2025
Modified Files: src/tests/usr.bin/xlint/lint1: gcc_builtin_alloca.c init.c init_braces.c init_c99.c msg_016.c msg_183.c msg_211.c msg_246.c queries.c src/usr.bin/xlint/lint1: err.c tree.c Log Message: lint: mention the assignment operator in 'illegal combination' In source lines that contain both a 'return' statement as well as a function-like macro, such as the C11 atomics, seeing the word 'init' in the diagnostic helps to see that the type conflict is not in the 'return' statement but instead in some initializer. Seen in userspace-rcu/wfcqueue.h:147. To generate a diff of this commit: cvs rdiff -u -r1.4 -r1.5 src/tests/usr.bin/xlint/lint1/gcc_builtin_alloca.c cvs rdiff -u -r1.16 -r1.17 src/tests/usr.bin/xlint/lint1/init.c cvs rdiff -u -r1.9 -r1.10 src/tests/usr.bin/xlint/lint1/init_braces.c cvs rdiff -u -r1.2 -r1.3 src/tests/usr.bin/xlint/lint1/init_c99.c cvs rdiff -u -r1.5 -r1.6 src/tests/usr.bin/xlint/lint1/msg_016.c \ src/tests/usr.bin/xlint/lint1/msg_246.c cvs rdiff -u -r1.6 -r1.7 src/tests/usr.bin/xlint/lint1/msg_183.c cvs rdiff -u -r1.7 -r1.8 src/tests/usr.bin/xlint/lint1/msg_211.c cvs rdiff -u -r1.33 -r1.34 src/tests/usr.bin/xlint/lint1/queries.c cvs rdiff -u -r1.262 -r1.263 src/usr.bin/xlint/lint1/err.c cvs rdiff -u -r1.670 -r1.671 src/usr.bin/xlint/lint1/tree.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/tests/usr.bin/xlint/lint1/gcc_builtin_alloca.c diff -u src/tests/usr.bin/xlint/lint1/gcc_builtin_alloca.c:1.4 src/tests/usr.bin/xlint/lint1/gcc_builtin_alloca.c:1.5 --- src/tests/usr.bin/xlint/lint1/gcc_builtin_alloca.c:1.4 Fri Jul 7 19:45:22 2023 +++ src/tests/usr.bin/xlint/lint1/gcc_builtin_alloca.c Thu Feb 20 20:59:34 2025 @@ -1,4 +1,4 @@ -/* $NetBSD: gcc_builtin_alloca.c,v 1.4 2023/07/07 19:45:22 rillig Exp $ */ +/* $NetBSD: gcc_builtin_alloca.c,v 1.5 2025/02/20 20:59:34 rillig Exp $ */ # 3 "gcc_builtin_alloca.c" /* @@ -19,7 +19,7 @@ example(void) char *aligned_ptr = __builtin_alloca_with_align(8, 64); aligned_ptr[0] = '\0'; - /* expect+1: warning: illegal combination of pointer 'pointer to char' and integer 'int' [183] */ + /* expect+1: warning: illegal combination of pointer 'pointer to char' and integer 'int' for 'init' [183] */ char *unknown = __builtin_allocate(8); unknown[0] = '\0'; } Index: src/tests/usr.bin/xlint/lint1/init.c diff -u src/tests/usr.bin/xlint/lint1/init.c:1.16 src/tests/usr.bin/xlint/lint1/init.c:1.17 --- src/tests/usr.bin/xlint/lint1/init.c:1.16 Sat Jun 8 13:50:47 2024 +++ src/tests/usr.bin/xlint/lint1/init.c Thu Feb 20 20:59:34 2025 @@ -1,4 +1,4 @@ -/* $NetBSD: init.c,v 1.16 2024/06/08 13:50:47 rillig Exp $ */ +/* $NetBSD: init.c,v 1.17 2025/02/20 20:59:34 rillig Exp $ */ # 3 "init.c" /* @@ -177,9 +177,9 @@ init_array_in_struct(void) }; struct cs_ws type_mismatch = { - /* expect+1: warning: illegal combination of integer 'char' and pointer 'pointer to int' [183] */ + /* expect+1: warning: illegal combination of integer 'char' and pointer 'pointer to int' for 'init' [183] */ L"", - /* expect+1: warning: illegal combination of integer 'char' and pointer 'pointer to char' [183] */ + /* expect+1: warning: illegal combination of integer 'char' and pointer 'pointer to char' for 'init' [183] */ "", }; Index: src/tests/usr.bin/xlint/lint1/init_braces.c diff -u src/tests/usr.bin/xlint/lint1/init_braces.c:1.9 src/tests/usr.bin/xlint/lint1/init_braces.c:1.10 --- src/tests/usr.bin/xlint/lint1/init_braces.c:1.9 Fri Jul 21 06:02:07 2023 +++ src/tests/usr.bin/xlint/lint1/init_braces.c Thu Feb 20 20:59:34 2025 @@ -1,4 +1,4 @@ -/* $NetBSD: init_braces.c,v 1.9 2023/07/21 06:02:07 rillig Exp $ */ +/* $NetBSD: init_braces.c,v 1.10 2025/02/20 20:59:34 rillig Exp $ */ # 3 "init_braces.c" /* @@ -44,14 +44,14 @@ init_string(void) /* gcc-expect+4: warning: initialization of 'char' from 'char *' makes integer from pointer without a cast */ /* clang-expect+3: warning: incompatible pointer to integer conversion initializing 'char' with an expression of type 'char [1]' */ /* clang-expect+2: warning: braces around scalar initializer */ - /* expect+1: warning: illegal combination of integer 'char' and pointer 'pointer to char' [183] */ + /* expect+1: warning: illegal combination of integer 'char' and pointer 'pointer to char' for 'init' [183] */ char name2[] = {{ "" }}; /* gcc-expect+6: warning: braces around scalar initializer */ /* gcc-expect+5: warning: braces around scalar initializer */ /* gcc-expect+4: warning: initialization of 'char' from 'char *' makes integer from pointer without a cast */ /* clang-expect+3: warning: too many braces around scalar initializer */ /* clang-expect+2: warning: incompatible pointer to integer conversion initializing 'char' with an expression of type 'char [1]' */ - /* expect+1: warning: illegal combination of integer 'char' and pointer 'pointer to char' [183] */ + /* expect+1: warning: illegal combination of integer 'char' and pointer 'pointer to char' for 'init' [183] */ char name3[] = {{{ "" }}}; /* gcc-expect+8: warning: braces around scalar initializer */ /* gcc-expect+7: warning: braces around scalar initializer */ @@ -60,7 +60,7 @@ init_string(void) /* clang-expect+4: warning: too many braces around scalar initializer */ /* clang-expect+3: warning: too many braces around scalar initializer */ /* clang-expect+2: warning: incompatible pointer to integer conversion initializing 'char' with an expression of type 'char [1]' */ - /* expect+1: warning: illegal combination of integer 'char' and pointer 'pointer to char' [183] */ + /* expect+1: warning: illegal combination of integer 'char' and pointer 'pointer to char' for 'init' [183] */ char name4[] = {{{{ "" }}}}; } Index: src/tests/usr.bin/xlint/lint1/init_c99.c diff -u src/tests/usr.bin/xlint/lint1/init_c99.c:1.2 src/tests/usr.bin/xlint/lint1/init_c99.c:1.3 --- src/tests/usr.bin/xlint/lint1/init_c99.c:1.2 Sun Jun 9 10:27:39 2024 +++ src/tests/usr.bin/xlint/lint1/init_c99.c Thu Feb 20 20:59:34 2025 @@ -1,4 +1,4 @@ -/* $NetBSD: init_c99.c,v 1.2 2024/06/09 10:27:39 rillig Exp $ */ +/* $NetBSD: init_c99.c,v 1.3 2025/02/20 20:59:34 rillig Exp $ */ # 3 "init_c99.c" // Tests for initialization in C99 or later, mainly for designators. @@ -254,7 +254,7 @@ struct ends_with_unnamed_bit_field { char prefixed_message[] = { 'E', ':', ' ', - /* expect+1: warning: illegal combination of integer 'char' and pointer 'pointer to char' [183] */ + /* expect+1: warning: illegal combination of integer 'char' and pointer 'pointer to char' for 'init' [183] */ "message\n", }; Index: src/tests/usr.bin/xlint/lint1/msg_016.c diff -u src/tests/usr.bin/xlint/lint1/msg_016.c:1.5 src/tests/usr.bin/xlint/lint1/msg_016.c:1.6 --- src/tests/usr.bin/xlint/lint1/msg_016.c:1.5 Tue Mar 28 14:44:34 2023 +++ src/tests/usr.bin/xlint/lint1/msg_016.c Thu Feb 20 20:59:34 2025 @@ -1,4 +1,4 @@ -/* $NetBSD: msg_016.c,v 1.5 2023/03/28 14:44:34 rillig Exp $ */ +/* $NetBSD: msg_016.c,v 1.6 2025/02/20 20:59:34 rillig Exp $ */ # 3 "msg_016.c" // Test for message: array of function is illegal [16] @@ -13,6 +13,6 @@ function functions[] = { * XXX: The below warning should not assume that function is an * integer type. */ - /* expect+1: warning: illegal combination of integer 'int' and pointer 'pointer to void' [183] */ + /* expect+1: warning: illegal combination of integer 'int' and pointer 'pointer to void' for 'init' [183] */ (void *)0, }; Index: src/tests/usr.bin/xlint/lint1/msg_246.c diff -u src/tests/usr.bin/xlint/lint1/msg_246.c:1.5 src/tests/usr.bin/xlint/lint1/msg_246.c:1.6 --- src/tests/usr.bin/xlint/lint1/msg_246.c:1.5 Fri Jul 7 19:45:22 2023 +++ src/tests/usr.bin/xlint/lint1/msg_246.c Thu Feb 20 20:59:34 2025 @@ -1,4 +1,4 @@ -/* $NetBSD: msg_246.c,v 1.5 2023/07/07 19:45:22 rillig Exp $ */ +/* $NetBSD: msg_246.c,v 1.6 2025/02/20 20:59:34 rillig Exp $ */ # 3 "msg_246.c" // Test for message: dubious conversion of enum to '%s' [246] @@ -19,6 +19,6 @@ to_double(enum color c) void * to_pointer(enum color c) { - /* expect+1: warning: illegal combination of pointer 'pointer to void' and integer 'enum color' [183] */ + /* expect+1: warning: illegal combination of pointer 'pointer to void' and integer 'enum color' for 'return' [183] */ return c; } Index: src/tests/usr.bin/xlint/lint1/msg_183.c diff -u src/tests/usr.bin/xlint/lint1/msg_183.c:1.6 src/tests/usr.bin/xlint/lint1/msg_183.c:1.7 --- src/tests/usr.bin/xlint/lint1/msg_183.c:1.6 Sun Jul 9 11:18:55 2023 +++ src/tests/usr.bin/xlint/lint1/msg_183.c Thu Feb 20 20:59:34 2025 @@ -1,7 +1,7 @@ -/* $NetBSD: msg_183.c,v 1.6 2023/07/09 11:18:55 rillig Exp $ */ +/* $NetBSD: msg_183.c,v 1.7 2025/02/20 20:59:34 rillig Exp $ */ # 3 "msg_183.c" -// Test for message: illegal combination of %s '%s' and %s '%s' [183] +// Test for message: illegal combination of %s '%s' and %s '%s' for '%s' [183] /* lint1-extra-flags: -X 351 */ @@ -9,12 +9,15 @@ void * example(double x, int i, void *vp, int *ip, double *dp, void (*fp)(void)) { + /* expect+1: warning: illegal combination of pointer 'pointer to void' and integer 'int' for 'init' [183] */ + void *local_vp = i; + if (i < 0) /* expect+1: error: function has return type 'pointer to void' but returns 'double' [211] */ return x; if (i < 1) - /* expect+1: warning: illegal combination of pointer 'pointer to void' and integer 'int' [183] */ + /* expect+1: warning: illegal combination of pointer 'pointer to void' and integer 'int' for 'return' [183] */ return i; if (i < 2) Index: src/tests/usr.bin/xlint/lint1/msg_211.c diff -u src/tests/usr.bin/xlint/lint1/msg_211.c:1.7 src/tests/usr.bin/xlint/lint1/msg_211.c:1.8 --- src/tests/usr.bin/xlint/lint1/msg_211.c:1.7 Sat Jun 8 09:09:20 2024 +++ src/tests/usr.bin/xlint/lint1/msg_211.c Thu Feb 20 20:59:34 2025 @@ -1,4 +1,4 @@ -/* $NetBSD: msg_211.c,v 1.7 2024/06/08 09:09:20 rillig Exp $ */ +/* $NetBSD: msg_211.c,v 1.8 2025/02/20 20:59:34 rillig Exp $ */ # 3 "msg_211.c" // Test for message: function has return type '%s' but returns '%s' [211] @@ -15,7 +15,7 @@ return_int(double dbl, void *ptr, struct if (dbl > 0.0) return dbl; if (ptr != (void *)0) - /* expect+1: warning: illegal combination of integer 'int' and pointer 'pointer to void' [183] */ + /* expect+1: warning: illegal combination of integer 'int' and pointer 'pointer to void' for 'return' [183] */ return ptr; if (str.member > 0) /* expect+1: error: function has return type 'int' but returns 'struct str' [211] */ Index: src/tests/usr.bin/xlint/lint1/queries.c diff -u src/tests/usr.bin/xlint/lint1/queries.c:1.33 src/tests/usr.bin/xlint/lint1/queries.c:1.34 --- src/tests/usr.bin/xlint/lint1/queries.c:1.33 Sat Nov 30 11:27:20 2024 +++ src/tests/usr.bin/xlint/lint1/queries.c Thu Feb 20 20:59:34 2025 @@ -1,4 +1,4 @@ -/* $NetBSD: queries.c,v 1.33 2024/11/30 11:27:20 rillig Exp $ */ +/* $NetBSD: queries.c,v 1.34 2025/02/20 20:59:34 rillig Exp $ */ # 3 "queries.c" /* @@ -378,10 +378,10 @@ Q9(int x) # 379 "queries.c" 3 4 ((void *)0) # 381 "queries.c" - /* expect+1: warning: illegal combination of integer 'int' and pointer 'pointer to void' [183] */ + /* expect+1: warning: illegal combination of integer 'int' and pointer 'pointer to void' for 'return' [183] */ ; case 10: - /* expect+1: warning: illegal combination of integer 'int' and pointer 'pointer to void' [183] */ + /* expect+1: warning: illegal combination of integer 'int' and pointer 'pointer to void' for 'return' [183] */ return (void *)(0); default: return 0; Index: src/usr.bin/xlint/lint1/err.c diff -u src/usr.bin/xlint/lint1/err.c:1.262 src/usr.bin/xlint/lint1/err.c:1.263 --- src/usr.bin/xlint/lint1/err.c:1.262 Fri Jan 3 03:14:47 2025 +++ src/usr.bin/xlint/lint1/err.c Thu Feb 20 20:59:34 2025 @@ -1,4 +1,4 @@ -/* $NetBSD: err.c,v 1.262 2025/01/03 03:14:47 rillig Exp $ */ +/* $NetBSD: err.c,v 1.263 2025/02/20 20:59:34 rillig Exp $ */ /* * Copyright (c) 1994, 1995 Jochen Pohl @@ -37,7 +37,7 @@ #include <sys/cdefs.h> #if defined(__RCSID) -__RCSID("$NetBSD: err.c,v 1.262 2025/01/03 03:14:47 rillig Exp $"); +__RCSID("$NetBSD: err.c,v 1.263 2025/02/20 20:59:34 rillig Exp $"); #endif #include <limits.h> @@ -238,7 +238,7 @@ static const char *const msgs[] = { "bit-field initializer does not fit", // 180 "{}-enclosed or constant initializer of type '%s' required", // 181 "'%s' discards '%s' from '%s'", // 182 - "illegal combination of %s '%s' and %s '%s'", // 183 + "illegal combination of %s '%s' and %s '%s' for '%s'", // 183 "illegal combination of '%s' and '%s'", // 184 "cannot initialize '%s' from '%s'", // 185 "bit-field initializer must be an integer in traditional C", // 186 Index: src/usr.bin/xlint/lint1/tree.c diff -u src/usr.bin/xlint/lint1/tree.c:1.670 src/usr.bin/xlint/lint1/tree.c:1.671 --- src/usr.bin/xlint/lint1/tree.c:1.670 Sun Jan 5 06:58:47 2025 +++ src/usr.bin/xlint/lint1/tree.c Thu Feb 20 20:59:34 2025 @@ -1,4 +1,4 @@ -/* $NetBSD: tree.c,v 1.670 2025/01/05 06:58:47 rillig Exp $ */ +/* $NetBSD: tree.c,v 1.671 2025/02/20 20:59:34 rillig Exp $ */ /* * Copyright (c) 1994, 1995 Jochen Pohl @@ -37,7 +37,7 @@ #include <sys/cdefs.h> #if defined(__RCSID) -__RCSID("$NetBSD: tree.c,v 1.670 2025/01/05 06:58:47 rillig Exp $"); +__RCSID("$NetBSD: tree.c,v 1.671 2025/02/20 20:59:34 rillig Exp $"); #endif #include <float.h> @@ -3055,8 +3055,9 @@ check_assign_pointer_integer(op_t op, in switch (op) { case INIT: case RETURN: - /* illegal combination of %s '%s' and %s '%s' */ - warning(183, lx, type_name(ltp), rx, type_name(rtp)); + /* illegal combination of %s '%s' and %s '%s' for '%s' */ + warning(183, + lx, type_name(ltp), rx, type_name(rtp), op_name(op)); break; case FARG: /* illegal combination of %s '%s' and %s '%s', arg #%d */