Merge pull request #90 from xexyl/bugs
Rename BUGS.md -> bugs.md and greatly improve it
This commit is contained in:
7 files changed
+224
-70
No files matched your search
@@ -28,5 +28,6 @@
|
||||
/archive/2018/
|
||||
/archive/2019/
|
||||
/archive/2020/
|
||||
/bugs.html
|
||||
mkentry
|
||||
iocccsize
|
||||
@@ -6,8 +6,8 @@ Dave Decot
|
||||
|
||||
make all
|
||||
|
||||
NOTE: [Yusuke Endoh](/winners.html#Yusuke_Endoh) supplied a patch so that this
|
||||
entry would compile with gcc.
|
||||
[Yusuke Endoh](/winners.html#Yusuke_Endoh) supplied a patch so that this
|
||||
entry would compile with gcc. Thank you Yusuke!
|
||||
|
||||
NOTE: this entry requires a compiler that supports `-traditional-cpp`. Note that
|
||||
clang does not support it and in macOS gcc is actually clang so this will not
|
||||
|
||||
@@ -12,7 +12,10 @@ Robbert van Renesse
|
||||
|
||||
./mullender
|
||||
|
||||
NOTE: This entry is likely to fail and/or dump core on modern computers.
|
||||
> NOTE: If your machine is not a Vax-11 or pdp-11, this program will
|
||||
> not execute correctly. In later years, machine dependent
|
||||
> code was discouraged.
|
||||
|
||||
|
||||
## Judges' comments:
|
||||
|
||||
@@ -25,10 +28,6 @@ be non machine specific.
|
||||
|
||||
This program was selected for the 1987 t-shirt collection.
|
||||
|
||||
> NOTE: If your machine is not a Vax-11 or pdp-11, this program will
|
||||
> not execute correctly. In later years, machine dependent
|
||||
> code was discouraged.
|
||||
|
||||
The C startup routine (via crt0.o) transfers control to a location
|
||||
named main. In this case, main just happens to be in the data area.
|
||||
The array of shorts, which has been further obfuscated by use of
|
||||
|
||||
+5
-2
@@ -13,8 +13,7 @@
|
||||
|
||||
[Cody Boone Ferguson](/winners.html#Cody_Boone_Ferguson) fixed this so that it
|
||||
would work with macOS. Once it could compile it additionally segfaulted under
|
||||
macOS (it did not under linux) which he also fixed. Thank you Cody for your
|
||||
assistance!
|
||||
macOS which he also fixed. Thank you Cody for your assistance!
|
||||
|
||||
|
||||
### To run
|
||||
@@ -24,6 +23,10 @@ assistance!
|
||||
NOTE: on modern systems this might be hard to see it solve it in running time as
|
||||
it goes so quickly but it will still show the result after execution.
|
||||
|
||||
NOTE: sometimes the program needs you to press enter a second time to continue
|
||||
solving the maze.
|
||||
|
||||
|
||||
## Judges' comments
|
||||
|
||||
This could be used as the basis of an a-maze-ing screen exerciser.
|
||||
|
||||
+43
-43
@@ -17,69 +17,69 @@
|
||||
|
||||
## Judges' comments
|
||||
|
||||
Also try:
|
||||
Also try:
|
||||
|
||||
sh ./clock2
|
||||
|
||||
And for a good time, try:
|
||||
And for a good time, try:
|
||||
|
||||
sh ./clock3
|
||||
|
||||
Time and time again, Brian Westley seems to come up with a winner!
|
||||
We are amazed at how much is being done with only one relatively
|
||||
short line. We think you will as well if you take the time to
|
||||
understand it.
|
||||
Time and time again, Brian Westley seems to come up with a winner!
|
||||
We are amazed at how much is being done with only one relatively
|
||||
short line. We think you will as well if you take the time to
|
||||
understand it.
|
||||
|
||||
## Author's comments
|
||||
|
||||
This 1-line program allows various analog ASCII clocks
|
||||
to print out the time; the ASCII clock is built from
|
||||
the command line arguments, so many different types of
|
||||
clocks can be generated. Three different scripts are
|
||||
supplied to print out a grandfather clock, a mantle
|
||||
clock that runs backwards, and a linear-style clock.
|
||||
(they are clock1, clock2, and clock3)
|
||||
This 1-line program allows various analog ASCII clocks
|
||||
to print out the time; the ASCII clock is built from
|
||||
the command line arguments, so many different types of
|
||||
clocks can be generated. Three different scripts are
|
||||
supplied to print out a grandfather clock, a mantle
|
||||
clock that runs backwards, and a linear-style clock.
|
||||
(they are `clock1`, `clock2`, and `clock3`)
|
||||
|
||||
The program makes the following (possibly non-portable) assumptions:
|
||||
The program makes the following (possibly non-portable) assumptions:
|
||||
|
||||
1) Command line strings can be written to
|
||||
1. Command line strings can be written to
|
||||
|
||||
2) argv[0] can be written to as if it were a long *
|
||||
2. `argv[0]` can be written to as if it were a `long *`
|
||||
|
||||
3) The first three elements of the struct * returned by
|
||||
localtime() are seconds, minutes, hours, and all are ints
|
||||
3. The first three elements of the struct * returned by localtime() are seconds,
|
||||
minutes, hours, and all are ints
|
||||
|
||||
4) My sample scripts assume ASCII, though this is not
|
||||
inherent in the code, just my sample scripts
|
||||
4. My sample scripts assume ASCII, though this is not inherent in the code, just
|
||||
my sample scripts
|
||||
|
||||
These assumptions are pretty reasonable. 2) can be eliminated
|
||||
by makes the code larger.
|
||||
These assumptions are pretty reasonable. 2) can be eliminated
|
||||
by makes the code larger.
|
||||
|
||||
The code is simple; the arguments passed are:
|
||||
The code is simple; the arguments passed are:
|
||||
|
||||
prog minute_map hour_map hand_symbol clock_image
|
||||
|
||||
The program merely takes the minute (0-59) and the hour (0-23)
|
||||
values, looks up the offsets in minute_map and hour_map
|
||||
and writes the hand_symbol for each into the clock_image
|
||||
string. This string is then printed.
|
||||
The program merely takes the minute (0-59) and the hour (0-23)
|
||||
values, looks up the offsets in `minute_map` and `hour_map`
|
||||
and writes the `hand_symbol` for each into the `clock_image`
|
||||
string. This string is then printed.
|
||||
|
||||
The for() loop starts by calling time() with argv[0], so
|
||||
the time value (a long) is written into the program name.
|
||||
The for() control value is argc, which starts at 5, but
|
||||
the /=2 statement is executed before the test, so the for()
|
||||
loop is executed twice, with h=2, then h=1 (for hour & minute).
|
||||
The for() loop starts by calling time() with argv[0], so
|
||||
the time value (a long) is written into the program name.
|
||||
The for() control value is argc, which starts at 5, but
|
||||
the /=2 statement is executed before the test, so the for()
|
||||
loop is executed twice, with h=2, then h=1 (for hour & minute).
|
||||
|
||||
The statement of the for() loop takes the hour or minute
|
||||
field of the struct returned by localtime() by casting it
|
||||
to an int* and dereferencing element [h]. It is slightly
|
||||
smaller to use the trick h[(int*)localtime(*m)] instead of
|
||||
((int*)localtime(*m))[h].
|
||||
The statement of the for() loop takes the hour or minute
|
||||
field of the struct returned by localtime() by casting it
|
||||
to an int* and dereferencing element [h]. It is slightly
|
||||
smaller to use the trick `h[(int*)localtime(*m)]` instead of
|
||||
`((int*)localtime(*m))[h]`.
|
||||
|
||||
This value is in turn indexed into the hour_map or minute_map
|
||||
parameter to determine where the 'hand' symbol should be
|
||||
written into the clock_image.
|
||||
This value is in turn indexed into the `hour_map` or `minute_map`
|
||||
parameter to determine where the 'hand' symbol should be
|
||||
written into the `clock_image`.
|
||||
|
||||
Note that the hands move in a quantum fashion; 3:59 looks
|
||||
deceptively like 2:59, since the hour hand will be at the 3
|
||||
position. It won't move until both hands click over at 4:00.
|
||||
Note that the hands move in a quantum fashion; 3:59 looks
|
||||
deceptively like 2:59, since the hour hand will be at the 3
|
||||
position. It won't move until both hands click over at 4:00.
|
||||
@@ -1,18 +0,0 @@
|
||||
# BUGS and (mis)FEATURES
|
||||
|
||||
There are a number of known problems with IOCCC winners: many of
|
||||
which have to do with differences between today's compiler environments
|
||||
and those of today. In some cases the original code has a bug, some
|
||||
of which were recently discovered. In some cases attempt to port
|
||||
older code to more modern environments introduced bugs.
|
||||
|
||||
The following is a known list of **BUGS and (mis)FEATURES** in IOCCC winners.
|
||||
|
||||
Can you fix/improve them? You are **VERY WELCOME** to try.
|
||||
Please submit your fixes fix a [GitHub pull request](https://github.com/ioccc-src/temp-test-ioccc/pulls).
|
||||
|
||||
We will be happy to credit those who submit successful [GitHub pull requests](https://github.com/ioccc-src/temp-test-ioccc/pulls) in the entry's _README.md_.
|
||||
|
||||
## 1984/mullender
|
||||
|
||||
This entry is likely to fail and/or dump core on any computer other.
|
||||
@@ -0,0 +1,169 @@
|
||||
# BUGS and (mis)FEATURES
|
||||
|
||||
There are a number of known problems with IOCCC winners: many of
|
||||
which have to do with differences between today's compiler environments
|
||||
and those of today. In some cases the original code has a bug, some
|
||||
of which were recently discovered. In some cases attempt to port
|
||||
older code to more modern environments introduced bugs.
|
||||
|
||||
The following is a known list of **BUGS and (mis)FEATURES** in IOCCC winners.
|
||||
|
||||
Can you fix/improve them? You are **VERY WELCOME** to try.
|
||||
Please submit your fixes fix a [GitHub pull request](https://github.com/ioccc-src/temp-test-ioccc/pulls).
|
||||
|
||||
We will be happy to credit those who submit successful [GitHub pull
|
||||
requests](https://github.com/ioccc-src/temp-test-ioccc/pulls) in the entry's
|
||||
_README.md_ file. If you're a previous winner we will add a link to your winning
|
||||
entries in the file (if you're not we can add a link to your personal website if
|
||||
you have one if you like).
|
||||
|
||||
|
||||
## Known bugs that are OK to fix
|
||||
|
||||
### [1995/cdua](1995/cdua/cdua.c) ([README.md](1995/cdua/README.md))
|
||||
|
||||
This did not compile under macOS and after it did it crashed.
|
||||
[Cody Boone Ferguson](/winners.html#Cody_Boone_Ferguson) fixed this but he
|
||||
observed that sometimes the program asks the user to hit return a second time to
|
||||
resume solving the maze. It does not always happen. It doesn't seem to be
|
||||
related to making it work under macOS as all that did was removing some invalid
|
||||
prototypes and use `printf()` instead of the invalid pointer to it (incompatible
|
||||
type).
|
||||
|
||||
|
||||
### [2014/vik](2014/vik/prog.c) ([README.md](2014/vik/README.md))
|
||||
|
||||
[Cody Boone Ferguson](/winners.html#Cody_Boone_Ferguson) discovered a bug that
|
||||
shows itself in some cases (it works in others) when working on his [2020 Enigma
|
||||
machine](2020/ferguson2/prog.c) entry. See his
|
||||
[README.md](2020/ferguson2/README.md) for details (search for `vik` in the
|
||||
file).
|
||||
|
||||
He provides a tip in testing the problem: it might help to use the Enigma
|
||||
machine to find problems as it will allow you to verify what is correct and what
|
||||
is not. Again see his README.md for details.
|
||||
|
||||
## Compiler specific requirements on type of args to main
|
||||
|
||||
The following entries have a problem in that the args to main() are not of a
|
||||
specific type due this being allowed in earlier C. This shows itself in some
|
||||
compilers like clang. Looking at the source code of `clang` there is no way to
|
||||
override this requirement so these entries will fail to compile with clang.
|
||||
|
||||
Please be aware that gcc under macOS is clang despite the fact it might appear
|
||||
to be gcc: no symlink and both gcc and clang exist.
|
||||
|
||||
[Cody Boone Ferguson](/winners.html#Cody_Boone_Ferguson) has fixed several but
|
||||
there are some he has not yet fixed and we welcome your help!
|
||||
|
||||
A tip: in the older days args to main() not given a type were used as ints but
|
||||
when they're required to be `char **` this can cause a problem. In some cases
|
||||
Cody was able to use a `char *` inside main() (see
|
||||
[1989/tromp/tromp.c](1989/tromp/tromp.c) for an example). In other cases he was
|
||||
able to dereference the pointers to be used like an int. Some might require
|
||||
additional functions are added.
|
||||
|
||||
For one-liners please keep the file one line!
|
||||
|
||||
You may provide an alt version for the fix as well.
|
||||
|
||||
|
||||
### [1989/westley](1989/westley/westley.c) ([README.md](1989/westley/README.md))
|
||||
|
||||
Although [Cody Boone Ferguson](/winners.html#Cody_Boone_Ferguson) fixed this for
|
||||
some of the versions that are generated (see below tip) it will not work for
|
||||
all. He noted that trying to fix it in some cases causes a segfault and in other
|
||||
cases it fails to generate some of the files (others are okay) at all (empty
|
||||
files).
|
||||
|
||||
He gives a tip on the problem: main() requires the second, third and fourth arg
|
||||
to be a `char **`. This didn't use to be the case and some compilers like gcc
|
||||
don't complain. He was able to get `main()` to be correct BUT a feature is that
|
||||
it uses ROT13 to decrypt the function `znva` to be main in generated files.
|
||||
Since that function does not have the correct types when converted to main() it
|
||||
fails to compile. But as he said changing the type causes either a segfault or
|
||||
files not generated at all. `ver1`, `ver2` and `ver3` are the problematic ones.
|
||||
The segfault happens when running the main program.
|
||||
|
||||
This will not be a problem with gcc.
|
||||
|
||||
## INABIAF (it's not a bug it's a feature)
|
||||
|
||||
The following entries should NOT be touched: they are system specific by design
|
||||
but are noteworthy nonetheless.
|
||||
|
||||
|
||||
### [1984/mullender](1984/mullender/mullender.c) ([README.md](1984/mullender/README.md))
|
||||
|
||||
This entry is likely to fail and/or dump core on any computer other than a
|
||||
Vax-11 or pdp-11. In 1984 machine dependent code was allowed.
|
||||
|
||||
### [1986/august](1986/august/august.c) ([README.md](1986/august/README.md))
|
||||
|
||||
This entry is known to segfault after printing its output. It was documented by
|
||||
the judges and needn't be fixed.
|
||||
|
||||
### [1996/westley](1996/westley/westley.c) ([README.md](1996/westley/README.md))
|
||||
|
||||
This entry will possibly segfault even when showing the proper output in the
|
||||
`clock1`, `clock2` and `clock3` scripts. Though this doesn't need to be fixed as
|
||||
long as it works right it wouldn't hurt to fix it either.
|
||||
|
||||
|
||||
### [2019/endoh](2019/endoh/prog.c) ([README.md](2019/endoh/README.md))
|
||||
|
||||
As a backtrace quine this entry is SUPPOSED to segfault so this should not be
|
||||
touched either.
|
||||
|
||||
### [2020/ferguson1](2020/ferguson1/prog.c) ([README.md](2020/ferguson1/README.md))
|
||||
|
||||
There are some things that might appear to be bugs but are actually features or
|
||||
things that are misinterpreted as bugs. See his
|
||||
[bugs.md](2020/ferguson1/bugs.md) and
|
||||
[troubleshooting.md](2020/ferguson1/troubleshooting.md) files for details.
|
||||
|
||||
### ... more to be added later ...
|
||||
|
||||
## Mis-features that should not be fixed
|
||||
|
||||
The following entries should not be touched either as although it might seem
|
||||
wrong they are not.
|
||||
|
||||
### [1986/holloway](1986/holloway/holloway.c) ([README.md](1986/holloway/README.md))
|
||||
|
||||
When compiling this entry you might get an incompatible pointer type warning but
|
||||
this should be ignored. When [Cody Boone
|
||||
Ferguson](/winners.html#Cody_Boone_Ferguson) fixed this he experimented with the
|
||||
alternatives and it did not work. Thus if you see something like:
|
||||
|
||||
```c
|
||||
[holloway.c:15:11: warning: incompatible pointer types initializing 'char *' with an expression of type 'char **'; dereference with * [-Wincompatible-pointer-types]
|
||||
char *t = s;
|
||||
^ ~
|
||||
*
|
||||
|
||||
```
|
||||
|
||||
it is NOT a problem and should not be changed.
|
||||
|
||||
## Entries that require a compiler that support `-traditional-cpp`
|
||||
|
||||
The following entries need a compiler that support `-traditional-cpp`. `gcc`
|
||||
supports this but `clang` does not. Please be advised that `gcc` under macOS is
|
||||
actually gcc if it looks like it's gcc (two different binaries).
|
||||
|
||||
- [1984/decot](1984/decot/decot.c) ([README.md](1984/decot/README.md))
|
||||
- [1985/sicherman](1985/sicherman/sicherman.c) ([README.md](1985/sicherman/README.md))
|
||||
- [1986/wall/wall.c](1986/wall/wall.c) ([README.md](1986/wall/README.md))
|
||||
- [1988/dale](1988/dale/dale.c) ([README.md](1988/dale/README.md))
|
||||
|
||||
.. more to be added as they are discovered ..
|
||||
|
||||
|
||||
## Entries that can no longer compile
|
||||
|
||||
.. entries to be added later ..
|
||||
|
||||
## Entries that can compile but crash (sometimes or always)
|
||||
|
||||
.. entries to be added later ..
|
||||
Reference in new issue
Block a user