alias.c (compare_base_decls): Simplify in-symtab check.
gcc/ * alias.c (compare_base_decls): Simplify in-symtab check. * cgraph.h (decl_in_symtab_p): Check DECL_IN_CONSTANT_POOL. testsuite/ * gcc.dg/alias-15.c: New. From-SVN: r231928
This commit is contained in:
parent
986e29bc6a
commit
7ec4f3438c
5 changed files with 34 additions and 5 deletions
|
@ -1,3 +1,8 @@
|
|||
2015-12-23 Nathan Sidwell <nathan@acm.org>
|
||||
|
||||
* alias.c (compare_base_decls): Simplify in-symtab check.
|
||||
* cgraph.h (decl_in_symtab_p): Check DECL_IN_CONSTANT_POOL.
|
||||
|
||||
2015-12-23 Dominik Vogt <vogt@linux.vnet.ibm.com>
|
||||
|
||||
* config/s390/predicates.md ("larl_operand"): Remove now superfluous
|
||||
|
|
|
@ -2038,13 +2038,12 @@ compare_base_decls (tree base1, tree base2)
|
|||
if (base1 == base2)
|
||||
return 1;
|
||||
|
||||
bool in_symtab1 = decl_in_symtab_p (base1);
|
||||
bool in_symtab2 = decl_in_symtab_p (base2);
|
||||
|
||||
/* Declarations of non-automatic variables may have aliases. All other
|
||||
decls are unique. */
|
||||
if (in_symtab1 != in_symtab2 || !in_symtab1)
|
||||
if (!decl_in_symtab_p (base1)
|
||||
|| !decl_in_symtab_p (base2))
|
||||
return 0;
|
||||
|
||||
ret = symtab_node::get_create (base1)->equal_address_to
|
||||
(symtab_node::get_create (base2), true);
|
||||
if (ret == 2)
|
||||
|
|
|
@ -2294,13 +2294,19 @@ symtab_node::real_symbol_p (void)
|
|||
}
|
||||
|
||||
/* Return true if DECL should have entry in symbol table if used.
|
||||
Those are functions and static & external veriables*/
|
||||
Those are functions and static & external non-constpool variables.
|
||||
We do not expect constant pool variables in the varpool, as they're
|
||||
not related to other variables, and simply lazily inserting them
|
||||
using the regular interface results in varpool thinking they are
|
||||
externally provided -- which results in erroneous assembly emission
|
||||
as an undefined decl. */
|
||||
|
||||
static inline bool
|
||||
decl_in_symtab_p (const_tree decl)
|
||||
{
|
||||
return (TREE_CODE (decl) == FUNCTION_DECL
|
||||
|| (TREE_CODE (decl) == VAR_DECL
|
||||
&& !DECL_IN_CONSTANT_POOL (decl)
|
||||
&& (TREE_STATIC (decl) || DECL_EXTERNAL (decl))));
|
||||
}
|
||||
|
||||
|
|
|
@ -1,3 +1,7 @@
|
|||
2015-12-23 Nathan Sidwell <nathan@acm.org>
|
||||
|
||||
* gcc.dg/alias-15.c: New.
|
||||
|
||||
2015-12-23 Thomas Schwinge <thomas@codesourcery.com>
|
||||
|
||||
* g++.dg/dg.exp (tests): Prune "goacc/*" and "goacc-gomp/*" files.
|
||||
|
|
15
gcc/testsuite/gcc.dg/alias-15.c
Normal file
15
gcc/testsuite/gcc.dg/alias-15.c
Normal file
|
@ -0,0 +1,15 @@
|
|||
/* { dg-do compile } */
|
||||
/* { dg-additional-options "-O2 -fdump-ipa-cgraph" } */
|
||||
|
||||
/* RTL-level CSE shouldn't introduce LCO (for the string) into varpool */
|
||||
char *p;
|
||||
|
||||
void foo ()
|
||||
{
|
||||
p = "abc\n";
|
||||
|
||||
while (*p != '\n')
|
||||
p++;
|
||||
}
|
||||
|
||||
/* { dg-final { scan-ipa-dump-not "LC0" "cgraph" } } */
|
Loading…
Add table
Reference in a new issue