Soham Sinha via llvm-dev
2018-Jun-26 15:58 UTC
[llvm-dev] How to force an unused function declaration in clang
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> 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> 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 <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> > >> > 写道: > >> > > >> > 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 > >> > http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev > >> > >> > >> > > > > _______________________________________________ > > LLVM Developers mailing list > > 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/49566de9/attachment.html>
Soham Sinha via llvm-dev
2018-Jun-26 16:20 UTC
[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> 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> 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> 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 <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 >> > >> >> > 写道: >> >> > >> >> > 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 >> >> > http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev >> >> >> >> >> >> >> > >> > _______________________________________________ >> > LLVM Developers mailing list >> > 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/966fc6b0/attachment.html>
via llvm-dev
2018-Jun-26 18:00 UTC
[llvm-dev] How to force an unused function declaration in clang
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>