<div dir="ltr">Hi Balázs,<div><br></div><div>I think it is normal to give a Null type in this case:</div><div>The CallExpr refers to an overloaded function and that is not resolved yet, because the overload resolution has not happened yet at this point.</div><div><br></div><div>However, this could happen only if the enclosing class template (the generic lambda) is not yet instantiated. But I'd expect that the lambda class template is instantiated since for_each is instantiated with a concrete type (the iterator of std::vector<unsigned char>). Could you please check if the lambda class template is instantiated?</div><div><br></div><div>Gabor<br></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Wed, Jan 20, 2021 at 4:43 PM Balázs Kéri via cfe-dev <<a href="mailto:cfe-dev@lists.llvm.org">cfe-dev@lists.llvm.org</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 class="gmail_default" style="font-family:arial,sans-serif">Hi!</div><div class="gmail_default" style="font-family:arial,sans-serif">I encountered a case when function CallExpr::getCallReturnType is called and crashes because a null type pointer. Should this function return a value in any case and not crash?</div><div class="gmail_default" style="font-family:arial,sans-serif"><br></div><div class="gmail_default"><div class="gmail_default"><font face="monospace"> #0 0x00007f8cbb81baef llvm::sys::PrintStackTrace(llvm::raw_ostream&) llvm/lib/Support/Unix/Signals.inc:564:0</font></div><div class="gmail_default"><font face="monospace"> #1 0x00007f8cbb81bb82 PrintStackTraceSignalHandler(void*) llvm/lib/Support/Unix/Signals.inc:625:0</font></div><div class="gmail_default"><font face="monospace"> #2 0x00007f8cbb81991d llvm::sys::RunSignalHandlers() llvm/lib/Support/Signals.cpp:68:0</font></div><div class="gmail_default"><font face="monospace"> #3 0x00007f8cbb81b32e llvm::sys::CleanupOnSignal(unsigned long) llvm/lib/Support/Unix/Signals.inc:361:0</font></div><div class="gmail_default"><font face="monospace"> #4 0x00007f8cbb69074a (anonymous namespace)::CrashRecoveryContextImpl::HandleCrash(int, unsigned long) llvm/lib/Support/CrashRecoveryContext.cpp:77:0</font></div><div class="gmail_default"><font face="monospace"> #5 0x00007f8cbb690c22 CrashRecoverySignalHandler(int) llvm/lib/Support/CrashRecoveryContext.cpp:383:0</font></div><div class="gmail_default"><font face="monospace"> #6 0x00007f8cbacce040 (/lib/x86_64-linux-gnu/libc.so.6+0x3f040)</font></div><div class="gmail_default"><font face="monospace"> #7 0x00007f8cbaccdfb7 raise /build/glibc-S9d2JN/glibc-2.27/signal/../sysdeps/unix/sysv/linux/raise.c:51:0</font></div><div class="gmail_default"><font face="monospace"> #8 0x00007f8cbaccf921 abort /build/glibc-S9d2JN/glibc-2.27/stdlib/abort.c:81:0</font></div><div class="gmail_default"><font face="monospace"> #9 0x00007f8cbacbf48a __assert_fail_base /build/glibc-S9d2JN/glibc-2.27/assert/assert.c:89:0</font></div><div class="gmail_default"><font face="monospace">#10 0x00007f8cbacbf502 (/lib/x86_64-linux-gnu/libc.so.6+0x30502)</font></div><div class="gmail_default"><font face="monospace">#11 0x00007f8cc4e8fdd2 clang::FunctionType const* clang::Type::castAs<clang::FunctionType>() const clang/include/clang/AST/Type.h:7060:0</font></div><div class="gmail_default"><font face="monospace">#12 0x00007f8cb533b3e9 clang::CallExpr::getCallReturnType(clang::ASTContext const&) const clang/lib/AST/Expr.cpp:1453:0</font></div><div style="font-family:arial,sans-serif"><br></div></div><div class="gmail_default" style="font-family:arial,sans-serif">The following AST node (CallExpr, for function "to_string") causes the problem:<br></div><div class="gmail_default"><div style="background-color:rgb(255,255,254)"><div style="color:rgb(0,0,0)"><span style="font-family:monospace">              `-CompoundStmt <col:81, line:9:3></span><br></div><div><div style="font-family:monospace;color:rgb(0,0,0)">                `-CallExpr <line:8:5, col:27> '<dependent type>'</div><div style="font-family:monospace;color:rgb(0,0,0)">                  |-UnresolvedLookupExpr <col:5, col:10> '<overloaded function type>' lvalue (no ADL) = 'to_string' 0x562191753998 0x562191755ac8 0x562191756418 0x562191756d68 0x5621917576b8 0x562191758008 0x5621917599a8 0x56219175c928 0x56219175f888</div><div style="font-family:monospace;color:rgb(0,0,0)">                  `-DeclRefExpr <col:20> 'const auto' lvalue ParmVar 0x56219197d868 'element' 'const auto &'<br></div><div style="font-family:monospace;color:rgb(0,0,0)"><br></div><div style="color:rgb(0,0,0)"><font face="arial, sans-serif">This is the source code:</font></div><div style="font-family:monospace"><div><font color="#000000"><br></font></div><div><font color="#000000">#include <algorithm></font></div><div><font color="#000000">#include <string></font></div><div><font color="#000000">#include <vector></font></div><div><font color="#000000"><br></font></div><div><font color="#000000">void f() {</font></div><div><font color="#000000">  const std::vector<unsigned char> buffer;</font></div><div><font color="#000000">  std::for_each(std::cbegin(buffer), std::cend(buffer), [](const auto& element) {</font></div><div><font color="#000000">    std::to_string(element);</font></div><div><font color="#000000">  });</font></div><div><font color="#000000">}</font></div></div><div style="color:rgb(0,0,0)"><font face="arial, sans-serif"><br></font></div><div style="color:rgb(0,0,0)"><font face="arial, sans-serif">---</font></div><div style="color:rgb(0,0,0)"><span style="font-family:arial,sans-serif">Balázs</span><br></div></div></div></div></div></div></div></div></div></div>
_______________________________________________<br>
cfe-dev mailing list<br>
<a href="mailto:cfe-dev@lists.llvm.org" target="_blank">cfe-dev@lists.llvm.org</a><br>
<a href="https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev" rel="noreferrer" target="_blank">https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev</a><br>
</blockquote></div>