diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 52b84efb3a4..0e5a2985eea 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2014-07-20 Eric Botcazou + + * expr.c (store_field): Handle VOIDmode for calls that return values + in multiple locations. + 2014-07-20 Bill Schmidt * config/rs6000/altivec.md (unspec enum): Fix typo in diff --git a/gcc/expr.c b/gcc/expr.c index 4d2163f721b..d8328eebfbf 100644 --- a/gcc/expr.c +++ b/gcc/expr.c @@ -6581,7 +6581,7 @@ store_field (rtx target, HOST_WIDE_INT bitsize, HOST_WIDE_INT bitpos, { HOST_WIDE_INT size = int_size_in_bytes (TREE_TYPE (exp)); rtx temp_target; - if (mode == BLKmode) + if (mode == BLKmode || mode == VOIDmode) mode = smallest_mode_for_size (size * BITS_PER_UNIT, MODE_INT); temp_target = gen_reg_rtx (mode); emit_group_store (temp_target, temp, TREE_TYPE (exp), size); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 37772647ca1..3111c739495 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2014-07-20 Eric Botcazou + + * gnat.dg/pack20.ad[sb]: New test. + * gnat.dg/pack20_pkg.ads: New helper. + 2014-07-20 Ian Lance Taylor * go.test/go-test.exp (go-gc-tests): Support multiple files in one diff --git a/gcc/testsuite/gnat.dg/pack20.adb b/gcc/testsuite/gnat.dg/pack20.adb new file mode 100644 index 00000000000..5ec3e93a688 --- /dev/null +++ b/gcc/testsuite/gnat.dg/pack20.adb @@ -0,0 +1,9 @@ +package body Pack20 is + + procedure Proc (A : Rec) is + Local : Rec := A; + begin + Modify (Local.Fixed); + end; + +end Pack20; diff --git a/gcc/testsuite/gnat.dg/pack20.ads b/gcc/testsuite/gnat.dg/pack20.ads new file mode 100644 index 00000000000..ddfb9d8a4db --- /dev/null +++ b/gcc/testsuite/gnat.dg/pack20.ads @@ -0,0 +1,15 @@ +-- { dg-do compile } + +with Pack20_Pkg; use Pack20_Pkg; + +package Pack20 is + + type Rec is record + Simple_Type : Integer; + Fixed : String_Ptr; + end record; + pragma Pack (Rec); + + procedure Proc (A : Rec); + +end Pack20; diff --git a/gcc/testsuite/gnat.dg/pack20_pkg.ads b/gcc/testsuite/gnat.dg/pack20_pkg.ads new file mode 100644 index 00000000000..8f3c554a308 --- /dev/null +++ b/gcc/testsuite/gnat.dg/pack20_pkg.ads @@ -0,0 +1,7 @@ +package Pack20_Pkg is + + type String_Ptr is access all String; + + procedure Modify (Fixed : in out String_Ptr); + +end Pack20_Pkg;