diff options
author | H.J. Lu <hjl.tools@gmail.com> | 2013-01-18 12:34:11 -0800 |
---|---|---|
committer | H.J. Lu <hjl.tools@gmail.com> | 2013-01-18 12:34:11 -0800 |
commit | 43269d882367dc4f0e4c2651d6625e1b7de78764 (patch) | |
tree | 6aaf525a6fb8a4fb63a71c9ca56be58bc1d6655b /gcc/fortran/trans-stmt.c | |
parent | ce97ec0e268b7b50b9f801dd12ffc67042c47193 (diff) | |
parent | 48dc1117de124a2265129a36bfbbc211522c2c02 (diff) | |
download | gcc-hjl/tsx/gcc-4_7-branch.tar.gz |
Merge remote-tracking branch 'origin/gcc-4_7-branch' into hjl/tsx/gcc-4_7-branchhjl/tsx/gcc-4_7-branch
Conflicts:
gcc/config/i386/driver-i386.c
gcc/config/i386/i386.c
gcc/config/i386/sync.md
Diffstat (limited to 'gcc/fortran/trans-stmt.c')
-rw-r--r-- | gcc/fortran/trans-stmt.c | 12 |
1 files changed, 7 insertions, 5 deletions
diff --git a/gcc/fortran/trans-stmt.c b/gcc/fortran/trans-stmt.c index bb3a89084e0..630816ed401 100644 --- a/gcc/fortran/trans-stmt.c +++ b/gcc/fortran/trans-stmt.c @@ -5087,7 +5087,7 @@ gfc_trans_allocate (gfc_code * code) gfc_actual_arglist *actual; gfc_expr *ppc; gfc_code *ppc_code; - gfc_ref *dataref; + gfc_ref *ref, *dataref; /* Do a polymorphic deep copy. */ actual = gfc_get_actual_arglist (); @@ -5099,13 +5099,15 @@ gfc_trans_allocate (gfc_code * code) actual->next->expr->ts.type = BT_CLASS; gfc_add_data_component (actual->next->expr); - dataref = actual->next->expr->ref; + dataref = NULL; /* Make sure we go up through the reference chain to the _data reference, where the arrayspec is found. */ - while (dataref->next && dataref->next->type != REF_ARRAY) - dataref = dataref->next; + for (ref = actual->next->expr->ref; ref; ref = ref->next) + if (ref->type == REF_COMPONENT + && strcmp (ref->u.c.component->name, "_data") == 0) + dataref = ref; - if (dataref->u.c.component->as) + if (dataref && dataref->u.c.component->as) { int dim; gfc_expr *temp; |