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

    <tr>
        <th>Summary</th>
        <td>
            [Modules] "Failed to find all of the visible " "constructors by walking all the " "lexical members of the context." with inheriting constructors + noncopyable class
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            new issue
      </td>
    </tr>

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

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

<pre>
    Given the following valid set of translation units:

```cpp
export module a;

struct base {
        base(int) {}
};

export struct a : base {
        using base::base;
};
```

```cpp
export module b;

import a;

a b() {
        return a(1);
}
```

```cpp
export module c;

import a;
import b;

struct noncopyable {
        noncopyable(noncopyable const &) = delete;
};

struct c {
        noncopyable c0;
        a c1;
};
```

When compiled with

```shell
clang++ -std=c++20 -x c++-module --precompile -c a.cpp -o a.pcm
clang++ -std=c++20 -fmodule-file=a=a.pcm --precompile -x c++-module -c b.cpp -o b.pcm
clang++ -std=c++20 -fmodule-file=a=a.pcm -fmodule-file=b=b.pcm -x c++-module --precompile -c c.cpp -o /dev/null
```

Leads to an assertion failure of

```console
clang++: llvm/clang/lib/Serialization/ASTWriter.cpp:3988: void clang::ASTWriter::GenerateNameLookupTable(const clang::DeclContext *, llvm::SmallVectorImpl<char> &): Assertion `ConstructorNameSet.empty() && "Failed to find all of the visible " "constructors by walking all the " "lexical members of the context."' 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: clang++ -std=c++20 -fmodule-file=a=a.pcm -fmodule-file=b=b.pcm -x c++-module --precompile -c c.cpp -o /dev/null
1. <eof> parser at end of file
 #0 0x00005561727296e1 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (clang+++0x41f16e1)
 #1 0x000055617272747e llvm::sys::RunSignalHandlers() (clang+++0x41ef47e)
 #2 0x0000556172728a41 llvm::sys::CleanupOnSignal(unsigned long) (clang+++0x41f0a41)
 #3 0x000055617269e5ab CrashRecoverySignalHandler(int) CrashRecoveryContext.cpp:0:0
 #4 0x00007fdf3a851f50 (/usr/lib/libc.so.6+0x38f50)
 #5 0x00007fdf3a8a08ec (/usr/lib/libc.so.6+0x878ec)
 #6 0x00007fdf3a851ea8 raise (/usr/lib/libc.so.6+0x38ea8)
 #7 0x00007fdf3a83b53d abort (/usr/lib/libc.so.6+0x2253d)
 #8 0x00007fdf3a83b45c (/usr/lib/libc.so.6+0x2245c)
 #9 0x00007fdf3a84a9f6 (/usr/lib/libc.so.6+0x319f6)
#10 0x0000556173605f40 clang::ASTWriter::GenerateNameLookupTable(clang::DeclContext const*, llvm::SmallVectorImpl<char>&) (clang+++0x50cdf40)
#11 0x0000556173606c4b clang::ASTWriter::WriteDeclContextVisibleUpdate(clang::DeclContext const*) (clang+++0x50cec4b)
#12 0x0000556173615b9d clang::ASTWriter::WriteASTCore(clang::Sema&, llvm::StringRef, clang::Module*) (clang+++0x50ddb9d)
#13 0x000055617361104f clang::ASTWriter::WriteAST(clang::Sema&, llvm::StringRef, clang::Module*, llvm::StringRef, bool, bool) (clang+++0x50d904f)
#14 0x0000556173663f68 clang::PCHGenerator::HandleTranslationUnit(clang::ASTContext&) (clang+++0x512bf68)
#15 0x0000556173495d4c clang::MultiplexConsumer::HandleTranslationUnit(clang::ASTContext&) (clang+++0x4f5dd4c)
#16 0x0000556174cee234 clang::ParseAST(clang::Sema&, bool, bool) (clang+++0x67b6234)
#17 0x00005561733e1a0e clang::FrontendAction::Execute() (clang+++0x4ea9a0e)
#18 0x00005561733490df clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) (clang+++0x4e110df)
#19 0x00005561734cc091 clang::ExecuteCompilerInvocation(clang::CompilerInstance*) (clang+++0x4f94091)
#20 0x00005561712eab44 cc1_main(llvm::ArrayRef<char const*>, char const*, void*) (clang+++0x2db2b44)
#21 0x00005561712e62dd ExecuteCC1Tool(llvm::SmallVectorImpl<char const*>&, llvm::ToolContext const&) driver.cpp:0:0
#22 0x00005561731b1cb9 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::$_1>(long) Job.cpp:0:0
#23 0x000055617269e2ac llvm::CrashRecoveryContext::RunSafely(llvm::function_ref<void ()>) (clang+++0x41662ac)
#24 0x00005561731b10ad clang::driver::CC1Command::Execute(llvm::ArrayRef<std::optional<llvm::StringRef>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>*, bool*) const (clang+++0x4c790ad)
#25 0x000055617316ae85 clang::driver::Compilation::ExecuteCommand(clang::driver::Command const&, clang::driver::Command const*&, bool) const (clang+++0x4c32e85)
#26 0x000055617316b157 clang::driver::Compilation::ExecuteJobs(clang::driver::JobList const&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*>>&, bool) const (clang+++0x4c33157)
#27 0x000055617318b4a9 clang::driver::Driver::ExecuteCompilation(clang::driver::Compilation&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*>>&) (clang+++0x4c534a9)
#28 0x00005561712e5577 clang_main(int, char**, llvm::ToolContext const&) (clang+++0x2dad577)
#29 0x00005561712f7552 main (clang+++0x2dbf552)
#30 0x00007fdf3a83c790 (/usr/lib/libc.so.6+0x23790)
#31 0x00007fdf3a83c84a __libc_start_main (/usr/lib/libc.so.6+0x2384a)
#32 0x00005561712e22e5 _start (clang+++0x2daa2e5)
clang++: error: clang frontend command failed with exit code 134 (use -v to see invocation)
clang version 17.0.0 (https://github.com/llvm/llvm-project.git bf9e0ed1e61a407d7b0e133a9980cb8c29fc8ab0)
Target: x86_64-unknown-linux-gnu
Thread model: posix
InstalledDir: build/bin
clang++: note: diagnostic msg: 
********************

PLEASE ATTACH THE FOLLOWING FILES TO THE BUG REPORT:
Preprocessed source(s) and associated run script(s) are located at:
clang++: note: diagnostic msg: /tmp/c-1b679c.cppm
clang++: note: diagnostic msg: /tmp/c-1b679c.sh
clang++: note: diagnostic msg: 
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzkWV9v2zgS_zTKC2FDov4_5MFx4raL3LZosttHgyJHNq80aZBU6tynP5CSbdGxk7S7uDvggDiWyeHMb_5wZkgRY_hKAlxH-U2U316Rzq6VvmbkiTNjlYSrRrHn6w_8CSSya0CtEkL94HKFnojgDBmwSLXIaiKNIJYriTrJrYnSWRTfRvH-fxH3f3S77Udgt1Xaoo1inQBEovRmTG-s7qhFDTGAovIwVbuBCFdc2gjXfqa8HSbL2xMeg4SBFUFROnvJsDNOF882nUXprH-6OcNzr8HPqNWcQOIbP3uqLUFNhKu9RntoGmynJSIRrpII1wGqX4dE34I0DJxCH8wolaRq-0waEdpxNB7hakxFlTQWRbjw-qW3iIEAe8HIY1H0kgBE49GKmiCavN9l39YgEVWbLRfA0A9u12etZ9YgRD9GBZGrCN9E-AZNjGVRekv7nzhGkx0afkwGA08mWw2DADShiEzpdosmCpHplm7ew7LtOU1aLiBKb4n7uLUnrF9KpqjZC2v-urCTmcZ9-pk3daZ7GBFeMHiK8EJ2e3Oe9co9EGaQVYhIRIwB7TNJS7joNCDVno9wJY0S8EJLt9GFeNpEeDGMLgRvIrx4AM2J4P_yeSrCi9nD4zfNLWgHN0pnaV1VbvGT4gz1S31SOND1Pz-ABE0s_E42cK_U9277OMR9H-ujlbdAxVxJCzu3BWYRnvfI_OTDhgjxJ1Cr9KfNVkTpnK6JjtK7Ybc4KLODMaIinjv2bm8o7WQ_gJ3CZmuf98nDrSpQhPGC-Oi2CrVcMkSE8El6DeiJG-73LsbuQ48cDWqe0Q8ivruE6FY48oFMwI5TItAGNg1os2dGe82mEcYRLr27gE17f3y5v5s93CHTNRvusm_TrZAGn1qsQmtrt75G4EWEFytu110zpcq5bPCc-5pstfonUBvhBTemAxPhBSKSIS6p6Bj0IDQxa9QQ-t1qQsGZeKthqxUFY4AhozrdD7uVxBhFObHAkO4kMlTzrR0gP1hCvyPWbbaH6hVP0RetVppsENGrbgPSlzb0P7ankimK0jmo1gXPlmgDGhGLQDLnKi_M06EIpzGKd3Ecx3leJCUucV1AMgpK82z6hy-aS-tN8tjbtToSafJjqYzVQDY-6OZoX5FxNd6I-CbeZUmbFOAr2AFDcoKhzEo4h-FrJx_4ShLxkUgmQJtDpJ8RA21WQiAGn4ipSHZW1bkAIrvt50FYhKtO-r6IIaGclEuKxSQLFUsDiUUNOWnQ3EXoV6DqCfRzoM-xlQlohowxZKXYfw4iskFE2bI2JVWetHmMvF0WndGHXCd4Q6dGTQuPNa3aPA6Q5iEbEldA32RTlRXQgE1xigZIhTThrs16ExOQKmBWhszSJk8ZIo3LGW8xwzhPWcCsOmWW5W8riHGWhwrWIZuM1G3xtmpJ3RYHNi7gg12XFnHeZvGvlZjzxcUn8vdXmH079jKq85iyNosD8MkJ-IJmzSvg_fMI3J99zfljy4h9lwqXgAHNmgAYDoEleVO_Vrj98-zhca70CY4H2JAhk42sZzWXq6_QuuER8T98gn4NKWNNzQKk6QnSJM7adyD9e1BeJG-UEsfvS8rUcdYGymShMkXaFtVY9Jf5xyGA1aBPn-8ej6fEPyS3oXLeLz4SXgnOBDdtUQVg8gBMVucso4EdOmH5VsDOdU_dBv5eRFmbM5bRAFExRpRRAJe0x-ZxBfo1577DLUXZFDjNArllYIkUEhLDWO5CO20km1Hf__qxux3Qzu_KSwoCqUkMgaAqFJTVMQuCed53LfqTNJZICoGoQXqg-wmyy9aGJIlZGIx16H9K4zoZgxnEHjE9KUpeQniB-eL2zto6i-tkDAIH6T3BQJosQ5Qmyw3hMmidZlqTZ7f9-lx8zHouKc9ROIbn_ixyGQtmDW6yIAxwcoKlwIyhvRXmyaMPquqtIhECO8k5jsdJ2vYuY5o_HU5To77FwQpzddIktKn7k9aRb9tJHwFL7Q3kZ_vQdCg8CSVCuGZ_2UqH9OjAXvbgzHkyV5sNkew0ys86wjfwbkxtnXTibHAuYzoM3kuHBcsl3e2S5HB3xOnSePJ9qR0Tu4Gl1cRfjx0r8YiCCOGC02XNw7wjmR2zgY-E3uZ-SYSzZeKJqn2v-ptqzrvgRXeKCR1Z_1wPeuzDSQviObDg69661DQXBSZBvsTZaWTEJKji_3eePWs4WtYxCZoKHJa-pCBQ5RcN5_MbeZH599YMkuHJQkcw2ufzV2SMSWdBOXtVtxRDlQe6FSe6NUle_qxuv6nGXFbsN9Xcc2MDxV7Ligdfbgl3bvQnt_fbYnD4uy2SJnkZWCQs70nVZKS-JP129BwUwDOV75Il_4MWOZ8qaJ5mpA5sUJ3Utjwvh6jYV9o9Br9FZy_a30uV62xtJSwvQx_Uofy2zHOMnOQLxbnNczxmcLh92Z9K3a5--1SalnVwIjtcoBzYVBlBy6VbtjSWaLvcg3qDcZWRgDE-MTDGkKOe5QUbEQzHnXtyCwta-xNA7yLUDm0eokMo9DeG_hYewY47lzBASZo5WZ0BNHlCViEDgPiobxsLQ0-gDVcSJeU0nnpb_tzl4nTFLWraGmJgCRQJyeKSlU0MSZqSuq5i2lQU1y2tSHN0wiPRK3DVEe2qYllkk05-l-qHnAguu91kJbuBbq2BMLRRDISj3irDd_2U7zSFAHbLvY2ajgsW4UXD5VljSmVdJ40YJyupjOUUbYzbZ2jvvr_wN7pfH25uZ4-Ps_lH9PjxDi0-399__vbp9w9o8en-7gE9fvbDN398QF_vvnz--ni4L_1y7ua1Mm6HXbx9PRBoQL5IAkPEHli-3wp4YTfbCC_oJGmKsvYXpi_fgfwsE7P-NW_s31JcseuU1WlNruA6KcqySOK4Kq_W10XSlHkdU0jzIoGaVRlhOGMkKSijwJIrfo1jnMYYV0mVVXE5bVNasCRugGFWxnUdZTFsCBdTF89TpVdX_pr8ukjiIr8SpAFh_JtdjCX8QH4ywjjKb6_0td8DTbcyURYLbqw5crHcCv9KuL9DMFF--995q9BnBi7XoLl1HALOEb4J3kdSQYy56rS4_vXXC950_w4AAP__5UQS8Q">