[llvm-bugs] [Bug 51189] New: Assertion `OldTInfo && "substituting function without type source info"' failed

via llvm-bugs llvm-bugs at lists.llvm.org
Fri Jul 23 10:55:08 PDT 2021


https://bugs.llvm.org/show_bug.cgi?id=51189

            Bug ID: 51189
           Summary: Assertion `OldTInfo && "substituting function without
                    type source info"' failed
           Product: clang
           Version: trunk
          Hardware: PC
                OS: Linux
            Status: NEW
          Severity: enhancement
          Priority: P
         Component: C++
          Assignee: unassignedclangbugs at nondot.org
          Reporter: tim.g.armstrong at gmail.com
                CC: blitzrakete at gmail.com, dgregor at apple.com,
                    erik.pilkington at gmail.com, llvm-bugs at lists.llvm.org,
                    richard-llvm at metafoo.co.uk

Created attachment 25060
  --> https://bugs.llvm.org/attachment.cgi?id=25060&action=edit
Reproducing files and output

Reproduced on commit 42c195f0ec8f2d9236b237c5ad2c6f3ca9b4184c

Clang was built like this

cmake -DLLVM_ENABLE_PROJECTS=clang -DLLVM_USE_LINKER=gold
-DCMAKE_BUILD_TYPE=RelWithDebInfo -G Ninja ../llvm
ninja

OS

$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 18.04.5 LTS
Release:        18.04
Codename:       bionic

Ran

$ PATH=~/llvm-project/build/bin:$PATH bash template-crash.sh &>
template-crash.out

Stack:
clang:
/home/Tim.Armstrong/llvm-project/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp:4164:
clang::TypeSourceInfo*
clang::TemplateDeclInstantiator::SubstFunctionType(clang::FunctionDecl*,
llvm::SmallVectorImpl<clang::ParmVarDecl*>&): Assertion `OldTInfo &&
"substituting function without type source info"' failed.
PLEASE submit a bug report to https://bugs.llvm.org/ and include the crash
backtrace, preprocessed source, and associated run script.
Stack dump:
0.      Program arguments: clang -cc1 template-crash.cpp
1.      <eof> parser at end of file
2.      template-crash.cpp:23:43: instantiating function definition
'f::v::q<f::g, long, f::v::i>'
3.      template-crash.cpp:19:52: instantiating function definition
'f::v::m<f::g, long, 0, (lambda at template-crash.cpp:24:37)>'
4.      template-crash.cpp:8:28: instantiating function definition 'e<(lambda
at template-crash.cpp:20:20)>'
5.      template-crash.cpp:20:20: instantiating function definition
'f::v::m(bool, int, (lambda at template-crash.cpp:24:37))::(anonymous
class)::operator()<true>'
6.      template-crash.cpp:24:37: instantiating class definition ''
 #0 0x000055dbb73e5e3c llvm::sys::PrintStackTrace(llvm::raw_ostream&, int)
/home/Tim.Armstrong/llvm-project/llvm/lib/Support/Unix/Signals.inc:569:0
 #1 0x000055dbb73e3c04 llvm::sys::RunSignalHandlers()
/home/Tim.Armstrong/llvm-project/llvm/lib/Support/Signals.cpp:71:0
 #2 0x000055dbb73e463e SignalHandler(int)
/home/Tim.Armstrong/llvm-project/llvm/lib/Support/Unix/Signals.inc:397:0
 #3 0x00007fdef5efc980 __restore_rt
(/lib/x86_64-linux-gnu/libpthread.so.0+0x12980)
 #4 0x00007fdef4badfb7 raise
/build/glibc-S9d2JN/glibc-2.27/signal/../sysdeps/unix/sysv/linux/raise.c:51:0
 #5 0x00007fdef4baf921 abort /build/glibc-S9d2JN/glibc-2.27/stdlib/abort.c:81:0
 #6 0x00007fdef4b9f48a __assert_fail_base
/build/glibc-S9d2JN/glibc-2.27/assert/assert.c:89:0
 #7 0x00007fdef4b9f502 (/lib/x86_64-linux-gnu/libc.so.6+0x30502)
 #8 0x000055dbb95512b9 clang::TypeLoc::getTypePtr() const
/home/Tim.Armstrong/llvm-project/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp:4164:0
 #9 0x000055dbb95512b9 clang::ConcreteTypeLoc<clang::UnqualTypeLoc,
clang::ParenTypeLoc, clang::ParenType,
clang::ParenLocInfo>::isKind(clang::TypeLoc const&)
/home/Tim.Armstrong/llvm-project/clang/include/clang/AST/TypeLoc.h:370:0
#10 0x000055dbb95512b9 clang::TypeLoc::IgnoreParens() const
/home/Tim.Armstrong/llvm-project/clang/include/clang/AST/TypeLoc.h:1152:0
#11 0x000055dbb95512b9
clang::TemplateDeclInstantiator::SubstFunctionType(clang::FunctionDecl*,
llvm::SmallVectorImpl<clang::ParmVarDecl*>&)
/home/Tim.Armstrong/llvm-project/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp:4182:0
#12 0x000055dbb956338f
clang::TemplateDeclInstantiator::VisitCXXMethodDecl(clang::CXXMethodDecl*,
clang::TemplateParameterList*,
llvm::Optional<clang::ASTTemplateArgumentListInfo const*>,
clang::TemplateDeclInstantiator::RewriteKind)
/home/Tim.Armstrong/llvm-project/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp:2286:0
#13 0x000055dbb952f402 clang::Sema::InstantiateClass(clang::SourceLocation,
clang::CXXRecordDecl*, clang::CXXRecordDecl*,
clang::MultiLevelTemplateArgumentList const&,
clang::TemplateSpecializationKind, bool)
/home/Tim.Armstrong/llvm-project/clang/lib/Sema/SemaTemplateInstantiate.cpp:2734:0
#14 0x000055dbb9563050 clang::Decl::getDeclContext() const
/home/Tim.Armstrong/llvm-project/clang/include/clang/AST/DeclBase.h:445:0
#15 0x000055dbb9563050 clang::NamedDecl::isCXXClassMember() const
/home/Tim.Armstrong/llvm-project/clang/include/clang/AST/Decl.h:344:0
#16 0x000055dbb9563050
clang::TemplateDeclInstantiator::VisitCXXRecordDecl(clang::CXXRecordDecl*)
/home/Tim.Armstrong/llvm-project/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp:1862:0
#17 0x000055dbb95651c4 operator()
/home/Tim.Armstrong/llvm-project/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp:3768:0
#18 0x000055dbb95651c4 void llvm::function_ref<void
()>::callback_fn<clang::Sema::SubstDecl(clang::Decl*, clang::DeclContext*,
clang::MultiLevelTemplateArgumentList const&)::'lambda'()>(long)
/home/Tim.Armstrong/llvm-project/llvm/include/llvm/ADT/STLExtras.h:185:0
#19 0x000055dbb8e5a96f
clang::Sema::runWithSufficientStackSpace(clang::SourceLocation,
llvm::function_ref<void ()>)
/home/Tim.Armstrong/llvm-project/clang/lib/Sema/Sema.cpp:458:0
#20 0x000055dbb954c5c7
llvm::SmallVectorTemplateCommon<std::pair<clang::VarTemplateDecl*,
clang::VarTemplatePartialSpecializationDecl*>, void>::end()
/home/Tim.Armstrong/llvm-project/llvm/include/llvm/ADT/SmallVector.h:255:0
#21 0x000055dbb954c5c7 llvm::SmallVector<std::pair<clang::VarTemplateDecl*,
clang::VarTemplatePartialSpecializationDecl*>, 4u>::~SmallVector()
/home/Tim.Armstrong/llvm-project/llvm/include/llvm/ADT/SmallVector.h:1175:0
#22 0x000055dbb954c5c7
clang::TemplateDeclInstantiator::~TemplateDeclInstantiator()
/home/Tim.Armstrong/llvm-project/clang/include/clang/Sema/Template.h:463:0
#23 0x000055dbb954c5c7 clang::Sema::SubstDecl(clang::Decl*,
clang::DeclContext*, clang::MultiLevelTemplateArgumentList const&)
/home/Tim.Armstrong/llvm-project/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp:3762:0
#24 0x000055dbb9557227 clang::Sema::FindInstantiatedDecl(clang::SourceLocation,
clang::NamedDecl*, clang::MultiLevelTemplateArgumentList const&, bool)
/home/Tim.Armstrong/llvm-project/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp:5903:0
#25 0x000055dbb95099b9 (anonymous
namespace)::TemplateInstantiator::TransformDecl(clang::SourceLocation,
clang::Decl*)
/home/Tim.Armstrong/llvm-project/clang/lib/Sema/SemaTemplateInstantiate.cpp:1248:0
#26 0x000055dbb953260c llvm::cast_retty<clang::CXXRecordDecl,
clang::Decl*>::ret_type llvm::cast_or_null<clang::CXXRecordDecl,
clang::Decl>(clang::Decl*)
/home/Tim.Armstrong/llvm-project/llvm/include/llvm/Support/Casting.h:310:0
#27 0x000055dbb953260c clang::TreeTransform<(anonymous
namespace)::TemplateInstantiator>::TransformUnresolvedMemberExpr(clang::UnresolvedMemberExpr*)
/home/Tim.Armstrong/llvm-project/clang/lib/Sema/TreeTransform.h:12975:0
#28 0x000055dbb9516ab6 clang::TreeTransform<(anonymous
namespace)::TemplateInstantiator>::TransformExpr(clang::Expr*)
/home/Tim.Armstrong/llvm-project/build/tools/clang/include/clang/AST/StmtNodes.inc:1287:0
#29 0x000055dbb951728c clang::TreeTransform<(anonymous
namespace)::TemplateInstantiator>::TransformInitializer(clang::Expr*, bool)
(.part.3932)
/home/Tim.Armstrong/llvm-project/clang/lib/Sema/TreeTransform.h:3787:0
#30 0x000055dbb95175cc clang::TreeTransform<(anonymous
namespace)::TemplateInstantiator>::TransformReturnStmt(clang::ReturnStmt*)
/home/Tim.Armstrong/llvm-project/clang/lib/Sema/TreeTransform.h:7494:0
#31 0x000055dbb954519b clang::TreeTransform<(anonymous
namespace)::TemplateInstantiator>::TransformCompoundStmt(clang::CompoundStmt*,
bool) /home/Tim.Armstrong/llvm-project/clang/lib/Sema/TreeTransform.h:7120:0
#32 0x000055dbb9547763 llvm::DenseMap<clang::Decl*, clang::Decl*,
llvm::DenseMapInfo<clang::Decl*>, llvm::detail::DenseMapPair<clang::Decl*,
clang::Decl*> >::~DenseMap()
/home/Tim.Armstrong/llvm-project/llvm/include/llvm/ADT/DenseMap.h:755:0
#33 0x000055dbb9547763 ~TreeTransform
/home/Tim.Armstrong/llvm-project/clang/lib/Sema/TreeTransform.h:101:0
#34 0x000055dbb9547763 ~TemplateInstantiator
/home/Tim.Armstrong/llvm-project/clang/lib/Sema/SemaTemplateInstantiate.cpp:912:0
#35 0x000055dbb9547763 clang::Sema::SubstStmt(clang::Stmt*,
clang::MultiLevelTemplateArgumentList const&)
/home/Tim.Armstrong/llvm-project/clang/lib/Sema/SemaTemplateInstantiate.cpp:3459:0
#36 0x000055dbb955d62f
clang::Sema::InstantiateFunctionDefinition(clang::SourceLocation,
clang::FunctionDecl*, bool, bool, bool)
/home/Tim.Armstrong/llvm-project/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp:4894:0
#37 0x000055dbb8e5a96f
clang::Sema::runWithSufficientStackSpace(clang::SourceLocation,
llvm::function_ref<void ()>)
/home/Tim.Armstrong/llvm-project/clang/lib/Sema/Sema.cpp:458:0
#38 0x000055dbb94b06b1 llvm::PointerIntPairInfo<llvm::PointerUnion<clang::Type
const*, clang::ExtQuals const*>, 3u,
llvm::PointerLikeTypeTraits<llvm::PointerUnion<clang::Type const*,
clang::ExtQuals const*> > >::getPointer(long)
/home/Tim.Armstrong/llvm-project/llvm/include/llvm/ADT/PointerIntPair.h:168:0
#39 0x000055dbb94b06b1 llvm::PointerIntPair<llvm::PointerUnion<clang::Type
const*, clang::ExtQuals const*>, 3u, unsigned int,
llvm::PointerLikeTypeTraits<llvm::PointerUnion<clang::Type const*,
clang::ExtQuals const*> >,
llvm::PointerIntPairInfo<llvm::PointerUnion<clang::Type const*, clang::ExtQuals
const*>, 3u, llvm::PointerLikeTypeTraits<llvm::PointerUnion<clang::Type const*,
clang::ExtQuals const*> > > >::getPointer() const
/home/Tim.Armstrong/llvm-project/llvm/include/llvm/ADT/PointerIntPair.h:59:0
#40 0x000055dbb94b06b1 clang::QualType::isNull() const
/home/Tim.Armstrong/llvm-project/clang/include/clang/AST/Type.h:727:0
#41 0x000055dbb94b06b1 clang::QualType::getCommonPtr() const
/home/Tim.Armstrong/llvm-project/clang/include/clang/AST/Type.h:677:0
#42 0x000055dbb94b06b1 clang::QualType::getTypePtr() const
/home/Tim.Armstrong/llvm-project/clang/include/clang/AST/Type.h:6421:0
#43 0x000055dbb94b06b1 clang::QualType::operator->() const
/home/Tim.Armstrong/llvm-project/clang/include/clang/AST/Type.h:719:0
#44 0x000055dbb94b06b1 clang::FunctionDecl::getReturnType() const
/home/Tim.Armstrong/llvm-project/clang/include/clang/AST/Decl.h:2493:0
#45 0x000055dbb94b06b1 clang::Sema::DeduceReturnType(clang::FunctionDecl*,
clang::SourceLocation, bool)
/home/Tim.Armstrong/llvm-project/clang/lib/Sema/SemaTemplateDeduction.cpp:5028:0
#46 0x000055dbb90d37e4 clang::Sema::DiagnoseUseOfDecl(clang::NamedDecl*,
llvm::ArrayRef<clang::SourceLocation>, clang::ObjCInterfaceDecl const*, bool,
bool, clang::ObjCInterfaceDecl*)
/home/Tim.Armstrong/llvm-project/clang/lib/Sema/SemaExpr.cpp:290:0
#47 0x000055dbb93b20b8 clang::Sema::BuildCallToMemberFunction(clang::Scope*,
clang::Expr*, clang::SourceLocation, llvm::MutableArrayRef<clang::Expr*>,
clang::SourceLocation, bool)
/home/Tim.Armstrong/llvm-project/clang/lib/Sema/SemaOverload.cpp:14311:0
#48 0x000055dbb8e5ca73 clang::Sema::tryExprAsCall(clang::Expr&,
clang::QualType&, clang::UnresolvedSetImpl&)
/home/Tim.Armstrong/llvm-project/clang/lib/Sema/Sema.cpp:2262:0
#49 0x000055dbb8e67f3b
clang::Sema::tryToRecoverWithCall(clang::ActionResult<clang::Expr*, true>&,
clang::PartialDiagnostic const&, bool, bool (*)(clang::QualType))
/home/Tim.Armstrong/llvm-project/clang/lib/Sema/Sema.cpp:2391:0
#50 0x000055dbb90d1174 clang::StreamingDiagnostic::freeStorage()
/home/Tim.Armstrong/llvm-project/clang/include/clang/Basic/Diagnostic.h:1160:0
#51 0x000055dbb90d1174 clang::StreamingDiagnostic::~StreamingDiagnostic()
/home/Tim.Armstrong/llvm-project/clang/include/clang/Basic/Diagnostic.h:1242:0
#52 0x000055dbb90d1174 clang::PartialDiagnostic::~PartialDiagnostic()
/home/Tim.Armstrong/llvm-project/clang/include/clang/Basic/PartialDiagnostic.h:34:0
#53 0x000055dbb90d1174 clang::Sema::CheckPlaceholderExpr(clang::Expr*)
/home/Tim.Armstrong/llvm-project/clang/lib/Sema/SemaExpr.cpp:19316:0
#54 0x000055dbb91cfaff clang::Sema::ActOnFinishFullExpr(clang::Expr*,
clang::SourceLocation, bool, bool)
/home/Tim.Armstrong/llvm-project/clang/lib/Sema/SemaExprCXX.cpp:8413:0
#55 0x000055dbb93c1894
clang::Sema::ActOnExprStmt(clang::ActionResult<clang::Expr*, true>, bool)
/home/Tim.Armstrong/llvm-project/clang/lib/Sema/SemaStmt.cpp:49:0
#56 0x000055dbb954519b clang::TreeTransform<(anonymous
namespace)::TemplateInstantiator>::TransformCompoundStmt(clang::CompoundStmt*,
bool) /home/Tim.Armstrong/llvm-project/clang/lib/Sema/TreeTransform.h:7120:0
#57 0x000055dbb9547763 llvm::DenseMap<clang::Decl*, clang::Decl*,
llvm::DenseMapInfo<clang::Decl*>, llvm::detail::DenseMapPair<clang::Decl*,
clang::Decl*> >::~DenseMap()
/home/Tim.Armstrong/llvm-project/llvm/include/llvm/ADT/DenseMap.h:755:0
#58 0x000055dbb9547763 ~TreeTransform
/home/Tim.Armstrong/llvm-project/clang/lib/Sema/TreeTransform.h:101:0
#59 0x000055dbb9547763 ~TemplateInstantiator
/home/Tim.Armstrong/llvm-project/clang/lib/Sema/SemaTemplateInstantiate.cpp:912:0
#60 0x000055dbb9547763 clang::Sema::SubstStmt(clang::Stmt*,
clang::MultiLevelTemplateArgumentList const&)
/home/Tim.Armstrong/llvm-project/clang/lib/Sema/SemaTemplateInstantiate.cpp:3459:0
#61 0x000055dbb955d62f
clang::Sema::InstantiateFunctionDefinition(clang::SourceLocation,
clang::FunctionDecl*, bool, bool, bool)
/home/Tim.Armstrong/llvm-project/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp:4894:0
#62 0x000055dbb955c672 clang::FunctionDecl::isDefined() const
/home/Tim.Armstrong/llvm-project/clang/include/clang/AST/Decl.h:2070:0
#63 0x000055dbb955c672 clang::Sema::PerformPendingInstantiations(bool)
/home/Tim.Armstrong/llvm-project/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp:6139:0
#64 0x000055dbb955d5a8 clang::Sema::GlobalEagerInstantiationScope::perform()
/home/Tim.Armstrong/llvm-project/clang/include/clang/Sema/Sema.h:9103:0
#65 0x000055dbb955d5a8
clang::Sema::InstantiateFunctionDefinition(clang::SourceLocation,
clang::FunctionDecl*, bool, bool, bool)
/home/Tim.Armstrong/llvm-project/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp:4916:0
#66 0x000055dbb955c672 clang::FunctionDecl::isDefined() const
/home/Tim.Armstrong/llvm-project/clang/include/clang/AST/Decl.h:2070:0
#67 0x000055dbb955c672 clang::Sema::PerformPendingInstantiations(bool)
/home/Tim.Armstrong/llvm-project/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp:6139:0
#68 0x000055dbb955d5a8 clang::Sema::GlobalEagerInstantiationScope::perform()
/home/Tim.Armstrong/llvm-project/clang/include/clang/Sema/Sema.h:9103:0
#69 0x000055dbb955d5a8
clang::Sema::InstantiateFunctionDefinition(clang::SourceLocation,
clang::FunctionDecl*, bool, bool, bool)
/home/Tim.Armstrong/llvm-project/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp:4916:0
#70 0x000055dbb955c672 clang::FunctionDecl::isDefined() const
/home/Tim.Armstrong/llvm-project/clang/include/clang/AST/Decl.h:2070:0
#71 0x000055dbb955c672 clang::Sema::PerformPendingInstantiations(bool)
/home/Tim.Armstrong/llvm-project/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp:6139:0
#72 0x000055dbb8e706c8 llvm::TimeTraceScope::~TimeTraceScope()
/home/Tim.Armstrong/llvm-project/llvm/include/llvm/Support/TimeProfiler.h:86:0
#73 0x000055dbb8e706c8
clang::Sema::ActOnEndOfTranslationUnitFragment(clang::Sema::TUFragmentKind)
(.part.1465) /home/Tim.Armstrong/llvm-project/clang/lib/Sema/Sema.cpp:993:0
#74 0x000055dbb8e70e3f clang::Sema::ActOnEndOfTranslationUnit()
/home/Tim.Armstrong/llvm-project/clang/lib/Sema/Sema.cpp:1036:0
#75 0x000055dbb8d7b5e6
clang::Parser::ParseTopLevelDecl(clang::OpaquePtr<clang::DeclGroupRef>&, bool)
/home/Tim.Armstrong/llvm-project/clang/lib/Parse/Parser.cpp:692:0
#76 0x000055dbb8d6f6f9 clang::ParseAST(clang::Sema&, bool, bool)
/home/Tim.Armstrong/llvm-project/clang/lib/Parse/ParseAST.cpp:157:0
#77 0x000055dbb7c43509 clang::FrontendAction::Execute()
/home/Tim.Armstrong/llvm-project/clang/lib/Frontend/FrontendAction.cpp:949:0
#78 0x000055dbb7be3872 llvm::Error::setChecked(bool)
/home/Tim.Armstrong/llvm-project/llvm/include/llvm/Support/Error.h:305:0
#79 0x000055dbb7be3872 llvm::Error::operator bool()
/home/Tim.Armstrong/llvm-project/llvm/include/llvm/Support/Error.h:236:0
#80 0x000055dbb7be3872
clang::CompilerInstance::ExecuteAction(clang::FrontendAction&)
/home/Tim.Armstrong/llvm-project/clang/lib/Frontend/CompilerInstance.cpp:955:0
#81 0x000055dbb7d08342
clang::ExecuteCompilerInvocation(clang::CompilerInstance*)
/home/Tim.Armstrong/llvm-project/clang/lib/FrontendTool/ExecuteCompilerInvocation.cpp:279:0
#82 0x000055dbb5260b1c cc1_main(llvm::ArrayRef<char const*>, char const*,
void*) /home/Tim.Armstrong/llvm-project/clang/tools/driver/cc1_main.cpp:246:0
#83 0x000055dbb525c971 ExecuteCC1Tool(llvm::SmallVectorImpl<char const*>&)
/home/Tim.Armstrong/llvm-project/clang/tools/driver/driver.cpp:335:0
#84 0x000055dbb51899ac main
/home/Tim.Armstrong/llvm-project/clang/tools/driver/driver.cpp:412:0
#85 0x00007fdef4b90bf7 __libc_start_main
/build/glibc-S9d2JN/glibc-2.27/csu/../csu/libc-start.c:344:0
#86 0x000055dbb525c19a _start
(/home/Tim.Armstrong/llvm-project/build/bin/clang-13+0x11a919a)
template-crash.sh: line 1: 12818 Aborted                 (core dumped) clang
-cc1 template-crash.cpp

-- 
You are receiving this mail because:
You are on the CC list for the bug.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-bugs/attachments/20210723/8f69e962/attachment-0001.html>


More information about the llvm-bugs mailing list