https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85546
Bug ID: 85546
Summary: GCC assumes volatile asm block returns same value in
loop
Product: gcc
Version: 7.3.1
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c
Assignee: unassigned at gcc dot gnu.org
Reporter: be11f157cd19c4a2ba1e9c70a38b1a74 at protonmail dot com
Target Milestone: ---
Created attachment 44027
--> https://gcc.gnu.org/bugzilla/attachment.cgi?id=44027=edit
Code that triggers the bug
This code works correctly when compiled with no optimizations. When
optimizations are enabled the while loop in the input() function becomes an
infinite loop. GCC seems to be assuming that the return value of io() cannot
change between iterations of the loop despite the asm block within io() being
declared "volatile".
The program is tested with this input file:
1
1