diff options
author | Richard Kenner <kenner@vlsi1.ultra.nyu.edu> | 2004-03-04 22:00:59 +0000 |
---|---|---|
committer | Richard Kenner <kenner@gcc.gnu.org> | 2004-03-04 17:00:59 -0500 |
commit | daae8185c813fc4970409ccb50231607494ca0f2 (patch) | |
tree | 69b234d253f52addaf041f13820cbfe3ccc1701d /gcc | |
parent | f345f21a90e56d8f1f9a61e96519a9de2ede2d04 (diff) | |
download | gcc-daae8185c813fc4970409ccb50231607494ca0f2.zip gcc-daae8185c813fc4970409ccb50231607494ca0f2.tar.gz gcc-daae8185c813fc4970409ccb50231607494ca0f2.tar.bz2 |
expr.c (expand_expr_real, [...]): Get proper type of stack slot for temp used for result of BLKmode but in...
* expr.c (expand_expr_real, case COMPONENT_REF): Get proper type of
stack slot for temp used for result of BLKmode but in integral mode.
From-SVN: r78937
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/expr.c | 15 |
2 files changed, 16 insertions, 4 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index f126b1c..a141cc9 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2004-03-04 Richard Kenner <kenner@vlsi1.ultra.nyu.edu> + + * expr.c (expand_expr_real, case COMPONENT_REF): Get proper type of + stack slot for temp used for result of BLKmode but in integral mode. + 2004-03-04 Jan Hubicka <jh@suse.cz> * reload.c (find_reloads): Reorganize if seqeunce to switch. @@ -7240,12 +7240,19 @@ expand_expr_real (tree exp, rtx target, enum machine_mode tmode, - bitsize), op0, 1); + /* If the result type is BLKmode, store the data into a temporary + of the appropriate type, but with the mode corresponding to the + mode for the data we have (op0's mode). It's tempting to make + this a constant type, since we know it's only being stored once, + but that can cause problems if we are taking the address of this + COMPONENT_REF because the MEM of any reference via that address + will have flags corresponding to the type, which will not + necessarily be constant. */ if (mode == BLKmode) { - rtx new = assign_temp (build_qualified_type - ((*lang_hooks.types.type_for_mode) - (ext_mode, 0), - TYPE_QUAL_CONST), 0, 1, 1); + rtx new + = assign_stack_temp_for_type + (ext_mode, GET_MODE_BITSIZE (ext_mode), 0, type); emit_move_insn (new, op0); op0 = copy_rtx (new); |