[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