[gnu.gcc.bug] gcc typecheck bug

jdf@UUNET.UU.NET (Jean-Daniel FEKETE) (11/21/88)

The following code outputs a warning in gcc 1.30 :
gcc -O -W -S foo.c

----------------------------------------------------------------------
typedef int func_typed(struct _object *);


struct _object {
  func_typed *fn;
};

typedef struct _object object;

object o;

int doit_on(obj)
     object *obj;
{
  
  int b;
  b = (* o.fn)(obj);
  /* it says : warning: argument passing between incompatible pointer types */
  bar(b);			/* this is to avoid optimization maybe */
  return b;
}
     
----------------------------------------------------------------------

whereas the following does not:

----------------------------------------------------------------------

struct _object {
  int	(* fn)(struct _object *);
};

typedef struct _object object;

object o;

int doit_on(obj)
     object *obj;
{
  
  int b;
  b = (* o.fn)(obj);
  bar(b);			/* this is to avoid optimization maybe */
  return b;
}
     
----------------------------------------------------------------------

	strange isn't it ?

		Jean-Daniel.