This is for "gcc version 4.3.0 (GCC)" func_1() here should never load from g_361 since the loop body never executes:
const volatile int g_361 = 3L; volatile int g_2 = 0L; void func_1 (void) { for (g_2 = 0; g_2 > 10; g_2++) { int l_357 = g_361; } } However when compiled with "gcc -Os -S foo.c" we get the following output which does load from g_361: .file "foo.c" .text .globl func_1 .type func_1, @function func_1: pushl %ebp movl %esp, %ebp movl $0, g_2 movl g_361, %eax jmp .L2 .L3: movl g_2, %eax incl %eax movl %eax, g_2 .L2: movl g_2, %eax cmpl $10, %eax jg .L3 popl %ebp ret .size func_1, .-func_1 .globl g_361 .data .align 4 .type g_361, @object .size g_361, 4 g_361: .long 3 .globl g_2 .bss .align 4 .type g_2, @object .size g_2, 4 g_2: .zero 4 .ident "GCC: (GNU) 4.3.0" .section .note.GNU-stack,"",@progbits At -O0, -O1, and -O2 there is no problem. -- Summary: const volatile variable accessed that should not be Product: gcc Version: 4.3.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: regehr at cs dot utah dot edu GCC build triplet: i686-pc-linux-gnu GCC host triplet: i686-pc-linux-gnu GCC target triplet: i686-pc-linux-gnu http://gcc.gnu.org/bugzilla/show_bug.cgi?id=35729