]> git.ipfire.org Git - thirdparty/gcc.git/commit
Mark asm goto with outputs as volatile
authorAndrew Pinski <apinski@marvell.com>
Tue, 27 Jun 2023 00:14:06 +0000 (17:14 -0700)
committerAndrew Pinski <apinski@marvell.com>
Tue, 27 Jun 2023 16:26:22 +0000 (09:26 -0700)
commit478840a2ca491fbff44371caee4983d1e7b7b7cf
treed7b5322a5098c5f77e5a4c4c263ba6eb39550546
parent4a48a38fa99f067b8f3a3d1a5dc7a1e602db351f
Mark asm goto with outputs as volatile

The manual references asm goto as being implicitly volatile already
and that was done when asm goto could not have outputs. When outputs
were added to `asm goto`, only asm goto without outputs were still being
marked as volatile. Now some parts of GCC decide, removing the `asm goto`
is ok if the output is not used, though not updating the CFG (this happens
on both the RTL level and the gimple level). Since the biggest user of `asm goto`
is the Linux kernel and they expect them to be volatile (they use them to
copy to/from userspace), we should just mark the inline-asm as volatile.

OK? Bootstrapped and tested on x86_64-linux-gnu.

PR middle-end/110420
PR middle-end/103979
PR middle-end/98619

gcc/ChangeLog:

* gimplify.cc (gimplify_asm_expr): Mark asm with labels as volatile.

gcc/testsuite/ChangeLog:

* gcc.c-torture/compile/asmgoto-6.c: New test.
gcc/gimplify.cc
gcc/testsuite/gcc.c-torture/compile/asmgoto-6.c [new file with mode: 0644]