[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