summaryrefslogtreecommitdiff
path: root/usr.bin
diff options
context:
space:
mode:
authorChad Loder <cloder@cvs.openbsd.org>2005-12-15 05:49:50 +0000
committerChad Loder <cloder@cvs.openbsd.org>2005-12-15 05:49:50 +0000
commitac7290bedd859af35ac785e9ea7c76863b1e4b32 (patch)
tree82d4226bab57f49401daaf0a62fcff975b9fd752 /usr.bin
parent9ca53e82fb64f4569153796334a791eedfdd610f (diff)
Add a new warning message: conversion of %s return value from '%s' to '%s'.
Lint now warns when a function's return value is converted to a smaller (or differently signed) type. These conversions can happen when doing an assignment, when passing a function's return value as an argument to another function, or when initializing a variable. Currently this produces useless warnings on tolower() and toupper() because they return ints but are usually assigned to chars.
Diffstat (limited to 'usr.bin')
-rw-r--r--usr.bin/xlint/lint1/err.c5
-rw-r--r--usr.bin/xlint/lint1/tree.c13
2 files changed, 14 insertions, 4 deletions
diff --git a/usr.bin/xlint/lint1/err.c b/usr.bin/xlint/lint1/err.c
index ba64269c3eb..a46486bceae 100644
--- a/usr.bin/xlint/lint1/err.c
+++ b/usr.bin/xlint/lint1/err.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: err.c,v 1.15 2005/12/14 22:09:40 kjell Exp $ */
+/* $OpenBSD: err.c,v 1.16 2005/12/15 05:49:48 cloder Exp $ */
/* $NetBSD: err.c,v 1.8 1995/10/02 17:37:00 jpo Exp $ */
/*
@@ -33,7 +33,7 @@
*/
#ifndef lint
-static char rcsid[] = "$OpenBSD: err.c,v 1.15 2005/12/14 22:09:40 kjell Exp $";
+static char rcsid[] = "$OpenBSD: err.c,v 1.16 2005/12/15 05:49:48 cloder Exp $";
#endif
/* number of errors found */
@@ -366,6 +366,7 @@ const char *msgs[] = {
"right shift of %d-bit quantity by %d bits", /* 310 */
"case ranges are illegal in ANSI C", /* 311 */
"suspicious operator for sizeof: %s", /* 312 */
+ "conversion of %s return value from '%s' to '%s'", /* 313 */
};
/*
diff --git a/usr.bin/xlint/lint1/tree.c b/usr.bin/xlint/lint1/tree.c
index dc8e5aa6313..92a32b3b93f 100644
--- a/usr.bin/xlint/lint1/tree.c
+++ b/usr.bin/xlint/lint1/tree.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: tree.c,v 1.25 2005/12/14 22:09:40 kjell Exp $ */
+/* $OpenBSD: tree.c,v 1.26 2005/12/15 05:49:49 cloder Exp $ */
/* $NetBSD: tree.c,v 1.12 1995/10/02 17:37:57 jpo Exp $ */
/*
@@ -33,7 +33,7 @@
*/
#ifndef lint
-static char rcsid[] = "$OpenBSD: tree.c,v 1.25 2005/12/14 22:09:40 kjell Exp $";
+static char rcsid[] = "$OpenBSD: tree.c,v 1.26 2005/12/15 05:49:49 cloder Exp $";
#endif
#include <stdlib.h>
@@ -1193,6 +1193,15 @@ asgntypok(op_t op, int arg, tnode_t *ln, tnode_t *rn)
rst = (rstp = rtp->t_subt)->t_tspec;
mp = &modtab[op];
+ /* be picky about conversion of function return types */
+ if (rn->tn_op == CALL) {
+ if (size(lt) < size(rt) ||
+ (size(lt) == size(rt) && isutyp(lt) && !isutyp(rt))) {
+ warning(313, rn->tn_left->tn_left->tn_sym->s_name,
+ tyname(rn->tn_type), tyname(ln->tn_type));
+ }
+ }
+
if (isatyp(lt) && isatyp(rt))
return (1);