https://gcc.gnu.org/bugzilla/show_bug.cgi?id=81551
Bug ID: 81551 Summary: [ARM] Incorrect STRD to misaligned address. Product: gcc Version: 8.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: target Assignee: unassigned at gcc dot gnu.org Reporter: belagod at gcc dot gnu.org Target Milestone: --- For this piece of code: void foo () { *((long long*)0x2000213F) = 0; } when compiled with $ arm-none-eabi-gcc -S -march=armv7-a /tmp/strd.c -O0 -marm -o - It generates an STRD to a misaligned address .type foo, %function foo: @ args = 0, pretend = 0, frame = 0 @ frame_needed = 1, uses_anonymous_args = 0 @ link register save eliminated. str fp, [sp, #-4]! add fp, sp, #0 movw r3, #8511 movt r3, 8192 mov r0, #0 mov r1, #0 strd r0, [r3] nop add sp, fp, #0 @ sp needed ldr fp, [sp], #4 bx lr .size foo, .-foo but for -O1 and above: foo: @ args = 0, pretend = 0, frame = 0 @ frame_needed = 0, uses_anonymous_args = 0 @ link register save eliminated. mov r3, #8448 movt r3, 8192 mov r2, #0 strb r2, [r3, #63] strb r2, [r3, #64] strb r2, [r3, #65] strb r2, [r3, #66] strb r2, [r3, #67] strb r2, [r3, #68] strb r2, [r3, #69] strb r2, [r3, #70] bx lr $ ./arm-none-eabi-gcc -v Using built-in specs. COLLECT_GCC=./arm-none-eabi-gcc COLLECT_LTO_WRAPPER=/data/embedded/dev-builds/trunk/install/libexec/gcc/arm-none-eabi/8.0.0/lto-wrapper Target: arm-none-eabi Configured with: /data/embedded/dev-builds/trunk/src/configure --prefix=/data/embedded/dev-builds/trunk/install --target=arm-none-eabi --enable-languages=c,c++ --with-cpu=cortex-m3 --with-mode=thumb --with-newlib --enable-newlib-io-long-long --enable-newlib-register-fini --enable-newlib-retargetable-locking --disable-newlib-supplied-syscalls --disable-multilib --with-libexpat --with-system-zlib --disable-gdbtk --enable-plugins --disable-threads --disable-tls --disable-libgomp --disable-libmudflap --disable-libquadmath --disable-libssp --disable-libstdcxx-pch --disable-nls --disable-rda --disable-sid --disable-tui --disable-utils --disable-werror --disable-fixed-point Thread model: single gcc version 8.0.0 20170725 (experimental) (GCC)