[nvptx] Add exit after call to noreturn function
authorTom de Vries <tom@codesourcery.com>
Mon, 25 Sep 2017 10:36:23 +0000 (10:36 +0000)
committerTom de Vries <vries@gcc.gnu.org>
Mon, 25 Sep 2017 10:36:23 +0000 (10:36 +0000)
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

gcc/ChangeLog
gcc/config/nvptx/nvptx.c

index 4967e98..8b379b7 100644 (file)
@@ -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
index 6cf9a66..634f660 100644 (file)
@@ -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)
     {