This is the mail archive of the gcc-prs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

target/4731: SPARC gives wrong output on simple combination of Fortran main program and C functions



>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:


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]