This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Compiled code crashes storing to read-only location


The following program:

typedef struct {int c, l; char ch[3];} pstr;
const pstr ao = {2, 2, "OK"};
const pstr * const a = &ao;

int main(void)
{
        if (a->ch[a->l]) {
                a->ch[a->l] = 0;
        }
        return 0;
}

segfaults when compiled using `-O' (or better optimisation). Without
optimisation the store is not executed and the program runs fine. 

I tried CVS gcc (updated DEC 14, 04:28 CET 2003) on Athlon-XP running
Debian Woody. The problem does not appear in 20031029 snapshot, 
but is present in 20031105 snapshot.

By the way, I have some doubts about corretness of the program, however
my original problem is in GNU Pascal. Constant Pascal strings are stored
in .rodata section and compiler makes sure that the string is null
terminated. On the other hand variable strings need not be null terminated.
When convering Pascal strings to C strings GPC generates code to null
terminate the strings which are not already null terminated. The C
program above tries to reproduce the code GPC produces.

 
-- 
                              Waldek Hebisch
hebisch@math.uni.wroc.pl 


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]