Yes, well that is a good point w.r.t. strings as typically passed to string.h
functions. I guess in this case I had figured that the use of __FILE__ could
easily be optimized since it becomes a string constant. Am I wrong? Is the
issue that __FILE__ might occur multiple times in a source file and thus become
a merged constant? Perhaps there is simply not much use for a string-optimizing
feature since reducing program size isn’t a goal for most developers these days?
Then, more to the point, I wonder if there shouldn’t be a macro in clang/llvm
for returning only the current source file name, e.g. __FILE_NAME__. I don’t
know what the feeling is on introducing macros that do not exist in gcc, since
it seems that up until now the approach has been quite conservative. Does no
one else have a desire to easily suppress the full hard drive paths that will
show up in their binaries with the use of __FILE__? Or perhaps everyone simply
has their own existing solutions to this, such as a build system that can pass
clang the files by relative path, or placing the source code on its own volume?
On Sep 20, 2014, at 10:41 AM, David Blaikie <dblaikie at gmail.com> wrote:
> I imagine that would be difficult. If you pass the resulting pointer out to
unknown code/functions, there's nothing to stop that code from walking
backwards from the pointer and having well defined behavior of observing the
prefix you tried to hide.
>
> Essentially the compiler would have to be able to see and analyze all uses
of that pointer in one go before it could optimize away the prefix.
>
> On Sep 19, 2014 8:41 PM, "Iritscen" <iritscen at yahoo.com>
wrote:
> Hello all. Is there a way to get llvm/clang at build-time to optimize a
string.h call so that the final form of the string is saved in the binary? For
instance, for a statement like...
>
> strrchr(__FILE__, '/') + 1
>
> …and where clang is called on this code’s source file with “clang
/some/long/path/file.c”, can I end up with only “file.c” stored in the binary on
disk? I think you can see that I am attempting to avoid full paths from my
machine ending up in the program. My IDE, Xcode, always passes full paths to
clang when building. Thanks.
> _______________________________________________
> LLVM Developers mailing list
> LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
-------------- next part --------------
An HTML attachment was scrubbed...
URL:
<http://lists.llvm.org/pipermail/llvm-dev/attachments/20140920/1793f01e/attachment.html>