Hi, This patch removes the special treatment of 'asm pure' blocks, as the need for code correctness outweighs the need for optimization around these statements.
Bootstrapped and regression tested on x86_64-linux-gnu. Committed to mainline. Regards Iain. --- gcc/d/ChangeLog: * toir.cc (IRVisitor::visit (GccAsmStatement *)): Set ASM_VOLATILE_P on all asm statements. --- gcc/d/toir.cc | 5 +++-- 1 files changed, 3 insertions(+), 2 deletions(-) diff --git a/gcc/d/toir.cc b/gcc/d/toir.cc index 21e31dc93d4..6aaf10bf4e4 100644 --- a/gcc/d/toir.cc +++ b/gcc/d/toir.cc @@ -1427,8 +1427,9 @@ public: if (s->args == NULL && s->clobbers == NULL) ASM_INPUT_P (exp) = 1; - /* Asm statements are treated as volatile unless 'pure'. */ - ASM_VOLATILE_P (exp) = !(s->stc & STCpure); + /* All asm statements are assumed to have a side effect. As a future + optimization, this could be unset when building in release mode. */ + ASM_VOLATILE_P (exp) = 1; add_stmt (exp); } -- 2.20.1