[gnu.gcc.bug] GCC 1.36 does not promote float return values with -ftraditional

cmills@wyse.wyse.com (01/21/90)

As I understand it, K&R C is supposed to convert declarations of the form
'float foo()' to 'double foo()'.  GCC 1.36 does not seem to do this, even with
the -ftraditional flag.  For the input

float bar();
double foo() {
  float a=1.0;
  return bar(a);
}

I get these results (with config.gcc sun3):

Script started on Sat Jan 20 14:06:22 1990
wyse:cmills:/uss/cmills (21) gcc -S -ftraditional foo.c
wyse:cmills:/uss/cmills (22) cat foo.s
#NO_APP
gcc_compiled.:
.text
	.even
LC0:
	.single 0r1.00000000000000000000e+00
	.even
.globl _foo
_foo:
	link a6,#-4
	movel LC0,a6@(-4)
	fmoves a6@(-4),fp0
	fmoved fp0,sp@-
	movel sp@+,d0
	movel sp@+,d1
	movel d1,sp@-
	movel d0,sp@-
	jbsr _bar
	movel d0,d0
	fmoves d0,fp0		<- bar's return value (which should be double)
	fmoved fp0,sp@-		<- is coerced to double for foo's return.
	movel sp@+,d0
	movel sp@+,d1
	jra L1
L1:
	unlk a6
	rts
wyse:cmills:/uss/cmills (23) cc -S -f68881 foo.c
wyse:cmills:/uss/cmills (24) cat foo.s
LL0:
	.data
	.text
|#PROC# 07
	.globl	_foo
_foo:
|#PROLOGUE# 0
	link	a6,#0
	addl	#-LF13,sp
	moveml	#LS13,sp@
	fmovem	#LSS13,a6@(-LFF13:l)
|#PROLOGUE# 1
	movl	#0x3f800000,a6@(-0x4)
	fmoves	a6@(-0x4),fp0
	fmoved	fp0,sp@-
	jbsr	_bar		<- bar's return value is double, no coercion
	addqw	#0x8,sp
	jra	LE13
LE13:
	unlk	a6
	rts
	LF13 = 4
	LS13 = 0x0
	LFF13 = 4
	LSS13 = 0x0
	LP13 =	0xc
	.data
	.globl	f68881_used
wyse:cmills:/uss/cmills (25) exit
wyse:cmills:/uss/cmills (26) 
script done on Sat Jan 20 14:07:30 1990