[comp.sys.sun] sun cc

bobm@ee.rochester.edu (Bob Molyneaux) (02/02/90)

I seem to have experienced a flaw in the C compiler for the Sun stations.
I have declared static variables at the top of a number of source files.
Some have identical names.  Those that do default to the declaration in
the source file which is compiled last.

example:
Consider 2 source files each with the following declaration at the top

static int tempvar;

One may accertain the address of the variable tempvar declared in file B.
When B is compiled last, any assignment of tempvar in file A is stored in
the address allocated in file B.  (ie. the two variables are but one.)

My local sysadmin tells me that the compiler may not handle static
variables properly and to try the gnu compiler.  Is this true!?

If this has been discussed before please forgive me as I am not a regular
reader of this group.  Some response would be appreciated.

Thanks in advance

djones@decwrl.dec.com (Dave Jones) (02/14/90)

From article <4662@brazos.Rice.edu>, by bobm@ee.rochester.edu (Bob Molyneaux):
...
> Consider 2 source files each with the following declaration at the top
> 
> static int tempvar;
> 
> One may accertain the address of the variable tempvar declared in file B.
> When B is compiled last, any assignment of tempvar in file A is stored in
> the address allocated in file B.  (ie. the two variables are but one.)

I've never seen this happen, and can not make it happen now with little
examples. I get two memory locations, just like I should:

    % nm a.out | grep tempvar
    00020cb4 b _tempvar
    00020cb8 b _tempvar

When I run it, the program does the right thing.

What you need to do is to get a small example program which messes up,
post it _exactly_, along with the type of machine, software version
number, etc...

If there is a problem, it is probably in the linker "ld", not in cc, but I
suspect you are overlooking a programming mistake.