aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/ChangeLog7
-rw-r--r--gcc/config/nvptx/nvptx.c13
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)
{