In the following testcase, a read memory access should be made.
However gcc -O2 optimizes away the code inside the test function.

------------------- test.c --------------------
void test (char *addr) {
        *((volatile char *) addr);
}
-----------------------------------------------

$ gcc -Wall -O2 -S test.c

------------------- test.s --------------------
test.s:
        .file   "test.c"
        .text
        .p2align 4,,15
.globl test
        .type   test, @function
test:
        pushl   %ebp
        movl    %esp, %ebp
        popl    %ebp
        ret
        .size   test, .-test
        .ident  "GCC: (GNU) 4.1.0 20050702 (experimental)"
        .section        .note.GNU-stack,"",@progbits
-----------------------------------------------

-- 
           Summary: gcc -O2 discards cast to volatile
           Product: gcc
           Version: 4.1.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P2
         Component: c
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: olivier dot baudron at m4x dot org
                CC: gcc-bugs at gcc dot gnu dot org
  GCC host triplet: i686-pc-linux-gnu


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=22278

Reply via email to