Is this a bug in some C compilers?
Michael Greim
greim at sbsvax.UUCP
Wed Jul 19 19:58:53 AEST 1989
Hello,
I tried the following program on several machines. IMHO the program
should not compile yet there are some compilers which compile it:
cc 43bsd
cc 43bsd-tahoe
cc ultrix 2.0
cc SunOS 3.5
And there are some that give an error message:
gcc 1.34
cc sinix 2.1 ("McClure")
Here is the program:
---------- cut here ----------------------------
/*
* What does the compiler do with this?
*/
# include <stdio.h>
struct link {
struct link * next;
int count;
};
int fix0;
struct link * t;
int fix1;
main ()
{
printf ("t lies at %1d, brk is at %1d\n", (int)(&t), (int)sbrk(0));
printf ("Addresses of %1d byte objects around t : %1d and %1d\n",
sizeof(int), (int)(&fix0), (int)(&fix1));
t = NULL;
t.count = 5;
if (t.count == 5)
printf ("Assignment worked.\n");
else
printf ("Assignment did not work\n");
printf ("Value 5 has been put at address %1d\n", &(t.count));
}
---------- cut here ----------------------------
Output from VAX running 43bsd:
Script started on Wed Jul 19 11:44:22 1989
% cc test78.c
"test78.c", line 21: warning: struct/union or struct/union pointer required
"test78.c", line 22: warning: struct/union or struct/union pointer required
"test78.c", line 26: warning: struct/union or struct/union pointer required
% a.out
t lies at 6008, brk is at 6176
Addresses of 4 byte objects around t : 6004 and 6012
Assignment worked.
Value 5 has been put at address 6012
% exit
%
script done on Wed Jul 19 11:44:47 1989
Am I correct to say that the program is not correct C, and that all compilers
which compile it are wrong?
-mg
--
Michael Greim Email : greim at sbsvax.informatik.uni-saarland.dbp.de
or : ...!uunet!unido!sbsvax!greim
[.signature removed by the board of censors for electronic mail's main
executive computer because it contained a four letter word ("word")]
More information about the Comp.lang.c
mailing list