<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>