From b587b8822220ef729dfc8e65e7453dcc7e99b156 Mon Sep 17 00:00:00 2001 From: dberlin Date: Tue, 28 Mar 2006 14:36:56 +0000 Subject: [PATCH] 2006-03-28 Daniel Berlin * tree-ssa-alias.c (create_sft): Initially inherit TREE_ADDRESSABLE from parent_var. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@112451 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/ChangeLog | 5 +++++ gcc/testsuite/gcc.c-torture/execute/pr25737.c | 23 +++++++++++++++++++++++ gcc/tree-ssa-alias.c | 1 + 3 files changed, 29 insertions(+) create mode 100644 gcc/testsuite/gcc.c-torture/execute/pr25737.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index f57f710..6a323d6 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2006-03-28 Daniel Berlin + + * tree-ssa-alias.c (create_sft): Initially inherit TREE_ADDRESSABLE + from parent_var. + 2006-03-27 Roger Sayle PR middle-end/22524 diff --git a/gcc/testsuite/gcc.c-torture/execute/pr25737.c b/gcc/testsuite/gcc.c-torture/execute/pr25737.c new file mode 100644 index 0000000..9da63ad --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/pr25737.c @@ -0,0 +1,23 @@ +extern void abort (void); + +struct delay_block { + struct delay_block *succ; +}; + +static struct delay_block Timer_Queue; + +struct delay_block* time_enqueue (struct delay_block *d) +{ + struct delay_block *q = Timer_Queue.succ; + d->succ = (void *)0; + return Timer_Queue.succ; +} + +int main(void) +{ + Timer_Queue.succ = &Timer_Queue; + if (time_enqueue (&Timer_Queue) != (void*)0) + abort (); + return 0; +} + diff --git a/gcc/tree-ssa-alias.c b/gcc/tree-ssa-alias.c index e1fcb0b..f0d16d4 100644 --- a/gcc/tree-ssa-alias.c +++ b/gcc/tree-ssa-alias.c @@ -2853,6 +2853,7 @@ create_sft (tree var, tree field, unsigned HOST_WIDE_INT offset, TREE_PUBLIC (subvar) = TREE_PUBLIC (var); TREE_STATIC (subvar) = TREE_STATIC (var); TREE_READONLY (subvar) = TREE_READONLY (var); + TREE_ADDRESSABLE (subvar) = TREE_ADDRESSABLE (var); /* Add the new variable to REFERENCED_VARS. */ ann = get_var_ann (subvar); -- 2.7.4