re PR ipa/64982 (Many g++ failures on x86_64-apple-darwin14 with -m32.)
authorJan Hubicka <hubicka@ucw.cz>
Tue, 10 Feb 2015 16:38:31 +0000 (17:38 +0100)
committerJan Hubicka <hubicka@gcc.gnu.org>
Tue, 10 Feb 2015 16:38:31 +0000 (16:38 +0000)
PR ipa/64982
* cgraphunit.c (cgraph_node::expand_thunk): Look for stdarg
thunks.
* method.c (use_thunk): Do not check for stdarg thunks.

From-SVN: r220587

gcc/ChangeLog
gcc/cgraphunit.c
gcc/cp/ChangeLog
gcc/cp/method.c

index 50fa380fe06e56361a753980fd8a16e68a383132..5da067e24955562526d26cddf16e23f3b233ada9 100644 (file)
@@ -1,3 +1,9 @@
+2015-02-10  Jan Hubicka  <hubicka@ucw.cz>
+
+       PR ipa/64982
+       * cgraphunit.c (cgraph_node::expand_thunk): Look for stdarg
+       thunks.
+
 2015-02-10  Trevor Saunders  <tsaunders@mozilla.com>
 
        PR tree-optimization/64326
index 8280fc4a1a3c3168a620608e879fa2a4dd0bff56..48a4b35a938c724617dc5007d01b60c20479f3af 100644 (file)
@@ -1559,6 +1559,14 @@ cgraph_node::expand_thunk (bool output_asm_thunks, bool force_gimple_thunk)
       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;
index 37ce9098c109a4e2eeffc99e0c9a7110167264b8..7e282d83f51ccd9dd0aac41d05990490eff0ba5f 100644 (file)
@@ -1,3 +1,8 @@
+2015-02-10  Jan Hubicka  <hubicka@ucw.cz>
+
+       PR ipa/64982
+       * method.c (use_thunk): Do not check for stdarg thunks.
+
 2015-02-06  Jason Merrill  <jason@redhat.com>
 
        PR c++/64899
index aeb3791022f40f6150055ae99c79c76b297b2d39..33e2f3cb52fb34e2b17720f3db4bcc80e478a6cd 100644 (file)
@@ -418,20 +418,6 @@ use_thunk (tree thunk_fndecl, bool emit_p)
   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 ();
 }
 \f