re PR lto/51774 (FAIL: gcc.dg/lto/trans-mem-* c_lto_trans-mem-1_0.o-c_lto_trans-mem...
authorJakub Jelinek <jakub@redhat.com>
Fri, 6 Jan 2012 16:48:52 +0000 (17:48 +0100)
committerJakub Jelinek <jakub@gcc.gnu.org>
Fri, 6 Jan 2012 16:48:52 +0000 (17:48 +0100)
PR lto/51774
* lto-lang.c (handle_returns_twice_attribute): New function.
(lto_attribute_table): Add returns_twice attribute.

From-SVN: r182959

gcc/lto/ChangeLog
gcc/lto/lto-lang.c

index 8882abe9d449d16a78512957bb7cc08882e9f520..825d268e290e5a46654fd2191a4dceb630e69e2a 100644 (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>
 
        * lto.c (GIMPLE_REGISTER_TYPE): New define.
index 0d230eeddca3fc32ee7d516e20f479de3ed2670b..d255e65d26d4c1728c04c5d649a9898272437789 100644 (file)
@@ -1,5 +1,5 @@
 /* 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.
 
 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_type_generic_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 handle_format_attribute (tree *, tree, tree, int, bool *);
@@ -74,6 +75,8 @@ const struct attribute_spec lto_attribute_table[] =
                              handle_nonnull_attribute, false },
   { "nothrow",                0, 0, true,  false, false,
                              handle_nothrow_attribute, false },
+  { "returns_twice",          0, 0, true,  false, false,
+                             handle_returns_twice_attribute, false },
   { "sentinel",               0, 1, false, true, true,
                              handle_sentinel_attribute, false },
   { "type generic",           0, 0, false, true, true,
@@ -425,6 +428,21 @@ handle_transaction_pure_attribute (tree *node, tree ARG_UNUSED (name),
   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
    overridden by the target, but is not used generically.  */