This is the mail archive of the
gcc-prs@gcc.gnu.org
mailing list for the GCC project.
target/4731: SPARC gives wrong output on simple combination of Fortran main program and C functions
- To: gcc-gnats at gcc dot gnu dot org
- Subject: target/4731: SPARC gives wrong output on simple combination of Fortran main program and C functions
- From: toon at moene dot indiv dot nluug dot nl
- Date: 29 Oct 2001 15:59:49 -0000
- Cc: "Hillel \(Sabba\) Markowitz" <sabbahem at bcpl dot net>
- Reply-To: toon at moene dot indiv dot nluug dot nl
>Number: 4731
>Category: target
>Synopsis: SPARC gives wrong output on simple combination of Fortran main program and C functions
>Confidential: no
>Severity: serious
>Priority: medium
>Responsible: unassigned
>State: open
>Class: wrong-code
>Submitter-Id: net
>Arrival-Date: Mon Oct 29 08:06:01 PST 2001
>Closed-Date:
>Last-Modified:
>Originator: Hillel (Sabba) Markowitz
>Release: GCC 3.0.1
>Organization:
>Environment:
SPARC, Solaris 8
uname -a
SunOS mumble 5.8 Generic_108528-10 sun4u sparc SUNW,Sun-Blade-100
>Description:
This Fortran main program:
PROGRAM TEST_G77
REAL*4 PRINT_A
REAL*4 TEST_GCC
REAL*4 S, V, T
REAL*8 PRINT_DA
REAL*8 TEST_DGCC
REAL*8 DS, DV, DT
T = 20.0
S = TEST_GCC(T)
WRITE(*,'(A, F16.5, 3X, Z8)') "S = ", S, S
WRITE(*,'(A, F16.5, 3X, Z8)') "T = ", T, T
DT = 20.0
DS = TEST_DGCC(DT)
WRITE(*,'(A, F16.5, 3X, Z16)') "DS = ", DS, DS
WRITE(*,'(A, F16.5, 3X, Z16)') "DT = ", DT, DT
END
combined with these C functions:
float test_gcc_(float *b)
{
float a;
a = 10.0;
printf("a=%f (%#x)\n",a,a);
printf("b=%f (%#x)\n",*b,*b);
return(a);
}
double test_dgcc_(double *db)
{
double da;
da = 10.0;
printf("da=%f (%#x)\n",da,da);
printf("db=%f (%#x)\n",*db,*db);
return(da);
}
float print_a_(float *a)
{
printf("A = %f (%#x)\n", *a, *a);
return(0);
}
double print_da_(double *da)
{
printf("DA = %f (%#x)\n", *da, *da);
return(0);
}
give the wrong output:
a=10.000000 (0x40240000)
b=20.000000 (0x40340000)
S = 524288.00000 49000000
T = 20.00000 41A00000
da=10.000000 (0x40240000)
db=20.000000 (0x40340000)
DS = 10.00000 4024000000000000
DT = 20.00000 4034000000000000
[ The first value of S should be 10.00000 ]
>How-To-Repeat:
g77 -o bla fortran.f c.c
>Fix:
>Release-Note:
>Audit-Trail:
>Unformatted: