re PR middle-end/20739 (ICE in gimplify_addr_expr)
gcc/ChangeLog: PR middle-end/20739 * gimplify.c (gimplify_addr_expr): Compensate for removal of e.g. cv-qualification conversions. gcc/testsuite/ChangeLog: PR middle-end/20739 * gcc.dg/tree-ssa/pr20739.c: New test. From-SVN: r98167
This commit is contained in:
parent
03ae9e8858
commit
c87ac7e8f7
@ -1,3 +1,9 @@
|
||||
2005-04-15 Alexandre Oliva <aoliva@redhat.com>
|
||||
|
||||
PR middle-end/20739
|
||||
* gimplify.c (gimplify_addr_expr): Compensate for removal of
|
||||
e.g. cv-qualification conversions.
|
||||
|
||||
2005-04-14 Mike Stump <mrs@apple.com>
|
||||
|
||||
* config/darwin-c.c (framework_construct_pathname): We must
|
||||
|
@ -3229,6 +3229,9 @@ gimplify_addr_expr (tree *expr_p, tree *pre_p, tree *post_p)
|
||||
builtins like __builtin_va_end). */
|
||||
/* Caution: the silent array decomposition semantics we allow for
|
||||
ADDR_EXPR means we can't always discard the pair. */
|
||||
/* Gimplification of the ADDR_EXPR operand may drop
|
||||
cv-qualification conversions, so make sure we add them if
|
||||
needed. */
|
||||
{
|
||||
tree op00 = TREE_OPERAND (op0, 0);
|
||||
tree t_expr = TREE_TYPE (expr);
|
||||
@ -3238,9 +3241,9 @@ gimplify_addr_expr (tree *expr_p, tree *pre_p, tree *post_p)
|
||||
{
|
||||
#ifdef ENABLE_CHECKING
|
||||
tree t_op0 = TREE_TYPE (op0);
|
||||
gcc_assert (TREE_CODE (t_op0) == ARRAY_TYPE
|
||||
&& POINTER_TYPE_P (t_expr)
|
||||
&& cpt_same_type (TREE_TYPE (t_op0),
|
||||
gcc_assert (POINTER_TYPE_P (t_expr)
|
||||
&& cpt_same_type (TREE_CODE (t_op0) == ARRAY_TYPE
|
||||
? TREE_TYPE (t_op0) : t_op0,
|
||||
TREE_TYPE (t_expr))
|
||||
&& POINTER_TYPE_P (t_op00)
|
||||
&& cpt_same_type (t_op0, TREE_TYPE (t_op00)));
|
||||
|
@ -1,3 +1,8 @@
|
||||
2005-04-15 Alexandre Oliva <aoliva@redhat.com>
|
||||
|
||||
PR middle-end/20739
|
||||
* gcc.dg/tree-ssa/pr20739.c: New test.
|
||||
|
||||
2005-04-14 Mike Stump <mrs@apple.com>
|
||||
|
||||
* gcc.dg/Foundation.framework/empty: New.
|
||||
|
24
gcc/testsuite/gcc.dg/tree-ssa/pr20739.c
Normal file
24
gcc/testsuite/gcc.dg/tree-ssa/pr20739.c
Normal file
@ -0,0 +1,24 @@
|
||||
/* PR middle-end/20739 */
|
||||
|
||||
/* dg-do compile */
|
||||
/* dg-options "-O" */
|
||||
|
||||
/* We used to fail to compile this because gimplification dropped the
|
||||
conversion that added the const qualifier to the sub-expression
|
||||
involving baz, and then immediately noticed and reported its
|
||||
absence. */
|
||||
|
||||
typedef struct
|
||||
{
|
||||
char chars[5];
|
||||
}
|
||||
baz_t;
|
||||
|
||||
extern baz_t * baz;
|
||||
|
||||
extern void foo (baz_t);
|
||||
int
|
||||
bar (const baz_t * ls)
|
||||
{
|
||||
foo (ls == 0 ? *(&baz[0]) : *ls);
|
||||
}
|
Loading…
Reference in New Issue
Block a user