re PR middle-end/49545 (New C++ test failures)
gcc/ PR tree-optimization/49545 * builtins.c (get_object_alignment_1): Update function comment. Do not use DECL_ALIGN for functions, but test TARGET_PTRMEMFUNC_VBIT_LOCATION instead. * fold-const.c (get_pointer_modulus_and_residue): Don't check for functions here. * tree-ssa-ccp.c (get_value_from_alignment): Likewise. gcc/testsuite/ * gcc.dg/torture/pr49169.c: Restrict to ARM and MIPS targets. From-SVN: r175627
This commit is contained in:
parent
0e8377f2d8
commit
73f6eabc3a
6 changed files with 41 additions and 9 deletions
|
@ -1,3 +1,13 @@
|
|||
2011-06-29 Richard Sandiford <richard.sandiford@linaro.org>
|
||||
|
||||
PR tree-optimization/49545
|
||||
* builtins.c (get_object_alignment_1): Update function comment.
|
||||
Do not use DECL_ALIGN for functions, but test
|
||||
TARGET_PTRMEMFUNC_VBIT_LOCATION instead.
|
||||
* fold-const.c (get_pointer_modulus_and_residue): Don't check
|
||||
for functions here.
|
||||
* tree-ssa-ccp.c (get_value_from_alignment): Likewise.
|
||||
|
||||
2011-06-29 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR debug/49567
|
||||
|
|
|
@ -264,8 +264,15 @@ called_as_built_in (tree node)
|
|||
return is_builtin_name (name);
|
||||
}
|
||||
|
||||
/* Return the alignment in bits of EXP, an object.
|
||||
Don't return more than MAX_ALIGN no matter what. */
|
||||
/* Compute values M and N such that M divides (address of EXP - N) and
|
||||
such that N < M. Store N in *BITPOSP and return M.
|
||||
|
||||
Note that the address (and thus the alignment) computed here is based
|
||||
on the address to which a symbol resolves, whereas DECL_ALIGN is based
|
||||
on the address at which an object is actually located. These two
|
||||
addresses are not always the same. For example, on ARM targets,
|
||||
the address &foo of a Thumb function foo() has the lowest bit set,
|
||||
whereas foo() itself starts on an even address. */
|
||||
|
||||
unsigned int
|
||||
get_object_alignment_1 (tree exp, unsigned HOST_WIDE_INT *bitposp)
|
||||
|
@ -287,7 +294,21 @@ get_object_alignment_1 (tree exp, unsigned HOST_WIDE_INT *bitposp)
|
|||
exp = DECL_INITIAL (exp);
|
||||
if (DECL_P (exp)
|
||||
&& TREE_CODE (exp) != LABEL_DECL)
|
||||
align = DECL_ALIGN (exp);
|
||||
{
|
||||
if (TREE_CODE (exp) == FUNCTION_DECL)
|
||||
{
|
||||
/* Function addresses can encode extra information besides their
|
||||
alignment. However, if TARGET_PTRMEMFUNC_VBIT_LOCATION
|
||||
allows the low bit to be used as a virtual bit, we know
|
||||
that the address itself must be 2-byte aligned. */
|
||||
if (TARGET_PTRMEMFUNC_VBIT_LOCATION == ptrmemfunc_vbit_in_pfn)
|
||||
align = 2 * BITS_PER_UNIT;
|
||||
else
|
||||
align = BITS_PER_UNIT;
|
||||
}
|
||||
else
|
||||
align = DECL_ALIGN (exp);
|
||||
}
|
||||
else if (CONSTANT_CLASS_P (exp))
|
||||
{
|
||||
align = TYPE_ALIGN (TREE_TYPE (exp));
|
||||
|
|
|
@ -9216,8 +9216,7 @@ get_pointer_modulus_and_residue (tree expr, unsigned HOST_WIDE_INT *residue,
|
|||
*residue = 0;
|
||||
|
||||
code = TREE_CODE (expr);
|
||||
if (code == ADDR_EXPR
|
||||
&& TREE_CODE (TREE_OPERAND (expr, 0)) != FUNCTION_DECL)
|
||||
if (code == ADDR_EXPR)
|
||||
{
|
||||
unsigned int bitalign;
|
||||
bitalign = get_object_alignment_1 (TREE_OPERAND (expr, 0), residue);
|
||||
|
|
|
@ -1,3 +1,7 @@
|
|||
2011-06-29 Richard Sandiford <richard.sandiford@linaro.org>
|
||||
|
||||
* gcc.dg/torture/pr49169.c: Restrict to ARM and MIPS targets.
|
||||
|
||||
2011-06-29 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
|
||||
|
||||
* gcc.dg/inline_1.c: Remove dg-excess-errors.
|
||||
|
|
|
@ -1,3 +1,5 @@
|
|||
/* { dg-do compile { target { arm*-*-* || mips*-*-* } } } */
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <stdint.h>
|
||||
|
||||
|
|
|
@ -520,10 +520,6 @@ get_value_from_alignment (tree expr)
|
|||
val = bit_value_binop (PLUS_EXPR, TREE_TYPE (expr),
|
||||
TREE_OPERAND (base, 0), TREE_OPERAND (base, 1));
|
||||
else if (base
|
||||
/* ??? While function decls have DECL_ALIGN their addresses
|
||||
may encode extra information in the lower bits on some
|
||||
targets (PR47239). Simply punt for function decls for now. */
|
||||
&& TREE_CODE (base) != FUNCTION_DECL
|
||||
&& ((align = get_object_alignment (base, BIGGEST_ALIGNMENT))
|
||||
> BITS_PER_UNIT))
|
||||
{
|
||||
|
|
Loading…
Add table
Reference in a new issue