|
From: Nicholas N. <n.n...@gm...> - 2009-02-23 06:31:04
|
Hi,
This code is from coregrind/m_libcbase.c:
void* VG_(memmove)(void *dest, const void *src, SizeT sz)
{
SizeT i;
if (sz == 0)
return dest;
if (dest < src) {
for (i = 0; i < sz; i++) {
((UChar*)dest)[i] = ((UChar*)src)[i];
}
}
else if (dest > src) {
for (i = sz - 1; i >= 0; i--) {
((UChar*)dest)[i] = ((UChar*)src)[i];
}
}
return dest;
}
It has a 50% chance of crashing or looping infinitely. Why? The
condition of the for-loop in the else-branch never fails, because i is
unsigned. Fortunately this function is not actually used anywhere.
The warning -Wtype-limits finds this problem, and 185 other ones like
it (ie. comparisons that are always true or false) in the core and
tools, and some more in the tests. I've looked at a few of these,
some of them are just redundant assertions that an unsigned value is
greater than zero, but even those are worrying.
I'd like to turn this warning on. Possibly via -Wextra, which brings
some other warnings into the mix, but if so then -Wno-sign-compare and
-Wno-unused-parameter would also be needed to avoid lots of IMHO
unimportant warnings. Thoughts?
Nick
|
|
From: Bart V. A. <bar...@gm...> - 2009-02-23 07:13:06
|
On Mon, Feb 23, 2009 at 7:30 AM, Nicholas Nethercote <n.n...@gm...> wrote: > I'd like to turn this warning on. Possibly via -Wextra, which brings > some other warnings into the mix, but if so then -Wno-sign-compare and > -Wno-unused-parameter would also be needed to avoid lots of IMHO > unimportant warnings. Thoughts? Regarding -Wextra: older gcc versions only understood -W, newer understand both -W and -Wextra. That is why I added a test to configure.in for this flag (FLAG_W_EXTRA). Please keep in mind that the exact meaning of -Wextra changes with each gcc version. An alternative is to specify each desired warning option explicitly. But this also implies that support for warning flags must be tested before each flag is used, or that more configure tests for compiler flags will have to be added. Bart. |
|
From: Konstantin S. <kon...@gm...> - 2009-02-23 07:20:08
|
On Mon, Feb 23, 2009 at 9:30 AM, Nicholas Nethercote
<n.n...@gm...> wrote:
> Hi,
>
> This code is from coregrind/m_libcbase.c:
>
> void* VG_(memmove)(void *dest, const void *src, SizeT sz)
> {
> SizeT i;
> if (sz == 0)
> return dest;
> if (dest < src) {
> for (i = 0; i < sz; i++) {
> ((UChar*)dest)[i] = ((UChar*)src)[i];
> }
> }
> else if (dest > src) {
> for (i = sz - 1; i >= 0; i--) {
> ((UChar*)dest)[i] = ((UChar*)src)[i];
> }
> }
> return dest;
> }
>
> It has a 50% chance of crashing or looping infinitely. Why? The
> condition of the for-loop in the else-branch never fails, because i is
> unsigned. Fortunately this function is not actually used anywhere.
Anywhere in the trunk -- yes.
But I've hit this crash in Dec when I started using STL in valgrind
(STL uses memmove).
The patch I use is this:
else if (dest > src) {
UChar *d = (UChar*)dest + sz - 1;
UChar *s = (UChar*)src + sz - 1;
for (; d >= (UChar*)dest; d--, s--) {
*d = *s;
}
}
>
> The warning -Wtype-limits finds this problem, and 185 other ones like
> it (ie. comparisons that are always true or false) in the core and
> tools, and some more in the tests. I've looked at a few of these,
> some of them are just redundant assertions that an unsigned value is
> greater than zero, but even those are worrying.
>
> I'd like to turn this warning on. Possibly via -Wextra, which brings
> some other warnings into the mix, but if so then -Wno-sign-compare and
> -Wno-unused-parameter would also be needed to avoid lots of IMHO
> unimportant warnings. Thoughts?
--kcc
>
> Nick
>
> ------------------------------------------------------------------------------
> Open Source Business Conference (OSBC), March 24-25, 2009, San Francisco, CA
> -OSBC tackles the biggest issue in open source: Open Sourcing the Enterprise
> -Strategies to boost innovation and cut costs with open source participation
> -Receive a $600 discount off the registration fee with the source code: SFAD
> http://p.sf.net/sfu/XcvMzF8H
> _______________________________________________
> Valgrind-developers mailing list
> Val...@li...
> https://lists.sourceforge.net/lists/listinfo/valgrind-developers
>
|
|
From: Julian S. <js...@ac...> - 2009-02-23 13:04:04
|
> [VG_(memmove)] > It has a 50% chance of crashing or looping infinitely. Why? The > condition of the for-loop in the else-branch never fails, because i is > unsigned. Fortunately this function is not actually used anywhere. Apologies to Konstantin, who reported this in December along with a patch, which I totally forgot about :-( > The warning -Wtype-limits finds this problem, and 185 other ones like > it (ie. comparisons that are always true or false) in the core and > tools, and some more in the tests. I've looked at a few of these, > some of them are just redundant assertions that an unsigned value is > greater than zero, but even those are worrying. The memmove (re-)discovery is a good one. But how many of the others are simply complaints about "unsigned < 0" or "unsigned >= 0" ? I'm reluctant to go with a flag which gives complaints for the abovementioned two cases. If I am writing some algorithm, and "u" is an unsigned thing, then often I want to write assert(u >= 0 && u < LIMIT); From the point of view of reading/understanding/reasoning about the code, that's imo clearer than the equivalent assert(u < LIMIT); and then having to remember that there is also an implied lower limit of zero because u is unsigned. And the former is no less efficient since gcc will surely fold the first comparison away. It's also safer if u ever becomes signed for whatever reason. Then it is still properly range-checked, whereas with the latter formulation it no longer is. If you want more signedness-checking action from gcc, I would think -Wsign-compare is worthwhile. Comparing signed vs unsigned values is just asking for trouble, and is something we shouldn't be doing. J |
|
From: Nicholas N. <n.n...@gm...> - 2009-02-23 22:31:41
|
On Mon, Feb 23, 2009 at 10:43 PM, Julian Seward <js...@ac...> wrote:
>
> The memmove (re-)discovery is a good one. But how many of the others
> are simply complaints about "unsigned < 0" or "unsigned >= 0" ?
Just about all of them, that's what the flag does :)
> I'm reluctant to go with a flag which gives complaints for the
> abovementioned two cases. If I am writing some algorithm, and "u" is
> an unsigned thing, then often I want to write
>
> assert(u >= 0 && u < LIMIT);
>
> From the point of view of reading/understanding/reasoning about the code,
> that's imo clearer than the equivalent
>
> assert(u < LIMIT);
>
> and then having to remember that there is also an implied lower limit of
> zero because u is unsigned. And the former is no less efficient since gcc
> will surely fold the first comparison away.
>
> It's also safer if u ever becomes signed for whatever reason. Then it is
> still properly range-checked, whereas with the latter formulation it no
> longer is.
>
> If you want more signedness-checking action from gcc, I would think
> -Wsign-compare is worthwhile. Comparing signed vs unsigned values is
> just asking for trouble, and is something we shouldn't be doing.
That's the warning that occurs the most with -Wextra. I looked at a
few, they were all of this form:
unsigned int n = <a small number>
...
int i;
for (i = 0; i < n; i++) { ... }
The "i < n" comparison is fine for small non-negative values.
This is clearly a matter of taste, as I felt -Wtype-limits was
worthwhile and -Wsign-compare was not, and Julian thought the
opposite.
What it makes me think is that we probably overuse unsigned values.
It's probably better to use signed values for any kind of "count"
variable... more modern languages like Java and Haskell don't have
unsigned integers... sticking with signed ones for the most part might
make things simpler.
N
|
|
From: Bart V. A. <bar...@gm...> - 2009-02-23 13:15:27
|
On Mon, Feb 23, 2009 at 12:43 PM, Julian Seward <js...@ac...> wrote: > If you want more signedness-checking action from gcc, I would think > -Wsign-compare is worthwhile. Comparing signed vs unsigned values is > just asking for trouble, and is something we shouldn't be doing. Are you sure that comparing signed and unsigned values does more harm that causing a small performance penalty ? Did anyone check the assembler code generated by gcc for such comparisons ? Additionaly, -Wsign-compare will make gcc complain on statements like assert(u >= 0 && u < LIMIT); where u is of type unsigned int and LIMIT is of type signed int. Bart. |
|
From: Julian S. <js...@ac...> - 2009-02-23 14:45:55
|
> Are you sure that comparing signed and unsigned values does more harm
> that causing a small performance penalty ?
I'm sure it doesn't cause any performance penalty. I imagine it merely
causes gcc to switch from emitting ja/jae/jb/jbe conditional branches
to jl/jle/jg/jge conditional branches. One group does signed comparisons
and the other does unsigned comparisons. I don't remember which is which.
> Additionaly,
> -Wsign-compare will make gcc complain on statements like
>
> assert(u >= 0 && u < LIMIT);
I can't reproduce this:
sewardj@phoenix:~$ cat wsigncmp.c
#include <assert.h>
#define LIMIT 10
unsigned int u;
int main ( void )
{
assert(u >= 0 && u < LIMIT);
return 0;
}
sewardj@phoenix:~$ gcc -Wall -g -O -c wsigncmp.c -Wsign-compare
sewardj@phoenix:~$
My concern about comparison of signed vs unsigned values is that it is
in some sense logically broken -- these are different types. And it is
likely to give confusion/wrong results for values near either the
wraparound boundary (0x00...00 / 0xFF...FF) or the halfway boundary
(0x7F...FF / 0x80...00).
J
|
|
From: Bart V. A. <bar...@gm...> - 2009-02-23 15:51:48
|
On Mon, Feb 23, 2009 at 12:43 PM, Julian Seward <js...@ac...> wrote: > If you want more signedness-checking action from gcc, I would think > -Wsign-compare is worthwhile. Comparing signed vs unsigned values is > just asking for trouble, and is something we shouldn't be doing. While I agree that it's a good idea to evaluate whether we should enable more gcc warning options in the Valgrind project, I'm not sure that enabling -Wsign-compare is a good idea. This topic has already been discussed on the LKML a long time ago. See e.g. http://lkml.org/lkml/2001/8/30/83. Bart. |
|
From: Bart V. A. <bar...@gm...> - 2009-02-23 17:53:51
|
On Mon, Feb 23, 2009 at 4:51 PM, Bart Van Assche <bar...@gm...> wrote: > On Mon, Feb 23, 2009 at 12:43 PM, Julian Seward <js...@ac...> wrote: >> If you want more signedness-checking action from gcc, I would think >> -Wsign-compare is worthwhile. Comparing signed vs unsigned values is >> just asking for trouble, and is something we shouldn't be doing. > > While I agree that it's a good idea to evaluate whether we should > enable more gcc warning options in the Valgrind project, I'm not sure > that enabling -Wsign-compare is a good idea. This topic has already > been discussed on the LKML a long time ago. See e.g. > http://lkml.org/lkml/2001/8/30/83. Update: while -Wsign-compare is known for triggering more complaints on valid code than reporting real bugs, as far as I know a list of the Valgrind/VEX source code lines for which -Wsign-compare triggers warnings has not yet been posted. You can find this list below. If anyone wants to start cleaning this up that's fine for me. I do not volunteer however. bb.c:219: warning: comparison between signed and unsigned bb.c:47: warning: comparison between signed and unsigned bb.c:82: warning: comparison between signed and unsigned bbcc.c:101: warning: comparison between signed and unsigned bbcc.c:117: warning: comparison between signed and unsigned bbcc.c:209: warning: comparison between signed and unsigned bbcc.c:285: warning: comparison between signed and unsigned bbcc.c:287: warning: comparison between signed and unsigned bbcc.c:351: warning: comparison between signed and unsigned bbcc.c:54: warning: comparison between signed and unsigned bbcc.c:585: warning: comparison between signed and unsigned bbcc.c:590: warning: comparison between signed and unsigned bbcc.c:818: warning: comparison between signed and unsigned bbcc.c:99: warning: comparison between signed and unsigned callstack.c:104: warning: comparison between signed and unsigned callstack.c:250: warning: comparison between signed and unsigned callstack.c:60: warning: comparison between signed and unsigned callstack.c:94: warning: comparison between signed and unsigned callstack.c:98: warning: comparison between signed and unsigned context.c:208: warning: comparison between signed and unsigned context.c:210: warning: comparison between signed and unsigned context.c:286: warning: signed and unsigned type in conditional expression context.c:292: warning: comparison between signed and unsigned context.c:303: warning: comparison between signed and unsigned context.c:308: warning: comparison between signed and unsigned context.c:334: warning: signed and unsigned type in conditional expression context.c:81: warning: comparison between signed and unsigned debug.c:343: warning: comparison between signed and unsigned debug.c:350: warning: comparison between signed and unsigned debug.c:358: warning: comparison between signed and unsigned debug.c:359: warning: comparison between signed and unsigned debug.c:68: warning: comparison between signed and unsigned dump.c:1528: warning: comparison between signed and unsigned dump.c:1561: warning: comparison between signed and unsigned dump.c:293: warning: comparison between signed and unsigned dump.c:321: warning: comparison between signed and unsigned dump.c:345: warning: comparison between signed and unsigned dump.c:399: warning: comparison between signed and unsigned dump.c:800: warning: comparison between signed and unsigned dump.c:832: warning: comparison between signed and unsigned dump.c:855: warning: comparison between signed and unsigned dump.c:856: warning: comparison between signed and unsigned dump.c:899: warning: comparison between signed and unsigned dump.c:923: warning: comparison between signed and unsigned dump.c:961: warning: comparison between signed and unsigned fn.c:361: warning: comparison between signed and unsigned fn.c:607: warning: comparison between signed and unsigned fn.c:618: warning: comparison between signed and unsigned fn.c:623: warning: comparison between signed and unsigned fn.c:646: warning: comparison between signed and unsigned fn.c:666: warning: comparison between signed and unsigned hg_main.c:1364: warning: comparison between signed and unsigned hg_main.c:2761: warning: comparison between signed and unsigned hg_main.c:4029: warning: comparison between signed and unsigned hg_main.c:842: warning: comparison between signed and unsigned h_main.c:1957: warning: comparison between signed and unsigned h_main.c:3381: warning: comparison between signed and unsigned h_main.c:3400: warning: comparison between signed and unsigned h_main.c:629: warning: comparison between signed and unsigned jumps.c:101: warning: comparison between signed and unsigned jumps.c:53: warning: comparison between signed and unsigned libhb_core.c:1971: warning: comparison between signed and unsigned libhb_core.c:2297: warning: comparison between signed and unsigned libhb_core.c:3445: warning: comparison between signed and unsigned libhb_core.c:3457: warning: comparison between signed and unsigned main.c:676: warning: comparison between signed and unsigned main.c:688: warning: comparison between signed and unsigned m_aspacemgr/aspacemgr-common.c:240: warning: signed and unsigned type in conditional expression m_aspacemgr/aspacemgr-common.c:252: warning: signed and unsigned type in conditional expression m_aspacemgr/aspacemgr-common.c:345: warning: comparison between signed and unsigned m_aspacemgr/aspacemgr-common.c:375: warning: comparison between signed and unsigned m_aspacemgr/aspacemgr-linux.c:761: warning: comparison between signed and unsigned mc_errors.c:1274: warning: comparison between signed and unsigned mc_errors.c:1285: warning: comparison between signed and unsigned mc_errors.c:297: warning: comparison between signed and unsigned mc_leakcheck.c:631: warning: comparison between signed and unsigned mc_leakcheck.c:640: warning: comparison between signed and unsigned mc_machine.c:118: warning: comparison between signed and unsigned mc_machine.c:518: warning: comparison between signed and unsigned mc_machine.c:519: warning: comparison between signed and unsigned mc_machine.c:520: warning: comparison between signed and unsigned mc_machine.c:521: warning: comparison between signed and unsigned mc_machine.c:522: warning: comparison between signed and unsigned mc_machine.c:523: warning: comparison between signed and unsigned mc_machine.c:524: warning: comparison between signed and unsigned mc_machine.c:525: warning: comparison between signed and unsigned mc_machine.c:526: warning: comparison between signed and unsigned mc_machine.c:527: warning: comparison between signed and unsigned mc_machine.c:528: warning: comparison between signed and unsigned mc_machine.c:529: warning: comparison between signed and unsigned mc_machine.c:530: warning: comparison between signed and unsigned mc_machine.c:531: warning: comparison between signed and unsigned mc_machine.c:532: warning: comparison between signed and unsigned mc_machine.c:533: warning: comparison between signed and unsigned mc_machine.c:539: warning: comparison between signed and unsigned mc_machine.c:541: warning: comparison between signed and unsigned mc_machine.c:543: warning: comparison between signed and unsigned mc_machine.c:545: warning: comparison between signed and unsigned mc_machine.c:547: warning: comparison between signed and unsigned mc_machine.c:549: warning: comparison between signed and unsigned mc_machine.c:551: warning: comparison between signed and unsigned mc_machine.c:553: warning: comparison between signed and unsigned mc_machine.c:627: warning: comparison between signed and unsigned mc_machine.c:628: warning: comparison between signed and unsigned mc_machine.c:629: warning: comparison between signed and unsigned mc_machine.c:630: warning: comparison between signed and unsigned mc_machine.c:631: warning: comparison between signed and unsigned mc_machine.c:632: warning: comparison between signed and unsigned mc_machine.c:633: warning: comparison between signed and unsigned mc_machine.c:634: warning: comparison between signed and unsigned mc_machine.c:640: warning: comparison between signed and unsigned mc_machine.c:642: warning: comparison between signed and unsigned mc_machine.c:644: warning: comparison between signed and unsigned mc_machine.c:646: warning: comparison between signed and unsigned mc_machine.c:648: warning: comparison between signed and unsigned mc_machine.c:650: warning: comparison between signed and unsigned mc_machine.c:652: warning: comparison between signed and unsigned mc_machine.c:654: warning: comparison between signed and unsigned mc_main.c:3800: warning: comparison between signed and unsigned mc_main.c:4538: warning: comparison between signed and unsigned mc_main.c:4629: warning: comparison between signed and unsigned m_commandline.c:71: warning: comparison between signed and unsigned m_coredump/coredump-elf.c:437: warning: comparison between signed and unsigned mc_translate.c:192: warning: comparison between signed and unsigned mc_translate.c:209: warning: comparison between signed and unsigned mc_translate.c:235: warning: comparison between signed and unsigned mc_translate.c:246: warning: comparison between signed and unsigned mc_translate.c:3831: warning: comparison between signed and unsigned m_debuginfo/debuginfo.c:1457: warning: comparison between signed and unsigned m_debuginfo/debuginfo.c:1774: warning: comparison between signed and unsigned m_debuginfo/debuginfo.c:2473: warning: comparison between signed and unsigned m_debuginfo/debuginfo.c:2978: warning: comparison between signed and unsigned m_debuginfo/debuginfo.c:3102: warning: comparison between signed and unsigned m_debuginfo/debuginfo.c:535: warning: comparison between signed and unsigned m_debuginfo/debuginfo.c:749: warning: comparison between signed and unsigned m_debuginfo/readdwarf.c:1186: warning: comparison between signed and unsigned m_debuginfo/readdwarf.c:122: warning: comparison between signed and unsigned m_debuginfo/readdwarf.c:3616: warning: comparison between signed and unsigned m_debuginfo/readdwarf.c:3741: warning: comparison between signed and unsigned m_debuginfo/readdwarf.c:504: warning: comparison between signed and unsigned m_debuginfo/readelf.c:1208: warning: comparison between signed and unsigned m_debuginfo/readelf.c:1224: warning: comparison between signed and unsigned m_debuginfo/readelf.c:1232: warning: comparison between signed and unsigned m_debuginfo/readelf.c:1265: warning: comparison between signed and unsigned m_debuginfo/readelf.c:1307: warning: comparison between signed and unsigned m_debuginfo/readelf.c:1325: warning: comparison between signed and unsigned m_debuginfo/storage.c:1370: warning: comparison between signed and unsigned m_debuginfo/storage.c:1397: warning: comparison between signed and unsigned m_execontext.c:140: warning: comparison between signed and unsigned m_execontext.c:192: warning: comparison between signed and unsigned m_execontext.c:193: warning: comparison between signed and unsigned m_execontext.c:194: warning: comparison between signed and unsigned m_execontext.c:203: warning: comparison between signed and unsigned m_execontext.c:204: warning: comparison between signed and unsigned m_execontext.c:205: warning: comparison between signed and unsigned m_execontext.c:340: warning: comparison between signed and unsigned m_execontext.c:358: warning: comparison between signed and unsigned m_execontext.c:402: warning: comparison between signed and unsigned m_hashtable.c:125: warning: comparison between signed and unsigned m_hashtable.c:248: warning: comparison between signed and unsigned m_initimg/initimg-linux.c:792: warning: comparison between signed and unsigned m_libcbase.c:299: warning: comparison between signed and unsigned m_libcbase.c:590: warning: comparison between signed and unsigned m_libcbase.c:590: warning: signed and unsigned type in conditional expression m_libcfile.c:136: warning: signed and unsigned type in conditional expression m_libcfile.c:278: warning: signed and unsigned type in conditional expression m_libcfile.c:365: warning: signed and unsigned type in conditional expression m_libcfile.c:373: warning: signed and unsigned type in conditional expression m_libcfile.c:440: warning: comparison between signed and unsigned m_libcfile.c:446: warning: comparison between signed and unsigned m_libcfile.c:692: warning: signed and unsigned type in conditional expression m_libcfile.c:697: warning: signed and unsigned type in conditional expression m_libcfile.c:723: warning: signed and unsigned type in conditional expression m_libcfile.c:728: warning: signed and unsigned type in conditional expression m_libcfile.c:753: warning: signed and unsigned type in conditional expression m_libcfile.c:759: warning: signed and unsigned type in conditional expression m_libcfile.c:778: warning: signed and unsigned type in conditional expression m_libcfile.c:784: warning: signed and unsigned type in conditional expression m_libcfile.c:803: warning: signed and unsigned type in conditional expression m_libcfile.c:809: warning: signed and unsigned type in conditional expression m_libcfile.c:831: warning: signed and unsigned type in conditional expression m_libcfile.c:838: warning: signed and unsigned type in conditional expression m_libcprint.c:100: warning: comparison between signed and unsigned m_libcprint.c:168: warning: comparison between signed and unsigned m_libcprint.c:94: warning: comparison between signed and unsigned m_libcproc.c:234: warning: signed and unsigned type in conditional expression m_libcproc.c:355: warning: signed and unsigned type in conditional expression m_libcproc.c:365: warning: signed and unsigned type in conditional expression m_libcproc.c:475: warning: comparison between signed and unsigned m_libcproc.c:477: warning: comparison between signed and unsigned m_libcsignal.c:209: warning: signed and unsigned type in conditional expression m_machine.c:117: warning: comparison between signed and unsigned m_machine.c:141: warning: comparison between signed and unsigned m_main.c:1036: warning: comparison between signed and unsigned m_main.c:1059: warning: comparison between signed and unsigned m_main.c:271: warning: comparison between signed and unsigned m_mallocfree.c:1093: warning: comparison between signed and unsigned m_mallocfree.c:1096: warning: comparison between signed and unsigned m_mallocfree.c:1121: warning: comparison between signed and unsigned m_mallocfree.c:1126: warning: comparison between signed and unsigned m_mallocfree.c:1128: warning: comparison between signed and unsigned m_mallocfree.c:1136: warning: comparison between signed and unsigned m_mallocfree.c:1140: warning: comparison between signed and unsigned m_mallocfree.c:1149: warning: comparison between signed and unsigned m_options.c:220: warning: comparison between signed and unsigned ms_main.c:1035: warning: comparison between signed and unsigned ms_main.c:1038: warning: comparison between signed and unsigned ms_main.c:1123: warning: comparison between signed and unsigned ms_main.c:1134: warning: comparison between signed and unsigned ms_main.c:1135: warning: comparison between signed and unsigned ms_main.c:1138: warning: comparison between signed and unsigned ms_main.c:1149: warning: comparison between signed and unsigned ms_main.c:1169: warning: comparison between signed and unsigned ms_main.c:1198: warning: comparison between signed and unsigned ms_main.c:1218: warning: comparison between signed and unsigned ms_main.c:1324: warning: comparison between signed and unsigned ms_main.c:1370: warning: comparison between signed and unsigned ms_main.c:1448: warning: comparison between signed and unsigned ms_main.c:1450: warning: comparison between signed and unsigned ms_main.c:1704: warning: comparison between signed and unsigned ms_main.c:1992: warning: comparison between signed and unsigned ms_main.c:2118: warning: comparison between signed and unsigned ms_main.c:2216: warning: comparison between signed and unsigned ms_main.c:645: warning: comparison between signed and unsigned ms_main.c:671: warning: comparison between signed and unsigned ms_main.c:707: warning: comparison between signed and unsigned ms_main.c:756: warning: comparison between signed and unsigned ms_main.c:824: warning: comparison between signed and unsigned ms_main.c:850: warning: comparison between signed and unsigned ms_main.c:881: warning: comparison between signed and unsigned ms_main.c:948: warning: comparison between signed and unsigned ms_main.c:952: warning: comparison between signed and unsigned m_stacktrace.c:146: warning: comparison between signed and unsigned m_stacktrace.c:219: warning: comparison between signed and unsigned m_stacktrace.c:561: warning: comparison between signed and unsigned m_syscall.c:61: warning: comparison between signed and unsigned m_syscall.c:75: warning: comparison between signed and unsigned m_syswrap/syswrap-generic.c:3609: warning: comparison between signed and unsigned m_syswrap/syswrap-generic.c:3610: warning: comparison between signed and unsigned m_syswrap/syswrap-generic.c:568: warning: comparison between signed and unsigned m_syswrap/syswrap-generic.c:730: warning: comparison between signed and unsigned m_syswrap/syswrap-generic.c:757: warning: comparison between signed and unsigned m_syswrap/syswrap-linux.c:1339: warning: comparison between signed and unsigned m_syswrap/syswrap-linux.c:1372: warning: comparison between signed and unsigned m_syswrap/syswrap-linux.c:2722: warning: comparison between signed and unsigned m_translate.c:1378: warning: comparison between signed and unsigned m_transtab.c:1341: warning: comparison between signed and unsigned m_transtab.c:1372: warning: comparison between signed and unsigned m_transtab.c:1379: warning: comparison between signed and unsigned m_transtab.c:1381: warning: comparison between signed and unsigned m_transtab.c:1390: warning: comparison between signed and unsigned m_transtab.c:1401: warning: comparison between signed and unsigned m_transtab.c:1584: warning: comparison between signed and unsigned m_transtab.c:1614: warning: comparison between signed and unsigned m_transtab.c:1617: warning: comparison between signed and unsigned m_transtab.c:916: warning: comparison between signed and unsigned m_ume/elf.c:143: warning: comparison between signed and unsigned m_ume/elf.c:253: warning: comparison between signed and unsigned m_ume/main.c:110: warning: comparison between signed and unsigned priv/host-amd64/hdefs.c:2003: warning: comparison between signed and unsigned priv/host-amd64/isel.c:157: warning: comparison between signed and unsigned priv/host-amd64/isel.c:165: warning: comparison between signed and unsigned priv/host-amd64/isel.c:278: warning: comparison between signed and unsigned priv/host-arm/isel.c:97: warning: comparison between signed and unsigned priv/host-generic/reg_alloc2.c:1021: warning: comparison between signed and unsigned priv/host-generic/reg_alloc2.c:1067: warning: comparison between signed and unsigned priv/host-generic/reg_alloc2.c:1068: warning: comparison between signed and unsigned priv/host-generic/reg_alloc2.c:1092: warning: comparison between signed and unsigned priv/host-ppc/hdefs.c:2565: warning: signed and unsigned type in conditional expression priv/host-ppc/hdefs.c:2638: warning: signed and unsigned type in conditional expression priv/host-ppc/hdefs.c:281: warning: comparison between signed and unsigned priv/host-ppc/isel.c:290: warning: comparison between signed and unsigned priv/host-ppc/isel.c:299: warning: comparison between signed and unsigned priv/host-x86/isel.c:189: warning: comparison between signed and unsigned priv/host-x86/isel.c:196: warning: comparison between signed and unsigned priv/ir/irdefs.c:1899: warning: comparison between signed and unsigned priv/ir/irdefs.c:2147: warning: comparison between signed and unsigned priv/ir/irdefs.c:2621: warning: comparison between signed and unsigned priv/ir/irdefs.c:2633: warning: comparison between signed and unsigned priv/ir/irdefs.c:830: warning: comparison between signed and unsigned priv/main/vex_main.c:470: warning: comparison between signed and unsigned sg_main.c:344: warning: comparison between signed and unsigned Bart. |