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); +} +