aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Sandiford <rsandifo@nildram.co.uk>2008-01-18 00:28:28 +0000
committerTobias Burnus <burnus@gcc.gnu.org>2008-01-18 01:28:28 +0100
commit5cc5439e27c65911e1af867dd2804b0f0dd48f5e (patch)
tree7319fe4f3f288420ff28d488c2ac9f1839e3026d
parentb80034e81f2d50ac03223fb996349ad7814d3c6a (diff)
downloadgcc-5cc5439e27c65911e1af867dd2804b0f0dd48f5e.zip
gcc-5cc5439e27c65911e1af867dd2804b0f0dd48f5e.tar.gz
gcc-5cc5439e27c65911e1af867dd2804b0f0dd48f5e.tar.bz2
re PR fortran/34686 (Aliasing bug when returning character pointers)
2008-01-18 Richard Sandiford <rsandifo@nildram.co.uk> PR fortran/34686 * trans-expr.c (gfc_conv_function_call): Use proper type for returned character pointers. From-SVN: r131620
-rw-r--r--gcc/fortran/ChangeLog6
-rw-r--r--gcc/fortran/trans-expr.c8
2 files changed, 7 insertions, 7 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index dccfcdf..ff0e639 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -1,3 +1,9 @@
+2008-01-18 Richard Sandiford <rsandifo@nildram.co.uk>
+
+ PR fortran/34686
+ * trans-expr.c (gfc_conv_function_call): Use proper
+ type for returned character pointers.
+
2008-01-17 Paul Thomas <pault@gcc.gnu.org>
PR fortran/34429
diff --git a/gcc/fortran/trans-expr.c b/gcc/fortran/trans-expr.c
index c1de2a9..9e30a99 100644
--- a/gcc/fortran/trans-expr.c
+++ b/gcc/fortran/trans-expr.c
@@ -2660,13 +2660,7 @@ gfc_conv_function_call (gfc_se * se, gfc_symbol * sym,
character pointers. */
if (sym->attr.pointer || sym->attr.allocatable)
{
- /* Build char[0:len-1] * pstr. */
- tmp = fold_build2 (MINUS_EXPR, gfc_charlen_type_node, len,
- build_int_cst (gfc_charlen_type_node, 1));
- tmp = build_range_type (gfc_array_index_type,
- gfc_index_zero_node, tmp);
- tmp = build_array_type (gfc_character1_type_node, tmp);
- var = gfc_create_var (build_pointer_type (tmp), "pstr");
+ var = gfc_create_var (type, "pstr");
/* Provide an address expression for the function arguments. */
var = build_fold_addr_expr (var);