[PATCH] gimple: Ignore *0 = {CLOBBER} in path isolation [PR96722]

Richard Biener rguenther@suse.de
Tue Aug 25 07:10:48 GMT 2020


On Mon, 24 Aug 2020, Jakub Jelinek wrote:

> Hi!
> 
> Clobbers of MEM_REF with NULL address are just fancy nops, something we just
> ignore and don't emit any code for it (ditto for other clobbers), they just
> mark end of life on something, so we shouldn't infer from those that there
> is some UB.
> 
> Bootstrapped/regtested on x86_64-linux and i686-linux, ok for trunk?

OK.

Richard.

> 2020-08-24  Jakub Jelinek  <jakub@redhat.com>
> 
> 	PR tree-optimization/96722
> 	* gimple.c (infer_nonnull_range): Formatting fix.
> 	(infer_nonnull_range_by_dereference): Return false for clobber stmts.
> 
> 	* g++.dg/opt/pr96722.C: New test.
> 
> --- gcc/gimple.c.jj	2020-08-03 22:54:51.417531677 +0200
> +++ gcc/gimple.c	2020-08-24 13:23:22.082312349 +0200
> @@ -2917,8 +2917,8 @@ check_loadstore (gimple *, tree op, tree
>  bool
>  infer_nonnull_range (gimple *stmt, tree op)
>  {
> -  return infer_nonnull_range_by_dereference (stmt, op)
> -    || infer_nonnull_range_by_attribute (stmt, op);
> +  return (infer_nonnull_range_by_dereference (stmt, op)
> +	  || infer_nonnull_range_by_attribute (stmt, op));
>  }
>  
>  /* Return true if OP can be inferred to be non-NULL after STMT
> @@ -2930,7 +2930,8 @@ infer_nonnull_range_by_dereference (gimp
>       non-NULL if -fdelete-null-pointer-checks is enabled.  */
>    if (!flag_delete_null_pointer_checks
>        || !POINTER_TYPE_P (TREE_TYPE (op))
> -      || gimple_code (stmt) == GIMPLE_ASM)
> +      || gimple_code (stmt) == GIMPLE_ASM
> +      || gimple_clobber_p (stmt))
>      return false;
>  
>    if (walk_stmt_load_store_ops (stmt, (void *)op,
> --- gcc/testsuite/g++.dg/opt/pr96722.C.jj	2020-08-24 13:24:45.357132323 +0200
> +++ gcc/testsuite/g++.dg/opt/pr96722.C	2020-08-24 13:25:06.224836626 +0200
> @@ -0,0 +1,20 @@
> +// PR tree-optimization/96722
> +// { dg-do run }
> +// { dg-options "-O2" }
> +
> +struct S { int s; ~S () {} };
> +
> +void
> +foo (S *a)
> +{
> +  if (a)
> +    return;
> +  a->~S ();
> +}
> +
> +int
> +main ()
> +{
> +  S s;
> +  foo (&s);
> +}
> 
> 	Jakub
> 
> 

-- 
Richard Biener <rguenther@suse.de>
SUSE Software Solutions Germany GmbH, Maxfeldstrasse 5, 90409 Nuernberg,
Germany; GF: Felix Imendörffer; HRB 36809 (AG Nuernberg)


More information about the Gcc-patches mailing list