Skip to content

[Clang][ASTImporter] clang::FileID clang::SourceManager::getFileIDLoaded(clang::SourceLocation::UIntTy) const: Assertion `0 && "Invalid SLocOffset or bad function choice"' failed. #75054

Closed
@widberg

Description

@widberg

When running the following on trunk (3d11728)

test.sh

clang++-18 -cc1 -std=c++17 -emit-pch -o qminimalintegration.cpp.oclango qminimalintegration.cpp
clang++-18 -cc1 -x c++ -ast-merge qminimalintegration.cpp.oclango /dev/null -ast-dump-all=json

qminimalintegration.cpp

template <typename _Tp> struct is_object {};
template <typename _Tp, typename... _Args> struct __is_constructible_impl {};
;
static void __attribute__(())
_movdir64b(void *__dst __attribute__((align_value(64))));

The second command crashes with this backtrace

clang++-18: /data/llvm-project/clang/lib/Basic/SourceManager.cpp:865: clang::FileID clang::SourceManager::getFileIDLoaded(clang::SourceLocation::UIntTy) const: Assertion `0 && "Invalid SLocOffset or bad function choice"' 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++-18 -cc1 -x c++ -ast-merge qminimalintegration.cpp.oclango /dev/null -ast-dump-all=json
1.	<eof> parser at end of file
 #0 0x000055555adf59e8 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) /data/llvm-project/llvm/lib/Support/Unix/Signals.inc:727:0
 #1 0x000055555adf3524 llvm::sys::RunSignalHandlers() /data/llvm-project/llvm/lib/Support/Signals.cpp:105:0
 #2 0x000055555adf413e SignalHandler(int) /data/llvm-project/llvm/lib/Support/Unix/Signals.inc:403:0
 #3 0x00007ffff7bc6980 __restore_rt (/lib/x86_64-linux-gnu/libpthread.so.0+0x12980)
 #4 0x00007ffff67f4e87 raise /build/glibc-CVJwZb/glibc-2.27/signal/../sysdeps/unix/sysv/linux/raise.c:51:0
 #5 0x00007ffff67f67f1 abort /build/glibc-CVJwZb/glibc-2.27/stdlib/abort.c:81:0
 #6 0x00007ffff67e63fa __assert_fail_base /build/glibc-CVJwZb/glibc-2.27/assert/assert.c:89:0
 #7 0x00007ffff67e6472 (/lib/x86_64-linux-gnu/libc.so.6+0x30472)
 #8 0x000055555b20348d (/data/llvm-project/build/bin/clang-18+0x5caf48d)
 #9 0x000055555b206a32 clang::SourceManager::getFileIDSlow(unsigned int) const /data/llvm-project/clang/lib/Basic/SourceManager.cpp:776:0
#10 0x000055555b206a32 clang::SourceManager::getFileID(unsigned int) const /data/llvm-project/clang/include/clang/Basic/SourceManager.h:1856:0
#11 0x000055555b2083cf clang::SourceManager::getSLocEntryOrNull(clang::FileID) const /data/llvm-project/clang/include/clang/Basic/SourceManager.h:1825:0
#12 0x000055555b2083cf clang::SourceManager::getDecomposedExpansionLoc(clang::SourceLocation) const /data/llvm-project/clang/include/clang/Basic/SourceManager.h:1281:0
#13 0x000055555b20ad6d clang::SourceManager::getPresumedLoc(clang::SourceLocation, bool) const /data/llvm-project/clang/lib/Basic/SourceManager.cpp:1461:0
#14 0x000055555de7a225 clang::JSONNodeDumper::writeBareSourceLocation(clang::SourceLocation, bool) /data/llvm-project/clang/lib/AST/JSONNodeDumper.cpp:246:0
#15 0x000055555de7a8c0 clang::JSONNodeDumper::writeSourceLocation(clang::SourceLocation) /data/llvm-project/clang/lib/AST/JSONNodeDumper.cpp:301:0
#16 0x000055555de7aac4 llvm::json::OStream::object(llvm::function_ref<void ()>) /data/llvm-project/llvm/include/llvm/Support/JSON.h:997:0
#17 0x000055555de7aac4 llvm::json::OStream::attributeObject(llvm::StringRef, llvm::function_ref<void ()>)::'lambda'()::operator()() const /data/llvm-project/llvm/include/llvm/Support/JSON.h:1028:0
#18 0x000055555de7aac4 void llvm::function_ref<void ()>::callback_fn<llvm::json::OStream::attributeObject(llvm::StringRef, llvm::function_ref<void ()>)::'lambda'()>(long) /data/llvm-project/llvm/include/llvm/ADT/STLFunctionalExtras.h:45:0
#19 0x000055555de7aac4 llvm::function_ref<void ()>::operator()() const /data/llvm-project/llvm/include/llvm/ADT/STLFunctionalExtras.h:68:0
#20 0x000055555de7aac4 llvm::json::OStream::attributeImpl(llvm::StringRef, llvm::function_ref<void ()>) /data/llvm-project/llvm/include/llvm/Support/JSON.h:1046:0
#21 0x000055555de7aac4 llvm::json::OStream::attributeObject(llvm::StringRef, llvm::function_ref<void ()>) /data/llvm-project/llvm/include/llvm/Support/JSON.h:1028:0
#22 0x000055555de7aac4 clang::JSONNodeDumper::writeSourceRange(clang::SourceRange) /data/llvm-project/clang/lib/AST/JSONNodeDumper.cpp:306:0
#23 0x000055555de901a3 llvm::json::OStream::object(llvm::function_ref<void ()>) /data/llvm-project/llvm/include/llvm/Support/JSON.h:997:0
#24 0x000055555de901a3 llvm::json::OStream::attributeObject(llvm::StringRef, llvm::function_ref<void ()>)::'lambda'()::operator()() const /data/llvm-project/llvm/include/llvm/Support/JSON.h:1028:0
#25 0x000055555de901a3 void llvm::function_ref<void ()>::callback_fn<llvm::json::OStream::attributeObject(llvm::StringRef, llvm::function_ref<void ()>)::'lambda'()>(long) /data/llvm-project/llvm/include/llvm/ADT/STLFunctionalExtras.h:45:0
#26 0x000055555de901a3 llvm::function_ref<void ()>::operator()() const /data/llvm-project/llvm/include/llvm/ADT/STLFunctionalExtras.h:68:0
#27 0x000055555de901a3 llvm::json::OStream::attributeImpl(llvm::StringRef, llvm::function_ref<void ()>) /data/llvm-project/llvm/include/llvm/Support/JSON.h:1046:0
#28 0x000055555de901a3 llvm::json::OStream::attributeObject(llvm::StringRef, llvm::function_ref<void ()>) /data/llvm-project/llvm/include/llvm/Support/JSON.h:1028:0
#29 0x000055555de901a3 clang::JSONNodeDumper::Visit(clang::Stmt const*) /data/llvm-project/clang/lib/AST/JSONNodeDumper.cpp:55:0
#30 0x000055555dab9ca8 clang::ASTNodeTraverser<clang::JSONDumper, clang::JSONNodeDumper>::Visit(clang::Stmt const*, llvm::StringRef)::'lambda'()::operator()() const /data/llvm-project/clang/include/clang/AST/ASTNodeTraverser.h:142:0
#31 0x000055555dac00c2 void clang::NodeStreamer::AddChild<clang::ASTNodeTraverser<clang::JSONDumper, clang::JSONNodeDumper>::Visit(clang::Stmt const*, llvm::StringRef)::'lambda'()>(llvm::StringRef, clang::ASTNodeTraverser<clang::JSONDumper, clang::JSONNodeDumper>::Visit(clang::Stmt const*, llvm::StringRef)::'lambda'())::'lambda'(bool)::operator()(bool) const /data/llvm-project/clang/include/clang/AST/JSONNodeDumper.h:82:0
#32 0x000055555dac00c2 std::_Function_handler<void (bool), void clang::NodeStreamer::AddChild<clang::ASTNodeTraverser<clang::JSONDumper, clang::JSONNodeDumper>::Visit(clang::Stmt const*, llvm::StringRef)::'lambda'()>(llvm::StringRef, clang::ASTNodeTraverser<clang::JSONDumper, clang::JSONNodeDumper>::Visit(clang::Stmt const*, llvm::StringRef)::'lambda'())::'lambda'(bool)>::_M_invoke(std::_Any_data const&, bool&&) /usr/include/c++/7/bits/std_function.h:316:0
#33 0x000055555dabf7be void clang::NodeStreamer::AddChild<clang::ASTNodeTraverser<clang::JSONDumper, clang::JSONNodeDumper>::Visit(clang::Attr const*)::'lambda'()>(llvm::StringRef, clang::ASTNodeTraverser<clang::JSONDumper, clang::JSONNodeDumper>::Visit(clang::Attr const*)::'lambda'())::'lambda'(bool)::operator()(bool) const /data/llvm-project/clang/include/clang/AST/JSONNodeDumper.h:74:0
#34 0x000055555dabf7be std::_Function_handler<void (bool), void clang::NodeStreamer::AddChild<clang::ASTNodeTraverser<clang::JSONDumper, clang::JSONNodeDumper>::Visit(clang::Attr const*)::'lambda'()>(llvm::StringRef, clang::ASTNodeTraverser<clang::JSONDumper, clang::JSONNodeDumper>::Visit(clang::Attr const*)::'lambda'())::'lambda'(bool)>::_M_invoke(std::_Any_data const&, bool&&) /usr/include/c++/7/bits/std_function.h:316:0
#35 0x000055555dac3356 void clang::NodeStreamer::AddChild<clang::ASTNodeTraverser<clang::JSONDumper, clang::JSONNodeDumper>::Visit(clang::Decl const*)::'lambda'()>(llvm::StringRef, clang::ASTNodeTraverser<clang::JSONDumper, clang::JSONNodeDumper>::Visit(clang::Decl const*)::'lambda'())::'lambda'(bool)::operator()(bool) const /data/llvm-project/clang/include/clang/AST/JSONNodeDumper.h:74:0
#36 0x000055555dac3356 std::_Function_handler<void (bool), void clang::NodeStreamer::AddChild<clang::ASTNodeTraverser<clang::JSONDumper, clang::JSONNodeDumper>::Visit(clang::Decl const*)::'lambda'()>(llvm::StringRef, clang::ASTNodeTraverser<clang::JSONDumper, clang::JSONNodeDumper>::Visit(clang::Decl const*)::'lambda'())::'lambda'(bool)>::_M_invoke(std::_Any_data const&, bool&&) /usr/include/c++/7/bits/std_function.h:316:0
#37 0x000055555dac3356 void clang::NodeStreamer::AddChild<clang::ASTNodeTraverser<clang::JSONDumper, clang::JSONNodeDumper>::Visit(clang::Decl const*)::'lambda'()>(llvm::StringRef, clang::ASTNodeTraverser<clang::JSONDumper, clang::JSONNodeDumper>::Visit(clang::Decl const*)::'lambda'())::'lambda'(bool)::operator()(bool) const /data/llvm-project/clang/include/clang/AST/JSONNodeDumper.h:74:0
#38 0x000055555dac3356 std::_Function_handler<void (bool), void clang::NodeStreamer::AddChild<clang::ASTNodeTraverser<clang::JSONDumper, clang::JSONNodeDumper>::Visit(clang::Decl const*)::'lambda'()>(llvm::StringRef, clang::ASTNodeTraverser<clang::JSONDumper, clang::JSONNodeDumper>::Visit(clang::Decl const*)::'lambda'())::'lambda'(bool)>::_M_invoke(std::_Any_data const&, bool&&) /usr/include/c++/7/bits/std_function.h:316:0
#39 0x000055555dab8f63 void clang::NodeStreamer::AddChild<clang::ASTNodeTraverser<clang::JSONDumper, clang::JSONNodeDumper>::Visit(clang::Decl const*)::'lambda'()>(llvm::StringRef, clang::ASTNodeTraverser<clang::JSONDumper, clang::JSONNodeDumper>::Visit(clang::Decl const*)::'lambda'()) /data/llvm-project/clang/include/clang/AST/JSONNodeDumper.h:103:0
#40 0x000055555dab8c6b llvm::PointerIntPairInfo<clang::Decl*, 3u, llvm::PointerLikeTypeTraits<clang::Decl*>>::getPointer(long) /data/llvm-project/llvm/include/llvm/ADT/PointerIntPair.h:192:0
#41 0x000055555dab8c6b llvm::PointerIntPair<clang::Decl*, 3u, clang::Decl::ModuleOwnershipKind, llvm::PointerLikeTypeTraits<clang::Decl*>, llvm::PointerIntPairInfo<clang::Decl*, 3u, llvm::PointerLikeTypeTraits<clang::Decl*>>>::getPointer() const /data/llvm-project/llvm/include/llvm/ADT/PointerIntPair.h:94:0
#42 0x000055555dab8c6b clang::Decl::getNextDeclInContext() /data/llvm-project/clang/include/clang/AST/DeclBase.h:450:0
#43 0x000055555dab8c6b clang::DeclContext::decl_iterator::operator++() /data/llvm-project/clang/include/clang/AST/DeclBase.h:2297:0
#44 0x000055555dab8c6b clang::ASTNodeTraverser<clang::JSONDumper, clang::JSONNodeDumper>::dumpDeclContext(clang::DeclContext const*) /data/llvm-project/clang/include/clang/AST/ASTNodeTraverser.h:303:0
#45 0x000055555dab8c6b clang::ASTNodeTraverser<clang::JSONDumper, clang::JSONNodeDumper>::Visit(clang::Decl const*)::'lambda'()::operator()() const /data/llvm-project/clang/include/clang/AST/ASTNodeTraverser.h:117:0
#46 0x000055555dab90fb void clang::NodeStreamer::AddChild<clang::ASTNodeTraverser<clang::JSONDumper, clang::JSONNodeDumper>::Visit(clang::Decl const*)::'lambda'()>(llvm::StringRef, clang::ASTNodeTraverser<clang::JSONDumper, clang::JSONNodeDumper>::Visit(clang::Decl const*)::'lambda'()) /data/llvm-project/clang/include/clang/AST/JSONNodeDumper.h:58:0
#47 0x000055555dab93f6 clang::JSONNodeDumper::~JSONNodeDumper() /data/llvm-project/clang/include/clang/AST/JSONNodeDumper.h:116:0
#48 0x000055555dab93f6 clang::JSONDumper::~JSONDumper() /data/llvm-project/clang/include/clang/AST/JSONNodeDumper.h:370:0
#49 0x000055555dab93f6 clang::Decl::dump(llvm::raw_ostream&, bool, clang::ASTDumpOutputFormat) const /data/llvm-project/clang/lib/AST/ASTDumper.cpp:216:0
#50 0x000055555b9e9809 print /data/llvm-project/clang/lib/Frontend/ASTConsumers.cpp:101:0
#51 0x000055555b9e9809 (anonymous namespace)::ASTPrinter::HandleTranslationUnit(clang::ASTContext&) /data/llvm-project/clang/lib/Frontend/ASTConsumers.cpp:48:0
#52 0x000055555cd2f829 clang::ParseAST(clang::Sema&, bool, bool) /data/llvm-project/clang/lib/Parse/ParseAST.cpp:176:0
#53 0x000055555ba24e1f llvm::IntrusiveRefCntPtr<clang::DiagnosticsEngine>::operator bool() const /data/llvm-project/llvm/include/llvm/ADT/IntrusiveRefCntPtr.h:206:0
#54 0x000055555ba24e1f clang::CompilerInstance::getDiagnostics() const /data/llvm-project/clang/include/clang/Frontend/CompilerInstance.h:344:0
#55 0x000055555ba24e1f clang::ASTMergeAction::ExecuteAction() /data/llvm-project/clang/lib/Frontend/ASTMerge.cpp:80:0
#56 0x000055555bac0b49 clang::FrontendAction::Execute() /data/llvm-project/clang/lib/Frontend/FrontendAction.cpp:1069:0
#57 0x000055555ba4c470 llvm::Error::setChecked(bool) /data/llvm-project/llvm/include/llvm/Support/Error.h:307:0
#58 0x000055555ba4c470 llvm::Error::operator bool() /data/llvm-project/llvm/include/llvm/Support/Error.h:239:0
#59 0x000055555ba4c470 clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) /data/llvm-project/clang/lib/Frontend/CompilerInstance.cpp:1057:0
#60 0x000055555bb515f3 std::__shared_ptr_access<clang::FrontendOptions, (__gnu_cxx::_Lock_policy)2, false, false>::_M_get() const /usr/include/c++/7/bits/shared_ptr_base.h:975:0
#61 0x000055555bb515f3 std::__shared_ptr_access<clang::FrontendOptions, (__gnu_cxx::_Lock_policy)2, false, false>::operator*() const /usr/include/c++/7/bits/shared_ptr_base.h:961:0
#62 0x000055555bb515f3 clang::CompilerInvocation::getFrontendOpts() /data/llvm-project/clang/include/clang/Frontend/CompilerInvocation.h:254:0
#63 0x000055555bb515f3 clang::CompilerInstance::getFrontendOpts() /data/llvm-project/clang/include/clang/Frontend/CompilerInstance.h:291:0
#64 0x000055555bb515f3 clang::ExecuteCompilerInvocation(clang::CompilerInstance*) /data/llvm-project/clang/lib/FrontendTool/ExecuteCompilerInvocation.cpp:273:0
#65 0x000055555956561e cc1_main(llvm::ArrayRef<char const*>, char const*, void*) /data/llvm-project/clang/tools/driver/cc1_main.cpp:294:0
#66 0x000055555955c8f8 ExecuteCC1Tool(llvm::SmallVectorImpl<char const*>&, llvm::ToolContext const&) /data/llvm-project/clang/tools/driver/driver.cpp:366:0
#67 0x000055555955fd64 clang_main(int, char**, llvm::ToolContext const&) /data/llvm-project/clang/tools/driver/driver.cpp:407:0
#68 0x0000555559571681 main /data/llvm-project/build/tools/clang/tools/driver/clang-driver.cpp:16:0
#69 0x00007ffff67d7c87 __libc_start_main /build/glibc-CVJwZb/glibc-2.27/csu/../csu/libc-start.c:344:0
#70 0x000055555955bc2a _start (/data/llvm-project/build/bin/clang-18+0x4007c2a)
./test.sh: line 3: 115781 Aborted                 (core dumped) clang++-18 -cc1 -x c++ -ast-merge qminimalintegration.cpp.oclango /dev/null -ast-dump-all=json

Removing the line with just a semicolon causes a segmentation fault instead.

I found these similar closed issues #31270 and #22247 while checking for duplicates but they looks unrelated to ASTImporter.

CC @jcsxky and @balazske since you've been involved in the other ASTImporter issues, lmk if the CC is unwanted and I wont do it in the future

Metadata

Metadata

Assignees

No one assigned

    Labels

    clang:frontendLanguage frontend issues, e.g. anything involving "Sema"crashPrefer [crash-on-valid] or [crash-on-invalid]

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions