https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85035
Bug ID: 85035
Summary: nios2: adding -fdelete-null-pointer-checks with -O2
enabled
Product: gcc
Version: 7.3.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: target
Assignee: unassigned at gcc dot gnu.org
Reporter: rvdv at vandewiele dot com
Target Milestone: ---
Created attachment 43732
--> https://gcc.gnu.org/bugzilla/attachment.cgi?id=43732&action=edit
source file
The code in attachment reads a 64 bit integer to compare it.
When loading the first 32 bit, an instruction is used that bypasses the cache.
For the last 32 bit a regular load is used.
The -mno-cache-volatile option is supposed to bypass the cache for volatile
variables. But as you can see, no volatile variables are used in the example.
I have noticed that working code is generated when the
"-fdelete-null-pointer-checks" option is removed.
The O2 option should also enable "-fdelete-null-pointer-checks", so I would
expect the extra "-fdelete-null-pointer-checks" to be redundant.
This doesn't seem to be the case.
Target: nios2-elf
Configured with: ../../src/gcc-7.3.0/configure --target=nios2-elf --with-newlib
--disable-threads --disable-shared --disable-multilib --disable-nls
--enable-languages=c,c++ --disable-libssp --enable-lto --without-headers
--prefix=/c/gcc/gcc7.3-src/nios2-elf-7.3.0 --with-isl --enable-plugins
Thread model: single
gcc version 7.3.0 (GCC)
build commad:
./7.3.0/bin/nios2-elf-gcc -O2 -fdelete-null-pointer-checks -mno-cache-volatile
-Wall -Wextra -fno-strict-aliasing -fwrapv -save-temps test.cpp -o test.elf
output:
c:/gcc/nios2-elf-mingw/7.3.0/bin/../lib/gcc/nios2-elf/7.3.0/../../../../nios2-elf/bin/ld.exe:
warning: cannot find entry symbol _start; defaulting to 10dc