Module Name: src Committed By: rillig Date: Sun Jan 10 12:46:38 UTC 2021
Modified Files: src/tests/usr.bin/xlint/lint1: d_c99_bool.c d_c99_bool.exp src/usr.bin/xlint/lint1: tree.c Log Message: lint: fix conversion of non-constant scalar to _Bool To generate a diff of this commit: cvs rdiff -u -r1.3 -r1.4 src/tests/usr.bin/xlint/lint1/d_c99_bool.c \ src/tests/usr.bin/xlint/lint1/d_c99_bool.exp cvs rdiff -u -r1.147 -r1.148 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/d_c99_bool.c diff -u src/tests/usr.bin/xlint/lint1/d_c99_bool.c:1.3 src/tests/usr.bin/xlint/lint1/d_c99_bool.c:1.4 --- src/tests/usr.bin/xlint/lint1/d_c99_bool.c:1.3 Sun Jan 10 12:34:56 2021 +++ src/tests/usr.bin/xlint/lint1/d_c99_bool.c Sun Jan 10 12:46:38 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: d_c99_bool.c,v 1.3 2021/01/10 12:34:56 rillig Exp $ */ +/* $NetBSD: d_c99_bool.c,v 1.4 2021/01/10 12:46:38 rillig Exp $ */ # 3 "d_bool.c" /* @@ -26,8 +26,8 @@ int int_256_converts_to_true_[(_Bool)256 int null_pointer_converts_to_false[(_Bool)(void *)0 ? -1 : 1]; int null_pointer_converts_to_true_[(_Bool)(void *)0 ? 1 : -1]; -int nonnull_pointer_converts_to_false[(_Bool)"not null" ? -1 : 1]; // FIXME 133 -int nonnull_pointer_converts_to_true_[(_Bool)"not null" ? 1 : -1]; // FIXME 133 +int nonnull_pointer_converts_to_false[(_Bool)"not null" ? -1 : 1]; +int nonnull_pointer_converts_to_true_[(_Bool)"not null" ? 1 : -1]; int double_minus_1_0_converts_to_false[(_Bool)-1.0 ? -1 : 1]; int double_minus_1_0_converts_to_true_[(_Bool)-1.0 ? 1 : -1]; @@ -85,13 +85,13 @@ enum_to_bool(enum color e) _Bool pointer_to_bool(const char *p) { - return p; // FIXME 183 + return p; } _Bool function_pointer_to_bool(void (*f)(void)) { - return f; // FIXME 183 + return f; } _Bool Index: src/tests/usr.bin/xlint/lint1/d_c99_bool.exp diff -u src/tests/usr.bin/xlint/lint1/d_c99_bool.exp:1.3 src/tests/usr.bin/xlint/lint1/d_c99_bool.exp:1.4 --- src/tests/usr.bin/xlint/lint1/d_c99_bool.exp:1.3 Sun Jan 10 12:34:56 2021 +++ src/tests/usr.bin/xlint/lint1/d_c99_bool.exp Sun Jan 10 12:46:38 2021 @@ -3,13 +3,9 @@ d_bool.c(17): negative array dimension ( d_bool.c(20): negative array dimension (-1) [20] d_bool.c(23): negative array dimension (-1) [20] d_bool.c(27): negative array dimension (-1) [20] -d_bool.c(29): warning: conversion of pointer to '_Bool' loses bits [133] -d_bool.c(30): warning: conversion of pointer to '_Bool' loses bits [133] d_bool.c(32): negative array dimension (-1) [20] d_bool.c(35): negative array dimension (-1) [20] d_bool.c(39): negative array dimension (-1) [20] d_bool.c(42): negative array dimension (-1) [20] d_bool.c(45): negative array dimension (-1) [20] d_bool.c(48): negative array dimension (-1) [20] -d_bool.c(88): warning: illegal combination of integer (_Bool) and pointer (pointer to const char) [183] -d_bool.c(94): warning: illegal combination of integer (_Bool) and pointer (pointer to function() returning void) [183] Index: src/usr.bin/xlint/lint1/tree.c diff -u src/usr.bin/xlint/lint1/tree.c:1.147 src/usr.bin/xlint/lint1/tree.c:1.148 --- src/usr.bin/xlint/lint1/tree.c:1.147 Sun Jan 10 12:34:56 2021 +++ src/usr.bin/xlint/lint1/tree.c Sun Jan 10 12:46:38 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: tree.c,v 1.147 2021/01/10 12:34:56 rillig Exp $ */ +/* $NetBSD: tree.c,v 1.148 2021/01/10 12:46:38 rillig Exp $ */ /* * Copyright (c) 1994, 1995 Jochen Pohl @@ -37,7 +37,7 @@ #include <sys/cdefs.h> #if defined(__RCSID) && !defined(lint) -__RCSID("$NetBSD: tree.c,v 1.147 2021/01/10 12:34:56 rillig Exp $"); +__RCSID("$NetBSD: tree.c,v 1.148 2021/01/10 12:46:38 rillig Exp $"); #endif #include <float.h> @@ -1296,6 +1296,9 @@ check_assign_types_compatible(op_t op, i rst = (rstp = rtp->t_subt)->t_tspec; mp = &modtab[op]; + if (lt == BOOL && is_scalar(rt)) /* C99 6.3.1.2 */ + return 1; + if (is_arithmetic(lt) && is_arithmetic(rt)) return 1; @@ -1787,7 +1790,7 @@ convert(op_t op, int arg, type_t *tp, tn is_integer(ot)) && tn->tn_op == CON && tn->tn_val->v_quad == 0) { /* 0, 0L and (void *)0 may be assigned to any pointer. */ - } else if (is_integer(nt) && ot == PTR) { + } else if (is_integer(nt) && nt != BOOL && ot == PTR) { check_pointer_integer_conversion(op, nt, tp, tn); } else if (nt == PTR && ot == PTR) { check_pointer_conversion(op, tn, tp); @@ -1948,10 +1951,10 @@ check_pointer_integer_conversion(op_t op if (psize(nt) < psize(PTR)) { if (pflag && size(nt) >= size(PTR)) { - /* conv. of pointer to '%s' may lose bits */ + /* conversion of pointer to '%s' may lose bits */ warning(134, type_name(tp)); } else { - /* conv. of pointer to '%s' loses bits */ + /* conversion of pointer to '%s' loses bits */ warning(133, type_name(tp)); } }