http://gcc.gnu.org/bugzilla/show_bug.cgi?id=49721
H.J. Lu <hjl.tools at gmail dot com> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |ubizjak at gmail dot com --- Comment #1 from H.J. Lu <hjl.tools at gmail dot com> 2011-07-28 21:11:12 UTC --- A testcase: --- struct { int i; double e; int j; } x; void f2 (void) { #pragma omp atomic x.e /= 0.25; } --- compiled with -mx32 -O2 -fopenmp, I got Breakpoint 1, convert_memory_address_addr_space (to_mode=SImode, x=0x7ffff07ad720, as=0 '\000') at /export/gnu/import/git/gcc/gcc/explow.c:399 399 return gen_rtx_fmt_ee (GET_CODE (x), to_mode, (gdb) call debug_rtx (x) (plus:DI (symbol_ref:DI ("x") <var_decl 0x7ffff0859140 x>) (const_int 8 [0x8])) (gdb) bt #0 convert_memory_address_addr_space (to_mode=SImode, x=0x7ffff07ad720, as=0 '\000') at /export/gnu/import/git/gcc/gcc/explow.c:399 #1 0x0000000000730a65 in convert_memory_address_addr_space (to_mode=SImode, x=0x7ffff0931cc0, as=0 '\000') at /export/gnu/import/git/gcc/gcc/explow.c:380 #2 0x0000000000763d4c in expand_expr_addr_expr (exp=0x7ffff0750b68, target=0x0, tmode=SImode, modifier=EXPAND_SUM) at /export/gnu/import/git/gcc/gcc/expr.c:7207 #3 0x0000000000773e81 in expand_expr_real_1 (exp=0x7ffff0750b68, target=0x0, tmode=SImode, modifier=EXPAND_SUM, alt_rtl=0x0) at /export/gnu/import/git/gcc/gcc/expr.c:9757 #4 0x0000000000764594 in expand_expr_real (exp=0x7ffff0750b68, target=0x0, tmode=SImode, modifier=EXPAND_SUM, alt_rtl=0x0) at /export/gnu/import/git/gcc/gcc/expr.c:7377 #5 0x00000000005c3c9e in expand_expr (exp=0x7ffff0750b68, target=0x0, mode=SImode, modifier=EXPAND_SUM) at /export/gnu/import/git/gcc/gcc/expr.h:419 #6 0x00000000005dd4a4 in get_builtin_sync_mem (loc=0x7ffff0750b68, mode=DImode) at /export/gnu/import/git/gcc/gcc/builtins.c:5080 #7 0x00000000005de057 in expand_builtin_compare_and_swap (mode=DImode, exp=0x7ffff07abbe0, is_bool=0 '\000', target=0x7ffff074ede0) at /export/gnu/import/git/gcc/gcc/builtins.c:5186 #8 0x00000000005e3018 in expand_builtin (exp=0x7ffff07abbe0, ---Type <return> to continue, or q <return> to quit---q target=0x7ffff074eQuit (gdb) This transformation is unsafe.