68 lines
1.5 KiB
C
68 lines
1.5 KiB
C
/* { dg-do compile } */
|
|
/* { dg-options "-O1 -fdump-tree-dom2" } */
|
|
|
|
extern void abort (void);
|
|
|
|
struct rtx_def;
|
|
typedef struct rtx_def *rtx;
|
|
struct rtvec_def;
|
|
typedef struct rtvec_def *rtvec;
|
|
union tree_node;
|
|
typedef union tree_node *tree;
|
|
struct rtx_def
|
|
{
|
|
int code;
|
|
int mode;
|
|
unsigned int in_struct:1;
|
|
};
|
|
struct tree_common
|
|
{
|
|
int code;
|
|
};
|
|
struct tree_decl
|
|
{
|
|
rtx rtl;
|
|
};
|
|
union tree_node
|
|
{
|
|
struct tree_common common;
|
|
struct tree_decl decl;
|
|
};
|
|
rtx
|
|
store_expr (exp, target, want_value)
|
|
tree exp;
|
|
rtx target;
|
|
int want_value;
|
|
{
|
|
if (exp->common.code == 42)
|
|
abort ();
|
|
else if (queued_subexp_p (target))
|
|
{
|
|
blah (target->mode);
|
|
if (target->code)
|
|
abort ();
|
|
}
|
|
else
|
|
{
|
|
if (target->code && (__extension__({target;})->in_struct));
|
|
}
|
|
|
|
if ((target != (exp->decl.rtl
|
|
? (exp->decl.rtl
|
|
? exp->decl.rtl
|
|
: (make_decl_rtl (exp, 0), exp->decl.rtl))
|
|
: 0))
|
|
&& expr_size (exp))
|
|
;
|
|
}
|
|
|
|
/* All paths to the test "target != 0" occuring in the final IF statement
|
|
dereference target. Thus target can not have the value zero at that
|
|
point and the test should have been eliminated. */
|
|
/* ??? The dominator walker (A) doesn't merge this data at joins and
|
|
(B) only looks at immediate dominators, and only queued_subexp_p
|
|
immediately dominates the comparison in question. We need something
|
|
stronger. */
|
|
/* { dg-final { scan-tree-dump-times "target.*!= 0" 0 "dom2" { xfail *-*-* } } } */
|
|
/* { dg-final { cleanup-tree-dump "dom2" } } */
|