[llvm-commits] [llvm-gcc-4.2] r46589 - /llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp
Devang Patel
dpatel at apple.com
Thu Jan 31 15:14:39 PST 2008
On Jan 30, 2008, at 6:11 PM, Dale Johannesen wrote:
>
> On Jan 30, 2008, at 5:13 PM, Dale Johannesen wrote:
>
>>
>> On Jan 30, 2008, at 5:05 PM, Devang Patel wrote:
>>
>>> handle_used_attribute() sets DECL_PRESERVE_P bit, so what am I
>>> missing ?
>>
>> It was not set in the example in gcc.dg/tree-used.c. I'll step
>> through and figure out why, agree it looks like it ought to be.
>
> In that example there is a declaration with __attribute__((used)),
> followed by a definition without it. merge_decls clobbers the
> PRESERVE bit when it merges the two nodes gcc constructs. The
> DECL_USED bit is not clobbered, which is enough to cause the function
> to be emitted with non-llvm-gcc but not with llvm-gcc, which is enough
> to get the test to pass. But, the no_dead_strip command is
> incorrectly dropped in the non-llvm-gcc version as well. So I've
> stumbled into a latent gcc bug, although not one that causes any
> testsuite failures AFAICT.
> (The attributes list is merged correctly in merge_decls, so my patch
> seems to be an improvement. However, there's another case in my
> example, where a definition without attribute((used)) is followed by a
> declaration with attribute((used)). For that, the USED bit gets set
> and is good enough for gcc to emit the body, as before, but both
> compilers drop the no_dead_strip: a bug. Unfortunately the USED bit
> is not good enough for llvm: llvm drops the second definition if you
> run llvm-as | opt | llc instead of using llvm-gcc. So there's still a
> bug here that may matter.)
okay..
> Good catch, thanks Devang.
:) I remembered this because Objective-C FE sets DECL_PRESERVE_P for
certain decls to ensure that llvm optimizer/code generator does not
drop them. These are LLVM specific patches in objc-act.c While you're
here please make sure that they are not broken.
Thanks!
-
Devang
More information about the llvm-commits
mailing list