------- Comment #3 from rguenth at gcc dot gnu dot org 2007-10-30 15:54 ------- It doesn't matter that you store the address of param to a volatile variable (this store is not removed), but that
DMA_ADDR_REG = (unsigned long) data; does not make the stack local live longer than the frame of outer_func and *data is not used after the assignment. Probably your code kicking off the DMA engine lacks a memory barrier and a use of DMA_ADDR_REG. -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=33949