This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug c/52661] negative maxint for long long gives warning
- From: "jmichae3 at yahoo dot com" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: Thu, 22 Mar 2012 21:45:33 +0000
- Subject: [Bug c/52661] negative maxint for long long gives warning
- Auto-submitted: auto-generated
- References: <bug-52661-4@http.gcc.gnu.org/bugzilla/>
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=52661
--- Comment #14 from Jim Michaels <jmichae3 at yahoo dot com> 2012-03-22 21:45:33 UTC ---
OK, given your argument, let's look at -32768 for a short.
it's just too big because 32768 is larger than the size of an int, so it's
considered unsigned, right? wrong. no warning message.
which is what I have been trying to say. your argument doesn't hold water.
this value is within the proper size for an int. it's the minimum number of an
int.
-32768 is the one value that is valid which doesn't fit most people's use of an
int, which is only the range -32767..32767. that is NOT the full range of a
short.
I am not sure why you are rooting for the compiler's way of doing things, it's
broken. I understand what you are saying, I also understand that assuming the
value is unsigned because it's on the edge is wrong. how about an if
statement, like
if (-1==sign && 9223372036854775808==mantissa) {
datum=mantissa*sign;
} else if (1==sign && 9223372036854775808==mantissa) {
datum=mantissa;
} else if (-1==sign && mantissa > 9223372036854775808) {
printf("error:....\n");
} else if (1==sign && mantissa > 9223372036854775808) {
printf("error:....\n");
}
why not just use an unsigned long long to hold the mantissa and keep the sign
as a bool or store it as another number as +1 or -1, and do some sort of range
check to make sure the number input is valid? there are multiple ways