[Bug c/60619] New: new -solve-sign-conflicts at -Wsign-compare cases (easy work)
aleks at physik dot tu-berlin.de
gcc-bugzilla@gcc.gnu.org
Sat Mar 22 00:52:00 GMT 2014
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=60619
Bug ID: 60619
Summary: new -solve-sign-conflicts at -Wsign-compare cases
(easy work)
Product: gcc
Version: 4.8.2
Status: UNCONFIRMED
Severity: enhancement
Priority: P3
Component: c
Assignee: unassigned at gcc dot gnu.org
Reporter: aleks at physik dot tu-berlin.de
GCC detects sign problems (-Wconversion -Wsign-compare -Wsign-conversion).
int i; unsigned u; if (u == i) // warning sign ..
my gcc feature suggestion: new -solve-sign-conflicts
==> some problems could be solved by gcc alone (if switch).
I could provide compare functions, that are used by gcc in case of above
warning and the new switch.
// e.g. 3 compare functions, handle signs
inline int cmp_su32_equal(int s, uint32 u) { /* == */
const int o = s | (int) u;
if (s != (int) u) return 0;
if (o < 0) return 0; // (s<0) || (u>INT_MAX)
return 1;
}
inline int cmp_su32_lt(int s, uint32 u) { /* < */
const int o = s | (int) u;
if (o < 0) return 1; // (s<0) || (u>INT_MAX)
if (s < (int) u) return 1;
return 0; // return (s < (int) u);
}
inline int cmp_su32_gt(int s, uint32 u) { /* > */
const int o = s | (int) u;
if (o < 0) return 0; // (s<0) || (u>INT_MAX)
if (s > (int) u) return 1;
return 0; // return (s > (int) u);
}
More information about the Gcc-bugs
mailing list