mirror of git://gcc.gnu.org/git/gcc.git
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>
|
2005-04-14 Mike Stump <mrs@apple.com>
|
||||||
|
|
||||||
* config/darwin-c.c (framework_construct_pathname): We must
|
* 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). */
|
builtins like __builtin_va_end). */
|
||||||
/* Caution: the silent array decomposition semantics we allow for
|
/* Caution: the silent array decomposition semantics we allow for
|
||||||
ADDR_EXPR means we can't always discard the pair. */
|
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 op00 = TREE_OPERAND (op0, 0);
|
||||||
tree t_expr = TREE_TYPE (expr);
|
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
|
#ifdef ENABLE_CHECKING
|
||||||
tree t_op0 = TREE_TYPE (op0);
|
tree t_op0 = TREE_TYPE (op0);
|
||||||
gcc_assert (TREE_CODE (t_op0) == ARRAY_TYPE
|
gcc_assert (POINTER_TYPE_P (t_expr)
|
||||||
&& POINTER_TYPE_P (t_expr)
|
&& cpt_same_type (TREE_CODE (t_op0) == ARRAY_TYPE
|
||||||
&& cpt_same_type (TREE_TYPE (t_op0),
|
? TREE_TYPE (t_op0) : t_op0,
|
||||||
TREE_TYPE (t_expr))
|
TREE_TYPE (t_expr))
|
||||||
&& POINTER_TYPE_P (t_op00)
|
&& POINTER_TYPE_P (t_op00)
|
||||||
&& cpt_same_type (t_op0, TREE_TYPE (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>
|
2005-04-14 Mike Stump <mrs@apple.com>
|
||||||
|
|
||||||
* gcc.dg/Foundation.framework/empty: New.
|
* gcc.dg/Foundation.framework/empty: New.
|
||||||
|
|
|
@ -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