re PR ipa/77674 (ICE in binds_to_current_def_p with -fkeep-inline-functions)
authorJan Hubicka <hubicka@ucw.cz>
Sun, 1 Jan 2017 23:31:53 +0000 (00:31 +0100)
committerJan Hubicka <hubicka@gcc.gnu.org>
Sun, 1 Jan 2017 23:31:53 +0000 (23:31 +0000)
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.

From-SVN: r243997

gcc/ChangeLog
gcc/symtab.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/torture/pr77674.C [new file with mode: 0644]

index a5767870bcabef7894358c532af0a343029316c2..e6e6dfd807ce2d127d537aef0d7eaf58192283ed 100644 (file)
@@ -1,3 +1,9 @@
+2017-01-01  Jan Hubicka  <hubicka@ucw.cz>
+
+       PR middle-end/77674
+       * symtab.c (symtab_node::binds_to_current_def_p): Fix handling of
+       transparent aliases.
+
 2017-01-01  Jan Hubicka  <hubicka@ucw.cz>
 
        PR middle-end/77484
index 1c2ada4a3849a4838224e3c59d37e537ec7a248f..de87b5eebf26cf2fe7d65e56c14da221b32bb1e0 100644 (file)
@@ -2214,6 +2214,9 @@ symtab_node::binds_to_current_def_p (symtab_node *ref)
 {
   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 (symtab_node *ref)
   if (DECL_EXTERNAL (decl))
     return false;
 
-  if (!externally_visible)
-    debug ();
   gcc_assert (externally_visible);
 
   if (ref)
index f86dd33c7877f1cb7d288169a6347eece6d5b4ba..f1d43c23b45f58da3fb0ea80ad330ca4238ce0da 100644 (file)
@@ -1,3 +1,8 @@
+2017-01-01  Jan Hubicka  <hubicka@ucw.cz>
+
+       PR middle-end/77674
+       * g++.dg/torture/pr77674.C: New testcase.
+
 2017-01-01  Jakub Jelinek  <jakub@redhat.com>
 
        Update copyright years.
diff --git a/gcc/testsuite/g++.dg/torture/pr77674.C b/gcc/testsuite/g++.dg/torture/pr77674.C
new file mode 100644 (file)
index 0000000..f933174
--- /dev/null
@@ -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);
+}
+