Re: [ILUG] gcc optimisation weirdness?

From: Mark Fallon (mfallon at domain ie.oracle.com)
Date: Wed 10 May 2000 - 23:41:03 IST


Paul Jakma wrote:
>
> gcc seems to do weird things to the following:
>
> int input, frequency[9];
>
> //frequency[] initialised to 0.
>
> do {
> scanf("%d", &input);
> if (input > 0 && input < 11) {
> //point 1
> (frequency[input-1])++;
> //point 2
> }
> } while (input);
>
> if i compile with -O2 or -O3 it works as i expect it to, but if i compile
> with "gcc -o test test.c" then:
>
> it works correctly for digits 0 thru 9, however if i enter 10 it goes
> wrong: at point 1 input == 10, at point 2 input == 11!
>
> seems like gcc is applying the increment to variable input,
> despite my bracketing of frequency[input-1]! which i don't
> want. why???
>
> (even without the brackets it should not increment input)
>
> --paulj.
>

Hi,

I may be reading this incorrectly but, you declare a nine
integer array which means that you can access elements 0..8.
You then use 9 (10 -1) as an index to that array, so ou have gone
out of bounds.

What is probably happening is that gcc has arranged your variables
in memory differently for the optimised version and you only see
thr bad behaviour when you compile without optimisation.

Regards,

Mark
_______________________________________________________________

Mark Fallon E-mail : mfallon at domain ie.oracle.com
Senior Software Engineer Phone : +353-1-8033207
Product Line Engineering Fax : +353-1-8033221
_______________________________________________________________



This archive was generated by hypermail 2.1.6 : Thu 06 Feb 2003 - 13:06:06 GMT