This is the mail archive of the
fortran@gcc.gnu.org
mailing list for the GNU Fortran project.
[libgfortran] Change complex type letter to 'z'
- From: Feng Wang <wf_cs at yahoo dot com>
- To: fortran <fortran at gcc dot gnu dot org>, patch <gcc-patches at gcc dot gnu dot org>
- Date: Tue, 16 Dec 2003 10:41:32 +0800 (CST)
- Subject: [libgfortran] Change complex type letter to 'z'
Hi, all
The front end of fortran uses 'z' as the complex type letter. But libgfortran
uses 'c'and this will cause link error. This patch fixes this.
The libgfortran ChangeLog entry:
2003-12-16 Feng Wang <fengwang@nudt.edu.cn>
* libgfortran.h (gfc_array_c*): Change complex type letter to 'z'.
* Makefile.am: Ditto.
* m4/dotprod.m4: Ditto .
* m4/iparm.m4: Ditto.
* m4/matmul.m4: Ditto.
* m4/specific.m4: Ditto.
* m4/specific2.m4: Ditto.
* m4/types.m4: Ditto.
* Makefile.in: Regenerate.
* generated/*: Update.
The testsuit ChangeLog.tree-ssa entry:
2003-12-16 Feng Wang <fengwang@nudt.edu.cn>
* gfortran.fortran-torture/excute/intrinsic_matmul.f90:
Add complex test.
Could anyone help me check and apply them?
r~
Feng Wang
__________________________________________________
Do You Yahoo!?
Tired of spam? Yahoo! Mail has the best spam protection around
http://mail.yahoo.com
Index: Makefile.am
===================================================================
RCS file: /home/cvs/gcc/libgfortran/Makefile.am,v
retrieving revision 1.1.1.1
diff -c -3 -p -r1.1.1.1 Makefile.am
*** Makefile.am 3 Dec 2003 22:07:08 -0000 1.1.1.1
--- Makefile.am 16 Dec 2003 17:27:10 -0000
*************** generated/sum_i4.c \
*** 137,160 ****
generated/sum_i8.c \
generated/sum_r4.c \
generated/sum_r8.c \
! generated/sum_c4.c \
! generated/sum_c8.c
i_product_c= \
generated/product_i4.c \
generated/product_i8.c \
generated/product_r4.c \
generated/product_r8.c \
! generated/product_c4.c \
! generated/product_c8.c
i_dotprod_c= \
generated/dotprod_i4.c \
generated/dotprod_i8.c \
generated/dotprod_r4.c \
generated/dotprod_r8.c \
! generated/dotprod_c4.c \
! generated/dotprod_c8.c
i_dotprodl_c= \
generated/dotprod_l4.c \
--- 137,160 ----
generated/sum_i8.c \
generated/sum_r4.c \
generated/sum_r8.c \
! generated/sum_z4.c \
! generated/sum_z8.c
i_product_c= \
generated/product_i4.c \
generated/product_i8.c \
generated/product_r4.c \
generated/product_r8.c \
! generated/product_z4.c \
! generated/product_z8.c
i_dotprod_c= \
generated/dotprod_i4.c \
generated/dotprod_i8.c \
generated/dotprod_r4.c \
generated/dotprod_r8.c \
! generated/dotprod_z4.c \
! generated/dotprod_z8.c
i_dotprodl_c= \
generated/dotprod_l4.c \
*************** generated/matmul_i4.c \
*** 165,172 ****
generated/matmul_i8.c \
generated/matmul_r4.c \
generated/matmul_r8.c \
! generated/matmul_c4.c \
! generated/matmul_c8.c
i_matmull_c= \
generated/matmul_l4.c \
--- 165,172 ----
generated/matmul_i8.c \
generated/matmul_r4.c \
generated/matmul_r8.c \
! generated/matmul_z4.c \
! generated/matmul_z8.c
i_matmull_c= \
generated/matmul_l4.c \
*************** gfor_built_src= $(i_all_c) $(i_any_c) $(
*** 239,262 ****
# We only use these if libm doesn't contain complex math functions.
gfor_math_trig_c= \
! generated/trig_c4.c \
! generated/trig_c8.c
gfor_math_exp_c= \
! generated/exp_c4.c \
! generated/exp_c8.c
gfor_math_hyp_c= \
! generated/hyp_c4.c \
! generated/hyp_c8.c
gfor_math_trig_obj= \
! trig_c4.lo \
! trig_c8.lo
gfor_math_exp_obj= \
! exp_c4.lo \
! exp_c8.lo
gfor_math_hyp_obj= \
! hyp_c4.lo \
! hyp_c8.lo
# Machine generated specifics
gfor_built_specific_src= \
--- 239,262 ----
# We only use these if libm doesn't contain complex math functions.
gfor_math_trig_c= \
! generated/trig_z4.c \
! generated/trig_z8.c
gfor_math_exp_c= \
! generated/exp_z4.c \
! generated/exp_z8.c
gfor_math_hyp_c= \
! generated/hyp_z4.c \
! generated/hyp_z8.c
gfor_math_trig_obj= \
! trig_z4.lo \
! trig_z8.lo
gfor_math_exp_obj= \
! exp_z4.lo \
! exp_z8.lo
gfor_math_hyp_obj= \
! hyp_z4.lo \
! hyp_z8.lo
# Machine generated specifics
gfor_built_specific_src= \
*************** generated/_abs_r4.f90 \
*** 264,281 ****
generated/_abs_r8.f90 \
generated/_exp_r4.f90 \
generated/_exp_r8.f90 \
! generated/_exp_c4.f90 \
! generated/_exp_c8.f90 \
generated/_log_r4.f90 \
generated/_log_r8.f90 \
! generated/_log_c4.f90 \
! generated/_log_c8.f90 \
generated/_log10_r4.f90 \
generated/_log10_r8.f90 \
generated/_sqrt_r4.f90 \
generated/_sqrt_r8.f90 \
! generated/_sqrt_c4.f90 \
! generated/_sqrt_c8.f90 \
generated/_asin_r4.f90 \
generated/_asin_r8.f90 \
generated/_acos_r4.f90 \
--- 264,281 ----
generated/_abs_r8.f90 \
generated/_exp_r4.f90 \
generated/_exp_r8.f90 \
! generated/_exp_z4.f90 \
! generated/_exp_z8.f90 \
generated/_log_r4.f90 \
generated/_log_r8.f90 \
! generated/_log_z4.f90 \
! generated/_log_z8.f90 \
generated/_log10_r4.f90 \
generated/_log10_r8.f90 \
generated/_sqrt_r4.f90 \
generated/_sqrt_r8.f90 \
! generated/_sqrt_z4.f90 \
! generated/_sqrt_z8.f90 \
generated/_asin_r4.f90 \
generated/_asin_r8.f90 \
generated/_acos_r4.f90 \
*************** generated/_atan_r4.f90 \
*** 284,295 ****
generated/_atan_r8.f90 \
generated/_sin_r4.f90 \
generated/_sin_r8.f90 \
! generated/_sin_c4.f90 \
! generated/_sin_c8.f90 \
generated/_cos_r4.f90 \
generated/_cos_r8.f90 \
! generated/_cos_c4.f90 \
! generated/_cos_c8.f90 \
generated/_tan_r4.f90 \
generated/_tan_r8.f90 \
generated/_sinh_r4.f90 \
--- 284,295 ----
generated/_atan_r8.f90 \
generated/_sin_r4.f90 \
generated/_sin_r8.f90 \
! generated/_sin_z4.f90 \
! generated/_sin_z8.f90 \
generated/_cos_r4.f90 \
generated/_cos_r8.f90 \
! generated/_cos_z4.f90 \
! generated/_cos_z8.f90 \
generated/_tan_r4.f90 \
generated/_tan_r8.f90 \
generated/_sinh_r4.f90 \
*************** generated/_cosh_r4.f90 \
*** 298,305 ****
generated/_cosh_r8.f90 \
generated/_tanh_r4.f90 \
generated/_tanh_r8.f90 \
! generated/_conjg_c4.f90 \
! generated/_conjg_c8.f90 \
generated/_aint_r4.f90 \
generated/_aint_r8.f90 \
generated/_anint_r4.f90 \
--- 298,305 ----
generated/_cosh_r8.f90 \
generated/_tanh_r4.f90 \
generated/_tanh_r8.f90 \
! generated/_conjg_z4.f90 \
! generated/_conjg_z8.f90 \
generated/_aint_r4.f90 \
generated/_aint_r8.f90 \
generated/_anint_r4.f90 \
Index: libgfortran.h
===================================================================
RCS file: /home/cvs/gcc/libgfortran/libgfortran.h,v
retrieving revision 1.1.1.1
diff -c -3 -p -r1.1.1.1 libgfortran.h
*** libgfortran.h 3 Dec 2003 22:07:09 -0000 1.1.1.1
--- libgfortran.h 16 Dec 2003 17:27:10 -0000
*************** typedef GFC_ARRAY_DESCRIPTOR (GFC_MAX_DI
*** 126,133 ****
typedef GFC_ARRAY_DESCRIPTOR (GFC_MAX_DIMENSIONS, GFC_INTEGER_8) gfc_array_i8;
typedef GFC_ARRAY_DESCRIPTOR (GFC_MAX_DIMENSIONS, GFC_REAL_4) gfc_array_r4;
typedef GFC_ARRAY_DESCRIPTOR (GFC_MAX_DIMENSIONS, GFC_REAL_8) gfc_array_r8;
! typedef GFC_ARRAY_DESCRIPTOR (GFC_MAX_DIMENSIONS, GFC_COMPLEX_4) gfc_array_c4;
! typedef GFC_ARRAY_DESCRIPTOR (GFC_MAX_DIMENSIONS, GFC_COMPLEX_8) gfc_array_c8;
typedef GFC_ARRAY_DESCRIPTOR (GFC_MAX_DIMENSIONS, GFC_LOGICAL_4) gfc_array_l4;
typedef GFC_ARRAY_DESCRIPTOR (GFC_MAX_DIMENSIONS, GFC_LOGICAL_8) gfc_array_l8;
--- 126,133 ----
typedef GFC_ARRAY_DESCRIPTOR (GFC_MAX_DIMENSIONS, GFC_INTEGER_8) gfc_array_i8;
typedef GFC_ARRAY_DESCRIPTOR (GFC_MAX_DIMENSIONS, GFC_REAL_4) gfc_array_r4;
typedef GFC_ARRAY_DESCRIPTOR (GFC_MAX_DIMENSIONS, GFC_REAL_8) gfc_array_r8;
! typedef GFC_ARRAY_DESCRIPTOR (GFC_MAX_DIMENSIONS, GFC_COMPLEX_4) gfc_array_z4;
! typedef GFC_ARRAY_DESCRIPTOR (GFC_MAX_DIMENSIONS, GFC_COMPLEX_8) gfc_array_z8;
typedef GFC_ARRAY_DESCRIPTOR (GFC_MAX_DIMENSIONS, GFC_LOGICAL_4) gfc_array_l4;
typedef GFC_ARRAY_DESCRIPTOR (GFC_MAX_DIMENSIONS, GFC_LOGICAL_8) gfc_array_l8;
Index: m4/dotprod.m4
===================================================================
RCS file: /home/cvs/gcc/libgfortran/m4/dotprod.m4,v
retrieving revision 1.1.1.1
diff -c -3 -p -r1.1.1.1 dotprod.m4
*** m4/dotprod.m4 3 Dec 2003 22:07:09 -0000 1.1.1.1
--- m4/dotprod.m4 16 Dec 2003 17:27:10 -0000
*************** Boston, MA 02111-1307, USA. */
*** 24,30 ****
#include <assert.h>
#include "libgfortran.h"'
include(types.m4)dnl
! define(rtype_code, regexp(file, `_\([irc][0-9]+\)\.', `\1'))dnl
define(rtype_letter,substr(rtype_code, 0, 1))dnl
define(rtype_kind, substr(rtype_code, 1))dnl
define(rtype,get_arraytype(rtype_letter,rtype_kind))dnl
--- 24,30 ----
#include <assert.h>
#include "libgfortran.h"'
include(types.m4)dnl
! define(rtype_code, regexp(file, `_\([irz][0-9]+\)\.', `\1'))dnl
define(rtype_letter,substr(rtype_code, 0, 1))dnl
define(rtype_kind, substr(rtype_code, 1))dnl
define(rtype,get_arraytype(rtype_letter,rtype_kind))dnl
Index: m4/iparm.m4
===================================================================
RCS file: /home/cvs/gcc/libgfortran/m4/iparm.m4,v
retrieving revision 1.1.1.1
diff -c -3 -p -r1.1.1.1 iparm.m4
*** m4/iparm.m4 3 Dec 2003 22:07:09 -0000 1.1.1.1
--- m4/iparm.m4 16 Dec 2003 17:27:10 -0000
*************** dnl This file is part of the GNU Fortran
*** 4,12 ****
dnl Distributed under the GNU LGPL. See COPYING for details.
dnl M4 macro file to get type names from filenames
include(`types.m4')
! define(type_letter, regexp(file, `_\([irlc]\)[^_]*$', \1))dnl
! define(type_kind, regexp(file, `_[irlc]\([0-9]*\)[^_]*$', \1))dnl
! define(rtype_kind, regexp(file, `_\([0-9]*\)_[irlc][0-9]*[^_]*$', `\1'))dnl
define(type_code, type_letter`'type_kind)dnl
define(type_name, get_typename(type_letter,type_kind))dnl
define(atype, get_arraytype(type_letter,type_kind))dnl
--- 4,12 ----
dnl Distributed under the GNU LGPL. See COPYING for details.
dnl M4 macro file to get type names from filenames
include(`types.m4')
! define(type_letter, regexp(file, `_\([irlz]\)[^_]*$', \1))dnl
! define(type_kind, regexp(file, `_[irlz]\([0-9]*\)[^_]*$', \1))dnl
! define(rtype_kind, regexp(file, `_\([0-9]*\)_[irlz][0-9]*[^_]*$', `\1'))dnl
define(type_code, type_letter`'type_kind)dnl
define(type_name, get_typename(type_letter,type_kind))dnl
define(atype, get_arraytype(type_letter,type_kind))dnl
Index: m4/matmul.m4
===================================================================
RCS file: /home/cvs/gcc/libgfortran/m4/matmul.m4,v
retrieving revision 1.1.1.1
diff -c -3 -p -r1.1.1.1 matmul.m4
*** m4/matmul.m4 3 Dec 2003 22:07:09 -0000 1.1.1.1
--- m4/matmul.m4 16 Dec 2003 17:27:10 -0000
*************** Boston, MA 02111-1307, USA. */
*** 24,30 ****
#include <assert.h>
#include "libgfortran.h"'
include(types.m4)dnl
! define(rtype_code, regexp(file, `_\([irc][0-9]+\)\.', `\1'))dnl
define(rtype_letter,substr(rtype_code, 0, 1))dnl
define(rtype_kind, substr(rtype_code, 1))dnl
define(rtype,get_arraytype(rtype_letter,rtype_kind))dnl
--- 24,30 ----
#include <assert.h>
#include "libgfortran.h"'
include(types.m4)dnl
! define(rtype_code, regexp(file, `_\([irz][0-9]+\)\.', `\1'))dnl
define(rtype_letter,substr(rtype_code, 0, 1))dnl
define(rtype_kind, substr(rtype_code, 1))dnl
define(rtype,get_arraytype(rtype_letter,rtype_kind))dnl
Index: m4/specific.m4
===================================================================
RCS file: /home/cvs/gcc/libgfortran/m4/specific.m4,v
retrieving revision 1.1.1.1
diff -c -3 -p -r1.1.1.1 specific.m4
*** m4/specific.m4 3 Dec 2003 22:07:09 -0000 1.1.1.1
--- m4/specific.m4 16 Dec 2003 17:27:10 -0000
***************
*** 1,9 ****
include(head.m4)
! define(type_code,regexp(file,`_\([ircl][0-9]+\).f90',`\1'))dnl
define(type_letter,substr(type_code, 0, 1))dnl
define(type_kind,substr(type_code, 1))dnl
define(get_typename2, `$1 (kind=$2)')dnl
! define(get_typename, `get_typename2(ifelse($1,i,integer,ifelse($1,r,real,ifelse($1,l,logical,ifelse($1,c,complex,unknown)))),`$2')')dnl
define(type_name, get_typename(type_letter,type_kind))dnl
define(name, regexp(regexp(file, `[^/]*$', `\&'), `^_\([^_]*\)_', `\1'))dnl
define(function_name,`specific__'name`_'type_code)dnl
--- 1,9 ----
include(head.m4)
! define(type_code,regexp(file,`_\([irzl][0-9]+\).f90',`\1'))dnl
define(type_letter,substr(type_code, 0, 1))dnl
define(type_kind,substr(type_code, 1))dnl
define(get_typename2, `$1 (kind=$2)')dnl
! define(get_typename, `get_typename2(ifelse($1,i,integer,ifelse($1,r,real,ifelse($1,l,logical,ifelse($1,z,complex,unknown)))),`$2')')dnl
define(type_name, get_typename(type_letter,type_kind))dnl
define(name, regexp(regexp(file, `[^/]*$', `\&'), `^_\([^_]*\)_', `\1'))dnl
define(function_name,`specific__'name`_'type_code)dnl
Index: m4/specific2.m4
===================================================================
RCS file: /home/cvs/gcc/libgfortran/m4/specific2.m4,v
retrieving revision 1.1.1.1
diff -c -3 -p -r1.1.1.1 specific2.m4
*** m4/specific2.m4 3 Dec 2003 22:07:09 -0000 1.1.1.1
--- m4/specific2.m4 16 Dec 2003 17:27:10 -0000
***************
*** 1,9 ****
include(head.m4)
! define(type_code,regexp(file,`_\([ircl][0-9]+\).f90',`\1'))dnl
define(type_letter,substr(type_code, 0, 1))dnl
define(type_kind,substr(type_code, 1))dnl
define(get_typename2, `$1 (kind=$2)')dnl
! define(get_typename, `get_typename2(ifelse($1,i,integer,ifelse($1,r,real,ifelse($1,l,logical,ifelse($1,c,complex,unknown)))),`$2')')dnl
define(type_name, get_typename(type_letter,type_kind))dnl
define(name, regexp(regexp(file, `[^/]*$', `\&'), `^_\([^_]*\)_', `\1'))dnl
define(function_name,`specific__'name`_'type_code)dnl
--- 1,9 ----
include(head.m4)
! define(type_code,regexp(file,`_\([irzl][0-9]+\).f90',`\1'))dnl
define(type_letter,substr(type_code, 0, 1))dnl
define(type_kind,substr(type_code, 1))dnl
define(get_typename2, `$1 (kind=$2)')dnl
! define(get_typename, `get_typename2(ifelse($1,i,integer,ifelse($1,r,real,ifelse($1,l,logical,ifelse($1,z,complex,unknown)))),`$2')')dnl
define(type_name, get_typename(type_letter,type_kind))dnl
define(name, regexp(regexp(file, `[^/]*$', `\&'), `^_\([^_]*\)_', `\1'))dnl
define(function_name,`specific__'name`_'type_code)dnl
Index: m4/types.m4
===================================================================
RCS file: /home/cvs/gcc/libgfortran/m4/types.m4,v
retrieving revision 1.1.1.1
diff -c -3 -p -r1.1.1.1 types.m4
*** m4/types.m4 3 Dec 2003 22:07:09 -0000 1.1.1.1
--- m4/types.m4 16 Dec 2003 17:27:10 -0000
***************
*** 1,4 ****
define(get_typename2, `GFC_$1_$2')dnl
! define(get_typename, `get_typename2(ifelse($1,i,INTEGER,ifelse($1,r,REAL,ifelse($1,l,LOGICAL,ifelse($1,c,COMPLEX,unknown)))),`$2')')dnl
define(get_arraytype, `gfc_array_$1$2')dnl
define(name, regexp(regexp(file, `[^/]*$', `\&'), `^\([^_]*\)_', `\1'))dnl
--- 1,4 ----
define(get_typename2, `GFC_$1_$2')dnl
! define(get_typename, `get_typename2(ifelse($1,i,INTEGER,ifelse($1,r,REAL,ifelse($1,l,LOGICAL,ifelse($1,z,COMPLEX,unknown)))),`$2')')dnl
define(get_arraytype, `gfc_array_$1$2')dnl
define(name, regexp(regexp(file, `[^/]*$', `\&'), `^\([^_]*\)_', `\1'))dnl
Index: intrinsic_matmul.f90
===================================================================
RCS file: /home/cvs/gcc/gcc/testsuite/gfortran.fortran-torture/execute/intrinsic_matmul.f90,v
retrieving revision 1.1.1.1
diff -c -3 -p -r1.1.1.1 intrinsic_matmul.f90
*** intrinsic_matmul.f90 3 Dec 2003 22:07:05 -0000 1.1.1.1
--- intrinsic_matmul.f90 16 Dec 2003 17:56:00 -0000
*************** program intrinsic_matmul
*** 7,15 ****
--- 7,20 ----
integer, dimension(3) :: y
integer, dimension(2, 2) :: r
integer, dimension(3) :: v
+ complex, dimension(3, 2) :: c
+ complex, dimension(2, 2) :: z
a = reshape((/1, 2, 2, 3, 3, 4/), (/2, 3/))
b = reshape((/1, 2, 3, 3, 4, 5/), (/3, 2/))
+ c = reshape((/(1.0, 2.0), (2.0, 3.0), (3.0, 4.0), (4.0, 5.0), (5.0, 6.0), &
+ (6.0, 7.0)/), (/3,2/))
+
x = (/1, 2/)
y = (/1, 2, 3/)
*************** program intrinsic_matmul
*** 21,24 ****
--- 26,33 ----
v(1:2) = matmul(a, y)
if (any(v(1:2) .ne. (/14, 20/))) call abort
+
+ z = matmul(a, c)
+ if (any(z .ne. reshape((/(14.0, 20.0), (20.0, 29.0), (32.0, 38.0),&
+ (47.0, 56.0)/), (/2, 2/)))) call abort
end program