[LLVMbugs] [Bug 7150] New: transparent_unions makes clang ICE

bugzilla-daemon at llvm.org bugzilla-daemon at llvm.org
Sun May 16 15:05:54 PDT 2010


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

           Summary: transparent_unions makes clang ICE
           Product: clang
           Version: trunk
          Platform: PC
        OS/Version: Linux
            Status: NEW
          Severity: normal
          Priority: P
         Component: -New Bugs
        AssignedTo: unassignedclangbugs at nondot.org
        ReportedBy: madcoder at debian.org
                CC: llvmbugs at cs.uiuc.edu


clang sometimes ICEs with transparent unions for code that compiles fine with
gcc.


$ gcc -O2 -Wall -Wextra -c a.i -o /dev/null

$ clang -O2 -Wall -Wextra -c a.i -o /dev/null
clang: /home/madcoder/dev/llvm/lib/VMCore/Instructions.cpp:1046: void
llvm::StoreInst::AssertOK(): Assertion `getOperand(0)->getType() ==
cast<PointerType>(getOperand(1)->getType())->getElementType() && "Ptr must be a
pointer to Val type!"' failed.
Stack dump:
0.    Program arguments: /usr/local/bin/clang -cc1 -triple
x86_64-unknown-linux-gnu -S -disable-free -main-file-name a.i
-mrelocation-model static -mdisable-fp-elim -mconstructor-aliases
-munwind-tables -target-cpu x86-64 -resource-dir /usr/local/lib/clang/2.0 -O2
-Wall -Wextra -ferror-limit 19 -fmessage-length 239 -fgnu-runtime
-fdiagnostics-show-option -fcolor-diagnostics -o /tmp/cc-IwZQDv.s -x cpp-output
a.i 
1.    <eof> parser at end of file
2.    a.i:11:6: LLVM IR generation of declaration 'bar'
3.    a.i:11:6: Generating code for declaration 'bar'
4.    a.i:12:1: LLVM IR generation of compound statement ('{}')
clang: error: compiler command failed due to signal 6 (use -v to see
invocation)

===================== a.i content ===================
typedef union tu_t {
    unsigned long long u64;
    void *ptr;
} tu_t __attribute__((transparent_union));

typedef struct some_type_t some_type_t;

extern void foo(tu_t);
extern void bar(some_type_t *ic);

void bar(some_type_t *ic)
{
    foo(ic);
}

=====================================================

For what it's worth, foo((void *)ic) compiles fine.

For one, as in C any point casts implicitely to void *, the some_type_t *
should find its way through the "ptr" member of the transparent union, second
even if that's not supported yet, it should not make clang abort :)

-- 
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