|
Message-ID: <503771F3.2040204@gmail.com> Date: Fri, 24 Aug 2012 18:22:11 +0600 From: agent <agentprog@...il.com> To: musl@...ts.openwall.com Subject: Re: build musl with clang 24.08.2012 17:01, Szabolcs Nagy пишет: > so the bug is still present > > try to make a minimal testcase > > eg. > > void *f() > { > char *p; > > p = malloc(100); > if (p && p[0]) > p[0] = 0; > return p; > } > > > and compile with -O3 -ffreestanding -S > > if the check is eliminated then it's a bug f: # @f # BB#0: # %entry subl $12, %esp movl $100, (%esp) calll malloc testl %eax, %eax je .LBB0_2 # BB#1: # %if.then movb $0, (%eax) .LBB0_2: # %if.end addl $12, %esp ret i suppose, 'if' is not elliminated. but if i create a function f2 with contents of musl's calloc it fails the test. then i noticed in musl's calloc a cycle is wrapped into an 'if' with p with negative subscript and tried the following: void *f1() { char *p; int i; p = malloc(100); if (p[-1]) p[0] = 0; return p; } and that's i we get: f1: # @f1 # BB#0: # %if.end subl $12, %esp movl $100, (%esp) calll malloc movb $0, (%eax) addl $12, %esp ret but if we have if (p && p[-1]) -- 'if' is not optimized out.
Powered by blists - more mailing lists
Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.