https://gcc.gnu.org/bugzilla/show_bug.cgi?id=71053
Bug ID: 71053
Summary: [6.1 regression] Volatile read optimized into endless
loop
Product: gcc
Version: 6.1.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: michael at weiser dot dinsnail.net
Target Milestone: ---
avr-g++ of vanilla gcc 6.1.0 called with avr-g++ -Wall -Wextra
-fno-strict-aliasing -fwrapv -fno-aggressive-loop-optimizations -Os t.c -o t.S
-S compiles the following code
while (((*(volatile unsigned char *)(0x1)) & 1) == 0);
into
lds r24,1
sbrs r24,0
.L4:
rjmp .L4
, producing and endless loop. avr-gcc from the same install as well as avr-gcc
and avr-g++ of vanilla gcc 5.3.0 produce:
.L2:
lds r24,1
sbrs r24,0
rjmp .L2
Preprocessed source:
# ~/bin/gcc-6.1.0-avr/bin/avr-g++ -Wall -Wextra -fno-strict-aliasing -fwrapv
-fno-aggressive-loop-optimizations -Os t.c -E
# 1 "t.c"
# 1 "<built-in>"
# 1 "<command-line>"
# 1 "t.c"
int main(void) {
while (((*(volatile unsigned char *)(0x1)) & 1) == 0);
}
Full call and output:
# ~/bin/gcc-6.1.0-avr/bin/avr-g++ -Wall -Wextra -fno-strict-aliasing -fwrapv
-fno-aggressive-loop-optimizations -Os t.c -o t.S -S -v
Using built-in specs.
Reading specs from
/Users/michael/bin/gcc-6.1.0-avr/lib/gcc/avr/6.1.0/device-specs/specs-avr2
COLLECT_GCC=/Users/michael/bin/gcc-6.1.0-avr/bin/avr-g++
Target: avr
Configured with: ../configure --prefix=/Users/michael/bin/gcc-6.1.0-avr
--with-gmp=/Users/michael/bin/gcc-6.1.0-avr
--with-mpfr=/Users/michael/bin/gcc-6.1.0-avr
--with-mpc=/Users/michael/bin/gcc-6.1.0-avr --target=avr
--enable-languages=c,c++ --disable-nls --disable-libssp --with-dwarf2
Thread model: single
gcc version 6.1.0 (GCC)
COLLECT_GCC_OPTIONS='-Wall' '-Wextra' '-fno-strict-aliasing' '-fwrapv'
'-fno-aggressive-loop-optimizations' '-Os' '-o' 't.S' '-S' '-v'
'-specs=device-specs/specs-avr2'
/Users/michael/bin/gcc-6.1.0-avr/libexec/gcc/avr/6.1.0/cc1plus -quiet -v t.c
-mn-flash=6 -mskip-bug -quiet -dumpbase t.c -auxbase-strip t.S -Os -Wall
-Wextra -version -fno-strict-aliasing -fwrapv
-fno-aggressive-loop-optimizations -o t.S -mn-flash=6 -mskip-bug -fno-rtti
-fno-enforce-eh-specs -fno-exceptions
GNU C++14 (GCC) version 6.1.0 (avr)
compiled by GNU C version 4.2.1 Compatible Apple LLVM 7.3.0
(clang-703.0.29), GMP version 6.1.0, MPFR version 3.1.4, MPC version 1.0.3, isl
version none
GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072
ignoring nonexistent directory
"/Users/michael/bin/gcc-6.1.0-avr/lib/gcc/avr/6.1.0/../../../../avr/include/c++/6.1.0"
ignoring nonexistent directory
"/Users/michael/bin/gcc-6.1.0-avr/lib/gcc/avr/6.1.0/../../../../avr/include/c++/6.1.0/avr"
ignoring nonexistent directory
"/Users/michael/bin/gcc-6.1.0-avr/lib/gcc/avr/6.1.0/../../../../avr/include/c++/6.1.0/backward"
ignoring nonexistent directory
"/Users/michael/bin/gcc-6.1.0-avr/lib/gcc/avr/6.1.0/../../../../avr/sys-include"
#include "..." search starts here:
#include <...> search starts here:
/Users/michael/bin/gcc-6.1.0-avr/lib/gcc/avr/6.1.0/include
/Users/michael/bin/gcc-6.1.0-avr/lib/gcc/avr/6.1.0/include-fixed
/Users/michael/bin/gcc-6.1.0-avr/lib/gcc/avr/6.1.0/../../../../avr/include
End of search list.
GNU C++14 (GCC) version 6.1.0 (avr)
compiled by GNU C version 4.2.1 Compatible Apple LLVM 7.3.0
(clang-703.0.29), GMP version 6.1.0, MPFR version 3.1.4, MPC version 1.0.3, isl
version none
GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072
Compiler executable checksum: 7c30ccc7fec31875d3fa3f6ec56cc92b
COMPILER_PATH=/Users/michael/bin/gcc-6.1.0-avr/libexec/gcc/avr/6.1.0/:/Users/michael/bin/gcc-6.1.0-avr/libexec/gcc/avr/6.1.0/:/Users/michael/bin/gcc-6.1.0-avr/libexec/gcc/avr/:/Users/michael/bin/gcc-6.1.0-avr/lib/gcc/avr/6.1.0/:/Users/michael/bin/gcc-6.1.0-avr/lib/gcc/avr/:/Users/michael/bin/gcc-6.1.0-avr/lib/gcc/avr/6.1.0/../../../../avr/bin/
LIBRARY_PATH=/Users/michael/bin/gcc-6.1.0-avr/lib/gcc/avr/6.1.0/:/Users/michael/bin/gcc-6.1.0-avr/lib/gcc/avr/6.1.0/../../../../avr/lib/
COLLECT_GCC_OPTIONS='-Wall' '-Wextra' '-fno-strict-aliasing' '-fwrapv'
'-fno-aggressive-loop-optimizations' '-Os' '-o' 't.S' '-S' '-v'
'-specs=device-specs/specs-avr2'