re PR tree-optimization/45109 (ICE: in get_constraint_for_component_ref, at tree-ssa-structalias.c:2932)

2010-08-08  Richard Guenther  <rguenther@suse.de>

	PR tree-optimization/45109
	* tree-ssa-structalias.c (get_constraint_for_component_ref):
	Explicitly strip handled components and indirect references.

	* gcc.c-torture/compile/pr45109.c: New testcase.

From-SVN: r163010
This commit is contained in:
Richard Guenther 2010-08-08 15:51:14 +00:00 committed by Richard Biener
parent 2c02e37e62
commit 4a21760510
4 changed files with 51 additions and 1 deletions

View File

@ -1,3 +1,9 @@
2010-08-08 Richard Guenther <rguenther@suse.de>
PR tree-optimization/45109
* tree-ssa-structalias.c (get_constraint_for_component_ref):
Explicitly strip handled components and indirect references.
2010-08-08 John David Anglin <dave.anglin@nrc-cnrc.gc.ca>
PR boehm-gc/34544

View File

@ -1,3 +1,8 @@
2010-08-08 Richard Guenther <rguenther@suse.de>
PR tree-optimization/45109
* gcc.c-torture/compile/pr45109.c: New testcase.
2010-08-08 Uros Bizjak <ubizjak@gmail.com>
* g++.old-deja/g++.jason/thunk3.C: Skip for targets with

View File

@ -0,0 +1,38 @@
struct o_fsm_t;
struct o_fsm_event_t;
typedef void (*fn_t) (struct o_fsm_t *,
struct o_fsm_event_t const *);
struct o_fsm_state_t {
fn_t dispatch;
};
struct o_fsm_t {
fn_t dispatch;
};
extern struct o_fsm_state_t o_fsm_tran(struct o_fsm_t *fsm,
struct o_fsm_state_t next_state);
static void plist_parser_state_start(struct o_fsm_t *fsm,
struct o_fsm_event_t const *fsm_event);
struct o_fsm_state_t o_fsm_state(fn_t dispatch_fcn)
{
return *(struct o_fsm_state_t *)&dispatch_fcn;
}
typedef struct _o_plist_parser_t {
struct o_fsm_t fsm;
} o_plist_parser_t;
static void plist_parser_state_start(struct o_fsm_t *fsm,
struct o_fsm_event_t const *fsm_event)
{
}
void o_plist_deserialize_xml(int fin)
{
o_plist_parser_t parser;
o_fsm_tran(&parser.fsm, o_fsm_state(plist_parser_state_start));
}

View File

@ -2928,7 +2928,8 @@ get_constraint_for_component_ref (tree t, VEC(ce_s, heap) **results,
/* Some people like to do cute things like take the address of
&0->a.b */
forzero = t;
while (!SSA_VAR_P (forzero) && !CONSTANT_CLASS_P (forzero))
while (handled_component_p (forzero)
|| INDIRECT_REF_P (forzero))
forzero = TREE_OPERAND (forzero, 0);
if (CONSTANT_CLASS_P (forzero) && integer_zerop (forzero))