re PR lto/51774 (FAIL: gcc.dg/lto/trans-mem-* c_lto_trans-mem-1_0.o-c_lto_trans-mem-1_1.o link, -flto -fgnu-tm)

PR lto/51774
	* lto-lang.c (handle_returns_twice_attribute): New function.
	(lto_attribute_table): Add returns_twice attribute.

From-SVN: r182959
This commit is contained in:
Jakub Jelinek 2012-01-06 17:48:52 +01:00 committed by Jakub Jelinek
parent 4913e24c20
commit 09228fefca
2 changed files with 25 additions and 1 deletions

View File

@ -1,3 +1,9 @@
2012-01-06 Jakub Jelinek <jakub@redhat.com>
PR lto/51774
* lto-lang.c (handle_returns_twice_attribute): New function.
(lto_attribute_table): Add returns_twice attribute.
2011-12-21 Richard Guenther <rguenther@suse.de> 2011-12-21 Richard Guenther <rguenther@suse.de>
* lto.c (GIMPLE_REGISTER_TYPE): New define. * lto.c (GIMPLE_REGISTER_TYPE): New define.

View File

@ -1,5 +1,5 @@
/* Language-dependent hooks for LTO. /* Language-dependent hooks for LTO.
Copyright 2009, 2010 Free Software Foundation, Inc. Copyright 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
Contributed by CodeSourcery, Inc. Contributed by CodeSourcery, Inc.
This file is part of GCC. This file is part of GCC.
@ -47,6 +47,7 @@ static tree handle_nothrow_attribute (tree *, tree, tree, int, bool *);
static tree handle_sentinel_attribute (tree *, tree, tree, int, bool *); static tree handle_sentinel_attribute (tree *, tree, tree, int, bool *);
static tree handle_type_generic_attribute (tree *, tree, tree, int, bool *); static tree handle_type_generic_attribute (tree *, tree, tree, int, bool *);
static tree handle_transaction_pure_attribute (tree *, tree, tree, int, bool *); static tree handle_transaction_pure_attribute (tree *, tree, tree, int, bool *);
static tree handle_returns_twice_attribute (tree *, tree, tree, int, bool *);
static tree ignore_attribute (tree *, tree, tree, int, bool *); static tree ignore_attribute (tree *, tree, tree, int, bool *);
static tree handle_format_attribute (tree *, tree, tree, int, bool *); static tree handle_format_attribute (tree *, tree, tree, int, bool *);
@ -74,6 +75,8 @@ const struct attribute_spec lto_attribute_table[] =
handle_nonnull_attribute, false }, handle_nonnull_attribute, false },
{ "nothrow", 0, 0, true, false, false, { "nothrow", 0, 0, true, false, false,
handle_nothrow_attribute, false }, handle_nothrow_attribute, false },
{ "returns_twice", 0, 0, true, false, false,
handle_returns_twice_attribute, false },
{ "sentinel", 0, 1, false, true, true, { "sentinel", 0, 1, false, true, true,
handle_sentinel_attribute, false }, handle_sentinel_attribute, false },
{ "type generic", 0, 0, false, true, true, { "type generic", 0, 0, false, true, true,
@ -425,6 +428,21 @@ handle_transaction_pure_attribute (tree *node, tree ARG_UNUSED (name),
return NULL_TREE; return NULL_TREE;
} }
/* Handle a "returns_twice" attribute. */
static tree
handle_returns_twice_attribute (tree *node, tree ARG_UNUSED (name),
tree ARG_UNUSED (args),
int ARG_UNUSED (flags),
bool * ARG_UNUSED (no_add_attrs))
{
gcc_assert (TREE_CODE (*node) == FUNCTION_DECL);
DECL_IS_RETURNS_TWICE (*node) = 1;
return NULL_TREE;
}
/* Ignore the given attribute. Used when this attribute may be usefully /* Ignore the given attribute. Used when this attribute may be usefully
overridden by the target, but is not used generically. */ overridden by the target, but is not used generically. */