From: Jakub Jelinek Date: Wed, 12 Jun 2013 06:43:05 +0000 (+0200) Subject: re PR target/56564 (movdqa on possibly-8-byte-aligned struct with -O3) X-Git-Tag: releases/gcc-4.9.0~5440 X-Git-Url: https://gcc.gnu.org/git/?a=commitdiff_plain;h=946f9306f214a4e4e3c41f02aa3cc814e04d022d;p=gcc.git re PR target/56564 (movdqa on possibly-8-byte-aligned struct with -O3) PR target/56564 * varasm.c (decl_binds_to_current_def_p): Call binds_local_p target hook even for !TREE_PUBLIC decls. If no resolution info is available, return false for common and external decls. From-SVN: r199984 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index e840b830439b..5de46a0ca450 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,10 +1,16 @@ +2013-06-12 Jakub Jelinek + + PR target/56564 + * varasm.c (decl_binds_to_current_def_p): Call binds_local_p + target hook even for !TREE_PUBLIC decls. If no resolution info + is available, return false for common and external decls. + 2013-06-12 Kaushik Phatak * config/rl78/constraints.md (U): New constraint. * config/rl78/rl78.md (*mulqi3_rl78,*mulhi3_rl78,*mulhi3_g13): Add valloc attribute. - 2013-06-11 Michael Meissner PR target/57589 diff --git a/gcc/varasm.c b/gcc/varasm.c index d2b9415477d2..d817067adf7b 100644 --- a/gcc/varasm.c +++ b/gcc/varasm.c @@ -6781,10 +6781,10 @@ bool decl_binds_to_current_def_p (tree decl) { gcc_assert (DECL_P (decl)); - if (!TREE_PUBLIC (decl)) - return true; if (!targetm.binds_local_p (decl)) return false; + if (!TREE_PUBLIC (decl)) + return true; /* When resolution is available, just use it. */ if (TREE_CODE (decl) == VAR_DECL && (TREE_STATIC (decl) || DECL_EXTERNAL (decl))) @@ -6802,10 +6802,20 @@ decl_binds_to_current_def_p (tree decl) return resolution_to_local_definition_p (node->symbol.resolution); } /* Otherwise we have to assume the worst for DECL_WEAK (hidden weaks - binds locally but still can be overwritten). + binds locally but still can be overwritten), DECL_COMMON (can be merged + with a non-common definition somewhere in the same module) or + DECL_EXTERNAL. This rely on fact that binds_local_p behave as decl_replaceable_p for all other declaration types. */ - return !DECL_WEAK (decl); + if (DECL_WEAK (decl)) + return false; + if (DECL_COMMON (decl) + && (DECL_INITIAL (decl) == NULL + || DECL_INITIAL (decl) == error_mark_node)) + return false; + if (DECL_EXTERNAL (decl)) + return false; + return true; } /* A replaceable function or variable is one which may be replaced