diff mbox

Fix PR 63566 part 3

Message ID 20150209210156.GE27726@kam.mff.cuni.cz
State New
Headers show

Commit Message

Jan Hubicka Feb. 9, 2015, 9:01 p.m. UTC
> Jan,
>      This patch caused Bug 64982 - [5 Regression] Many g++ failures on
> x86_64-apple-darwin14 with -m32.
>                    Jack

Hi,
I think best way would be to move the warning to middle-end when the thunk is being
expanded (other alternative is just to force analysis before doing the sanity check
in cp/method.c.
I had to dro # in the error message, I am not quite sure what it means.
Jason, what do you think?

Honza

Comments

Jason Merrill Feb. 9, 2015, 9:54 p.m. UTC | #1
On 02/09/2015 04:01 PM, Jan Hubicka wrote:
> I had to dro # in the error message, I am not quite sure what it means.

It just means more verbose.

> Jason, what do you think?

Looks fine to me.

Jason
diff mbox

Patch

Index: cp/method.c
===================================================================
--- cp/method.c	(revision 220547)
+++ cp/method.c	(working copy)
@@ -418,20 +418,6 @@  use_thunk (tree thunk_fndecl, bool emit_
   if (DECL_ONE_ONLY (function))
     thunk_node->add_to_same_comdat_group (funcn);
 
-  if (!this_adjusting
-      || !targetm.asm_out.can_output_mi_thunk (thunk_fndecl, fixed_offset,
-					       virtual_value, alias))
-    {
-      /* If this is a covariant thunk, or we don't have the necessary
-	 code for efficient thunks, generate a thunk function that
-	 just makes a call to the real function.  Unfortunately, this
-	 doesn't work for varargs.  */
-
-      if (varargs_function_p (function))
-	error ("generic thunk code fails for method %q#D which uses %<...%>",
-	       function);
-    }
-
   pop_from_top_level ();
 }
 
Index: cgraphunit.c
===================================================================
--- cgraphunit.c	(revision 220547)
+++ cgraphunit.c	(working copy)
@@ -1559,6 +1559,14 @@  cgraph_node::expand_thunk (bool output_a
       thunk.thunk_p = false;
       analyzed = false;
     }
+  else if (stdarg_p (TREE_TYPE (thunk_fndecl)))
+    {
+      error ("generic thunk code fails for method %qD which uses %<...%>",
+	     thunk_fndecl);
+      TREE_ASM_WRITTEN (thunk_fndecl) = 1;
+      analyzed = true;
+      return false;
+    }
   else
     {
       tree restype;