glandium added a comment.

OTOH. 6.2.7.3:

> A composite type can be constructed from two types that are compatible; it is 
> a type that is compatible with both of the two types (...)

6.2.7.5:

> EXAMPLE Given the following two file scope declarations:
> int f(int (*)(), double (*)[3]);
> int f(int (*)(char *), double (*)[]);
> The resulting composite type for the function is:
> int f(int (*)(char *), double (*)[3]);

This suggests that `int(*)()` and `int(*)(char*)` are compatible.

6.2.7.2:

> All declarations that refer to the same object or function shall have 
> compatible type; otherwise, the behavior is undefined.

6.3.2.3.1:

> A pointer to void may be converted to or from a pointer to any object type. A 
> pointer to any object type may be converted to a pointer to void and back 
> again; the result shall compare equal to the original pointer.

These are either contradicting, making 6.3.2.3.1 UB, or void* is compatible 
with other pointer types.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D148827/new/

https://reviews.llvm.org/D148827

_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to