http://llvm.org/bugs/show_bug.cgi?id=5365

           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: [email protected]
        ReportedBy: [email protected]
                CC: [email protected], [email protected],
                    [email protected], [email protected],
                    [email protected], [email protected], [email protected]
        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.
_______________________________________________
LLVMbugs mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/llvmbugs

Reply via email to