diff options
author | Tom de Vries <tom@codesourcery.com> | 2017-09-25 10:36:23 +0000 |
---|---|---|
committer | Tom de Vries <vries@gcc.gnu.org> | 2017-09-25 10:36:23 +0000 |
commit | fb202364391854f7c16eee74c270b0d78ad8f532 (patch) | |
tree | 4a717c30abf2cbc874b004311e433244b4ae325c /gcc | |
parent | 851e9f19e27e1f840f9a978fc7103397043d8826 (diff) | |
download | gcc-fb202364391854f7c16eee74c270b0d78ad8f532.zip gcc-fb202364391854f7c16eee74c270b0d78ad8f532.tar.gz gcc-fb202364391854f7c16eee74c270b0d78ad8f532.tar.bz2 |
[nvptx] Add exit after call to noreturn function
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.
From-SVN: r253145
Diffstat (limited to 'gcc')
-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) { |