Hi,
this patch fixes oversight in symtab_node::binds_to_current_def_p when dealing
with weakrefs.

Bootstrapped/regtested x86_64-linux, comitted.

Honza

        PR middle-end/77674
        * symtab.c (symtab_node::binds_to_current_def_p): Fix handling of
        transparent aliases.

        PR middle-end/77674
        * g++.dg/torture/pr77674.C: New testcase.
Index: symtab.c
===================================================================
--- symtab.c    (revision 243992)
+++ symtab.c    (working copy)
@@ -2214,6 +2214,9 @@ symtab_node::binds_to_current_def_p (sym
 {
   if (!definition)
     return false;
+  if (transparent_alias)
+    return definition
+          && get_alias_target()->binds_to_current_def_p (ref);
   if (decl_binds_to_current_def_p (decl))
     return true;
 
@@ -2225,8 +2228,6 @@ symtab_node::binds_to_current_def_p (sym
   if (DECL_EXTERNAL (decl))
     return false;
 
-  if (!externally_visible)
-    debug ();
   gcc_assert (externally_visible);
 
   if (ref)
Index: testsuite/g++.dg/torture/pr77674.C
===================================================================
--- testsuite/g++.dg/torture/pr77674.C  (revision 0)
+++ testsuite/g++.dg/torture/pr77674.C  (working copy)
@@ -0,0 +1,15 @@
+// { dg-do compile }
+typedef struct { } __fsid_t;
+typedef unsigned long int pthread_t;
+extern "C" {
+  extern __inline __attribute__ ((__gnu_inline__)) int pthread_equal 
(pthread_t __thread1, pthread_t __thread2) throw ()   {
+  }
+}
+typedef pthread_t __gthread_t;
+static __typeof (pthread_equal)      __gthrw_pthread_equal __attribute__ 
((__weakref__ ("pthread_equal")));
+
+static inline int __gthread_equal (__gthread_t __t1, __gthread_t __t2)
+{
+  return __gthrw_pthread_equal (__t1, __t2);
+}
+

Reply via email to