diff options
-rw-r--r-- | gcc/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/config/nvptx/nvptx.c | 13 |
2 files changed, 15 insertions, 5 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 4967e98..8b379b7 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2017-09-25 Tom de Vries <tom@codesourcery.com> + + PR target/80035 + PR target/81069 + * config/nvptx/nvptx.c (nvptx_output_call_insn): Add exit after call to + noreturn function. + 2017-09-25 Richard Biener <rguenther@suse.de> * graphite-optimize-isl.c (optimize_isl): Fail and dump if diff --git a/gcc/config/nvptx/nvptx.c b/gcc/config/nvptx/nvptx.c index 6cf9a66..634f660 100644 --- a/gcc/config/nvptx/nvptx.c +++ b/gcc/config/nvptx/nvptx.c @@ -2304,11 +2304,14 @@ nvptx_output_call_insn (rtx_insn *insn, rtx result, rtx callee) fprintf (asm_out_file, ";\n"); if (find_reg_note (insn, REG_NORETURN, NULL)) - /* No return functions confuse the PTX JIT, as it doesn't realize - the flow control barrier they imply. It can seg fault if it - encounters what looks like an unexitable loop. Emit a trailing - trap, which it does grok. */ - fprintf (asm_out_file, "\t\ttrap; // (noreturn)\n"); + { + /* No return functions confuse the PTX JIT, as it doesn't realize + the flow control barrier they imply. It can seg fault if it + encounters what looks like an unexitable loop. Emit a trailing + trap and exit, which it does grok. */ + fprintf (asm_out_file, "\t\ttrap; // (noreturn)\n"); + fprintf (asm_out_file, "\t\texit; // (noreturn)\n"); + } if (result) { |