<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Wed, Jan 1, 2014 at 10:28 PM, Alp Toker <span dir="ltr"><<a href="mailto:alp@nuanti.com" target="_blank">alp@nuanti.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div bgcolor="#FFFFFF" text="#000000"><div class="im">
<br>
<div>On 02/01/2014 02:52, Chandler Carruth
wrote:<br>
</div>
<blockquote type="cite">
<div dir="ltr">
<div class="gmail_extra"><br>
<div class="gmail_quote">On Wed, Jan 1, 2014 at 5:35 PM, Alp
Toker <span dir="ltr"><<a href="mailto:alp@nuanti.com" target="_blank">alp@nuanti.com</a>></span>
wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">&
is there a reason we're not using the
LLVM_STATIC_ASSERT macro here?<br>
</blockquote>
<br>
</div>
Requires LLVM_ENABLE_CXX11 which isn't yet enabled on most
(any?) of the builders.<br>
<br>
I'd just wait until C++11 and change the lot.</blockquote>
</div>
<br>
Did you check the definition? We provide a fallback if the
compiler doesn't support static_assert.</div>
</div>
</blockquote>
<br></div>
Sure, in fact I wrote the current definition of LLVM_STATIC_ASSERT
(or at least made the changes adding compiler checks in r198142 and
r198255).<br>
<br>
There is no fallback..<br>
<br>
<code>/// \macro LLVM_STATIC_ASSERT</code><code><br>
</code><code>/// \brief Expands to C/C++'s static_assert on
compilers which support it.</code><code><br>
</code><code>#if __has_feature(cxx_static_assert) || \</code><code><br>
</code><code> defined(__GXX_EXPERIMENTAL_CXX0X__) ||
LLVM_MSC_PREREQ(1600)</code><code><br>
</code><code># define LLVM_STATIC_ASSERT(expr, msg)
static_assert(expr, msg)</code><code><br>
</code><code>#elif __has_feature(c_static_assert)</code><code><br>
</code><code># define LLVM_STATIC_ASSERT(expr, msg)
_Static_assert(expr, msg)</code><code><br>
</code><code>#else</code><code><br>
</code><code># define LLVM_STATIC_ASSERT(expr, msg)</code><code><br>
</code><code>#endif</code><br>
<br>
The macro expands to nothing in the default build configuration:<br></div></blockquote><div><br></div><div>That is the fallback to which I refer. What I'm saying is that you can directly use LLVM_STATIC_ASSERT, you don't need to guard uses of it around anything to do with C++11. And that seems fine, especially in a unit test.</div>
<div><br></div><div>I did misread it on the first pass -- it tests for the feature static_assert, but not the extension static_assert, but that (and making it actually useful with GCC) is an orthogonal discussion.</div><div>
<br></div><div>My real point was that I agreed with Dave here -- it seems it would be much better to use LLVM_STATIC_ASSERT in this test rather than rolling our own C++98 variant. If we want to make the LLVM_STATIC_ASSERT better so that it fires in more build configuraitons, awesome, but I don't think its current weakness is a good argument for not using it.</div>
<div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div bgcolor="#FFFFFF" text="#000000">
<br>
<code>lib/Lex/PPMacroExpansion.cpp:
.Case("cxx_static_assert", LangOpts.CPlusPlus11)</code><div class="im"><code><br>
</code><code>
</code><br>
<blockquote type="cite">
<div dir="ltr">
<div class="gmail_extra"> We also test for support of
static_assert in a more fine grain way than merely that C++11
is enabled which should allow the macro to work on any build
using a modern (last 2 years) Clang host compiler.</div>
</div>
</blockquote>
<br></div>
Where?<br>
<br>
grep 'static_assert' through the LLVM source tree only finds the
single line above.<br>
<br>
Alp.<br>
<br>
<br>
<blockquote type="cite">
<div dir="ltr">
<div class="gmail_extra"><br>
</div>
<div class="gmail_extra">-Chandler</div>
</div>
</blockquote><div class="im">
<br>
<pre cols="72">--
<a href="http://www.nuanti.com" target="_blank">http://www.nuanti.com</a>
the browser experts
</pre>
</div></div>
</blockquote></div><br></div></div>