This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug other/60843] New: Documentation: 4.5 Integers/C99 6.3.1.3 ("reduce modulo 2^N")
- From: "kdevel at vogtner dot de" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: Tue, 15 Apr 2014 10:22:35 +0000
- Subject: [Bug other/60843] New: Documentation: 4.5 Integers/C99 6.3.1.3 ("reduce modulo 2^N")
- Auto-submitted: auto-generated
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=60843
Bug ID: 60843
Summary: Documentation: 4.5 Integers/C99 6.3.1.3 ("reduce
modulo 2^N")
Product: gcc
Version: 4.8.2
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: other
Assignee: unassigned at gcc dot gnu.org
Reporter: kdevel at vogtner dot de
Section 4.5 states [1]:
"The result of, or the signal raised by, converting an integer to a signed
integer type when the value cannot be represented in an object of that type
(C90 6.2.1.2, C99 6.3.1.3).
For conversion to a type of width N, the value is reduced modulo 2^N to be
within range of the type; no signal is raised."
Reduce A modulo M usually means find the least integer R in the range [0, M -
1] such that A is congruent R modulo M. But this is not what gcc compiled
programs do on i686/x86_64: One finds e.g. (int) 2147483649u == -2147483647.
The original bits are taken "as is", which equivalents to *subtraction* of 2^N
(N=32) giving -2147483647.
[1] http://gcc.gnu.org/onlinedocs/gcc-4.8.2/gcc/Integers-implementation.html