Relay-Version: version B 2.10 5/3/83; site utzoo.UUCP
Posting-Version: version B 2.10.1 6/24/83; site lanl-a.UUCP
Path: utzoo!linus!philabs!cmcl2!lanl-a!pam
From: pam@lanl-a.UUCP
Newsgroups: net.lang.f77
Subject: f77 Bug
Message-ID: <11375@lanl-a.UUCP>
Date: Thu, 2-Aug-84 15:14:19 EDT
Article-I.D.: lanl-a.11375
Posted: Thu Aug  2 15:14:19 1984
Date-Received: Sat, 4-Aug-84 08:30:08 EDT
Organization: Los Alamos National Laboratory
Lines: 116

Can anyone provide a fix to this bug in f77 on 4.2BSD?  Please reply
directly to me, and I'll summarize to net.lang.f77.  The bug does not
occur if b=cmplx(abs(real(a)),abs(imag(a))) is replaced with
b=cmplx(real(a),abs(imag(a))).

      complex a, b

      a = (1.0, 2.0)
      b = cmplx (abs(real(a)), abs(imag(a)))

      print *, a, b

      stop
      end
	.data	0
	.align	2
L15:
	.long	0x4080
	.long	0x4100
	.align	2
L22:
	.long	0x0
	.align	2
L23:
	.long	6
	.align	2
L24:
	.long	1
	.align	2
L27:
.byte 00,00
	.set	LWM1,0x800
	.data	2
	.data	1
	.data	0
	.globl	_MAIN_
	.globl	_r_imag
	.globl	_s_wsle
	.globl	_do_lio
	.globl	_e_wsle
	.globl	_s_stop
	.align	2
	.stabs	"complex.f",0x64,0,0,0

.text
	.globl	_MAIN_
_MAIN_:
	.word	LWM1
	subl2	$LF1,sp
	jmp	L12
L13:
	movf	L15,v.2-v.1(r11)
	movf	L15+4,v.2-v.1+4(r11)
	movf	v.2-v.1(r11),-4(fp)
	cvtfd	-4(fp),-24(fp)
	cmpf	L22,-4(fp)
	jgtr	L9999
	movf	-4(fp),r0
	jbr	L9998
L9999:
	mnegf	-4(fp),r0
L9998:
	cvtfd	r0,-40(fp)
	cvtdf	-40(fp),-32(fp)
	clrf	-28(fp)
	movf	-32(fp),v.3-v.1(r11)
	movf	-28(fp),v.3-v.1+4(r11)
	pushl	$v.4
	calls	$1,_s_wsle
	pushl	$8
	addl3	$v.2-v.1,r11,r0
	pushl	r0
	pushl	$L24
	pushl	$L23
	calls	$4,_do_lio
	pushl	$8
	addl3	$v.3-v.1,r11,r0
	pushl	r0
	pushl	$L24
	pushl	$L23
	calls	$4,_do_lio
	calls	$0,_e_wsle
	pushl	$0
	pushl	$L27
	calls	$2,_s_stop
L14:
	ret
	.align	1
L12:
	movl	$v.1,r11
	jmp	L13
	.set	LF1,40
.text
	.data	2
	.align	2
v.4:
	.long	0
	.long	6
	.space	4
	.long	0
	.align	2
v.2:
	.space	8
	.align	2
v.3:
	.space	8
	.set	v.1,v.3

output from executable: 

  (   1.00000,   2.00000)  (   1.00000,  0.)

The above is incorrect.  The correct output should be:

  (   1.00000,   2.00000)  (   1.00000,  2.00000)