diff options
author | Tobias Burnus <burnus@net-b.de> | 2013-04-18 20:59:38 +0200 |
---|---|---|
committer | Tobias Burnus <burnus@gcc.gnu.org> | 2013-04-18 20:59:38 +0200 |
commit | 36abe8958790744a78e4159c96d8be05d1458ff9 (patch) | |
tree | 6ee281c2a3bcf72cd82191493519aeaf778bc791 /gcc/fortran/data.c | |
parent | 6f5a366a60e2ee3b3d9ea3500cab1d2de63a6e72 (diff) | |
download | gcc-36abe8958790744a78e4159c96d8be05d1458ff9.zip gcc-36abe8958790744a78e4159c96d8be05d1458ff9.tar.gz gcc-36abe8958790744a78e4159c96d8be05d1458ff9.tar.bz2 |
expr.c (find_array_element): Don't copy expr.
2013-04-18 Tobias Burnus <burnus@net-b.de>
* expr.c (find_array_element): Don't copy expr.
* data.c (create_character_initializer): Free expr.
* frontend-passes.c (combine_array_constructor): Ditto.
* match.c (match_typebound_call, gfc_match_select_type): Ditto.
* resolve.c (resolve_typebound_function): Free gfc_ref.
From-SVN: r198068
Diffstat (limited to 'gcc/fortran/data.c')
-rw-r--r-- | gcc/fortran/data.c | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/gcc/fortran/data.c b/gcc/fortran/data.c index f297ef5..a1c89fa 100644 --- a/gcc/fortran/data.c +++ b/gcc/fortran/data.c @@ -106,6 +106,7 @@ create_character_initializer (gfc_expr *init, gfc_typespec *ts, { int len, start, end; gfc_char_t *dest; + bool alloced_init = false; gfc_extract_int (ts->u.cl->length, &len); @@ -114,6 +115,7 @@ create_character_initializer (gfc_expr *init, gfc_typespec *ts, /* Create a new initializer. */ init = gfc_get_character_expr (ts->kind, NULL, NULL, len); init->ts = *ts; + alloced_init = true; } dest = init->value.character.string; @@ -134,6 +136,10 @@ create_character_initializer (gfc_expr *init, gfc_typespec *ts, { gfc_error ("failure to simplify substring reference in DATA " "statement at %L", &ref->u.ss.start->where); + gfc_free_expr (start_expr); + gfc_free_expr (end_expr); + if (alloced_init) + gfc_free_expr (init); return NULL; } |