Bug in DEC's C compiler(s)
David Battle
battle at alphard.cs.utk.edu
Wed Jan 3 04:59:14 AEST 1990
I seem to have discovered a bug in DEC's Ultrix C compilers. The bug
exhibits itself on both vax and mips architectures. The problem is that
it seems to ignore objects declared as "void *". Here is an example,
straight out of K&R2 (page 121):
First, on a DECStation 3100:
mips> head -1 /etc/motd
Ultrix Worksystem V2.1 (Rev. 14) System #2: Mon Nov 6 11:22:25 EST 1989
mips> cat tmp.c
void
swap(void *v[], int i, int j)
{
void *temp;
temp = v[i];
v[i] = v[j];
v[j] = temp;
}
mips> cc -c tmp.c
ccom: Error: tmp.c, line 6: temp undefined
temp = v[i];
---------^
ccom: Warning: tmp.c, line 6: illegal combination of pointer and integer, op =
temp = v[i];
---------------^
ccom: Warning: tmp.c, line 8: illegal combination of pointer and integer, op =
v[j] = temp;
---------------^
(ccom): tmp.c, line 8: cannot recover from earlier errors: goodbye!
}
^
And on the MicroVax (doesn't handle prototypes yet):
vax> head -1 /etc/motd
Ultrix-32 V3.0 (Rev 64) UWS V2.0 System #2: Fri Aug 4 00:02:44 EDT 1989
vax> more foo.c
void
swap(v,i,j)
void *v[];
int i, j;
{
void *temp;
temp = v[i];
v[i] = v[j];
v[j] = temp;
}
vax> cc -c foo.c
"foo.c", line 8: temp undefined
"foo.c", line 8: warning: illegal combination of pointer and integer, op =
"foo.c", line 10: warning: illegal combination of pointer and integer, op =
The unprotoized version works fine on a sun:
sun> cat > foo.c
swap(v,i,j)
void *v[];
int i, j;
{
void *temp;
temp = v[i];
v[i] = v[j];
v[j] = temp;
}
sun> cc -c foo.c
sun>
Am I missing something here, or is this a real bug?
-David L. Battle
battle at battle.esd.ornl.gov
battle at utkux1.utk.edu
More information about the Comp.std.c
mailing list