<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/101690>101690</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[Clang] Crash when attempting to take `decltype` of `std::` function replaced with builtin
</td>
</tr>
<tr>
<th>Labels</th>
<td>
clang
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
MitalAshok
</td>
</tr>
</table>
<pre>
https://godbolt.org/z/63evv98EY
```c++
#include <utility>
decltype(std::move<int>)* p = nullptr;
```
```
clang++: /llvm/llvm-project/clang/lib/Sema/SemaType.cpp:9471: clang::QualType clang::Sema::BuildDecltypeType(clang::Expr *, bool): Assertion `!E->hasPlaceholderType() && "unexpected placeholder"' failed.
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace, preprocessed source, and associated run script.
Stack dump:
0. Program arguments: /cmake-build-debug/bin/clang++ -cc1 test.cpp
1. test.cpp:2:29: current parser token '='
#0 0x000055fbd410fe5d llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) /llvm/llvm-project/llvm/lib/Support/Unix/Signals.inc:723:11
#1 0x000055fbd411034b PrintStackTraceSignalHandler(void*) /llvm/llvm-project/llvm/lib/Support/Unix/Signals.inc:798:1
#2 0x000055fbd410e3b6 llvm::sys::RunSignalHandlers() /llvm/llvm-project/llvm/lib/Support/Signals.cpp:105:5
#3 0x000055fbd4110b05 SignalHandler(int) /llvm/llvm-project/llvm/lib/Support/Unix/Signals.inc:413:1
#4 0x00007f74ad5bc520 (/lib/x86_64-linux-gnu/libc.so.6+0x42520)
#5 0x00007f74ad6109fc __pthread_kill_implementation ./nptl/pthread_kill.c:44:76
#6 0x00007f74ad6109fc __pthread_kill_internal ./nptl/pthread_kill.c:78:10
#7 0x00007f74ad6109fc pthread_kill ./nptl/pthread_kill.c:89:10
#8 0x00007f74ad5bc476 gsignal ./signal/../sysdeps/posix/raise.c:27:6
#9 0x00007f74ad5a27f3 abort ./stdlib/abort.c:81:7
#10 0x00007f74ad5a271b _nl_load_domain ./intl/loadmsgcat.c:1177:9
#11 0x00007f74ad5b3e96 (/lib/x86_64-linux-gnu/libc.so.6+0x39e96)
#12 0x000055fbda65c905 clang::Sema::BuildDecltypeType(clang::Expr*, bool) /llvm/llvm-project/clang/lib/Sema/SemaType.cpp:9473:21
#13 0x000055fbda660b2b ConvertDeclSpecToType((anonymous namespace)::TypeProcessingState&) /llvm/llvm-project/clang/lib/Sema/SemaType.cpp:1261:16
#14 0x000055fbda650d5c GetDeclSpecTypeForDeclarator((anonymous namespace)::TypeProcessingState&, clang::TypeSourceInfo*&) /llvm/llvm-project/clang/lib/Sema/SemaType.cpp:3088:9
#15 0x000055fbda650b9c clang::Sema::GetTypeForDeclarator(clang::Declarator&) /llvm/llvm-project/clang/lib/Sema/SemaType.cpp:5652:16
#16 0x000055fbd91e827f clang::Sema::HandleDeclarator(clang::Scope*, clang::Declarator&, llvm::MutableArrayRef<clang::TemplateParameterList*>) /llvm/llvm-project/clang/lib/Sema/SemaDecl.cpp:6279:19
#17 0x000055fbd91e7b50 clang::Sema::ActOnDeclarator(clang::Scope*, clang::Declarator&) /llvm/llvm-project/clang/lib/Sema/SemaDecl.cpp:6046:15
#18 0x000055fbd8ce318c clang::Parser::ParseDeclarationAfterDeclaratorAndAttributes(clang::Declarator&, clang::Parser::ParsedTemplateInfo const&, clang::Parser::ForRangeInit*) /llvm/llvm-project/clang/lib/Parse/ParseDecl.cpp:2754:14
#19 0x000055fbd8ce1ebb clang::Parser::ParseDeclGroup(clang::ParsingDeclSpec&, clang::DeclaratorContext, clang::ParsedAttributes&, clang::Parser::ParsedTemplateInfo&, clang::SourceLocation*, clang::Parser::ForRangeInit*) /llvm/llvm-project/clang/lib/Parse/ParseDecl.cpp:2559:9
#20 0x000055fbd8c33b5c clang::Parser::ParseDeclOrFunctionDefInternal(clang::ParsedAttributes&, clang::ParsedAttributes&, clang::ParsingDeclSpec&, clang::AccessSpecifier) /llvm/llvm-project/clang/lib/Parse/Parser.cpp:1249:10
#21 0x000055fbd8c3303e clang::Parser::ParseDeclarationOrFunctionDefinition(clang::ParsedAttributes&, clang::ParsedAttributes&, clang::ParsingDeclSpec*, clang::AccessSpecifier) /llvm/llvm-project/clang/lib/Parse/Parser.cpp:1271:12
#22 0x000055fbd8c328c9 clang::Parser::ParseExternalDeclaration(clang::ParsedAttributes&, clang::ParsedAttributes&, clang::ParsingDeclSpec*) /llvm/llvm-project/clang/lib/Parse/Parser.cpp:1074:14
#23 0x000055fbd8c306ec clang::Parser::ParseTopLevelDecl(clang::OpaquePtr<clang::DeclGroupRef>&, clang::Sema::ModuleImportState&) /llvm/llvm-project/clang/lib/Parse/Parser.cpp:763:12
#24 0x000055fbd8c2b23c clang::ParseAST(clang::Sema&, bool, bool) /llvm/llvm-project/clang/lib/Parse/ParseAST.cpp:171:16
#25 0x000055fbd5676211 clang::ASTFrontendAction::ExecuteAction() /llvm/llvm-project/clang/lib/Frontend/FrontendAction.cpp:1194:1
#26 0x000055fbd5675c2c clang::FrontendAction::Execute() /llvm/llvm-project/clang/lib/Frontend/FrontendAction.cpp:1082:7
#27 0x000055fbd5590536 clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) /llvm/llvm-project/clang/lib/Frontend/CompilerInstance.cpp:1061:23
#28 0x000055fbd5853dfe clang::ExecuteCompilerInvocation(clang::CompilerInstance*) /llvm/llvm-project/clang/lib/FrontendTool/ExecuteCompilerInvocation.cpp:280:8
#29 0x000055fbd2208ad9 cc1_main(llvm::ArrayRef<char const*>, char const*, void*) /llvm/llvm-project/clang/tools/driver/cc1_main.cpp:285:13
#30 0x000055fbd21fb432 ExecuteCC1Tool(llvm::SmallVectorImpl<char const*>&, llvm::ToolContext const&) /llvm/llvm-project/clang/tools/driver/driver.cpp:215:5
#31 0x000055fbd21fa19b clang_main(int, char**, llvm::ToolContext const&) /llvm/llvm-project/clang/tools/driver/driver.cpp:256:5
#32 0x000055fbd222f885 main /cmake-build-debug/tools/clang/tools/driver/clang-driver.cpp:17:3
#33 0x00007f74ad5a3d90 __libc_start_call_main ./csu/../sysdeps/nptl/libc_start_call_main.h:58:16
#34 0x00007f74ad5a3e40 call_init ./csu/../csu/libc-start.c:128:20
#35 0x00007f74ad5a3e40 __libc_start_main ./csu/../csu/libc-start.c:379:5
#36 0x000055fbd21f9c25 _start (/cmake-build-debug/bin/clang+++0x5bdbc25)
```
`decltype(&std::move<int>)`, `decltype(+std::move<int>)`, `decltype((std::move<int>))` do not crash.
It also doesn't crash with `-fno-builtin`.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJy8Wd9T5CoW_mvwhbKLQMiPBx9ia89aNVPjju5W7VMXIXQ3axqyQLy6f_0tSLrzw9YZde6tmtFI4OT7vnPgHIBZK7dKiAtALwG9OmOt22lz8U06Vhd2px_OSl09X-ycaywgBcArgFdbXZW6dgtttgCv_g_wKiHi8THPrv8D0BVARf8zQd0_DvCl_9e1YiIVr9tKQECWrZO1dM-AXHdvK8Fr99wIgDPrKv9FUuz1owBkKZXz3XAOcAEbCMgVVG1dN84Acjn74kkY3Z-8ZmrbAyIFBHhV14_7_td5Y_R_BXcAr_p-q1qWAK_uxJ71v-6fG7HgTQNIkcdp5I10fQPYf7as9j3GbWFweLpsZV1d9RzvO56jjtdPjYEAFwAvYal17cmSAhbWCuOkVtCzwNH1OSDXO2Zva8bFTteVML0tgHMIcAJwAgHGrRJPjeBOVLAZugKMAU7hhslaVItOlNuv18XdNbRtuZcOMli2W2hEo42DTsOZ96XbteWC6_2r2klrW2EBXkGmKnhwt9sJyA2zO1gy_uAM48ITbYxojObCWlFBq1vTNfuRzFrNJfMETKug5UY2rod85xh_gFW7947omtACoPzW6K1he8jMtt0L5WzvZb5nD-K89A44r0TZet-WUg2e9hEBzzmPoBPWBQ8Hq5G3emwiBfb_g194a4xQDjbMWGGg0w9CQYBTQK78zzAaAkwQRE8IIUTppqziCG0ErWBQLnjdPtvu4dZI5QKv-06cbOhk2B9rbZ0RbB8cvIR-PgR3v-KEQ2sXv23jvQnw6l9KPvkGuVWstgupOCBFigkgRRQNmKMp5giRuIQzgJ2NfzBV1T6sskctqxC9vwtVnnlUAyg8E1KQMjkl5I9WTbDZ49R4H6oDnM7xEaKAFHSAQ-YalYjCuSi_001xRKaCxD2CdJPGrKIlpxjBQLY3-JQl6yQ-r6Vqn863qu1e8IXViwTgS_QUY4qRX2eONunEZhKhfMPhet24nRGsWj_Iul7LfVMLP7tYWJYWAK9U42qAV-Nui4A59p5MBvvJr9hXThjF6jctpyE60GA5PWV5POxNc1k-M5fNxY3TBG5t8Eiw1D0CvFqEv55tJRq_6jXaBucZJq0Itv2aUIw0yKemGU43BLLSr7fBlKs694WmDp1PNOkxhUbohYWohGtVr2vNqnWl90x2fpEq0PXNe7vlrDMXRamHlA8GoxlbIvLkfaFEcpEnx1DyNifzlSWU54h-ODFO8-KnE7efSTgasJIp1gSVuIRLrR6FcR7YXSP4vT7m2YwprZ73urVQsb2wTViw8w6u73Xb5TSptneOOREW7U-ijnDioyBKBtTxTGFUUQ6_iAHxcyNW2vg_mWFOm4-DX4495zvdhVx9ozY6uObz_AjKsmlQ0jm9MuenA-iLcKe4jvqO2z-PlSYUz3yRjMHmkchwujkNtssOrwG949oHWTGTfIZ_OUp831rHyloUxrDnH2IDyHLsKrFvaubELTNsL5wwX6V13nwopj-gggfSq5DgNKyaI5elMxXSkqLTKhTcfVefE-Gz8FGcePh0gJ-N4WdckCibRNxtqPVGzwdEUqti48Qo_ApVFc4ZWbbOF8NvxOLyzS9UBw_6qQa5Vt59b41aafODqa24UdL9rB6byhSsHH6PhMIp9Wk8igeh8plQkSjLnwr1xei2mUrh30m1PSxYL5kNWi21cuLJnWI-Ufp9ir7s3y1sXzUPXn0ZhH-x1pTmk1UQo6nUhJT05zH53axaxT2BK7G56eupl9L_gnI_7fGm-wruM4l_JzfSV8QfE8gcc2A8rtO8PNFcHkTEr07ZiUpSyc7hf7lI84j67SKFc4kIDyLhmUg44_mbIl0_dSEzEuvvEeaT1FE6W6kwmVFHiXh7-tzr5qt4FIH6lPP3hv2vFbfOTFPscWkLyff6xIpyTHrfdNXW4mbvt3kfKAxPck4TMvN2PKWMS0xeUi7u7mc5NyTJZKiy311tT-AVd_cHp6SzuhVPCjuapAmOosmEuLtfGb_cq6oI0_OwDxC8daJv-smmfgrtYG702Jk5YIzyeNhce4zJDCPleCLiGwB_MzSU4cnuD0-KLEpzREkyhrbU-0bWwtwo65ji4rR6r3N5V0yO4M-_eyQQNi6YDAwmdRbNKKk2k0W7xzoYfDym4-wtou9aQQ7I70OUr1795iEzZ8jvxAcSkxoIY5SxKoecR2u_-54c341L8x0zhyquK8KXcNqGl_BXjtIOXJzWtQV4VRn56HPH6oDgCJt6HwziTw8kcbQpY4Lhgf0y6uQYob_bs7r-t-BOm5t9U58kMduSeBt9vTYqWT_Cpns4cIlGZ3CeSjSjwqK8L0MPTggHcJ3EQdHi7wFKkylQPI0VvMkyCsMpzSuH0wf7r7vZvziffDVK_TZ6-CiZnRKRKkdwva5lydfWMePWnNX1-nhYxG378jirPzA7NWix8ySz6eI-P5VkRMQIhjG-wpp_qHv01s-D9e58CnujeKjyZseSvdEJlVMsThonYdM68k0yC6KcYwo7q_0R2C_dHoRTMFpWJcd0OAd75U5qdNMFcPL6ZVeCfLzOB1y-d8Bb12l-DKw0VNp1FzQL2MG8cZDVVsNKC6sATvvX8A_pdv4L5xulgyhOKpCgxVl1Qaqc5OxMXEQpxkmEc5qc7S4YjzNWEkZRhalAlFaxQCUlKSlLhDE6kxcY4RhlCEeUUEoWJIpLxrKq3NAoweUGxEjsmawXfjYutNmehUumiwhFSY7OalaK2oZbTIx7l2BAr87MRZi-Zbu1IEa1tM4OJpx0dbj6XIYR9AouO347oSBzTuwbJ9UWOg0dexATURME9ca3HIX1TZt-NwGNCFduVadVr9FZa-r5Xeo7btN6ro8X-M8AAAD___D_FPI">