view sources/patches/gcc-core-weakbugs.patch @ 1823:1d233a893085 draft

Switch sh4 to musl.
author Rob Landley <rob@landley.net>
date Tue, 01 Dec 2015 20:50:53 -0600
parents
children
line wrap: on
line source

Another musl patch, it's unhappy with how weak signals are handled.
No actual explanation about what or test case, but since it's a clear bugfix...

diff --git a/gcc/cgraph.c b/gcc/cgraph.c
index fcdc02e..db04afd 100644
--- a/gcc/cgraph.c
+++ b/gcc/cgraph.c
@@ -1169,7 +1169,7 @@ cgraph_function_body_availability (struct cgraph_node *node)
      inline and offline) having same side effect characteristics as
      good optimization is what this optimization is about.  */
 
-  else if (!(*targetm.binds_local_p) (node->decl)
+  else if ((DECL_WEAK (node->decl) || !(*targetm.binds_local_p) (node->decl))
 	   && !DECL_COMDAT (node->decl) && !DECL_EXTERNAL (node->decl))
     avail = AVAIL_OVERWRITABLE;
   else avail = AVAIL_AVAILABLE;
@@ -1190,7 +1190,8 @@ cgraph_variable_initializer_availability (struct cgraph_varpool_node *node)
   /* If the variable can be overwritten, return OVERWRITABLE.  Takes
      care of at least two notable extensions - the COMDAT variables
      used to share template instantiations in C++.  */
-  if (!(*targetm.binds_local_p) (node->decl) && !DECL_COMDAT (node->decl))
+  if ((DECL_WEAK (node->decl) || !(*targetm.binds_local_p) (node->decl))
+       && !DECL_COMDAT (node->decl))
     return AVAIL_OVERWRITABLE;
   return AVAIL_AVAILABLE;
 }
diff --git a/gcc/ipa-inline.c b/gcc/ipa-inline.c
index 84ef830..73d9fcc 100644
--- a/gcc/ipa-inline.c
+++ b/gcc/ipa-inline.c
@@ -300,7 +300,7 @@ cgraph_default_inline_p (struct cgraph_node *n, const char **reason)
 
   if (n->inline_decl)
     decl = n->inline_decl;
-  if (!DECL_INLINE (decl))
+  if (!DECL_INLINE (decl) || DECL_WEAK (decl))
     {
       if (reason)
 	*reason = N_("function not inlinable");
diff --git a/gcc/ipa-pure-const.c b/gcc/ipa-pure-const.c
index fdaff50..1bfd577 100644
--- a/gcc/ipa-pure-const.c
+++ b/gcc/ipa-pure-const.c
@@ -512,7 +512,7 @@ analyze_function (struct cgraph_node *fn)
   /* If this function does not return normally or does not bind local,
      do not touch this unless it has been marked as const or pure by the
      front end.  */
-  if (TREE_THIS_VOLATILE (decl)
+  if (TREE_THIS_VOLATILE (decl) || DECL_WEAK (decl)
       || !targetm.binds_local_p (decl))
     {
       l->pure_const_state = IPA_NEITHER;
diff --git a/gcc/tree-inline.c b/gcc/tree-inline.c
index 1c0b79b..5a3ba7e 100644
--- a/gcc/tree-inline.c
+++ b/gcc/tree-inline.c
@@ -1522,6 +1522,8 @@ inlinable_function_p (tree fn)
   else if (!DECL_INLINE (fn) && !flag_unit_at_a_time)
     inlinable = false;
 
+  else if (DECL_WEAK (fn))
+    inlinable = false;
   else if (inline_forbidden_p (fn))
     {
       /* See if we should warn about uninlinable functions.  Previously,