ULTRIX linker bug???

Chris Torek chris at umcp-cs.UUCP
Sat Oct 18 17:02:28 AEST 1986


In article <336 at uwmacc.UUCP> jwp at uwmacc.UUCP (Jeffrey W Percival) writes:
>float x;
>float y;
>main()
>{
>...
>}
>
>[with a library] subroutine whose source file looks like this:
>
>double x;
>double y;
>sub()
>{
>	y = 10.0;
>	print y
>	x = expression;
>	print y
>}
>
>I linked it with "cc main.o -llocal -o main"
>
>Much to my surprise, the value of y was changed from 10.0 to 0.0
>as a result of the assignment to x.  I thought (perhaps mistakenly)
>that the scope of a variable declared at the beginning of a file
>extended only throughout that file.

No.

>Even if that is not true, shouldn't I have gotten a "multiply
>declared" message?

Not in the Ultrix compiler.  The Ultrix compiler uses the `common
model', where any number of `<type> x' declarations may appear, as
long none are initialised.  Exactly one initialisation is also
legal.  (Some compilers use the `def/ref model', in which all but
one declaration must be `extern'.)

Moreover, in the `common model', the size of the data space allocated
to a variable is determined by the *largest* declaration.  For example,
linking the compiled files

	x.c: char a[10];	y.c: char a[100];

produces an a.out wherein `a' holds 100 bytes.  Since strict type
checking is provided only by lint, the linker also does not care
if it is fed mismatched types as well:

	x.c: char a[10];	y.c: double a[10];

This results in an 80 byte `a' on a Vax.  Within x.c, these 80
bytes are believed to be characters; within y.c, they are believed
to be doubles.  Assigning 3.4 to a[1] in y.c clobbers a[8] through
a[15] in x.c.

>I tried bringing sub.o into my directory and typing "cc main.o sub.o"
>and got the expected "multiply declared" complaint.

But what was `multiply declared'?  x?  y?  sub?  Something entirely
different?  Teledebugging is tricky, but I doubt the Ultrix linker
was at fault.
-- 
In-Real-Life: Chris Torek, Univ of MD Comp Sci Dept (+1 301 454 1516)
UUCP:	seismo!umcp-cs!chris
CSNet:	chris at umcp-cs		ARPA:	chris at mimsy.umd.edu



More information about the Comp.unix.wizards mailing list