Powered by Linux
Re: Signedness of 'char' — Semantic Matching Tool

Re: Signedness of 'char'

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Fri, Oct 11, 2013 at 02:04:07PM +0200, Peter Oberparleiter wrote:
> Running smatch on s390x incorrectly reports impossible conditions when
> comparing variables of type 'char' with constant values larger than 127,
> even though 'char' is implemented on s390x as unsigned type.
> 
> A solution to this problem might be to use the __CHAR__UNSIGNED__ macro [1]
> to determine the correct signedness of the 'char' type at compile time.
> 

Smatch used to try figure out type information manually but these days
it hopefully should be using the information from Sparse.  I'm not sure
if all the crud has been totally deleted.  Does this patch work?

diff --git a/symbol.c b/symbol.c
index 0427a23..6ec25c2 100644
--- a/symbol.c
+++ b/symbol.c
@@ -789,6 +789,12 @@ void init_symbols(void)
 	}
 }
 
+#ifdef __CHAR__UNSIGNED__
+#define CHAR_SIGNEDNESS MOD_UNSIGNED
+#else
+#define CHAR_SIGNEDNESS MOD_SIGNED
+#endif
+
 #define MOD_ESIGNED (MOD_SIGNED | MOD_EXPLICITLY_SIGNED)
 #define MOD_LL (MOD_LONG | MOD_LONGLONG)
 #define MOD_LLL MOD_LONGLONGLONG
@@ -806,7 +812,7 @@ static const struct ctype_declare {
 	{ &incomplete_ctype,SYM_BASETYPE, 0,			    NULL,		     NULL,		 NULL },
 	{ &bad_ctype,	    SYM_BASETYPE, 0,			    NULL,		     NULL,		 NULL },
 
-	{ &char_ctype,	    SYM_BASETYPE, MOD_SIGNED | MOD_CHAR,    &bits_in_char,	     &max_int_alignment, &int_type },
+	{ &char_ctype,	    SYM_BASETYPE, CHAR_SIGNEDNESS | MOD_CHAR,    &bits_in_char,	     &max_int_alignment, &int_type },
 	{ &schar_ctype,	    SYM_BASETYPE, MOD_ESIGNED | MOD_CHAR,   &bits_in_char,	     &max_int_alignment, &int_type },
 	{ &uchar_ctype,	    SYM_BASETYPE, MOD_UNSIGNED | MOD_CHAR,  &bits_in_char,	     &max_int_alignment, &int_type },
 	{ &short_ctype,	    SYM_BASETYPE, MOD_SIGNED | MOD_SHORT,   &bits_in_short,	     &max_int_alignment, &int_type },
--
To unsubscribe from this list: send the line "unsubscribe smatch" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Big List of Linux Books]

  Powered by Linux