[gnu.g++.bug] Apparent bug in GCC and G++ 1.32 - sizeof

rfg@MCC.COM (Ron Guilmette) (01/13/89)

I believe that putting an ampersand in front of a function name is
normally superfluous and that the same meanning is implied even without
the ampersand.  Therefore, it seems that for any function "f", it should
be the case that:

	sizeof (f) == sizeof (&f)

The following program demonstrates that this is not the case for GCC 1.32
and G++ 1.32.  Rather, it seems that sizeof (f) yields 1.  Is this called
for by some part of ANSI C that I don't know about?

links:
     md	       	    == m68k.md
     aux-output.c   == output-m68k.c
     config.h  	    == xm-m68k.h
     tm.h      	    == tm-sun3.h (or tm-sun3+.h for G++)

/* --------------------------- cut here ----------------------------------*/
/*
Description - Check that the sizeof() function yields proper values.
*/

int _failed = 0;

void _result (void);

void _cmp_eq (char *, unsigned int, unsigned int);

int main()
{
  _cmp_eq ("sizeof (main) != sizeof (char *)", sizeof (main), sizeof (char *));
  _cmp_eq ("sizeof (main) != sizeof (&main)", sizeof (main), sizeof (&main));
  _result ();
}

void _cmp_eq (char *msg, unsigned int v1, unsigned int v2)
{
  if (v1 != v2) {
    printf ("FAILED - %s: %d\n", msg, v1);
    _failed = 1;
  }
}

void _result ()
{
  if (!_failed)
    printf ("PASSED");
  exit (0);
}