[LLVMbugs] [Bug 5598] New: Clang generate wrong alignement on packed structure

bugzilla-daemon at cs.uiuc.edu bugzilla-daemon at cs.uiuc.edu
Mon Nov 23 08:45:29 PST 2009


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

           Summary: Clang generate wrong alignement on packed structure
           Product: clang
           Version: trunk
          Platform: PC
        OS/Version: Linux
            Status: NEW
          Severity: normal
          Priority: P2
         Component: LLVM Codegen
        AssignedTo: unassignedclangbugs at nondot.org
        ReportedBy: quickslyver at free.fr
                CC: llvmbugs at cs.uiuc.edu


Created an attachment (id=3854)
 --> (http://llvm.org/bugs/attachment.cgi?id=3854)
testcase

this code generate unaligned access with clang:

struct __attribute__((__packed__)) s { char c; unsigned long x; };
void foo (struct s *s) { s->x = 0; }


for example with arm:
clang outputs:

foo:
  mov r1, #0
  str r1, [r0, #+1]
  bx lr

this generate an unaligned access exception.

gcc outputs:

 foo:
  mov r3, #0
  strb r3, [r0, #4]
  strb r3, [r0, #1]
  strb r3, [r0, #2]
  strb r3, [r0, #3]
  bx lr

the llvm IR with clang without optimizations:

$ clang-cc -emit-llvm -o - -disable-llvm-optzns test.c
-triple=arm-unknown-unknown
; ModuleID = 'test.c'
target datalayout =
"e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-n32"
target triple = "arm-unknown-unknown"

%struct.s = type <{ i8, i32 }>

define arm_aapcscc void @foo(%struct.s* %s) nounwind {
entry:
  %s.addr = alloca %struct.s*                     ; <%struct.s**> [#uses=2]
  store %struct.s* %s, %struct.s** %s.addr
  %tmp = load %struct.s** %s.addr                 ; <%struct.s*> [#uses=1]
  %tmp1 = getelementptr inbounds %struct.s* %tmp, i32 0, i32 1 ; <i32*>
[#uses=1]
  store i32 0, i32* %tmp1
  ret void
}

According to baldrick the last store should be:
store i32 0, i32* %tmp1, align 1
instead of 
store i32 0, i32* %tmp1


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