Hi All,
I just joined the list and I'm not a compiler guru, so I'd like "the
list" opinion on a behavior I notice today.
Not sure it is really a bug, so do not want to directly open a bug in
the bugzilla repository.
Consider the below sample code:
#include <stdio.h>
int main(int argc, char** argv)
{
const int i = 0;
printf("i: %d\n", i);
foo(&i);
printf("i: %d\n", i);
return 0;
}
I compiled the above code without any optimization flag, and with the -O3 flag.
[bash] sborg...@ree> gcc gcc_const_optimazer_bug.c -o gcc_const_optimazer_bug
gcc_const_optimazer_bug.c: In function `main':
gcc_const_optimazer_bug.c:18: warning: passing arg 1 of `foo' discards
qualifiers from pointer target type
[bash] sborg...@ree> ./gcc_const_optimazer_bug
i: 0
i: 42
[bash] sborg...@ree> gcc -O3 gcc_const_optimazer_bug.c -o
gcc_const_optimazer_bug
gcc_const_optimazer_bug.c: In function `main':
gcc_const_optimazer_bug.c:18: warning: passing arg 1 of `foo' discards
qualifiers from pointer target type
[bash] sborg...@ree> ./gcc_const_optimazer_bug
i: 0
i: 0
Now my question is: is it correct that the compiler enforces the
constantness of the variable, even tought it states in the warning
that the const qualifier has been discarded?
Best Regards
Sergio
--
preferisco ammazzare il tempo,
preferisco sparare cazzate,
preferisco fare esplodere una moda,
preferisco morire d'amore.
(Caparezza)