public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
* Fix ICE with thunks taking scalars passed by reference
@ 2015-04-01  6:32 Jan Hubicka
  2015-04-07 11:30 ` Jakub Jelinek
  0 siblings, 1 reply; 3+ messages in thread
From: Jan Hubicka @ 2015-04-01  6:32 UTC (permalink / raw)
  To: gcc-patches, law, mliska, eboctazou

Hi,
this patch solves ICE in the attached testcase on mingw32.  The problem is that
on Windows API long double is passed & returned by reference and while expanidng
the tunk tail call, we get lost because we turn the parameter into SSA name and
later need its address to pass it further.

The patch extends hack https://gcc.gnu.org/ml/gcc-patches/2014-11/msg00423.html
to handle not only non-registers but also registers.

Bootstrapped/regtested ppc64-linux. OK?

The bug reproduced with ICF, but I suppose it will turn into ice on any C++ covariant
thunks taking scalar passed by reference.

ng double func1 (long double x)
{
  if (x > 0.0)
    return x;
  else if (x < 0.0)
    return -x;
  else
    return x;
}

long double func2 (long double x)
{
  if (x > 0.0)
    return x;
  else if (x < 0.0)
    return -x;
  else
    return x;
}

	PR ipa/65540
	* calls.c (initialize_argument_information): When producing tail
	call also turn SSA_NAMES passed by references to original PARM_DECLs
Index: calls.c
===================================================================
--- calls.c	(revision 221805)
+++ calls.c	(working copy)
@@ -1321,6 +1321,15 @@ initialize_argument_information (int num
 		  && TREE_CODE (base) != SSA_NAME
 		  && (!DECL_P (base) || MEM_P (DECL_RTL (base)))))
 	    {
+	      /* We may have turned the parameter value into an SSA name.
+		 Go back to the original parameter so we can take the
+		 address.  */
+	      if (TREE_CODE (args[i].tree_value) == SSA_NAME)
+		{
+		  gcc_assert (SSA_NAME_IS_DEFAULT_DEF (args[i].tree_value));
+		  args[i].tree_value = SSA_NAME_VAR (args[i].tree_value);
+		  gcc_assert (TREE_CODE (args[i].tree_value) == PARM_DECL);
+		}
 	      /* Argument setup code may have copied the value to register.  We
 		 revert that optimization now because the tail call code must
 		 use the original location.  */

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

end of thread, other threads:[~2015-04-07 20:39 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-04-01  6:32 Fix ICE with thunks taking scalars passed by reference Jan Hubicka
2015-04-07 11:30 ` Jakub Jelinek
2015-04-07 20:39   ` Jan Hubicka

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).