🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

1 total messages Started by Kevin Dalley Thu, 03 Sep 1992 01:30
Questionable warning for prototype functions with void* arguments
#1052
Author: Kevin Dalley
Date: Thu, 03 Sep 1992 01:30
79 lines
3536 bytes
gcc-2.2.2 gives a warning message that I believe is incorrect on the
source code included below.  I configured gcc with mips-sgi-irix4.
I'm using an SGI 4D/35 running Irix 4.0.1.  I have applied a few patches, but
none of them seem relevant here.  Here's the code.

typedef void (*voidfunc_t)(void *);

void fred (void *a)
{
}

void ethel(int *a)
{
}

void lucy(int a)
{
}

void ricky(voidfunc_t func, void *a)
{
    (*func)(a);
}

int main()
{
    int a;
    void *b;
    b = &a;
    ethel(b);
    fred(&a);
    ricky(fred, &a);
    ricky(ethel, &a);
    ricky(lucy, a);
}

The output from running gcc, including the warning messages look like
this:

% cd /usr/people/kevin/tmp/bugs/gcc/; gcc -v fred.c
setp: command not found
re_t: command not found
Reading specs from /usr/local/lib/gcc-lib/mips-sgi-irix4/2.2.2/specs
gcc version 2.2.2
 /usr/local/lib/gcc-lib/mips-sgi-irix4/2.2.2/cpp -lang-c -v -undef -D__GNUC__=2 -Dunix -Dmips -Dsgi -DSVR3 -Dhost_mips -DMIPSEB -DSYSTYPE_SYSV -D__unix__ -D__mips__ -D__sgi__ -D__SVR3__ -D__host_mips__ -D__MIPSEB__ -D__SYSTYPE_SYSV__ -D__unix -D__mips -D__sgi -D__SVR3 -D__host_mips -D__MIPSEB -D__SYSTYPE_SYSV -D__CHAR_UNSIGNED__ -D__EXTENSIONS__ -D_MIPSEB -D_SYSTYPE_SYSV -D_LANGUAGE_C -DLANGUAGE_C fred.c /usr/tmp/cca21511.i
GNU CPP version 2.2.2 [AL 1.1, MM 19] Silicon Graphics Mips
 /usr/local/lib/gcc-lib/mips-sgi-irix4/2.2.2/cc1 /usr/tmp/cca21511.i -quiet -dumpbase fred.c -version -o /usr/tmp/cca21511.s
GNU C version 2.2.2 [AL 1.1, MM 19] Silicon Graphics Mips compiled by GNU C version 2.2.2.
fred.c: In function `main':
fred.c:28: warning: passing arg 1 of `ricky' from incompatible pointer type
fred.c:29: warning: passing arg 1 of `ricky' from incompatible pointer type
fred.c:29: warning: passing arg 2 of `ricky' makes pointer from integer without a cast
 as -nocpp -v -o fred.o /usr/tmp/cca21511.s
/usr/lib/as0 -v -G 8 -EB -g0 -O1 /usr/tmp/cca21511.s -o /tmp/ctmaa21514 -t /tmp/ctmsta21514 
as0: fred ethel lucy ricky main 
0.03u 0.03s 0:00.1 60%
/usr/lib/as1 -v -G 8 -p0 -EB -g0 -O1 /tmp/ctmaa21514 -o fred.o -t /tmp/ctmsta21514 
as1: fred ethel lucy ricky main 
0.02u 0.05s 0:00.1 54%
 /usr/local/lib/gcc-lib/mips-sgi-irix4/2.2.2/mips-tfile -v -o fred.o /usr/tmp/cca21511.s
mips-tfile version 2.2.2 [AL 1.1, MM 19] Silicon Graphics Mips
 /usr/local/lib/gcc-lib/mips-sgi-irix4/2.2.2/ld /usr/lib/crt1.o -L/usr/local/lib/gcc-lib/mips-sgi-irix4/2.2.2 -L/usr/local/lib fred.o -lgcc -lc /usr/lib/crtn.o -lgcc

Done 17:49:25



I'm not absolutely positive, but I believe that the first warning (for
line 28) is incorrect.  Just as it is acceptable to call "ethel(b)"
where b is void *, I think that it should be acceptable to call
"ricky(ethel, &a)" since ethel is compatible with type voidfunc_t.
Thus the warning for line 28 should not be there.  The warnings for
line 29 are valid since an int is not compatible with a void *.
I just added line 29 for comparison with line 28.

--
Kevin Dalley
Toshiba America MRI, Inc.
kevin@tamri.com
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads