]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR middle-end/44878 (Build fails when compiling libstdc++)
authorSteve Ellcey <sje@cup.hp.com>
Thu, 22 Jul 2010 18:14:27 +0000 (18:14 +0000)
committerSteve Ellcey <sje@gcc.gnu.org>
Thu, 22 Jul 2010 18:14:27 +0000 (18:14 +0000)
2010-07-22  Steve Ellcey  <sje@cup.hp.com>

PR middle-end/44878
* stmt.c (expand_value_return):  Call promote_function_mode with
a for_return argument of 2 when returning by reference.

From-SVN: r162423

gcc/ChangeLog
gcc/stmt.c

index 1d52a085af8ddc0f58f89e604bb21962489527e3..84ac1b41bde3f8fe751fc50a78cd00b732169a7f 100644 (file)
@@ -1,3 +1,9 @@
+2010-07-22  Steve Ellcey  <sje@cup.hp.com>
+
+       PR middle-end/44878
+       * stmt.c (expand_value_return):  Call promote_function_mode with
+       a for_return argument of 2 when returning by reference.
+
 2010-07-22  Dodji Seketeli  <dodji@redhat.com>
 
        PR debug/45024
index 8420aaa50dadd904603f94e9683c677515a273fa..0b9ce8184f67e4d3185b31e9d2bddc2bb55ae8f6 100644 (file)
@@ -1595,8 +1595,11 @@ expand_value_return (rtx val)
       tree type = TREE_TYPE (decl);
       int unsignedp = TYPE_UNSIGNED (type);
       enum machine_mode old_mode = DECL_MODE (decl);
-      enum machine_mode mode = promote_function_mode (type, old_mode,
-                                                     &unsignedp, funtype, 1);
+      enum machine_mode mode;
+      if (DECL_BY_REFERENCE (decl))
+        mode = promote_function_mode (type, old_mode, &unsignedp, funtype, 2);
+      else
+        mode = promote_function_mode (type, old_mode, &unsignedp, funtype, 1);
 
       if (mode != old_mode)
        val = convert_modes (mode, old_mode, val, unsignedp);