5.1b CC Compiler Optimization - Structure passed to function losing values
From: John (eeh4_at_fsmail.net)
Date: 12/07/03
- Next message: Bruno Agneray: "Security C2 : u_minchg and root privilege"
- Previous message: Paul Repacholi: "Re: Is Tru64 actually faster"
- Next in thread: Ed Vogel: "Re: 5.1b CC Compiler Optimization - Structure passed to function losing values"
- Reply: Ed Vogel: "Re: 5.1b CC Compiler Optimization - Structure passed to function losing values"
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
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 */
}
- Next message: Bruno Agneray: "Security C2 : u_minchg and root privilege"
- Previous message: Paul Repacholi: "Re: Is Tru64 actually faster"
- Next in thread: Ed Vogel: "Re: 5.1b CC Compiler Optimization - Structure passed to function losing values"
- Reply: Ed Vogel: "Re: 5.1b CC Compiler Optimization - Structure passed to function losing values"
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
Relevant Pages
|
|