[Bug fortran/29951] [4.3 Regression] incorrect conversion from string to integer by TRANSFER()

2007-01-22 Thread pinskia at gcc dot gnu dot org


--- Comment #11 from pinskia at gcc dot gnu dot org  2007-01-23 05:15 
---
Subject: Bug 29951

Author: pinskia
Date: Tue Jan 23 05:15:21 2007
New Revision: 121076

URL: http://gcc.gnu.org/viewcvs?root=gccview=revrev=121076
Log:
2007-01-22  Andrew Pinski  [EMAIL PROTECTED]

PR fortran/29951
* gfortran.fortran-torture/execute/transfer2.f90: New test.

PR Fortran/29410
* gfortran.fortran-torture/execute/transfer1.f90: New test.
2007-01-22 Andrew Pinski  [EMAIL PROTECTED]

PR fortran/29951
* trans-intrinsic.c (gfc_conv_intrinsic_transfer): Change to
call memcpy instead of creating a VIEW_CONVERT_EXRP.

PR fortran/29410
* trans-intrinsic.c (gfc_conv_intrinsic_array_transfer):
Change over to create VIEW_CONVERT_EXPR instead of using an
ADDR_EXPR, a cast and then an indirect reference.


Added:
   
branches/gcc-4_2-branch/gcc/testsuite/gfortran.fortran-torture/execute/transfer1.f90
  - copied unchanged from r118186,
trunk/gcc/testsuite/gfortran.fortran-torture/execute/transfer1.f90
   
branches/gcc-4_2-branch/gcc/testsuite/gfortran.fortran-torture/execute/transfer2.f90
  - copied unchanged from r119211,
trunk/gcc/testsuite/gfortran.fortran-torture/execute/transfer2.f90
Modified:
branches/gcc-4_2-branch/gcc/fortran/ChangeLog
branches/gcc-4_2-branch/gcc/fortran/trans-intrinsic.c
branches/gcc-4_2-branch/gcc/testsuite/ChangeLog


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=29951



[Bug fortran/29951] [4.3 Regression] incorrect conversion from string to integer by TRANSFER()

2006-11-27 Thread kloedej at knmi dot nl


--- Comment #10 from kloedej at knmi dot nl  2006-11-27 08:21 ---
thanks for your effort to fix this bug!
I can confirm todays binary version, downloaded from
http://quatramaran.ens.fr/~coudert/gfortran/gfortran-linux.tar.gz
works fine for me.

best regards,

Jos de kloe


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=29951



[Bug fortran/29951] [4.3 Regression] incorrect conversion from string to integer by TRANSFER()

2006-11-25 Thread pinskia at gcc dot gnu dot org


--- Comment #8 from pinskia at gcc dot gnu dot org  2006-11-25 21:43 ---
Subject: Bug 29951

Author: pinskia
Date: Sat Nov 25 21:43:48 2006
New Revision: 119211

URL: http://gcc.gnu.org/viewcvs?root=gccview=revrev=119211
Log:
2006-11-25  Andrew Pinski  [EMAIL PROTECTED]

PR fortran/29951
* trans-intrinsic.c (gfc_conv_intrinsic_transfer): Change to
call memcpy instead of creating a VIEW_CONVERT_EXRP.

2006-11-25  Andrew Pinski  [EMAIL PROTECTED]

PR fortran/29951
* gfortran.fortran-torture/execute/transfer2.f90: New test


Added:
trunk/gcc/testsuite/gfortran.fortran-torture/execute/transfer2.f90
Modified:
trunk/gcc/fortran/ChangeLog
trunk/gcc/fortran/trans-intrinsic.c
trunk/gcc/testsuite/ChangeLog


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=29951



[Bug fortran/29951] [4.3 Regression] incorrect conversion from string to integer by TRANSFER()

2006-11-25 Thread pinskia at gcc dot gnu dot org


--- Comment #9 from pinskia at gcc dot gnu dot org  2006-11-25 21:45 ---
Fixed.


-- 

pinskia at gcc dot gnu dot org changed:

   What|Removed |Added

 Status|ASSIGNED|RESOLVED
 Resolution||FIXED


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=29951



[Bug fortran/29951] [4.3 Regression] incorrect conversion from string to integer by TRANSFER()

2006-11-24 Thread pinskia at gcc dot gnu dot org


--- Comment #6 from pinskia at gcc dot gnu dot org  2006-11-24 08:13 ---
Mine to fix then.


-- 

pinskia at gcc dot gnu dot org changed:

   What|Removed |Added

 AssignedTo|unassigned at gcc dot gnu   |pinskia at gcc dot gnu dot
   |dot org |org
 Status|NEW |ASSIGNED
Summary|incorrect conversion from   |[4.3 Regression] incorrect
   |string to integer by|conversion from string to
   |TRANSFER()  |integer by TRANSFER()
   Target Milestone|--- |4.3.0
Version|4.2.0   |4.3.0


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=29951



[Bug fortran/29951] [4.3 Regression] incorrect conversion from string to integer by TRANSFER()

2006-11-24 Thread pinskia at gcc dot gnu dot org


--- Comment #7 from pinskia at gcc dot gnu dot org  2006-11-24 22:46 ---
Here is the patch which I am testing, it fixes this testcase;
Index: trans-intrinsic.c
===
--- trans-intrinsic.c   (revision 119148)
+++ trans-intrinsic.c   (working copy)
@@ -2989,7 +2989,7 @@ gfc_conv_intrinsic_array_transfer (gfc_s


 /* Scalar transfer statement.
-   TRANSFER (source, mold) = VIEW_CONVERT_EXPRtypeofmold source.  */
+   TRANSFER (source, mold) = memcpy(tmpdecl, source, size), tmpdecl.  */

 static void
 gfc_conv_intrinsic_transfer (gfc_se * se, gfc_expr * expr)
@@ -2999,6 +2999,7 @@ gfc_conv_intrinsic_transfer (gfc_se * se
   tree type;
   tree ptr;
   gfc_ss *ss;
+  tree tmpdecl, tmp, args;

   /* Get a pointer to the source.  */
   arg = expr-value.function.actual;
@@ -3014,6 +3015,7 @@ gfc_conv_intrinsic_transfer (gfc_se * se

   arg = arg-next;
   type = gfc_typenode_for_spec (expr-ts);
+
   if (expr-ts.type == BT_CHARACTER)
 {
   ptr = convert (build_pointer_type (type), ptr);
@@ -3026,8 +3028,22 @@ gfc_conv_intrinsic_transfer (gfc_se * se
 }
   else
 {
-  tree tmp = build_fold_indirect_ref (ptr);
-  se-expr = fold_build1 (VIEW_CONVERT_EXPR, type, tmp);
+  tree moldsize;
+  tmpdecl = gfc_create_var (type, transfer);
+  moldsize = size_in_bytes (type);
+
+  /* Use memcpy to do the transfer.  */
+  tmp = build1 (ADDR_EXPR, build_pointer_type (type), tmpdecl);
+  tmp = fold_convert (pvoid_type_node, tmp);
+  args = gfc_chainon_list (NULL_TREE, tmp);
+  tmp = fold_convert (pvoid_type_node, ptr);
+  args = gfc_chainon_list (args, tmp);
+  args = gfc_chainon_list (args, moldsize);
+  tmp = built_in_decls[BUILT_IN_MEMCPY];
+  tmp = build_function_call_expr (tmp, args);
+  gfc_add_expr_to_block (se-pre, tmp);
+
+  se-expr = tmpdecl;
 }
 }


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=29951