[LLVMbugs] [Bug 3850] New: clang: wrong diagnostic for typedefed union
bugzilla-daemon at cs.uiuc.edu
bugzilla-daemon at cs.uiuc.edu
Fri Mar 20 10:13:44 PDT 2009
http://llvm.org/bugs/show_bug.cgi?id=3850
Summary: clang: wrong diagnostic for typedefed union
Product: new-bugs
Version: unspecified
Platform: PC
OS/Version: Linux
Status: NEW
Severity: normal
Priority: P2
Component: new bugs
AssignedTo: unassignedbugs at nondot.org
ReportedBy: edwintorok at gmail.com
CC: llvmbugs at cs.uiuc.edu
Testcase (preprocessed source attached)
#define _GNU_SOURCE
#include <arpa/inet.h>
#include <sys/types.h>
#include <sys/socket.h>
int foo(int fd, const struct sockaddr_in *sin)
{
return connect(fd, (const struct sockaddr*)sin, sizeof(struct
sockaddr_in));
}
$ clang foo.c
foo.c:7:24: warning: passing 'struct sockaddr const *' discards qualifiers,
expected '__CONST_SOCKADDR_ARG' (aka 'void *const')
return connect(fd, (const struct sockaddr*)sin, sizeof(struct
sockaddr_in));
^~~~~~~~~~~~~~~~~~~~~~~~~~~
1 diagnostic generated.
Without _GNU_SOURCE no diagnostic is generated.
However __CONST_SOCKADDR_ARG is a typedefed union, and I don't see why it is
not compatible, when one of its members is __const struct sockaddr *, which is
exactly the type passed as parameter, and its certeainly not a void*.
extern int connect (int __fd, __CONST_SOCKADDR_ARG __addr, socklen_t __len);
typedef union { __const struct sockaddr *__restrict __sockaddr__; __const
struct sockaddr_at *__restrict __sockaddr_at__; __const struct s
ockaddr_ax25 *__restrict __sockaddr_ax25__; __const struct sockaddr_dl
*__restrict __sockaddr_dl__; __const struct sockaddr_eon *__restric
t __sockaddr_eon__; __const struct sockaddr_in *__restrict __sockaddr_in__;
__const struct sockaddr_in6 *__restrict __sockaddr_in6__; __co
nst struct sockaddr_inarp *__restrict __sockaddr_inarp__; __const struct
sockaddr_ipx *__restrict __sockaddr_ipx__; __const struct sockadd
r_iso *__restrict __sockaddr_iso__; __const struct sockaddr_ns *__restrict
__sockaddr_ns__; __const struct sockaddr_un *__restrict __socka
ddr_un__; __const struct sockaddr_x25 *__restrict __sockaddr_x25__;
} __CONST_SOCKADDR_ARG __attribute__ ((__transparent_union__));
--
Configure bugmail: http://llvm.org/bugs/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are on the CC list for the bug.
More information about the llvm-bugs
mailing list