From 5cc5439e27c65911e1af867dd2804b0f0dd48f5e Mon Sep 17 00:00:00 2001
From: Richard Sandiford <rsandifo@nildram.co.uk>
Date: Fri, 18 Jan 2008 00:28:28 +0000
Subject: [PATCH] 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
---
 gcc/fortran/ChangeLog    | 6 ++++++
 gcc/fortran/trans-expr.c | 8 +-------
 2 files changed, 7 insertions(+), 7 deletions(-)

diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index dccfcdf7939a..ff0e63962a84 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 c1de2a9fad2a..9e30a9938430 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);
-- 
GitLab