From 02aecc9287c2d70802f3bb9347f32616ce34130a Mon Sep 17 00:00:00 2001 From: hubicka Date: Sun, 1 Jan 2017 23:31:53 +0000 Subject: [PATCH] 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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@243997 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/ChangeLog | 6 ++++++ gcc/symtab.c | 5 +++-- gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/g++.dg/torture/pr77674.C | 15 +++++++++++++++ 4 files changed, 29 insertions(+), 2 deletions(-) create mode 100644 gcc/testsuite/g++.dg/torture/pr77674.C diff --git a/gcc/ChangeLog b/gcc/ChangeLog index a5767870bca..e6e6dfd807c 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,11 @@ 2017-01-01 Jan Hubicka + PR middle-end/77674 + * symtab.c (symtab_node::binds_to_current_def_p): Fix handling of + transparent aliases. + +2017-01-01 Jan Hubicka + PR middle-end/77484 * predict.def (PRED_CALL): Update hitrate. (PRED_INDIR_CALL, PRED_POLYMORPHIC_CALL): New predictors. diff --git a/gcc/symtab.c b/gcc/symtab.c index 1c2ada4a384..de87b5eebf2 100644 --- a/gcc/symtab.c +++ b/gcc/symtab.c @@ -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) diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index f86dd33c787..f1d43c23b45 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2017-01-01 Jan Hubicka + + PR middle-end/77674 + * g++.dg/torture/pr77674.C: New testcase. + 2017-01-01 Jakub Jelinek 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 index 00000000000..f933174317e --- /dev/null +++ b/gcc/testsuite/g++.dg/torture/pr77674.C @@ -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); +} + -- 2.11.4.GIT