[cfe-dev] Macros for revision number and commit hash

Jessica Paquette via cfe-dev cfe-dev at lists.llvm.org
Mon Mar 18 10:28:33 PDT 2019


WRT how we parse clang -v, this is potentially an issue for anyone that uses LNT today. The code used to infer information about the compiler *always* tries to use clang -v.

You can see this here: https://github.com/llvm-mirror/lnt/blob/master/lnt/testing/util/compilers.py <https://github.com/llvm-mirror/lnt/blob/master/lnt/testing/util/compilers.py> 

Since this output is intended for human-readability, and not stable machine-consumption, this can cause some issues for people using LNT. For example, if there’s a bug in the human-readable output, or it changes in a way LNT doesn’t expect, you’ll *always* get a run order of 0. This can, in the worst case, result in an insignificant amount of data loss for regular testing. So, having at least a stable way to grab version information would be useful for some of the code we offer up in open source today.

- Jessica

> On Mar 18, 2019, at 9:49 AM, James Y Knight <jyknight at google.com> wrote:
> 
> This seems mostly harmless -- except that I'd be worried that people will actually use them, when they probably shouldn't. :)
> 
> The __clang_revision_number__ value especially, being numeric, seems rather amenable for misuse. Having this as a standalone numeric value, I'd be worried that people would compare against a particular value, without realizing that it's effectively a meaningless number without knowing more about the branch you're talking about (which is rather non-trivial). At least the git hash is more-obviously not usable for ordering. But, exposing that also has some downsides, with lack of flexibility. If it's specified that it must be just a hash, it cannot hold additional info, for example that your build contains uncommitted changes.
> 
> So, I guess it's not entirely clear to me what useful purpose these values can be used for, for which __clang_version__ isn't already sufficient. (You mention that bots are parsing clang -v -- but to what end?)
> 
> 
> On Fri, Mar 15, 2019 at 5:13 PM JF Bastien via cfe-dev <cfe-dev at lists.llvm.org <mailto:cfe-dev at lists.llvm.org>> wrote:
> Hello macro enthusiasts!
> 
> By default, clang defines a lot of macros that allow developers to figure out things about the compiler that’s building them. I’m proposing that we add two more:
> __clang_revision_number__ : an unsigned integer, representing the current branch’s revision number.
> __clang_commit_hash__ : a string containing a hexadecimal hash, representing the current checkout’s hash.
> These would be set by cmake when building LLVM, and make the most sense in a monorepo on git. There’s been discussion of clang revision number in the context of git migration, captured on the git migration page <https://llvm.org/docs/Proposals/GitHubMove.html#on-managing-revision-numbers-with-git>.
> 
> Here are examples of similar numbers we currently offer:
> 
> auto major     = __clang_major__;      // 7
> auto minor     = __clang_minor__;      // 0
> auto patch     = __clang_patchlevel__; // 0
> auto version   = __clang_version__;    // "7.0.0 (tags/RELEASE_700/final 342594)”
> auto VERSION   = __VERSION__;          // "4.2.1 Compatible Clang 7.0.0 (tags/RELEASE_700/final 342594)”
> auto gnu_major = __GNUC__;             // 4
> auto gnu_minor = __GNUC_MINOR__;       // 2
> auto gnu_patch = __GNUC_PATCHLEVEL__;  // 1
> auto gxx_abi   = __GXX_ABI_VERSION;    // 1002
> 
> The two new values will be generally useful to tools that automatically handle revisions. For example, we currently have bots that parse clang -v, and that output is unfortunately aimed at humans (bots aren’t human). That’s broken in the past, and having these two values would help reduce the likelihood of breakage because macros have a pretty stable format and are easy to test.
> 
> Let us know what you think!
> 
> JF
> 
> _______________________________________________
> cfe-dev mailing list
> cfe-dev at lists.llvm.org <mailto:cfe-dev at lists.llvm.org>
> https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev <https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20190318/eeb80697/attachment.html>


More information about the cfe-dev mailing list