[Bug inline-asm/85546] GCC assumes volatile asm block returns same value in loop

2018-04-26 Thread be11f157cd19c4a2ba1e9c70a38b1a74 at protonmail dot com
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85546

--- Comment #1 from be11f157cd19c4a2ba1e9c70a38b1a74 at protonmail dot com ---
The code sample is compiled with

gcc -ffreestanding -nostdlib -nostartfiles main.c

[Bug c/85546] New: GCC assumes volatile asm block returns same value in loop

2018-04-26 Thread be11f157cd19c4a2ba1e9c70a38b1a74 at protonmail dot com
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