diff options
| author | rguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4> | 2009-08-16 22:36:13 +0000 |
|---|---|---|
| committer | rguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4> | 2009-08-16 22:36:13 +0000 |
| commit | 816767a6ad07ac3ef96e45d95d107372f170dd28 (patch) | |
| tree | 0d830a7f31ecbe922751da4a71c6f72cc9e511e4 /gcc/fortran/trans-expr.c | |
| parent | a467009dc5917986645dba284010bdb3a1da1ad4 (diff) | |
| download | ppe42-gcc-816767a6ad07ac3ef96e45d95d107372f170dd28.tar.gz ppe42-gcc-816767a6ad07ac3ef96e45d95d107372f170dd28.zip | |
2009-08-17 Richard Guenther <rguenther@suse.de>
* trans-expr.c (gfc_trans_scalar_assign): Replace hack with
more proper hack.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@150817 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/fortran/trans-expr.c')
| -rw-r--r-- | gcc/fortran/trans-expr.c | 26 |
1 files changed, 9 insertions, 17 deletions
diff --git a/gcc/fortran/trans-expr.c b/gcc/fortran/trans-expr.c index 51593e7ae19..144c20441e9 100644 --- a/gcc/fortran/trans-expr.c +++ b/gcc/fortran/trans-expr.c @@ -4432,29 +4432,21 @@ gfc_trans_scalar_assign (gfc_se * lse, gfc_se * rse, gfc_typespec ts, gfc_add_expr_to_block (&block, tmp); } } + else if (ts.type == BT_DERIVED) + { + gfc_add_block_to_block (&block, &lse->pre); + gfc_add_block_to_block (&block, &rse->pre); + tmp = gfc_evaluate_now (rse->expr, &block); + tmp = fold_build1 (VIEW_CONVERT_EXPR, TREE_TYPE (lse->expr), rse->expr); + gfc_add_modify (&block, lse->expr, tmp); + } else { gfc_add_block_to_block (&block, &lse->pre); gfc_add_block_to_block (&block, &rse->pre); - /* TODO This is rather obviously the wrong place to do this. - However, a number of testcases, such as function_kinds_1 - and function_types_2 fail without it, by ICEing at - fold_const: 2710 (fold_convert_loc). */ - if (ts.type == BT_DERIVED - && gfc_option.flag_whole_file - && (TYPE_MAIN_VARIANT (TREE_TYPE (rse->expr)) - != TYPE_MAIN_VARIANT (TREE_TYPE (lse->expr)))) - { - tmp = gfc_evaluate_now (rse->expr, &block); - TYPE_MAIN_VARIANT (TREE_TYPE (tmp)) - = TYPE_MAIN_VARIANT (TREE_TYPE (lse->expr)); - } - else - tmp = rse->expr; - gfc_add_modify (&block, lse->expr, - fold_convert (TREE_TYPE (lse->expr), tmp)); + fold_convert (TREE_TYPE (lse->expr), rse->expr)); } gfc_add_block_to_block (&block, &lse->post); |

