This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Fix ICE with weakref
- From: Jan Hubicka <hubicka at ucw dot cz>
- To: gcc-patches at gcc dot gnu dot org
- Date: Mon, 2 Jan 2017 00:32:37 +0100
- Subject: Fix ICE with weakref
- Authentication-results: sourceware.org; auth=none
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);
+}
+