<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/138248>138248</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            Assertion failure in TreeTransform::TransformInitializer with templated constructor and invalid type usage in Clang
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            clang
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          mariete1223
      </td>
    </tr>
</table>

<pre>
    ## Summary 

Clang crashes with an assertion failure during template instantiation when attempting to use a templated constructor that involves incorrect usage of typeid(T1*) and object initialization.

## Assertion

```
clang++: /root/llvm-project/llvm/tools/clang/lib/Sema/TreeTransform.h:4424: clang::ExprResult clang::TreeTransform<Derived>::TransformInitializer(clang::Expr*, bool) [with Derived = {anonymous}::TemplateInstantiator; clang::ExprResult = clang::ActionResult<clang::Expr*>]: Assertion `NewArgs.empty() && "no parens or braces but have direct init with arguments?"' failed.
```

## Stack dump

```
Stack dump:
0.      Program arguments: /opt/compiler-explorer/clang-assertions-trunk/bin/clang++ -gdwarf-4 -g -o /app/output.s -mllvm --x86-asm-syntax=intel -fno-verbose-asm -S --gcc-toolchain=/opt/compiler-explorer/gcc-snapshot -fcolor-diagnostics -fno-crash-diagnostics -x c++ <source>
1.      <eof> parser at end of file
2.      <source>:7:5: instantiating function definition 'print<int *>::print<int>'
 #0 0x0000000003f6f428 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x3f6f428)
 #1 0x0000000003f6d0b4 llvm::sys::CleanupOnSignal(unsigned long) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x3f6d0b4)
 #2 0x0000000003eb2098 CrashRecoverySignalHandler(int) CrashRecoveryContext.cpp:0:0
 #3 0x00007caff5442520 (/lib/x86_64-linux-gnu/libc.so.6+0x42520)
 #4 0x00007caff54969fc pthread_kill (/lib/x86_64-linux-gnu/libc.so.6+0x969fc)
 #5 0x00007caff5442476 gsignal (/lib/x86_64-linux-gnu/libc.so.6+0x42476)
 #6 0x00007caff54287f3 abort (/lib/x86_64-linux-gnu/libc.so.6+0x287f3)
 #7 0x00007caff542871b (/lib/x86_64-linux-gnu/libc.so.6+0x2871b)
 #8 0x00007caff5439e96 (/lib/x86_64-linux-gnu/libc.so.6+0x39e96)
 #9 0x0000000007186943 (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x7186943)
#10 0x0000000007186bdb clang::Sema::SubstInitializer(clang::Expr*, clang::MultiLevelTemplateArgumentList const&, bool) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x7186bdb)
#11 0x0000000007227a8c clang::Sema::InstantiateMemInitializers(clang::CXXConstructorDecl*, clang::CXXConstructorDecl const*, clang::MultiLevelTemplateArgumentList const&) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x7227a8c)
#12 0x000000000722dfa5 clang::Sema::InstantiateFunctionDefinition(clang::SourceLocation, clang::FunctionDecl*, bool, bool, bool) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x722dfa5)
#13 0x000000000722bdf6 clang::Sema::PerformPendingInstantiations(bool, bool) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x722bdf6)
#14 0x00000000067800d2 clang::Sema::ActOnEndOfTranslationUnitFragment(clang::TUFragmentKind) (.part.0) Sema.cpp:0:0
#15 0x0000000006780972 clang::Sema::ActOnEndOfTranslationUnit() (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x6780972)
#16 0x00000000065ef88b clang::Parser::ParseTopLevelDecl(clang::OpaquePtr<clang::DeclGroupRef>&, clang::Sema::ModuleImportState&) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x65ef88b)
#17 0x00000000065e1b8a clang::ParseAST(clang::Sema&, bool, bool) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x65e1b8a)
#18 0x0000000004910eb8 clang::CodeGenAction::ExecuteAction() (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x4910eb8)
#19 0x0000000004c03675 clang::FrontendAction::Execute() (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x4c03675)
#20 0x0000000004b82cfe clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x4b82cfe)
#21 0x0000000004cf74f9 clang::ExecuteCompilerInvocation(clang::CompilerInstance*) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x4cf74f9)
#22 0x0000000000da554f cc1_main(llvm::ArrayRef<char const*>, char const*, void*) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0xda554f)
#23 0x0000000000d9b71a ExecuteCC1Tool(llvm::SmallVectorImpl<char const*>&, llvm::ToolContext const&) driver.cpp:0:0
#24 0x0000000004977769 void llvm::function_ref<void ()>::callback_fn<clang::driver::CC1Command::Execute(llvm::ArrayRef<std::optional<llvm::StringRef>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>*, bool*) const::'lambda'()>(long) Job.cpp:0:0
#25 0x0000000003eb2534 llvm::CrashRecoveryContext::RunSafely(llvm::function_ref<void ()>) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x3eb2534)
#26 0x0000000004977d7f clang::driver::CC1Command::Execute(llvm::ArrayRef<std::optional<llvm::StringRef>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>*, bool*) const (.part.0) Job.cpp:0:0
#27 0x000000000493a1cd clang::driver::Compilation::ExecuteCommand(clang::driver::Command const&, clang::driver::Command const*&, bool) const (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x493a1cd)
#28 0x000000000493b25e clang::driver::Compilation::ExecuteJobs(clang::driver::JobList const&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*>>&, bool) const (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x493b25e)
#29 0x00000000049430b5 clang::driver::Driver::ExecuteCompilation(clang::driver::Compilation&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*>>&) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x49430b5)
#30 0x0000000000da14b8 clang_main(int, char**, llvm::ToolContext const&) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0xda14b8)
#31 0x0000000000c26ce4 main (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0xc26ce4)
#32 0x00007caff5429d90 (/lib/x86_64-linux-gnu/libc.so.6+0x29d90)
#33 0x00007caff5429e40 __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x29e40)
#34 0x0000000000d9b1c5 _start (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0xd9b1c5)
```

## Program

```
#include <iostream>
template<typename T>
struct print<T*>
{
    std::string const& name;
    template<typename T1>
 print(T1 t) : name(typeid(T1*).name()) {
       typeid(&t);
    }
};
int main()
{
    print<int*>(42);
}
```

## To quickly reproduce

https://gcc.godbolt.org/z/5Mh1zaEK7
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJzkWk1z46jW_jVkQ9klgb68yEJx2vP2zPTbXR3Prdm5EEI2tyXQAHLb8-tvgbD1EadnciuZze1KVxwBh-c8PJxzECZa871g7B7EDyB-vCOdOUh13xDFmWEhQviukOX5HiAMEIZPXdMQdYYgyEGQr2si9pAqog9Mw-_cHCARkGjNlOFSwIrwulMMlp3iYg8Na9qaGAa50IYIw4nr9f3ABCTGthrXTcJOM0iu_UtIpdBGddRIBc2BGMjFUdZHpiEXVCrFqIGdJnsGZQXNuWW8BCjbhgDlAK0gESWUxb9tLy644aTmf7q5l70f3rn8Atw_TQL_E-TUegrQg_3BOQRoo6Q0AG3q-tgsWiWtcf8nQBsjZa0B2vhhm5oXAG2eWEMA2mwVY1tFhK6kapYHgPMoQpE123fHOcD5h1OrvjLd1Wb8dDIU4PUjU_zISoA_XNp928eLm0wBlM3sOlbWsJCytuyA-MEtnTcGAX6EIH0gQopzIzsN0kdv3a_Hx-vySQXwwwuwrZlRS04ts30bwOsbkPAHENuZhnWAIAn-n33P1V4vrTrOAGUOMUoASiBASEjYEsWEhlLBQhHKNCw6Aw_kyGDJ1WXJvTjVvmuYMBrgDUAIoNRJlJXL2XIPmngyhH6DZde0z0UxasO2LViCYPVFyb0izXgupxfZWn1Q2bS8ZmrBTm0tlV2dXiSL667RC6M68Q2gTcHFoCErPbjYl9-JqhYRXOzhQlq7pG2t9c60nVlquGisBOFiccqSBdHNQp-FISeAH7kwrIaLSsjFkalCambb4eIJLhZ7ShdWs_RAuAD48Yd4bWctSKsP0sBFRWUt1aLkZC-kNpzqfg4XFaaPT5B6PwBea9kpyuyiB3loiQN4zWQF8Ae7opopSAxkduNWsOI1A0GOfLdhKM5TgPPYUjyKKWIPq044vcGSVW7LWzGhtFVcWPVxYaCXnJPg6Ll9hlIQ2EXDAQxOweUfrpIqQhl0e9wN02fdf_hixzs5bK0GAcqGTop830ltFCON0-0a2lmcirM30gVAD8HJwwNo5cGHM_BlUES3wK9rRkTXfhZPfC9IDVDWCZcUSlhLO8V7QLVgBqhoApUVKFhlcG0V9JVReWTq3GP7PyLK2oU0z-Gkz1oKw05mSVu7IQP3v7ePvf2UkqqKowjFKPBO9aH5lCW7JFrUXHSnxV50fQNdarlMHGQ3ZAAcTQ2uklVFYWsOipFy943X9eusu_GD9XgON0oTuNeOgtfCjtJkMJxMDaMsrTAkhVTmdWbdwMFs-sxsWLzaYFgMBrOpQbxiq-R1Bt2QweBqLLA0zJJVhN9a1d5sP6ndf8F80qIsxinR1QP9p67Q5u_k7NHTT11t-K_syOpLXs59yvmVa9OXTD7gXDP92ztclMXg8CTipAilJKO3HR5KCPaJjasVPXV9_fvv66H2e2S0fk7E8z4X5_9ryt6eqp6MgSo0o6qsSPyXVG18Vnu8JrUpW08uMf4qKenbJs4Pg68k9rqY_34P5617g_N45nxRVslt578wZcvZL0yUXOw_js8NVinvD9xCG4BHY-BJmgVBiW4Dz6n5LD6I8nPlavLaQf5NcLNRZG8VN1257W-X579wUXpXli1RZmmzDrSGZ3nN4onneFbpa_FcS-o3Zc5jGZhLJkhjVmXZJBZ-cTXf6PNWtm6n9nIdc_W5JX907ItR02OE7fiTkl37lVWuiEtmG2Ag45Msu5p9bFqpbNVm2Ptseu_mQEI6IyEsMvKMhPxpO9vV7tiY_AMb1UMaAGdjwNEqDFiRTUKvLNlPTPRnu0uyYrQzzD96F3F5IAPMSXaPaICTdBJMN8pWhqK8gfOdEPYYrgjRpBSIigzRik2J7OfsI5w93Nzi8mWX3kW_HufgRTjluUqjajU9_Tu8gzPHayrKfuRs_5bmzdfA4RvQT1JuUJI4jipIabhr7KF3fGTLlSJnF0bW9EDUUE7YsLKG02doDY-Sl-_jRI9y8AFPfVgVaUjghfZ1uHVxYeTJU0Pq-l_MFkYfm7a-6ZCLLMMQa8OfpCYVUan4kannSQhF0yCRpmmycpSMjF7O4zvlWHWt_da7nsEpqeuC0G-7SkwDez-xl846XMumIaKc7-Kbq6eN7ydbOzuxBIzIMYqLvU8X_dJeB-x29HQKw_6PgmhOd9p19xROOtsHO6MIN_rSPDNH6tpuBalG7bbLqAxz8ukJd0MASmvSFCUBKB2oQtnlTP6zLG4sRjw_Scd4fOi_dV7uW7524olUrD5PuPzxur3Dm4Ee8SD4ZC6uMq3g_7I4ZoXhbRWkU9YwCWn5Imtu1cizzHihchK6ZwNth8lJ8-91zWfn0qtjb1slOLcHKc2KGVygmL2WlJ9loV9m5GdZPDt7_ygWXxXQEq7868dXkOhl8o9QackaqJwWXKsIB0X8EuzH0edJgXCjMnhpCf5BKt-hWnX0XMmbvlQOShJGl6L6UolcwLtQkvtA8NcZ-s1rD4tswD2p_gKKEsoiaBG_9cS96WFiNHu9uCpXr3x764YMBvHcIIsCuNvZMTttiDK7kVt_ewoWjaaI5oVaSGPYG3_zdXLG_dQ3L7H8ndTzGyyAMBe07koG7Z65XFO4S5nL7SvAa3NumSANg9u-qX_XBi-3Jlu_g4IcpA8gyCGEQ3LrE-NVp9DaAfjS7eYkYW_M20fZNoT9hQnO--Eoe3bHu_QNlgbb9QrETnLpDFBiXOlyaQTpo0P92D_iwkC_BT2dVzPjGyJfN2cRuhrzhm6yv5Xwj47Tb_UZKtYqWXaU9R0OxrTuEgZt-nu15V6WhazNUqo9QJs_AdrEnw7hn-TDL-ldeY_LFV6RO3YfplESZkGcobvDfVAWZZUUEcUFKVcptbs2xUUQxWVAk4je8XsUoDiIAxQGwSpCS5wErGI0w0ES0xVmIApYQ3i9tDHGzn3Hte7YfYgzFGV3NSlYrd03BBDy6kMgfrxT9-76u-j2GkRBzbXRgwnDTc3u82dfBuACzq6xX7q57i9tb38LwEZvLo6k5qVbX3_9zwV0X0q461R9P6OXm0NXLKlshnv62e2981oDtPGOH-_RfwIAAP__aiQkJw">