Commits
- Commit:
1bfec89b997c9544100128fec6e0b0c3757fdd11
- From:
- Xi Wang <xi.wang@gmail.com>
- Via:
- Russ Cox <rsc@swtch.com>
- Date:
rc: avoid undefined C
There are two bugs in pdec() on INT_MIN:
* wrong output.
`n = 1-n' should be `n = -1-n' when n is INT_MIN.
* infinite loop.
gcc optimizes `if(n>=0)' into `if(true)' because `-INT_MIN' (signed integer overflow) is undefined behavior in C, and gcc assumes the negation of a negative number must be positive. The resulting binary keeps printing '-' forever given INT_MIN.
Try the simplified pdec.c below.
$ gcc pdec.c
$ ./a.out -2147483648
--214748364*
$ gcc pdec.c -O2
$ ./a.out -2147483648
<infinite loop>
$ gcc pdec.c -O2 -D__PATCH__
$ ./a.out -2147483648
-2147483648
=== pdec.c ===
#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
#define io void
void pchr(io *f, int c)
{
putchar(c);
}
void pdec(io *f, int n)
{
if(n<0){
#ifndef __PATCH__
n=-n;
if(n>=0){
pchr(f, '-');
pdec(f, n);
return;
}
/* n is two's complement minimum integer */
n = 1-n;
#else
if(n!=INT_MIN){
pchr(f, '-');
pdec(f, -n);
return;
}
/* n is two's complement minimum integer */
n = -(INT_MIN+1);
#endif
pchr(f, '-');
pdec(f, n/10);
pchr(f, n%10+'1');
return;
}
if(n>9)
pdec(f, n/10);
pchr(f, n%10+'0');
}
int main(int argc, char **argv)
{
int n = atoi(argv[1]);
pdec(NULL, n);
putchar('\n');
}
R=rsc
CC=plan9port.codebot
https://codereview.appspot.com/7241055
- Commit:
2894c70c08fe2e1e6b90b0ff4c3fa5e929625647
- From:
- rsc <devnull@localhost>
- Date:
do not redefine rewind
- Commit:
40402738daf5ef541ffa358c17c5afc69a9d0c5e
- From:
- rsc <devnull@localhost>
- Date:
more memory errors (valgrind)
- Commit:
c8f538425f4e92e1e438b9bd25cb08e250a93d5b
- From:
- rsc <devnull@localhost>
- Date:
sync with plan 9
- Commit:
315e309098f8b9f6ee8f869ceef8ea0aacce6c60
- From:
- rsc <devnull@localhost>
- Date:
Remove debugging print.
- Commit:
0b917997919b470edc949b0cf7af62f160885f5e
- From:
- rsc <devnull@localhost>
- Date:
Fix rc not to bus error on Mac OS X.
Don't print about child notes either.
- Commit:
f08fdedcee12c06e3ce9ac9bec363915978e8289
- From:
- rsc <devnull@localhost>
- Date:
Plan 9's rc.
not a clear win over byron's,
but at least it has the right syntax.