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