diff options
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/stmt.c | 7 |
2 files changed, 11 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 1d52a085af8..84ac1b41bde 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -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 diff --git a/gcc/stmt.c b/gcc/stmt.c index 8420aaa50da..0b9ce8184f6 100644 --- a/gcc/stmt.c +++ b/gcc/stmt.c @@ -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); |