From: Jakub Jelinek Date: Wed, 8 Nov 2000 13:10:00 +0000 (+0100) Subject: expr.c (expand_expr): Handle when op0 is RETURN_DECL passed in multiple non-contiguou... X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=df6018fd2855dde2f06d355760e61d3eda587074;p=gcc.git expr.c (expand_expr): Handle when op0 is RETURN_DECL passed in multiple non-contiguous locations. * expr.c (expand_expr) [ADDR_EXPR]: Handle when op0 is RETURN_DECL passed in multiple non-contiguous locations. From-SVN: r37316 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 67c8b208bc8..053253f9674 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2000-11-08 Jakub Jelinek + + * expr.c (expand_expr) [ADDR_EXPR]: Handle when op0 is RETURN_DECL + passed in multiple non-contiguous locations. + 2000-11-08 Gerald Pfeifer * README.gnat: Remove file. diff --git a/gcc/expr.c b/gcc/expr.c index 22ed6ad3135..b28db7f67b8 100644 --- a/gcc/expr.c +++ b/gcc/expr.c @@ -8371,7 +8371,8 @@ expand_expr (exp, target, tmode, modifier) } else if (GET_CODE (op0) == REG || GET_CODE (op0) == SUBREG - || GET_CODE (op0) == CONCAT || GET_CODE (op0) == ADDRESSOF) + || GET_CODE (op0) == CONCAT || GET_CODE (op0) == ADDRESSOF + || GET_CODE (op0) == PARALLEL) { /* If this object is in a register, it must be not be BLKmode. */ @@ -8379,7 +8380,14 @@ expand_expr (exp, target, tmode, modifier) rtx memloc = assign_temp (inner_type, 1, 1, 1); mark_temp_addr_taken (memloc); - emit_move_insn (memloc, op0); + if (GET_CODE (op0) == PARALLEL) + /* Handle calls that pass values in multiple non-contiguous + locations. The Irix 6 ABI has examples of this. */ + emit_group_store (memloc, op0, + int_size_in_bytes (inner_type), + TYPE_ALIGN (inner_type)); + else + emit_move_insn (memloc, op0); op0 = memloc; }