[llvm-dev] How to force an unused function declaration in clang

via llvm-dev llvm-dev at lists.llvm.org
Tue Jun 26 11:00:51 PDT 2018


Define a variable that takes the address of the otherwise-unused function.
--paulr

From: llvm-dev [mailto:llvm-dev-bounces at lists.llvm.org] On Behalf Of Soham Sinha via llvm-dev
Sent: Tuesday, June 26, 2018 12:20 PM
To: hans at chromium.org
Cc: via llvm-dev
Subject: Re: [llvm-dev] How to force an unused function declaration in clang

I realize that gcc also doesn't provide<https://godbolt.org/g/ismnEj> this feature if the function doesn't have a body. I was wondering if there is any elegant way to achieve this, instead of the "hack" I mentioned earlier.

Regards,
Soham Sinha
PhD Student, Department of Computer Science
Boston University


On Tue, Jun 26, 2018 at 10:58 AM Soham Sinha <soham1 at bu.edu<mailto:soham1 at bu.edu>> wrote:
It does, when the function has a body. When it doesn't, it ignores<https://godbolt.org/g/2BCvht>. The body might be provided later on in the toolchain via linking a library.

Regards,
Soham Sinha
PhD Student, Department of Computer Science
Boston University


On Tue, Jun 26, 2018 at 10:25 AM Hans Wennborg <hans at chromium.org<mailto:hans at chromium.org>> wrote:
It works for me:

https://godbolt.org/g/3QzqAH

Can you share an example?

On Tue, Jun 26, 2018 at 5:21 PM, Soham Sinha via llvm-dev
<llvm-dev at lists.llvm.org<mailto:llvm-dev at lists.llvm.org>> wrote:
> For the same reason GCC allowed the attribute. Even if I want to use/inline
> a function later on in the pipeline.
>
> Regards,
> Soham Sinha
> PhD Student, Department of Computer Science
> Boston University
>
>
> On Tue, Jun 26, 2018 at 8:30 AM mayuyu.io<http://mayuyu.io> <admin at mayuyu.io<mailto:admin at mayuyu.io>> wrote:
>>
>> Out of curiosity, how does an unused declaration affect the emitted object
>> file
>>
>> Zhang
>>
>> > 在 2018年6月26日,08:48,Soham Sinha via llvm-dev <llvm-dev at lists.llvm.org<mailto:llvm-dev at lists.llvm.org>>
>> > 写道:
>> >
>> > clang doesn't seem to respect __attribute__((used)) in C functions. Even
>> > if I declare a function like the following:   __attribute__((used)) void
>> > function(), then also it doesn't declare the function in its IR file if I
>> > don't use the function. Is there any other way to force the declaration of
>> > "unused" function declarations with clang.
>> >
>> > I have hacked in clang 6.0.0 in
>> > tools/clang/lib/CodeGen/CodeGenModule.cpp file. I changed in EmitGlobal
>> > function to detect if the function has "used" attribute and then if it has
>> > then use "GetOrCreateLLVMFunction" this to create the function declaration.
>> > However, this hack fails in some other cases. Therefore I am looking for a
>> > proper way to do this.
>> >
>> > Regards,
>> > Soham Sinha
>> > PhD Student, Department of Computer Science
>> > Boston University
>> > _______________________________________________
>> > LLVM Developers mailing list
>> > llvm-dev at lists.llvm.org<mailto:llvm-dev at lists.llvm.org>
>> > http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
>>
>>
>>
>
> _______________________________________________
> LLVM Developers mailing list
> llvm-dev at lists.llvm.org<mailto:llvm-dev at lists.llvm.org>
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20180626/d4c1c586/attachment.html>


More information about the llvm-dev mailing list