tree-ssa-dse: Fix up go.test/test/fixedbugs/issue16095.go miscompilation [PR100382]

Message ID 20210503085615.GB1179226@tucnak
State New
Headers show
Series
  • tree-ssa-dse: Fix up go.test/test/fixedbugs/issue16095.go miscompilation [PR100382]
Related show

Commit Message

Jeff Law via Gcc-patches May 3, 2021, 8:56 a.m.
Hi!

The new DCE code inside of tree DSE removes in -fnon-call-exceptions
go code a load from NULL pointer the testcase relies on throwing an
exception and so the test hangs.

The following patch just repeats a check that e.g. tree-ssa-dce.c
uses to prevent this.

Bootstrapped/regtested on x86_64-linux and i686-linux, ok for trunk?

2021-05-03  Jakub Jelinek  <jakub@redhat.com>

	PR tree-optimization/100382
	* tree-ssa-dse.c: Include tree-eh.h.
	(dse_dom_walker::before_dom_children): Don't remove stmts if
	stmt_unremovable_because_of_non_call_eh_p is true.


	Jakub

Comments

Richard Biener May 3, 2021, 9:51 a.m. | #1
On Mon, 3 May 2021, Jakub Jelinek wrote:

> Hi!

> 

> The new DCE code inside of tree DSE removes in -fnon-call-exceptions

> go code a load from NULL pointer the testcase relies on throwing an

> exception and so the test hangs.

> 

> The following patch just repeats a check that e.g. tree-ssa-dce.c

> uses to prevent this.

> 

> Bootstrapped/regtested on x86_64-linux and i686-linux, ok for trunk?


OK.

Thanks,
Richard.

> 2021-05-03  Jakub Jelinek  <jakub@redhat.com>

> 

> 	PR tree-optimization/100382

> 	* tree-ssa-dse.c: Include tree-eh.h.

> 	(dse_dom_walker::before_dom_children): Don't remove stmts if

> 	stmt_unremovable_because_of_non_call_eh_p is true.

> 

> --- gcc/tree-ssa-dse.c.jj	2021-05-02 16:25:43.636266833 +0200

> +++ gcc/tree-ssa-dse.c	2021-05-02 19:42:53.451320031 +0200

> @@ -39,6 +39,7 @@ along with GCC; see the file COPYING3.

>  #include "builtins.h"

>  #include "gimple-fold.h"

>  #include "gimplify.h"

> +#include "tree-eh.h"

>  

>  /* This file implements dead store elimination.

>  

> @@ -1193,7 +1194,8 @@ dse_dom_walker::before_dom_children (bas

>  	  /* When we remove dead stores make sure to also delete trivially

>  	     dead SSA defs.  */

>  	  if (has_zero_uses (DEF_FROM_PTR (def_p))

> -	      && !gimple_has_side_effects (stmt))

> +	      && !gimple_has_side_effects (stmt)

> +	      && !stmt_unremovable_because_of_non_call_eh_p (cfun, stmt))

>  	    {

>  	      if (dump_file && (dump_flags & TDF_DETAILS))

>  		{

> 

> 	Jakub

> 

> 


-- 
Richard Biener <rguenther@suse.de>
SUSE Software Solutions Germany GmbH, Maxfeldstrasse 5, 90409 Nuernberg,
Germany; GF: Felix Imendörffer; HRB 36809 (AG Nuernberg)
Ian Lance Taylor May 3, 2021, 4:29 p.m. | #2
Jakub Jelinek <jakub@redhat.com> writes:

> The new DCE code inside of tree DSE removes in -fnon-call-exceptions

> go code a load from NULL pointer the testcase relies on throwing an

> exception and so the test hangs.

>

> The following patch just repeats a check that e.g. tree-ssa-dce.c

> uses to prevent this.


Thanks for tracking this down.

Ian

Patch

--- gcc/tree-ssa-dse.c.jj	2021-05-02 16:25:43.636266833 +0200
+++ gcc/tree-ssa-dse.c	2021-05-02 19:42:53.451320031 +0200
@@ -39,6 +39,7 @@  along with GCC; see the file COPYING3.
 #include "builtins.h"
 #include "gimple-fold.h"
 #include "gimplify.h"
+#include "tree-eh.h"
 
 /* This file implements dead store elimination.
 
@@ -1193,7 +1194,8 @@  dse_dom_walker::before_dom_children (bas
 	  /* When we remove dead stores make sure to also delete trivially
 	     dead SSA defs.  */
 	  if (has_zero_uses (DEF_FROM_PTR (def_p))
-	      && !gimple_has_side_effects (stmt))
+	      && !gimple_has_side_effects (stmt)
+	      && !stmt_unremovable_because_of_non_call_eh_p (cfun, stmt))
 	    {
 	      if (dump_file && (dump_flags & TDF_DETAILS))
 		{