5.1b CC Compiler Optimization - Structure passed to function losing values

From: John (eeh4_at_fsmail.net)
Date: 12/07/03


Date: 7 Dec 2003 10:26:45 -0800

We have recently upgraded from 5.1 to version 5.1b and now appear to
be experiencing some problems compiling C code with optimization level
2 (O). The code used to compile and run correctly on 5.1 and will run
on 5.1b if built using 5.1. However when we try to re-compile and run
using 5.1b the software fails in this case on an assertion.

I understand that compiler optimization is a complex area and that
just because some code worked on a previous version, does not
necessarily mean that it is correct. In an effort to debug the problem
I increased the compiler warning level and found that CC reported an
error about an attribute of a structure that would not be initialised
when the function was inlined. The error message is similar to the one
given below:

"cc: Warning: <file>, line <number> : The scalar variable "<name>" is
fetched but not initialized. Detected when this routine was inlined at
line number <number> in file <file>. And there may be other such
fetches of this variable that have not been reported in this
compilation. (uninit1)"

It appears the compiler is choosing to inline a static function. One
of the arguments passed into this function is a structure. In the
process of inlining the structure seems to lose it values. This is not
surprising given the error message that is reported. Sure enough if I
issue a #pragma line to stop the function being inlined the code works
fine.

I have two problems / questions, firstly why is the compiler choosing
to inline the function given the error message that it reports?
Secondly how can I restructure the code to prevent this error?
Unfortunately I no longer have access to a machine with 5.1 and I am
therefore unable to confirm whether this is a new warning or existed
prior to upgrading to 5.1b.

A simplified version of the code, to illustrate the call sequence that
seems to be causing the error message is shown below:

/* Structure defined in header file */
typedef {
   char *name;
   int type;
   double data;
} Data_Elem;

static void local_function(Data_Elem elem, ... );

extern void global_function (Data_Elem elem, ... ){
    
    /* Some code to setup data */

    printf(" Type of element is %d \n", elem.type);

    /* Call static function */
    local_function(elem, ... );
  
}

static void local_function(Data_Elem elem, ... ) {
   int type = elem.type;
   
   assert(type == 2);

   /* Code fails here because type is not initialised */

}



Relevant Pages

  • Re: Bug in Ada (SuSe 10.2) ?
    ... missing accessibility check? ... Randy reports a compile-time ... error message, and Bob Klungle reports that the program ... Unless I'm missing something, both compiler behaviors are bugs, ...
    (comp.lang.ada)
  • Re: Error a: _mayn.c:12 illegal return type, found int expected void
    ... > a given compiler writer allows or forbids is ... The error message I recieved was in plain english ... >Do you, Jacob, perhaps have a belief that all C programers ... the purpose of lint is to provide error messages. ...
    (comp.compilers.lcc)
  • Re: operator function
    ... >> of them have anything to do with what the error message seems ... Setting (int h, int m, int s, int TT) ... Now the compiler knows, that it is safe to use that function on a const ... >> operator returns a Setting object. ...
    (alt.comp.lang.learn.c-cpp)
  • Re: ILC2005: McCarthy denounces Common Lisp, "Lisp", XML, and Rahul
    ... SU-AI and run Lisp 1.6 or UCI-Lisp. ... kernel of an operating system or a compiler etc. ... have the power of Lisp instead of only C to manipulate those lists. ... apply so the error message doesn't occur. ...
    (comp.lang.lisp)
  • c89 problem w/ irrhfsu
    ... i've got a lot of experience setting up and configuring OMVS but not ... by means of the c89 compiler, inside the OMVS environment, (this is ... and i received the following error message: ...
    (bit.listserv.ibm-main)