[clang] [Modules] Delay deserialization of preferred_name attribute at r… (PR #122726)

Ben Langmuir via cfe-commits cfe-commits at lists.llvm.org
Thu Jan 23 11:04:42 PST 2025


benlangmuir wrote:

I see that this change has already been reverted by @ilya-biryukov , but FYI before this is re-applied: I am seeing crashes from this change if I attempt to bootstrap a build of clang with modules enabled on Darwin.  I haven't yet managed to minimize a test case, but compiling the following triggers the issue at least when using the current Darwin libc++ 

```
#  include <string_view>

template <class _CharT, class _Traits, class _Tp>
struct __can_be_converted_to_string_view
    : public _BoolConstant< is_convertible<const _Tp&, basic_string_view<_CharT, _Traits> >::value &&
                            !is_convertible<const _Tp&, const _CharT*>::value > {};

```

The crash is because we get a call to `loadDeferredAttribute ` with a  `nullptr` decl. During the read of `basic_string_view` from the module we end up calling `readAttributes` with no decl.  Not sure what was supposed to happen here.

```
(lldb) bt
* thread #1, queue = 'com.apple.main-thread', stop reason = EXC_BAD_ACCESS (code=1, address=0x1c)
  * frame #0: 0x00000001032c293c clang++`clang::Decl::isFromASTFile(this=0x0000000000000000) const at DeclBase.h:786:39
    frame #1: 0x00000001032c28ec clang++`clang::ASTReader::getOwningModuleFile(this=0x000000015102d800, D=0x0000000000000000) const at ASTReader.cpp:8016:11
    frame #2: 0x00000001034642f8 clang++`clang::ASTReader::loadDeferredAttribute(this=0x000000015102d800, DA=0x0000600003cb01e0) at ASTReaderDecl.cpp:4517:19
    frame #3: 0x00000001032d35b4 clang++`clang::ASTReader::finishPendingActions(this=0x000000015102d800) at ASTReader.cpp:10244:7
    frame #4: 0x00000001032db234 clang++`clang::ASTReader::FinishedDeserializing(this=0x000000015102d800) at ASTReader.cpp:10799:5
    frame #5: 0x00000001033111bc clang++`clang::ExternalASTSource::Deserializing::~Deserializing(this=0x000000016fdeedf0) at ExternalASTSource.h:88:15
    frame #6: 0x000000010328fbec clang++`clang::ExternalASTSource::Deserializing::~Deserializing(this=0x000000016fdeedf0) at ExternalASTSource.h:87:22
    frame #7: 0x00000001032c5ddc clang++`clang::ASTReader::FindExternalVisibleDeclsByName(this=0x000000015102d800, DC=0x000000015157f240, Name=(Ptr = 5659675880), OriginalDC=0x000000015157f240) at ASTReader.cpp:8525:1
    frame #8: 0x0000000105794d78 clang++`clang::DeclContext::lookupImpl(clang::DeclarationName, clang::DeclContext const*) const + 716
    frame #9: 0x0000000104e13738 clang++`LookupDirect(clang::Sema&, clang::LookupResult&, clang::DeclContext const*) + 108
```

https://github.com/llvm/llvm-project/pull/122726


More information about the cfe-commits mailing list