public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
* [PATCH] Fix bootstrap failure because of -Wreturn-local-addr
@ 2014-08-04 15:55 Jakub Jelinek
  2014-08-04 16:39 ` Marc Glisse
  2014-08-05  7:42 ` Richard Biener
  0 siblings, 2 replies; 3+ messages in thread
From: Jakub Jelinek @ 2014-08-04 15:55 UTC (permalink / raw)
  To: Richard Biener, Zdenek Dvorak, Steven Bosscher; +Cc: gcc-patches

Hi!

I've tried to bootstrap with r213515 because later revisions broke because
of the hash_map and Ada changes, but unfortunately even that revision
failus to bootstrap, the new -Wreturn-local-addr warning rightfully
warns about get_ivts_expr possibly returning address of a local variable.

It seems that n_loc is always 1 and loc[0] is always 1, already since
4.0 when these loop-unroll.c changes have been introduced, so I think the
best fix is just to remove those two fields.

Bootstrapped/regtested (with r213515, rtl checking) on x86_64-linux and
i686-linux, ok for trunk?

2014-08-04  Jakub Jelinek  <jakub@redhat.com>

	* loop-unroll.c (struct iv_to_split): Remove n_loc and loc fields.
	(analyze_iv_to_split_insn): Don't initialize them.
	(get_ivts_expr): Removed.
	(allocate_basic_variable, insert_base_initialization): Use
	SET_SRC instead of *get_ivts_expr.
	(split_iv): Use &SET_SRC instead of get_ivts_expr.

--- gcc/loop-unroll.c.jj	2014-06-24 16:41:55.000000000 +0200
+++ gcc/loop-unroll.c	2014-08-04 14:13:35.750917507 +0200
@@ -79,11 +79,6 @@ struct iv_to_split
 			   iterations are based.  */
   rtx step;		/* Step of the induction variable.  */
   struct iv_to_split *next; /* Next entry in walking order.  */
-  unsigned n_loc;
-  unsigned loc[3];	/* Location where the definition of the induction
-			   variable occurs in the insn.  For example if
-			   N_LOC is 2, the expression is located at
-			   XEXP (XEXP (single_set, loc[0]), loc[1]).  */
 };
 
 /* Information about accumulators to expand.  */
@@ -1942,8 +1937,6 @@ analyze_iv_to_split_insn (rtx insn)
   ivts->base_var = NULL_RTX;
   ivts->step = iv.step;
   ivts->next = NULL;
-  ivts->n_loc = 1;
-  ivts->loc[0] = 1;
 
   return ivts;
 }
@@ -2080,27 +2073,12 @@ determine_split_iv_delta (unsigned n_cop
     }
 }
 
-/* Locate in EXPR the expression corresponding to the location recorded
-   in IVTS, and return a pointer to the RTX for this location.  */
-
-static rtx *
-get_ivts_expr (rtx expr, struct iv_to_split *ivts)
-{
-  unsigned i;
-  rtx *ret = &expr;
-
-  for (i = 0; i < ivts->n_loc; i++)
-    ret = &XEXP (*ret, ivts->loc[i]);
-
-  return ret;
-}
-
 /* Allocate basic variable for the induction variable chain.  */
 
 static void
 allocate_basic_variable (struct iv_to_split *ivts)
 {
-  rtx expr = *get_ivts_expr (single_set (ivts->insn), ivts);
+  rtx expr = SET_SRC (single_set (ivts->insn));
 
   ivts->base_var = gen_reg_rtx (GET_MODE (expr));
 }
@@ -2111,7 +2089,7 @@ allocate_basic_variable (struct iv_to_sp
 static void
 insert_base_initialization (struct iv_to_split *ivts, rtx insn)
 {
-  rtx expr = copy_rtx (*get_ivts_expr (single_set (insn), ivts));
+  rtx expr = copy_rtx (SET_SRC (single_set (insn)));
   rtx seq;
 
   start_sequence ();
@@ -2146,7 +2124,7 @@ split_iv (struct iv_to_split *ivts, rtx
     }
 
   /* Figure out where to do the replacement.  */
-  loc = get_ivts_expr (single_set (insn), ivts);
+  loc = &SET_SRC (single_set (insn));
 
   /* If we can make the replacement right away, we're done.  */
   if (validate_change (insn, loc, expr, 0))

	Jakub

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [PATCH] Fix bootstrap failure because of -Wreturn-local-addr
  2014-08-04 15:55 [PATCH] Fix bootstrap failure because of -Wreturn-local-addr Jakub Jelinek
@ 2014-08-04 16:39 ` Marc Glisse
  2014-08-05  7:42 ` Richard Biener
  1 sibling, 0 replies; 3+ messages in thread
From: Marc Glisse @ 2014-08-04 16:39 UTC (permalink / raw)
  To: Jakub Jelinek; +Cc: gcc-patches

On Mon, 4 Aug 2014, Jakub Jelinek wrote:

> I've tried to bootstrap with r213515 because later revisions broke because
> of the hash_map and Ada changes, but unfortunately even that revision
> failus to bootstrap, the new -Wreturn-local-addr warning rightfully
> warns about get_ivts_expr possibly returning address of a local variable.
>
> It seems that n_loc is always 1 and loc[0] is always 1, already since
> 4.0 when these loop-unroll.c changes have been introduced, so I think the
> best fix is just to remove those two fields.

Thanks, that will fix PR 62005.
I'll try to remember to test with RTL checking for the next warning patch.

-- 
Marc Glisse

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [PATCH] Fix bootstrap failure because of -Wreturn-local-addr
  2014-08-04 15:55 [PATCH] Fix bootstrap failure because of -Wreturn-local-addr Jakub Jelinek
  2014-08-04 16:39 ` Marc Glisse
@ 2014-08-05  7:42 ` Richard Biener
  1 sibling, 0 replies; 3+ messages in thread
From: Richard Biener @ 2014-08-05  7:42 UTC (permalink / raw)
  To: Jakub Jelinek; +Cc: Zdenek Dvorak, Steven Bosscher, gcc-patches

On Mon, 4 Aug 2014, Jakub Jelinek wrote:

> Hi!
> 
> I've tried to bootstrap with r213515 because later revisions broke because
> of the hash_map and Ada changes, but unfortunately even that revision
> failus to bootstrap, the new -Wreturn-local-addr warning rightfully
> warns about get_ivts_expr possibly returning address of a local variable.
> 
> It seems that n_loc is always 1 and loc[0] is always 1, already since
> 4.0 when these loop-unroll.c changes have been introduced, so I think the
> best fix is just to remove those two fields.
> 
> Bootstrapped/regtested (with r213515, rtl checking) on x86_64-linux and
> i686-linux, ok for trunk?

Ok.

Thanks,
Richard.

> 2014-08-04  Jakub Jelinek  <jakub@redhat.com>
> 
> 	* loop-unroll.c (struct iv_to_split): Remove n_loc and loc fields.
> 	(analyze_iv_to_split_insn): Don't initialize them.
> 	(get_ivts_expr): Removed.
> 	(allocate_basic_variable, insert_base_initialization): Use
> 	SET_SRC instead of *get_ivts_expr.
> 	(split_iv): Use &SET_SRC instead of get_ivts_expr.
> 
> --- gcc/loop-unroll.c.jj	2014-06-24 16:41:55.000000000 +0200
> +++ gcc/loop-unroll.c	2014-08-04 14:13:35.750917507 +0200
> @@ -79,11 +79,6 @@ struct iv_to_split
>  			   iterations are based.  */
>    rtx step;		/* Step of the induction variable.  */
>    struct iv_to_split *next; /* Next entry in walking order.  */
> -  unsigned n_loc;
> -  unsigned loc[3];	/* Location where the definition of the induction
> -			   variable occurs in the insn.  For example if
> -			   N_LOC is 2, the expression is located at
> -			   XEXP (XEXP (single_set, loc[0]), loc[1]).  */
>  };
>  
>  /* Information about accumulators to expand.  */
> @@ -1942,8 +1937,6 @@ analyze_iv_to_split_insn (rtx insn)
>    ivts->base_var = NULL_RTX;
>    ivts->step = iv.step;
>    ivts->next = NULL;
> -  ivts->n_loc = 1;
> -  ivts->loc[0] = 1;
>  
>    return ivts;
>  }
> @@ -2080,27 +2073,12 @@ determine_split_iv_delta (unsigned n_cop
>      }
>  }
>  
> -/* Locate in EXPR the expression corresponding to the location recorded
> -   in IVTS, and return a pointer to the RTX for this location.  */
> -
> -static rtx *
> -get_ivts_expr (rtx expr, struct iv_to_split *ivts)
> -{
> -  unsigned i;
> -  rtx *ret = &expr;
> -
> -  for (i = 0; i < ivts->n_loc; i++)
> -    ret = &XEXP (*ret, ivts->loc[i]);
> -
> -  return ret;
> -}
> -
>  /* Allocate basic variable for the induction variable chain.  */
>  
>  static void
>  allocate_basic_variable (struct iv_to_split *ivts)
>  {
> -  rtx expr = *get_ivts_expr (single_set (ivts->insn), ivts);
> +  rtx expr = SET_SRC (single_set (ivts->insn));
>  
>    ivts->base_var = gen_reg_rtx (GET_MODE (expr));
>  }
> @@ -2111,7 +2089,7 @@ allocate_basic_variable (struct iv_to_sp
>  static void
>  insert_base_initialization (struct iv_to_split *ivts, rtx insn)
>  {
> -  rtx expr = copy_rtx (*get_ivts_expr (single_set (insn), ivts));
> +  rtx expr = copy_rtx (SET_SRC (single_set (insn)));
>    rtx seq;
>  
>    start_sequence ();
> @@ -2146,7 +2124,7 @@ split_iv (struct iv_to_split *ivts, rtx
>      }
>  
>    /* Figure out where to do the replacement.  */
> -  loc = get_ivts_expr (single_set (insn), ivts);
> +  loc = &SET_SRC (single_set (insn));
>  
>    /* If we can make the replacement right away, we're done.  */
>    if (validate_change (insn, loc, expr, 0))
> 
> 	Jakub

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2014-08-05  7:42 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2014-08-04 15:55 [PATCH] Fix bootstrap failure because of -Wreturn-local-addr Jakub Jelinek
2014-08-04 16:39 ` Marc Glisse
2014-08-05  7:42 ` Richard Biener

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).