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

             Bug #: 14843
           Summary: Dragonegg mishandles odd-sized struct argument
                    (miscompiles with -O1)
           Product: dragonegg
           Version: trunk
          Platform: All
        OS/Version: All
            Status: NEW
          Severity: normal
          Priority: P
         Component: New Bugs
        AssignedTo: [email protected]
        ReportedBy: [email protected]
                CC: [email protected]
    Classification: Unclassified


// testcase.cpp

struct I24 {bool x; bool y; bool z;};
int foo(I24 a) { return a.z; }

Dragonegg emits like;

%struct.I24 = type { i8, i8, i8 }

define i32 @_Z3foo3I24(i32 %a.0)
  %a_addr = alloca %struct.I24, align 1
  %0 = bitcast %struct.I24* %a_addr to { i32 }*
  %1 = getelementptr inbounds { i32 }* %0, i32 0, i32 0
  store i32 %a.0, i32* %1, align 1

SROA invalidates such a overwidth store with -O1.

FYI, clang emits like;

define i32 @_Z3foo3I24(i24 %a.coerce)
  %1 = alloca i24
  store i24 %a.coerce, i24* %1

I am using gcc-4.7.0.

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