<div dir="ltr"><div class="gmail_quote"><div dir="ltr">Reproducible on TOT. Confirmed!<div><br></div><div>Thanks!</div></div><br><div class="gmail_quote"><div dir="ltr" class="m_-5760086726204221299gmail_attr">On Fri, Jan 25, 2019 at 10:10 AM Ding Fei <<a href="mailto:danix800@gmail.com" target="_blank">danix800@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div dir="ltr">Also found crashes on the snippet from llvm/tools/yaml2obj/yaml2coff.cpp:305-314, simplified as:<div><div><br></div></div></div><blockquote style="margin:0px 0px 0px 40px;border:none;padding:0px"><div><div><div><b>template <typename value_type></b></div></div></div><div><div><div><b>struct binary_le_impl {</b></div></div></div><div><div><div><b>  value_type Value;</b></div></div></div><div><div><div><b>};</b></div></div></div><div><div><div><b><br></b></div></div></div><div><div><div><b>template <typename value_type></b></div></div></div><div><div><div><b>void op_left_shift(const binary_le_impl<value_type> &BLE) {</b></div></div></div><div><div><div><b>  char Buffer[sizeof(BLE.Value)];</b></div></div></div><div><div><div><b>}</b></div></div></div></blockquote><div dir="ltr"><div><br></div><div>when mangling local <i>Buffer</i>.</div><div><br></div><div>Thanks!</div></div></div><br><div class="gmail_quote"><div dir="ltr" class="m_-5760086726204221299gmail-m_-3855851119047846886gmail_attr">On Fri, Jan 25, 2019 at 9:39 AM Ding Fei <<a href="mailto:danix800@gmail.com" target="_blank">danix800@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr">Sorry I didn't make it clear enough.<div><br></div><div>We are developing set of clang-tidy rules for code checking, one of which tries to mangle</div><div>every var declared and dump mangled names out for further analysis.</div><div><br></div><div>Usually this is not required for entities within function definition but they are well defined</div><div>according <a href="http://itanium-cxx-abi.github.io/cxx-abi/abi.html#mangling" target="_blank">Itanium C++ ABI</a> <i>[5.1.7] Scope Encoding</i>. So we mangled every local vars too</div><div>the check matcher sees.</div><div><br></div><div>Our code is based on release_70 [llvm + clang + clang-tools-extra]</div><div><br></div><div>The possible check prototype might look like:</div><div><br></div></div></div></div></div></div></div></div></div><blockquote style="margin:0px 0px 0px 40px;border:none;padding:0px"><div><div><div><div><div><div><div><div><div><div><b>void Check_XXX::registerMatchers(ast_matchers::MatchFinder *Finder) {</b></div></div></div></div></div></div></div></div></div></div><div><div><div><div><div><div><div><div><div><b>  using namespace ast_matchers;</b></div></div></div></div></div></div></div></div></div><div><div><div><div><div><div><div><div><div><div><b>  Finder->addMatcher(varDecl(unless(parmVarDecl())).bind("V"), this);</b></div></div></div></div></div></div></div></div></div></div><div><div><div><div><div><div><div><div><div><b>}</b></div></div></div></div></div></div></div></div></div><div><div><div><div><div><div><div><div><div><b><br></b></div></div></div></div></div></div></div></div></div><div><div><div><div><div><div><div><div><div><div><b>void Check_XXX::check(const ast_matchers::MatchFinder::MatchResult &Result) {</b></div></div></div></div></div></div></div></div></div></div><div><div><div><div><div><div><div><div><div><b>  auto &MangleCtx = getMangleCtx(); // an ItaniumMangleContext</b></div></div></div></div></div></div></div></div></div><div><div><div><div><div><div><div><div><div><b>  auto *V = Result.Nodes.getNodeAs<VarDecl>("V");</b></div></div></div></div></div></div></div></div></div><div><b><br></b></div><div><div><div><div><div><div><div><div><div><b>  if (!V || !MangleCtx.shouldMangleCXXName(V)) {</b></div></div></div></div></div></div></div></div></div></blockquote><blockquote style="margin:0px 0px 0px 40px;border:none;padding:0px"><div><b>    return;</b></div></blockquote><blockquote style="margin:0px 0px 0px 40px;border:none;padding:0px"><div><b>  }</b></div><div><b><br></b></div><div><div><div><div><div><div><div><div><div><b>  SmallString<64> Buffer;</b></div></div></div></div></div></div></div></div></div><div><div><div><div><div><div><div><div><div><b>  llvm::raw_svector_ostream Stream(Buffer);</b></div></div></div></div></div></div></div></div></div><div><div><div><div><div><div><div><div><div><b>  MangleCtx.MangleCXXName(V, Stream);</b></div></div></div></div></div></div></div></div></div><div><div><div><div><div><div><div><div><div><b>  llvm::outs() << "Mangled var: " << Buffer.str() << "\n";</b></div></div></div></div></div></div></div></div></div><div><div><div><div><div><div><div><div><div><b>}</b></div></div></div></div></div></div></div></div></div></blockquote><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div><br></div><div>The example code that triggers the assertion (sampled from <b>llvm/lib/Analysis/LazyCallGraph.cpp:1557-1564</b>):</div><div><br></div><blockquote style="margin:0px 0px 0px 40px;border:none;padding:0px"><div><b>#include <type_traits></b></div><div><b><br></b></div><div><b>class Node {};</b></div><div><b><br></b></div><div><b>template<typename GetBeginT></b></div><div><b>void buildGenericSCCs(GetBeginT &&GetBegin) {</b></div><div><b>  decltype(GetBegin(std::declval<Node &>())) DFSStack;</b></div><div><b>}</b></div></blockquote><div><br></div><div>The assertion triggered is</div><div><br></div></div></div></div></div></div></div></div></div><blockquote style="margin:0px 0px 0px 40px;border:none;padding:0px"><div><div><div><div><div><div><div><div><div><b>tools/clang/lib/AST/ItaniumMangle.cpp:4317: void (anonymous namespace)::</b></div></div></div></div></div></div></div></div></div><div><div><div><div><div><div><div><div><div><b>CXXNameMangler::</b><b>mangleFunctionParam(const clang::ParmVarDecl *):</b></div><div><b>Assertion `parmDepth < FunctionTypeDepth.getDepth()' failed.</b></div></div></div></div></div></div></div></div></div></blockquote><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div><br></div><div>Hope those info is enough for you, thanks!</div></div></div></div></div></div></div></div></div></div><br><div class="gmail_quote"><div dir="ltr" class="m_-5760086726204221299gmail-m_-3855851119047846886gmail-m_1834665693723466420gmail_attr">On Fri, Jan 25, 2019 at 2:07 AM Erik Pilkington <<a href="mailto:erik.pilkington@gmail.com" target="_blank">erik.pilkington@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
  
    
  
  <div bgcolor="#FFFFFF">
    Wait, why are we trying to mangle the local var decl here? Doesn't
    seem to repro on TOT for me, can you provide a
    backtrace/preprocessed source/a clang invocation for this?<br>
    <br>
    Erik<br>
    <br>
    <div class="m_-5760086726204221299gmail-m_-3855851119047846886gmail-m_1834665693723466420gmail-m_7259464656414262120moz-cite-prefix">On 1/24/19 3:22 AM, Ding Fei via
      cfe-dev wrote:<br>
    </div>
    <blockquote type="cite">
      
      <div dir="ltr">Hi all,<br>
        <br>
        On release_70, for the example code:<br>
        <b><br>
        </b>
        <blockquote style="margin:0px 0px 0px 40px;border:none;padding:0px"><b>#include
            <type_traits></b><b><br>
          </b><b>class Node {};</b><b><br>
          </b><b>template<typename GetBeginT><br>
          </b><b>void buildGenericSCCs(GetBeginT &&GetBegin) {<br>
          </b><b>  decltype(GetBegin(std::declval<Node &>()))
            DFSStack;<br>
          </b><b>}<br>
          </b><br>
        </blockquote>
        In Mangle.h when calling mangleCXXName() on VarDecl of DFSStack,
        assertion triggered:<br>
        <br>
        <b>tools/clang/lib/AST/ItaniumMangle.cpp:4317: void (anonymous
          namespace)::CXXNameMangler::mangleFunctionParam(const
          clang::ParmVarDecl *): Assertion `parmDepth <
          FunctionTypeDepth.getDepth()' failed.</b>
        <div><b><br>
          </b>Do anyone have any ideas on the cause of it? Thanks<br>
          --<br>
          Best Regards<br>
          <br>
          Ding Fei<br>
          E-mail: <a href="mailto:danix800@gmail.com" target="_blank">danix800@gmail.com</a></div>
      </div>
      <br>
      <fieldset class="m_-5760086726204221299gmail-m_-3855851119047846886gmail-m_1834665693723466420gmail-m_7259464656414262120mimeAttachmentHeader"></fieldset>
      <pre class="m_-5760086726204221299gmail-m_-3855851119047846886gmail-m_1834665693723466420gmail-m_7259464656414262120moz-quote-pre">_______________________________________________
cfe-dev mailing list
<a class="m_-5760086726204221299gmail-m_-3855851119047846886gmail-m_1834665693723466420gmail-m_7259464656414262120moz-txt-link-abbreviated" href="mailto:cfe-dev@lists.llvm.org" target="_blank">cfe-dev@lists.llvm.org</a>
<a class="m_-5760086726204221299gmail-m_-3855851119047846886gmail-m_1834665693723466420gmail-m_7259464656414262120moz-txt-link-freetext" href="https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev" target="_blank">https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev</a>
</pre>
    </blockquote>
    <br>
  </div>

</blockquote></div><br clear="all"><div><br></div>-- <br><div dir="ltr" class="m_-5760086726204221299gmail-m_-3855851119047846886gmail-m_1834665693723466420gmail_signature">Best Regards<br> <br>Ding Fei<br>E-mail: <a href="mailto:danix800@gmail.com" target="_blank">danix800@gmail.com</a></div>
</blockquote></div><br clear="all"><div><br></div>-- <br><div dir="ltr" class="m_-5760086726204221299gmail-m_-3855851119047846886gmail_signature">Best Regards<br> <br>Ding Fei<br>E-mail: <a href="mailto:danix800@gmail.com" target="_blank">danix800@gmail.com</a></div>
</blockquote></div><br clear="all"><div><br></div>-- <br><div dir="ltr" class="m_-5760086726204221299gmail_signature">Best Regards<br> <br>Ding Fei<br>E-mail: <a href="mailto:danix800@gmail.com" target="_blank">danix800@gmail.com</a></div>
</div><br clear="all"><div><br></div>-- <br><div dir="ltr" class="gmail_signature" data-smartmail="gmail_signature">Best Regards<br> <br>Ding Fei<br>E-mail: <a href="mailto:danix800@gmail.com" target="_blank">danix800@gmail.com</a></div></div>