🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: gnu.gcc.bug
Article #2590

serious bug in inline functions.

#2590
From: Glenn Engel
Date: Mon, 01 May 1989 20:59
100 lines
2494 bytes
gcc-1.35 / hp9k320g.h

Here's a nasty little bug dealing with inline functions. 
In the function main below, 4 bytes of local space are allocated but when
the second call to printit is made, the compiler makes use of a temporary int 
at -6 from fp, thus munching part of the stack.  The program appears to run
fine but has very serious side affects when the contents of the stack are
used in other functions.

gcc version 1.35
 /usr/local/lib/gcc-cpp -v -undef -D__GNUC__ -Dhp9000s200 -Dhp9000s300 -DPWB -Dmc68k -Dhpux -Dunix -D__hp9000s200__ -D__hp9000s300__ -D__PWB__ -D__mc68k__ -D__hpux__ -D__unix__ -D__HAVE_68881__ -Dmc68020 t.c /tmp/cca17275.cpp
GNU CPP version 1.35
 /usr/local/lib/gcc-cc1 /tmp/cca17275.cpp -quiet -dumpbase t.c -version -o /tmp/cca17275.s
GNU C version 1.35 (68k, MIT syntax) compiled by GNU C version 1.35.
 /usr/local/lib/gcc-as -mc68020 -o t.o /tmp/cca17275.s
 /usr/local/lib/gcc-ld /usr/local/lib/gnu/crt0.o t.o /usr/local/lib/gcc-gnulib -lc


typedef unsigned char usc;

printit(usc * cptr)
{
  printf("%c=\n",*cptr);
  }

static inline void doit(usc *cptr)
{
  printit(cptr);
  }

static inline void doitadr(usc ch)
{
  printit(&ch);
  }

main()
{
  usc ch;

  ch = 'a';

  doit(&ch);
  doitadr(ch);
  }


#NO_APP
gcc_compiled.:
.text
LC0:
	.ascii "%c=\12\0"
	.even
.globl _printit
_printit:
	link a6,#0
	movel a6@(8),a0
	clrl d0
	moveb a0@,d0
	movel d0,sp@-
	pea LC0
	jbsr _printf
L1:
	unlk a6
	rts
	.even
.globl _main
_main:
	link a6,#-4                  <************   only 4 bytes
	movel d2,sp@-
	moveb #97,a6@(-1)
	movel a6,d2
	subql #1,d2
	movel a6,d0
	subql #2,d0
	movel d2,sp@-
	jbsr _printit
	addqw #4,sp
L7:
	clrl d0
	moveb a6@(-1),d0
	movel d0,a6@(-6)            <**************  offset -6 used
	movel a6,d0
	subql #4,d0
	moveb a6@(-3),d0
	movel a6,d0
	subql #3,d0
	movel d0,sp@-
	jbsr _printit
	addqw #4,sp
L8:
L6:
	movel a6@(-8),d2
	unlk a6
	rts

--
 |  Glenn R. Engel
 |  Hewlett-Packard 
 |  (206) 335-2066
 |  glenne%hplsla@hplabs.hp.com
Technical Details
Message-ID: <8905012059.AA17333@labgre.HP.COM>
Path: arc1-ca.pugleaf.net!utzoo!utgpu!jarvis.csri.toronto.edu!mailrus!tut.cis.ohio-state.edu!HP-SDE.SDE.HP.COM!glenne%hplsla

Show Full Headers
Complete Article Headers
Path: arc1-ca.pugleaf.net!utzoo!utgpu!jarvis.csri.toronto.edu!mailrus!tut.cis.ohio-state.edu!HP-SDE.SDE.HP.COM!glenne%hplsla
From: glenne%hplsla@HP-SDE.SDE.HP.COM (Glenn Engel)
Newsgroups: gnu.gcc.bug
Subject: serious bug in inline functions.
Message-ID: <8905012059.AA17333@labgre.HP.COM>
Date: 1 May 89 20:59:18 GMT
Sender: daemon@tut.cis.ohio-state.edu
Distribution: gnu
Organization: GNUs Not Usenet
Lines: 100