re PR middle-end/53008 (abort in _ITM_getTMCloneSafe)

PR middle-end/53008
        * trans-mem.c (ipa_tm_create_version_alias): Output new_node if
        accessed indirectly.
        (ipa_tm_create_version): Same.

From-SVN: r187887
This commit is contained in:
Aldy Hernandez 2012-05-25 17:14:25 +00:00 committed by Aldy Hernandez
parent 305c089a9f
commit 7be9eece4c
3 changed files with 25 additions and 2 deletions

View File

@ -1,3 +1,10 @@
2012-05-25 Aldy Hernandez <aldyh@redhat.com>
PR middle-end/53008
* trans-mem.c (ipa_tm_create_version_alias): Output new_node if
accessed indirectly.
(ipa_tm_create_version): Same.
2012-05-25 Uros Bizjak <ubizjak@gmail.com>
PR target/53474

View File

@ -0,0 +1,14 @@
/* { dg-do compile } */
/* { dg-options "-fgnu-tm -O" } */
void __attribute__((transaction_safe)) (*fn)(void);
static void __attribute__((transaction_safe))
foo(void)
{
}
void set_fn(void)
{
fn = foo;
}

View File

@ -4328,7 +4328,8 @@ ipa_tm_create_version_alias (struct cgraph_node *node, void *data)
record_tm_clone_pair (old_decl, new_decl);
if (info->old_node->symbol.force_output)
if (info->old_node->symbol.force_output
|| ipa_ref_list_first_referring (&info->old_node->symbol.ref_list))
ipa_tm_mark_force_output_node (new_node);
return false;
}
@ -4381,7 +4382,8 @@ ipa_tm_create_version (struct cgraph_node *old_node)
record_tm_clone_pair (old_decl, new_decl);
cgraph_call_function_insertion_hooks (new_node);
if (old_node->symbol.force_output)
if (old_node->symbol.force_output
|| ipa_ref_list_first_referring (&old_node->symbol.ref_list))
ipa_tm_mark_force_output_node (new_node);
/* Do the same thing, but for any aliases of the original node. */