[LLVMbugs] [Bug 5365] New: __attribute__ ((__transparent_union__)) implementation is incomplete

bugzilla-daemon at cs.uiuc.edu bugzilla-daemon at cs.uiuc.edu
Sun Nov 1 15:49:03 PST 2009


           Summary: __attribute__ ((__transparent_union__)) implementation
                    is incomplete
           Product: clang
           Version: 2.6
          Platform: PC
        OS/Version: Linux
            Status: NEW
          Severity: normal
          Priority: P2
         Component: -New Bugs
        AssignedTo: unassignedclangbugs at nondot.org
        ReportedBy: harriman at acm.org
                CC: clattner at apple.com, llvmbugs at cs.uiuc.edu,
                    edwintorok at gmail.com, sharparrow1 at yahoo.com,
                    daniel at zuster.org, krj at rajaratnam.dk, dgregor at apple.com
        Depends on: 2015

Created an attachment (id=3738)
 --> (http://llvm.org/bugs/attachment.cgi?id=3738)
test case - works with gcc, error with clang

The fix for Bug #2015 implemented one aspect of 
__attribute__((__transparent_union__)); however, this test case shows that
clang still does not fully implement the gcc semantics.

  typedef union { struct s *sp; } u __attribute__ ((__transparent_union__));
  extern void g(u);
  extern void g(struct s *sp);

The above code is accepted by gcc, but rejected by clang, like this:

  clang -c clang091101a.c
  clang091101a.c:3:13: error: conflicting types for 'g'
  extern void g(struct s *sp);
  clang091101a.c:2:13: note: previous declaration is here
  extern void g(u);

The incompatibility causes trouble with the Gnu Autoconf macro
AC_SELECT_ARGTYPES, which attempts to determine suitable types
for definition of variables to be passed to the select() function.
The Autoconf macro guesses at the parameter types and tries to 
redeclare select().  If the compiler rejects the redeclaration, 
then the macro concludes that those types can't be passed to
select().  With clang, all of the guesses fail.  

The same technique is used in some other Autoconf macros and scripts.
For example, when trying to build PostgreSQL 8.4 on RHEL 5 Linux with
clang, the autoconf-generated 'configure' script fails because of this.

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