llvm / llvm/llvm-project

[clang] PCH deserialization heap-use-after-free in ASTReader::LoadExternalSpecializationsImpl

Open
#196,482 3 comments 0 reactions 0 assignees View on GitHub
clang:PCH crash incomplete
Dominant language
LLVM
Stars
40.5k
Forks
18.7k
PR merge metrics
PR metrics pending

Description

I am seeing a Clang crash when compiling a C++20 translation unit with an Emscripten/wasm target and a precompiled header. Unfortunately I cannot attach the original source/PCH because this reproduces in a private codebase, but an ASAN-enabled Clang build gives a fairly specific heap-use-after-free in Clang’s PCH/AST deserialization path.

Compiler build:
```text
clang version 23.0.0git (https://github.com/llvm/llvm-project.git 862ceaa793f8f8e86914595cb518ffbfd182dea7)
Target: wasm32-unknown-emscripten
Build config: +assertions, +asan
```

Relevant compile flags:
```
-include-pch .../cmake_pch.hxx.pch
-ftime-trace
-target wasm32-unknown-emscripten
-std=c++20
```

#172658 fixed iterator invalidation, but our ASAN trace suggests the replacement pointer/reference into DenseMap storage can still be invalidated when SpecLookups mutates/grows.

This issue is probably related to #196039 , #170421 and (maybe) incomplete fix in #172658

ASAN log:
```text
#244 0xaaaab002e134 in llvm::CrashRecoveryContext::RunSafely(llvm::function_ref) /opt/llvm-project/llvm/lib/Support/CrashRecoveryContext.cpp:437:3
#245 0xaaaab11c0fc8 in clang::driver::CC1Command::Execute(llvm::ArrayRef>, std::__cxx11::basic_string, std::allocator>*, bool*) const /opt/llvm-project/clang/lib/Driver/Job.cpp:442:12
#246 0xaaaab113ed0c in clang::driver::Compilation::ExecuteCommand(clang::driver::Command const&, clang::driver::Command const*&, bool) const /opt/llvm-project/clang/lib/Driver/Compilation.cpp:196:15
#247 0xaaaab113f0fc in clang::driver::Compilation::ExecuteJobs(clang::driver::JobList const&, llvm::SmallVectorImpl>&, bool) const /opt/llvm-project/clang/lib/Driver/Compilation.cpp:246:19
#248 0xaaaab11768a4 in clang::driver::Driver::ExecuteCompilation(clang::driver::Compilation&, llvm::SmallVectorImpl>&) /opt/llvm-project/clang/lib/Driver/Driver.cpp:2325:5
#249 0xaaaaad7c22ac in clang_main(int, char**, llvm::ToolContext const&) /opt/llvm-project/clang/tools/driver/driver.cpp:419:21
#250 0xaaaaad7e1cb4 in main /opt/llvm-build/tools/clang/tools/driver/clang-driver.cpp:17:10
#251 0xfffff7a384c0 (/lib/aarch64-linux-gnu/libc.so.6+0x284c0) (BuildId: d5ef86dde36cbd3289566cf5098226035d76f2e1)
#252 0xfffff7a38594 in __libc_start_main (/lib/aarch64-linux-gnu/libc.so.6+0x28594) (BuildId: d5ef86dde36cbd3289566cf5098226035d76f2e1)
#253 0xaaaaad6e11ec in _start (/opt/llvm-ice/bin/clang-23+0x2c411ec) (BuildId: dab5d8a656f357b6a24fadd3c64ffa7299a3d17c)

0x52f000038818 is located 1048 bytes inside of 49152-byte region [0x52f000038400,0x52f000044400)
freed by thread T0 here:
#0 0xaaaaad7be5b8 in operator delete(void*, std::align_val_t) (/opt/llvm-ice/bin/clang-23+0x2d1e5b8) (BuildId: dab5d8a656f357b6a24fadd3c64ffa7299a3d17c)
#1 0xaaaab1a10890 in llvm::DenseMap, llvm::detail::DenseMapPair>::deallocateBuckets() /opt/llvm-project/llvm/include/llvm/ADT/DenseMap.h:826:5
#2 0xaaaab1a10890 in llvm::DenseMap, llvm::detail::DenseMapPair>::kill() /opt/llvm-project/llvm/include/llvm/ADT/DenseMap.h:843:5
#3 0xaaaab1a10890 in llvm::DenseMapBase, llvm::detail::DenseMapPair>, clang::Decl const*, clang::serialization::reader::LazySpecializationInfoLookupTable, llvm::DenseMapInfo, llvm::detail::DenseMapPair>::moveFrom(llvm::DenseMap, llvm::detail::DenseMapPair>&) /opt/llvm-project/llvm/include/llvm/ADT/DenseMap.h:458:21
#4 0xaaaab1a10450 in llvm::DenseMapBase, llvm::detail::DenseMapPair>, clang::Decl const*, clang::serialization::reader::LazySpecializationInfoLookupTable, llvm::DenseMapInfo, llvm::detail::DenseMapPair>::grow(unsigned int) /opt/llvm-project/llvm/include/llvm/ADT/DenseMap.h:570:9
#5 0xaaaab1a1023c in llvm::detail::DenseMapPair* llvm::DenseMapBase, llvm::detail::DenseMapPair>, clang::Decl const*, clang::serialization::reader::LazySpecializationInfoLookupTable, llvm::DenseMapInfo, llvm::detail::DenseMapPair>::findBucketForInsertion(clang::Decl const* const&, llvm::detail::DenseMapPair*) /opt/llvm-project/llvm/include/llvm/ADT/DenseMap.h
#6 0xaaaab1a0fe3c in std::pair*, bool> llvm::DenseMapBase, llvm::detail::DenseMapPair>, clang::Decl const*, clang::serialization::reader::LazySpecializationInfoLookupTable, llvm::DenseMapInfo, llvm::detail::DenseMapPair>::lookupOrInsertIntoBucket(clang::Decl const* const&) /opt/llvm-project/llvm/include/llvm/ADT/DenseMap.h:510:17
#7 0xaaaab1920c5c in llvm::DenseMapBase, llvm::detail::DenseMapPair>, clang::Decl const*, clang::serialization::reader::LazySpecializationInfoLookupTable, llvm::DenseMapInfo, llvm::detail::DenseMapPair>::operator[](clang::Decl const* const&) /opt/llvm-project/llvm/include/llvm/ADT/DenseMap.h:350:12
#8 0xaaaab1920c5c in clang::ASTReader::AddSpecializations(clang::Decl const*, unsigned char const*, clang::serialization::ModuleFile&, bool) /opt/llvm-project/clang/lib/Serialization/ASTReader.cpp:1614:3
#9 0xaaaab1920c5c in clang::ASTReader::ReadSpecializations(clang::serialization::ModuleFile&, llvm::BitstreamCursor&, unsigned long, clang::Decl*, bool) /opt/llvm-project/clang/lib/Serialization/ASTReader.cpp:1650:3
#10 0xaaaab1a7d8bc in clang::ASTDeclReader::ReadSpecializations(clang::serialization::ModuleFile&, clang::Decl*, llvm::BitstreamCursor&, bool) /opt/llvm-project/clang/lib/Serialization/ASTReaderDecl.cpp:2455:14
#11 0xaaaab1a54da8 in clang::ASTDeclReader::Visit(clang::Decl*) /opt/llvm-project/clang/lib/Serialization/ASTReaderDecl.cpp:527:37
#12 0xaaaab77030e4 in llvm::function_ref::operator()() const /opt/llvm-project/llvm/include/llvm/ADT/STLFunctionalExtras.h:69:12
#13 0xaaaab77030e4 in clang::runWithSufficientStackSpace(llvm::function_ref, llvm::function_ref) /opt/llvm-project/clang/include/clang/Basic/Stack.h:49:7
#14 0xaaaab77030e4 in clang::StackExhaustionHandler::runWithSufficientStackSpace(clang::SourceLocation, llvm::function_ref) /opt/llvm-project/clang/lib/Basic/StackExhaustionHandler.cpp:20:3
#15 0xaaaab1ab9c74 in clang::ASTReader::ReadDeclRecord(clang::GlobalDeclID) /opt/llvm-project/clang/lib/Serialization/ASTReaderDecl.cpp:4273:3
#16 0xaaaab19796e8 in clang::ASTReader::GetDecl(clang::GlobalDeclID) /opt/llvm-project/clang/lib/Serialization/ASTReader.cpp:8561:5
#17 0xaaaab1a5d968 in clang::FunctionTemplateDecl* clang::ASTReader::ReadDeclAs(clang::serialization::ModuleFile&, llvm::SmallVectorImpl const&, unsigned int&) /opt/llvm-project/clang/include/clang/Serialization/ASTReader.h:2215:28
#18 0xaaaab1a5d968 in clang::FunctionTemplateDecl* clang::ASTRecordReader::readDeclAs() /opt/llvm-project/clang/include/clang/Serialization/ASTRecordReader.h:202:20
#19 0xaaaab1a5d968 in clang::FunctionTemplateDecl* clang::ASTDeclReader::readDeclAs() /opt/llvm-project/clang/lib/Serialization/ASTReaderDecl.cpp:189:57
#20 0xaaaab1a5d968 in clang::ASTDeclReader::VisitFunctionDecl(clang::FunctionDecl*) /opt/llvm-project/clang/lib/Serialization/ASTReaderDecl.cpp:930:22
#21 0xaaaab1a7af50 in clang::ASTDeclReader::VisitCXXMethodDecl(clang::CXXMethodDecl*) /opt/llvm-project/clang/lib/Serialization/ASTReaderDecl.cpp:2310:3
#22 0xaaaab1a54da8 in clang::ASTDeclReader::Visit(clang::Decl*) /opt/llvm-project/clang/lib/Serialization/ASTReaderDecl.cpp:527:37
#23 0xaaaab77030e4 in llvm::function_ref::operator()() const /opt/llvm-project/llvm/include/llvm/ADT/STLFunctionalExtras.h:69:12
#24 0xaaaab77030e4 in clang::runWithSufficientStackSpace(llvm::function_ref, llvm::function_ref) /opt/llvm-project/clang/include/clang/Basic/Stack.h:49:7
#25 0xaaaab77030e4 in clang::StackExhaustionHandler::runWithSufficientStackSpace(clang::SourceLocation, llvm::function_ref) /opt/llvm-project/clang/lib/Basic/StackExhaustionHandler.cpp:20:3
#26 0xaaaab1ab9c74 in clang::ASTReader::ReadDeclRecord(clang::GlobalDeclID) /opt/llvm-project/clang/lib/Serialization/ASTReaderDecl.cpp:4273:3
#27 0xaaaab19796e8 in clang::ASTReader::GetDecl(clang::GlobalDeclID) /opt/llvm-project/clang/lib/Serialization/ASTReader.cpp:8561:5
#28 0xaaaab19af62c in clang::ASTReader::finishPendingActions() /opt/llvm-project/clang/lib/Serialization/ASTReader.cpp:10705:47
#29 0xaaaab19b9d70 in clang::ASTReader::FinishedDeserializing() /opt/llvm-project/clang/lib/Serialization/ASTReader.cpp:11241:5
#30 0xaaaab199a4bc in clang::ExternalASTSource::Deserializing::~Deserializing() /opt/llvm-project/clang/include/clang/AST/ExternalASTSource.h:89:15
#31 0xaaaab199a4bc in clang::ASTReader::FindExternalVisibleDeclsByName(clang::DeclContext const*, clang::DeclarationName, clang::DeclContext const*) /opt/llvm-project/clang/lib/Serialization/ASTReader.cpp:8906:1
#32 0xaaaab66eb2a0 in clang::DeclContext::lookupImpl(clang::DeclarationName, clang::DeclContext const*) const /opt/llvm-project/clang/lib/AST/DeclBase.cpp:1947:17
#33 0xaaaab1993274 in clang::ASTReader::CompleteRedeclChain(clang::Decl const*) /opt/llvm-project/clang/lib/Serialization/ASTReader.cpp:8227:13
#34 0xaaaab062c918 in clang::LazyGenerationalUpdatePtr::get(clang::Decl const*) /opt/llvm-project/clang/include/clang/AST/ExternalASTSource.h:497:9
#35 0xaaaab062c918 in clang::Redeclarable::DeclLink::getPrevious(clang::FunctionDecl const*) const /opt/llvm-project/clang/include/clang/AST/Redeclarable.h:131:63
#36 0xaaaab61b63d0 in clang::Redeclarable::getNextRedeclaration() const /opt/llvm-project/clang/include/clang/AST/Redeclarable.h:186:23
#37 0xaaaab61b63d0 in clang::Redeclarable::getMostRecentDecl() /opt/llvm-project/clang/include/clang/AST/Redeclarable.h:224:28
#38 0xaaaab61b63d0 in clang::ASTContext::adjustDeducedFunctionResultType(clang::FunctionDecl*, clang::QualType) /opt/llvm-project/clang/lib/AST/ASTContext.cpp:3765:12
#39 0xaaaab19ba564 in clang::ASTReader::FinishedDeserializing() /opt/llvm-project/clang/lib/Serialization/ASTReader.cpp:11278:24
#40 0xaaaab199a4bc in clang::ExternalASTSource::Deserializing::~Deserializing() /opt/llvm-project/clang/include/clang/AST/ExternalASTSource.h:89:15
#41 0xaaaab199a4bc in clang::ASTReader::FindExternalVisibleDeclsByName(clang::DeclContext const*, clang::DeclarationName, clang::DeclContext const*) /opt/llvm-project/clang/lib/Serialization/ASTReader.cpp:8906:1
#42 0xaaaab66eb2a0 in clang::DeclContext::lookupImpl(clang::DeclarationName, clang::DeclContext const*) const /opt/llvm-project/clang/lib/AST/DeclBase.cpp:1947:17
#43 0xaaaab669bf68 in clang::NamespaceDecl::isRedundantInlineQualifierFor(clang::DeclarationName) const /opt/llvm-project/clang/include/clang/AST/Decl.h:669:55
#44 0xaaaab669aea4 in clang::NamedDecl::printNestedNameSpecifier(llvm::raw_ostream&, clang::PrintingPolicy const&) const /opt/llvm-project/clang/lib/AST/Decl.cpp:1762:38
#45 0xaaaab669a89c in clang::NamedDecl::printQualifiedName(llvm::raw_ostream&, clang::PrintingPolicy const&) const /opt/llvm-project/clang/lib/AST/Decl.cpp:1699:3

previously allocated by thread T0 here:
#0 0xaaaaad7bdd70 in operator new(unsigned long, std::align_val_t, std::nothrow_t const&) (/opt/llvm-ice/bin/clang-23+0x2d1dd70) (BuildId: dab5d8a656f357b6a24fadd3c64ffa7299a3d17c)
#1 0xaaaab007f5bc in llvm::allocate_buffer(unsigned long, unsigned long) /opt/llvm-project/llvm/lib/Support/MemAlloc.cpp:16:18
#2 0xaaaab1a10374 in llvm::DenseMap, llvm::detail::DenseMapPair>::allocateBuckets(unsigned int) /opt/llvm-project/llvm/include/llvm/ADT/DenseMap.h:837:9
#3 0xaaaab1a10374 in llvm::DenseMapBase, llvm::detail::DenseMapPair>, clang::Decl const*, clang::serialization::reader::LazySpecializationInfoLookupTable, llvm::DenseMapInfo, llvm::detail::DenseMapPair>::initWithExactBucketCount(unsigned int) /opt/llvm-project/llvm/include/llvm/ADT/DenseMap.h:383:19
#4 0xaaaab1a10374 in llvm::DenseMap, llvm::detail::DenseMapPair>::DenseMap(unsigned int, llvm::DenseMapBase, llvm::detail::DenseMapPair>, clang::Decl const*, clang::serialization::reader::LazySpecializationInfoLookupTable, llvm::DenseMapInfo, llvm::detail::DenseMapPair>::ExactBucketCount) /opt/llvm-project/llvm/include/llvm/ADT/DenseMap.h:760:11
#5 0xaaaab1a10374 in llvm::DenseMapBase, llvm::detail::DenseMapPair>, clang::Decl const*, clang::serialization::reader::LazySpecializationInfoLookupTable, llvm::DenseMapInfo, llvm::detail::DenseMapPair>::grow(unsigned int) /opt/llvm-project/llvm/include/llvm/ADT/DenseMap.h:569:14
#6 0xaaaab1a1023c in llvm::detail::DenseMapPair* llvm::DenseMapBase, llvm::detail::DenseMapPair>, clang::Decl const*, clang::serialization::reader::LazySpecializationInfoLookupTable, llvm::DenseMapInfo, llvm::detail::DenseMapPair>::findBucketForInsertion(clang::Decl const* const&, llvm::detail::DenseMapPair*) /opt/llvm-project/llvm/include/llvm/ADT/DenseMap.h
#7 0xaaaab1a0fe3c in std::pair*, bool> llvm::DenseMapBase, llvm::detail::DenseMapPair>, clang::Decl const*, clang::serialization::reader::LazySpecializationInfoLookupTable, llvm::DenseMapInfo, llvm::detail::DenseMapPair>::lookupOrInsertIntoBucket(clang::Decl const* const&) /opt/llvm-project/llvm/include/llvm/ADT/DenseMap.h:510:17
#8 0xaaaab1920c5c in llvm::DenseMapBase, llvm::detail::DenseMapPair>, clang::Decl const*, clang::serialization::reader::LazySpecializationInfoLookupTable, llvm::DenseMapInfo, llvm::detail::DenseMapPair>::operator[](clang::Decl const* const&) /opt/llvm-project/llvm/include/llvm/ADT/DenseMap.h:350:12
#9 0xaaaab1920c5c in clang::ASTReader::AddSpecializations(clang::Decl const*, unsigned char const*, clang::serialization::ModuleFile&, bool) /opt/llvm-project/clang/lib/Serialization/ASTReader.cpp:1614:3
#10 0xaaaab1920c5c in clang::ASTReader::ReadSpecializations(clang::serialization::ModuleFile&, llvm::BitstreamCursor&, unsigned long, clang::Decl*, bool) /opt/llvm-project/clang/lib/Serialization/ASTReader.cpp:1650:3
#11 0xaaaab1a7d8bc in clang::ASTDeclReader::ReadSpecializations(clang::serialization::ModuleFile&, clang::Decl*, llvm::BitstreamCursor&, bool) /opt/llvm-project/clang/lib/Serialization/ASTReaderDecl.cpp:2455:14
#12 0xaaaab1a7da00 in clang::ASTDeclReader::VisitClassTemplateDecl(clang::ClassTemplateDecl*) /opt/llvm-project/clang/lib/Serialization/ASTReaderDecl.cpp:2498:5
#13 0xaaaab1a54da8 in clang::ASTDeclReader::Visit(clang::Decl*) /opt/llvm-project/clang/lib/Serialization/ASTReaderDecl.cpp:527:37
#14 0xaaaab77030e4 in llvm::function_ref::operator()() const /opt/llvm-project/llvm/include/llvm/ADT/STLFunctionalExtras.h:69:12
#15 0xaaaab77030e4 in clang::runWithSufficientStackSpace(llvm::function_ref, llvm::function_ref) /opt/llvm-project/clang/include/clang/Basic/Stack.h:49:7
#16 0xaaaab77030e4 in clang::StackExhaustionHandler::runWithSufficientStackSpace(clang::SourceLocation, llvm::function_ref) /opt/llvm-project/clang/lib/Basic/StackExhaustionHandler.cpp:20:3
#17 0xaaaab1ab9c74 in clang::ASTReader::ReadDeclRecord(clang::GlobalDeclID) /opt/llvm-project/clang/lib/Serialization/ASTReaderDecl.cpp:4273:3
#18 0xaaaab19796e8 in clang::ASTReader::GetDecl(clang::GlobalDeclID) /opt/llvm-project/clang/lib/Serialization/ASTReader.cpp:8561:5
#19 0xaaaab1a0a7d8 in clang::ASTReader::ReadDecl(clang::serialization::ModuleFile&, llvm::SmallVectorImpl const&, unsigned int&) /opt/llvm-project/clang/include/clang/Serialization/ASTReader.h:2205:12
#20 0xaaaab1a0a7d8 in clang::ASTRecordReader::readDecl() /opt/llvm-project/clang/include/clang/Serialization/ASTRecordReader.h:189:20
#21 0xaaaab1a0a7d8 in clang::ASTRecordReader::readDeclRef() /opt/llvm-project/clang/include/clang/Serialization/ASTRecordReader.h:192:12
#22 0xaaaab1a0a7d8 in clang::serialization::BasicReaderBase::readTemplateDeclRef() /opt/llvm-build/tools/clang/include/clang/AST/AbstractBasicReader.inc:1102:48
#23 0xaaaab1a0a7d8 in clang::serialization::BasicReaderBase::readTemplateName() /opt/llvm-build/tools/clang/include/clang/AST/AbstractBasicReader.inc:1110:58
#24 0xaaaab1a0a638 in clang::serialization::BasicReaderBase::readTemplateName() /opt/llvm-build/tools/clang/include/clang/AST/AbstractBasicReader.inc:1148:79
#25 0xaaaab1a2e060 in clang::serialization::AbstractTypeReader::readTemplateSpecializationType() /opt/llvm-build/tools/clang/include/clang/AST/AbstractTypeReader.inc:760:56
#26 0xaaaab19847f4 in clang::ASTReader::readTypeRecord(unsigned long) /opt/llvm-project/clang/lib/Serialization/ASTReader.cpp:7360:21
#27 0xaaaab1973fb0 in clang::ASTReader::GetType(unsigned long) /opt/llvm-project/clang/lib/Serialization/ASTReader.cpp:8098:26
#28 0xaaaab1a0dab8 in clang::ASTReader::readType(clang::serialization::ModuleFile&, llvm::SmallVector const&, unsigned int&) /opt/llvm-project/clang/include/clang/Serialization/ASTReader.h:2140:12
#29 0xaaaab1a0dab8 in clang::ASTRecordReader::readType() /opt/llvm-project/clang/include/clang/Serialization/ASTRecordReader.h:175:20
#30 0xaaaab1a0dab8 in clang::ASTRecordReader::readQualType() /opt/llvm-project/clang/include/clang/Serialization/ASTRecordReader.h:178:12
#31 0xaaaab1a0dab8 in clang::serialization::DataStreamBasicReader::readNestedNameSpecifier() /opt/llvm-project/clang/include/clang/AST/AbstractBasicReader.h:271:44
#32 0xaaaab1a26d24 in clang::serialization::AbstractTypeReader::readDependentNameType() /opt/llvm-build/tools/clang/include/clang/AST/AbstractTypeReader.inc:383:57
#33 0xaaaab19847f4 in clang::ASTReader::readTypeRecord(unsigned long) /opt/llvm-project/clang/lib/Serialization/ASTReader.cpp:7360:21
#34 0xaaaab1973fb0 in clang::ASTReader::GetType(unsigned long) /opt/llvm-project/clang/lib/Serialization/ASTReader.cpp:8098:26
#35 0xaaaab1990614 in clang::ASTRecordReader::readTypeSourceInfo() /opt/llvm-project/clang/lib/Serialization/ASTReader.cpp:7770:21
#36 0xaaaab1a58550 in clang::ASTDeclReader::readTypeSourceInfo() /opt/llvm-project/clang/lib/Serialization/ASTReaderDecl.cpp:181:56
#37 0xaaaab1a58550 in clang::ASTDeclReader::VisitTypedefNameDecl(clang::TypedefNameDecl*) /opt/llvm-project/clang/lib/Serialization/ASTReaderDecl.cpp:710:27
#38 0xaaaab1a58f0c in clang::ASTDeclReader::VisitTypeAliasDecl(clang::TypeAliasDecl*) /opt/llvm-project/clang/lib/Serialization/ASTReaderDecl.cpp:730:31
#39 0xaaaab1a54da8 in clang::ASTDeclReader::Visit(clang::Decl*) /opt/llvm-project/clang/lib/Serialization/ASTReaderDecl.cpp:527:37
#40 0xaaaab77030e4 in llvm::function_ref::operator()() const /opt/llvm-project/llvm/include/llvm/ADT/STLFunctionalExtras.h:69:12
#41 0xaaaab77030e4 in clang::runWithSufficientStackSpace(llvm::function_ref, llvm::function_ref) /opt/llvm-project/clang/include/clang/Basic/Stack.h:49:7
#42 0xaaaab77030e4 in clang::StackExhaustionHandler::runWithSufficientStackSpace(clang::SourceLocation, llvm::function_ref) /opt/llvm-project/clang/lib/Basic/StackExhaustionHandler.cpp:20:3
#43 0xaaaab1ab9c74 in clang::ASTReader::ReadDeclRecord(clang::GlobalDeclID) /opt/llvm-project/clang/lib/Serialization/ASTReaderDecl.cpp:4273:3
#44 0xaaaab19796e8 in clang::ASTReader::GetDecl(clang::GlobalDeclID) /opt/llvm-project/clang/lib/Serialization/ASTReader.cpp:8561:5
#45 0xaaaab1a7cfd8 in clang::NamedDecl* clang::ASTReader::ReadDeclAs(clang::serialization::ModuleFile&, llvm::SmallVectorImpl const&, unsigned int&) /opt/llvm-project/clang/include/clang/Serialization/ASTReader.h:2215:28
#46 0xaaaab1a7cfd8 in clang::NamedDecl* clang::ASTRecordReader::readDeclAs() /opt/llvm-project/clang/include/clang/Serialization/ASTRecordReader.h:202:20
#47 0xaaaab1a7cfd8 in clang::NamedDecl* clang::ASTDeclReader::readDeclAs() /opt/llvm-project/clang/lib/Serialization/ASTReaderDecl.cpp:189:57
#48 0xaaaab1a7cfd8 in clang::ASTDeclReader::VisitTemplateDecl(clang::TemplateDecl*) /opt/llvm-project/clang/lib/Serialization/ASTReaderDecl.cpp:2427:11
#49 0xaaaab1a7e25c in clang::ASTDeclReader::VisitRedeclarableTemplateDecl(clang::RedeclarableTemplateDecl*) /opt/llvm-project/clang/lib/Serialization/ASTReaderDecl.cpp:2485:3

SUMMARY: AddressSanitizer: heap-use-after-free /opt/llvm-project/llvm/include/llvm/ADT/PointerIntPair.h:41:5 in llvm::detail::PunnedPointer::asInt() const
Shadow bytes around the buggy address:
0x52f000038580: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd
0x52f000038600: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd
0x52f000038680: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd
0x52f000038700: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd
0x52f000038780: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd
=>0x52f000038800: fd fd fd[fd]fd fd fd fd fd fd fd fd fd fd fd fd
0x52f000038880: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd
0x52f000038900: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd
0x52f000038980: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd
0x52f000038a00: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd
0x52f000038a80: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd
Shadow byte legend (one shadow byte represents 8 application bytes):
Addressable: 00
Partially addressable: 01 02 03 04 05 06 07
Heap left redzone: fa
Freed heap region: fd
Stack left redzone: f1
Stack mid redzone: f2
Stack right redzone: f3
Stack after return: f5
Stack use after scope: f8
Global redzone: f9
Global init order: f6
Poisoned by user: f7
Container overflow: fc
Array cookie: ac
Intra object redzone: bb
ASan internal: fe
Left alloca redzone: ca
Right alloca redzone: cb
==72==ABORTING

Program received signal SIGABRT, Aborted.
0x0000fffff7a97608 in ?? () from /lib/aarch64-linux-gnu/libc.so.6
#0 0x0000fffff7a97608 in ?? () from /lib/aarch64-linux-gnu/libc.so.6
#1 0x0000fffff7a4cb3c in raise () from /lib/aarch64-linux-gnu/libc.so.6
#2 0x0000fffff7a37e00 in abort () from /lib/aarch64-linux-gnu/libc.so.6
#3 0x0000aaaaad7a5cc0 in __sanitizer::Abort() ()
#4 0x0000aaaaad7a3c74 [PAC] in __sanitizer::Die() ()
#5 0x0000aaaaad784e94 [PAC] in __asan::ScopedInErrorReport::~ScopedInErrorReport() ()
#6 0x0000aaaaad787f90 [PAC] in __asan::ReportGenericError(unsigned long, unsigned long, unsigned long, unsigned long, bool, unsigned long, unsigned int, bool) ()
#7 0x0000aaaaad788e14 [PAC] in __asan_report_load8 ()
#8 0x0000aaaab1998838 [PAC] in llvm::detail::PunnedPointer::asInt (this=0x83) at /opt/llvm-project/llvm/include/llvm/ADT/PointerIntPair.h:41
#9 llvm::PointerUnion*>::getOpaqueValue (this=0x83) at /opt/llvm-project/llvm/include/llvm/ADT/PointerUnion.h:342
#10 llvm::CastInfo*>, void>::isPossible (F=) at /opt/llvm-project/llvm/include/llvm/ADT/PointerUnion.h:376
#11 llvm::ConstStrippingForwardingCast*> const, llvm::CastInfo*>, void> >::isPossible (f=) at /opt/llvm-project/llvm/include/llvm/Support/Casting.h:396
#12 llvm::isa*> > (Val=) at /opt/llvm-project/llvm/include/llvm/Support/Casting.h:548
#13 llvm::TinyPtrVector::empty (this=0x83) at /opt/llvm-project/llvm/include/llvm/ADT/TinyPtrVector.h:137
#14 clang::serialization::MultiOnDiskHashTable::find (this=this@entry=0x52f000038810, EKey=) at /opt/llvm-project/clang/lib/Serialization/MultiOnDiskHashTable.h:230
#15 0x0000aaaab1997f30 in clang::ASTReader::LoadExternalSpecializationsImpl (this=, SpecLookups=, D=, TemplateArgs=) at /opt/llvm-project/clang/lib/Serialization/ASTReader.cpp:8698
#16 0x0000aaaab1998974 in clang::ASTReader::LoadExternalSpecializations (this=0x52900000a200, D=0xffffef27bd90, TemplateArgs=) at /opt/llvm-project/clang/lib/Serialization/ASTReader.cpp:8718
#17 0x0000aaaab1998974 in non-virtual thunk to clang::ASTReader::LoadExternalSpecializations(clang::Decl const*, llvm::ArrayRef) ()
#18 0x0000aaaab675cc3c in clang::RedeclarableTemplateDecl::loadLazySpecializationsImpl (this=0xffffef27bd28, TPL=0x0, Args=) at /opt/llvm-project/clang/lib/AST/DeclTemplate.cpp:372
#19 clang::RedeclarableTemplateDecl::findSpecializationImpl > (this=0xffffef27bd28, InsertPos=@0xfffff60d8040: 0x516000320b00, Specs=, ProfileArgs=) at /opt/llvm-project/clang/lib/AST/DeclTemplate.cpp:398
#0 0x0000fffff7a97608 in ?? () from /lib/aarch64-linux-gnu/libc.so.6
No current source file.
No symbol table info available.
No symbol table info available.
#1 0x0000fffff7a4cb3c in raise () from /lib/aarch64-linux-gnu/libc.so.6
No symbol "this" in current context.
No current source file.
No symbol table info available.
No symbol table info available.
No symbol "Tables" in current context.
No symbol "PendingOverrides" in current context.
```

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.