compositeType: void and void*
Benedikt Huber
benedikt.huber at gmail.com
Thu Sep 19 23:03:37 BST 2013
On 02.09.2013, at 22:24, Mikhail Sosonkin wrote:
> Hello,
>
> This one is slightly more complex. There is a case missing in the
> compositeType function.
>
> *** Exception: incompatible types: void *, void
>
> which can be fixed by the following addition
>
> compositeType t1@(PtrType in_t1 q1 a1) t2@(DirectType TyVoid q2 a2)
> = return t1
>
> Here I'm not sure if I chose the correct type to return. Maybe TyVoid
> would be more appropriate. The case comes up if I pass in (in the C
> input, as attached) a function pointer for a function that returns
> void but the parameter expects it to return a void pointer:
>
> int pthread_create(pthread_t * ,
> const pthread_attr_t * ,
> void *(*)(void *),
> void * );
> ....
> void modifier(void* arg) {
> ....
> pthread_create(&thread[0], ((void *)0), modifier, ((void *)0));
>
> I think this is a bug because the C compiler is happy to compile this
> code. I don't think it even gave me a warning.
Hi Mikhail,
the pointer types are incompatible, and both gcc 4.2.1 and clang 3.1
issue a warning because of that.
If I understand correctly, this code will always lead to unspecified
behavior (C99 6.5.5.2). Therefore it seems plausible to reject the
code, although gcc/clang are more forgiving in this case.
cheers, benedikt
More information about the Language-c
mailing list