<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" style=""><div class="gmail_default" style=""><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" style=""><font face="monospace"> #1 0x00007f8cbb81bb82 PrintStackTraceSignalHandler(void*) llvm/lib/Support/Unix/Signals.inc:625:0</font></div><div class="gmail_default" style=""><font face="monospace"> #2 0x00007f8cbb81991d llvm::sys::RunSignalHandlers() llvm/lib/Support/Signals.cpp:68:0</font></div><div class="gmail_default" style=""><font face="monospace"> #3 0x00007f8cbb81b32e llvm::sys::CleanupOnSignal(unsigned long) llvm/lib/Support/Unix/Signals.inc:361:0</font></div><div class="gmail_default" style=""><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" style=""><font face="monospace"> #5 0x00007f8cbb690c22 CrashRecoverySignalHandler(int) llvm/lib/Support/CrashRecoveryContext.cpp:383:0</font></div><div class="gmail_default" style=""><font face="monospace"> #6 0x00007f8cbacce040 (/lib/x86_64-linux-gnu/libc.so.6+0x3f040)</font></div><div class="gmail_default" style=""><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" style=""><font face="monospace"> #8 0x00007f8cbaccf921 abort /build/glibc-S9d2JN/glibc-2.27/stdlib/abort.c:81:0</font></div><div class="gmail_default" style=""><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" style=""><font face="monospace">#10 0x00007f8cbacbf502 (/lib/x86_64-linux-gnu/libc.so.6+0x30502)</font></div><div class="gmail_default" style=""><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" style=""><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>