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