aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJan Hubicka <hubicka@ucw.cz>2017-01-02 00:31:53 +0100
committerJan Hubicka <hubicka@gcc.gnu.org>2017-01-01 23:31:53 +0000
commite2940b9866250249d464d3c4bef6ae1ecbcc74e5 (patch)
tree542aae0715cf7464cfdd0d4bca7550402fe7bf6f /gcc
parent613be1c85d462313bcecd471a3b17802a4aaab7e (diff)
downloadgcc-e2940b9866250249d464d3c4bef6ae1ecbcc74e5.zip
gcc-e2940b9866250249d464d3c4bef6ae1ecbcc74e5.tar.gz
gcc-e2940b9866250249d464d3c4bef6ae1ecbcc74e5.tar.bz2
re PR ipa/77674 (ICE in binds_to_current_def_p with -fkeep-inline-functions)
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
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/symtab.c5
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/g++.dg/torture/pr77674.C15
4 files changed, 29 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index a5767870..e6e6dfd 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,11 @@
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
* 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 1c2ada4..de87b5e 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 f86dd33..f1d43c2 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -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
index 0000000..f933174
--- /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);
+}
+