This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug target/81720] New: [arm] Invalid code generation
- From: "oarias at knights dot ucf.edu" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: Fri, 04 Aug 2017 15:52:15 +0000
- Subject: [Bug target/81720] New: [arm] Invalid code generation
- Auto-submitted: auto-generated
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=81720
Bug ID: 81720
Summary: [arm] Invalid code generation
Product: gcc
Version: 7.1.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: target
Assignee: unassigned at gcc dot gnu.org
Reporter: oarias at knights dot ucf.edu
Target Milestone: ---
Created attachment 41928
--> https://gcc.gnu.org/bugzilla/attachment.cgi?id=41928&action=edit
Testcase to generate the bug.
Greetings,
Yesterday, I ran into a problem with the compiler issuing invalid instructions
when compiling code with optimization levels of -O2 or higher. I narrowed it
down to the following testcase [attached]:
int main(void) {
volatile unsigned int read_value = *((volatile unsigned
int*)0x00000000);
return 0;
}
When compiled with
$ arm-none-eabi-gcc -S -c testcase.c -O1 -mthumb -mno-thumb-interwork
-mcpu=cortex-m4
The following assembly is generated [trimmed, see full attachment]:
main:
@ Volatile: function does not return.
@ args = 0, pretend = 0, frame = 0
@ frame_needed = 0, uses_anonymous_args = 0
@ link register save eliminated.
movs r3, #0
ldr r3, [r3]
.inst 0xdeff
.size main, .-main
The .inst 0xdeff should definitely not be there. Any code that happens after
the dereference takes place is never emitted by the compiler. The dereference
in question is actually valid for the target I am working with [bare-metal ARM
system]. Of course, the assembler happily picks this up and creates object
files with the erroneous code.
I am using the following gcc:
$ arm-none-eabi-gcc --version
arm-none-eabi-gcc (Arch Repository) 7.1.0
Copyright (C) 2017 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Which has been compiled as:
$ arm-none-eabi-gcc -v
Using built-in specs.
COLLECT_GCC=arm-none-eabi-gcc
COLLECT_LTO_WRAPPER=/usr/lib/gcc/arm-none-eabi/7.1.0/lto-wrapper
Target: arm-none-eabi
Configured with: /build/arm-none-eabi-gcc/src/gcc-7-20170504/configure
--target=arm-none-eabi --prefix=/usr --with-sysroot=/usr/arm-none-eabi
--with-native-system-header-dir=/include --libexecdir=/usr/lib
--enable-languages=c,c++ --enable-plugins --disable-decimal-float
--disable-libffi --disable-libgomp --disable-libmudflap --disable-libquadmath
--disable-libssp --disable-libstdcxx-pch --disable-nls --disable-shared
--disable-threads --disable-tls --with-gnu-as --with-gnu-ld --with-system-zlib
--with-newlib --with-headers=/usr/arm-none-eabi/include
--with-python-dir=share/gcc-arm-none-eabi --with-gmp --with-mpfr --with-mpc
--with-isl --with-libelf --enable-gnu-indirect-function
--with-host-libstdcxx='-static-libgcc -Wl,-Bstatic,-lstdc++,-Bdynamic -lm'
--with-pkgversion='Arch Repository' --with-bugurl=https://bugs.archlinux.org/
--with-multilib-list=armv6-m,armv7-m,armv7e-m,armv7-r
Thread model: single
gcc version 7.1.0 (Arch Repository)
Any advice? Thank you.
Cheers,
Orlando.