[llvm-bugs] [Bug 44751] New: Assertion failure in class template with function with terse concept syntax where concept has decltype(previous_deduced_parameter) as explicit concept argument

via llvm-bugs llvm-bugs at lists.llvm.org
Sat Feb 1 14:03:40 PST 2020


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

            Bug ID: 44751
           Summary: Assertion failure in class template with function with
                    terse concept syntax where concept has
                    decltype(previous_deduced_parameter) as explicit
                    concept argument
           Product: clang
           Version: trunk
          Hardware: PC
                OS: Linux
            Status: NEW
          Severity: enhancement
          Priority: P
         Component: C++2a
          Assignee: unassignedclangbugs at nondot.org
          Reporter: david at doublewise.net
                CC: blitzrakete at gmail.com, erik.pilkington at gmail.com,
                    llvm-bugs at lists.llvm.org, richard-llvm at metafoo.co.uk

The following code

```
template<typename, typename>
concept true_ = true;

template<typename>
struct s {
        template<typename A>
        static void f(A a, true_<decltype(a)> auto)
        {
        }
};

auto x = s<int>();
```

causes an assertion failure of

```
clang++: /home/david/llvm/clang/lib/Sema/SemaTemplateInstantiate.cpp:3394:
llvm::PointerUnion<clang::Decl*, llvm::SmallVector<clang::VarDecl*, 4>*>*
clang::LocalInstantiationScope::findInstantiationOf(const clang::Decl*):
Assertion `isa<LabelDecl>(D) && "declaration not instantiated in this scope"'
failed.
Stack dump:
0.      Program arguments: /home/david/llvm/build/bin/clang++ -std=c++2a -o
/dev/null -c /home/david/test/main.cpp 
1.      /home/david/test/main.cpp:12:18: current parser token ';'
2.      /home/david/test/main.cpp:5:8: instantiating class definition 's<int>'
 #0 0x00005584dcc0581a llvm::sys::PrintStackTrace(llvm::raw_ostream&)
(/home/david/llvm/build/bin/clang+++0x1aba81a)
 #1 0x00005584dcc034b4 llvm::sys::RunSignalHandlers()
(/home/david/llvm/build/bin/clang+++0x1ab84b4)
 #2 0x00005584dcc03729 llvm::sys::CleanupOnSignal(unsigned long)
(/home/david/llvm/build/bin/clang+++0x1ab8729)
 #3 0x00005584dcb78525 (anonymous
namespace)::CrashRecoveryContextImpl::HandleCrash(int, unsigned long)
(/home/david/llvm/build/bin/clang+++0x1a2d525)
 #4 0x00005584dcb78ac0
llvm::CrashRecoveryContext::registerCleanup(llvm::CrashRecoveryContextCleanup*)
(/home/david/llvm/build/bin/clang+++0x1a2dac0)
 #5 0x00007f8575fdb930 __restore_rt (/usr/lib/libpthread.so.0+0x14930)
 #6 0x00007f8575a56f25 raise (/usr/lib/libc.so.6+0x3bf25)
 #7 0x00007f8575a40897 abort (/usr/lib/libc.so.6+0x25897)
 #8 0x00007f8575a40767 _nl_load_domain.cold (/usr/lib/libc.so.6+0x25767)
 #9 0x00007f8575a4f526 (/usr/lib/libc.so.6+0x34526)
#10 0x00005584def29eac
clang::LocalInstantiationScope::findInstantiationOf(clang::Decl const*)
(/home/david/llvm/build/bin/clang+++0x3ddeeac)
#11 0x00005584def7ad79 clang::Sema::FindInstantiatedDecl(clang::SourceLocation,
clang::NamedDecl*, clang::MultiLevelTemplateArgumentList const&, bool)
(.localalias) (/home/david/llvm/build/bin/clang+++0x3e2fd79)
#12 0x00005584def22e15 (anonymous
namespace)::TemplateInstantiator::TransformDecl(clang::SourceLocation,
clang::Decl*) (/home/david/llvm/build/bin/clang+++0x3dd7e15)
#13 0x00005584def4fc83 clang::TreeTransform<(anonymous
namespace)::TemplateInstantiator>::TransformDeclRefExpr(clang::DeclRefExpr*)
(/home/david/llvm/build/bin/clang+++0x3e04c83)
#14 0x00005584def50187 (anonymous
namespace)::TemplateInstantiator::TransformDeclRefExpr(clang::DeclRefExpr*)
(/home/david/llvm/build/bin/clang+++0x3e05187)
#15 0x00005584def30167 clang::TreeTransform<(anonymous
namespace)::TemplateInstantiator>::TransformExpr(clang::Expr*)
(/home/david/llvm/build/bin/clang+++0x3de5167)
#16 0x00005584def3ca77 clang::TreeTransform<(anonymous
namespace)::TemplateInstantiator>::TransformType(clang::TypeLocBuilder&,
clang::TypeLoc) (/home/david/llvm/build/bin/clang+++0x3df1a77)
#17 0x00005584def41a80 clang::TreeTransform<(anonymous
namespace)::TemplateInstantiator>::TransformType(clang::TypeSourceInfo*)
(/home/david/llvm/build/bin/clang+++0x3df6a80)
#18 0x00005584def45675 clang::TreeTransform<(anonymous
namespace)::TemplateInstantiator>::TransformTemplateArgument(clang::TemplateArgumentLoc
const&, clang::TemplateArgumentLoc&, bool)
(/home/david/llvm/build/bin/clang+++0x3dfa675)
#19 0x00005584def46e1a bool clang::TreeTransform<(anonymous
namespace)::TemplateInstantiator>::TransformTemplateArguments<clang::TemplateArgumentLoc
const*>(clang::TemplateArgumentLoc const*, clang::TemplateArgumentLoc const*,
clang::TemplateArgumentListInfo&, bool) (.constprop.0)
(/home/david/llvm/build/bin/clang+++0x3dfbe1a)
#20 0x00005584def474a8 clang::Sema::Subst(clang::TemplateArgumentLoc const*,
unsigned int, clang::TemplateArgumentListInfo&,
clang::MultiLevelTemplateArgumentList const&)
(/home/david/llvm/build/bin/clang+++0x3dfc4a8)
#21 0x00005584def6cc5c
clang::TemplateDeclInstantiator::VisitTemplateTypeParmDecl(clang::TemplateTypeParmDecl*)
(/home/david/llvm/build/bin/clang+++0x3e21c5c)
#22 0x00005584def88ce3
clang::TemplateDeclInstantiator::SubstTemplateParams(clang::TemplateParameterList*)
(/home/david/llvm/build/bin/clang+++0x3e3dce3)
#23 0x00005584def883ce
clang::TemplateDeclInstantiator::VisitFunctionTemplateDecl(clang::FunctionTemplateDecl*)
(/home/david/llvm/build/bin/clang+++0x3e3d3ce)
#24 0x00005584def4aed8 clang::Sema::InstantiateClass(clang::SourceLocation,
clang::CXXRecordDecl*, clang::CXXRecordDecl*,
clang::MultiLevelTemplateArgumentList const&,
clang::TemplateSpecializationKind, bool)
(/home/david/llvm/build/bin/clang+++0x3dffed8)
#25 0x00005584def65e8a
clang::Sema::InstantiateClassTemplateSpecialization(clang::SourceLocation,
clang::ClassTemplateSpecializationDecl*, clang::TemplateSpecializationKind,
bool) (/home/david/llvm/build/bin/clang+++0x3e1ae8a)
#26 0x00005584defb45df void llvm::function_ref<void
()>::callback_fn<clang::Sema::RequireCompleteTypeImpl(clang::SourceLocation,
clang::QualType, clang::Sema::TypeDiagnoser*)::'lambda'()>(long)
(/home/david/llvm/build/bin/clang+++0x3e695df)
#27 0x00005584de85dfe1
clang::Sema::runWithSufficientStackSpace(clang::SourceLocation,
llvm::function_ref<void ()>) (/home/david/llvm/build/bin/clang+++0x3712fe1)
#28 0x00005584defc7f89
clang::Sema::RequireCompleteTypeImpl(clang::SourceLocation, clang::QualType,
clang::Sema::TypeDiagnoser*) (.localalias)
(/home/david/llvm/build/bin/clang+++0x3e7cf89)
#29 0x00005584defc8225 clang::Sema::RequireCompleteType(clang::SourceLocation,
clang::QualType, clang::Sema::TypeDiagnoser&)
(/home/david/llvm/build/bin/clang+++0x3e7d225)
#30 0x00005584debb7979
clang::Sema::BuildCXXTypeConstructExpr(clang::TypeSourceInfo*,
clang::SourceLocation, llvm::MutableArrayRef<clang::Expr*>,
clang::SourceLocation, bool) (/home/david/llvm/build/bin/clang+++0x3a6c979)
#31 0x00005584debe1ace
clang::Sema::ActOnCXXTypeConstructExpr(clang::OpaquePtr<clang::QualType>,
clang::SourceLocation, llvm::MutableArrayRef<clang::Expr*>,
clang::SourceLocation, bool) (/home/david/llvm/build/bin/clang+++0x3a96ace)
#32 0x00005584de7d4aca
clang::Parser::ParseCXXTypeConstructExpression(clang::DeclSpec const&)
(/home/david/llvm/build/bin/clang+++0x3689aca)
#33 0x00005584de7c74e5
clang::Parser::ParseCastExpression(clang::Parser::CastParseKind, bool, bool&,
clang::Parser::TypeCastState, bool, bool*) (.localalias)
(/home/david/llvm/build/bin/clang+++0x367c4e5)
#34 0x00005584de7c720e
clang::Parser::ParseCastExpression(clang::Parser::CastParseKind, bool, bool&,
clang::Parser::TypeCastState, bool, bool*) (.localalias)
(/home/david/llvm/build/bin/clang+++0x367c20e)
#35 0x00005584de7c8b97
clang::Parser::ParseCastExpression(clang::Parser::CastParseKind, bool,
clang::Parser::TypeCastState, bool, bool*)
(/home/david/llvm/build/bin/clang+++0x367db97)
#36 0x00005584de7ca375
clang::Parser::ParseAssignmentExpression(clang::Parser::TypeCastState)
(/home/david/llvm/build/bin/clang+++0x367f375)
#37 0x00005584de792897
clang::Parser::ParseDeclarationAfterDeclaratorAndAttributes(clang::Declarator&,
clang::Parser::ParsedTemplateInfo const&, clang::Parser::ForRangeInit*)
(/home/david/llvm/build/bin/clang+++0x3647897)
#38 0x00005584de7a5e3c clang::Parser::ParseDeclGroup(clang::ParsingDeclSpec&,
clang::DeclaratorContext, clang::SourceLocation*, clang::Parser::ForRangeInit*)
(/home/david/llvm/build/bin/clang+++0x365ae3c)
#39 0x00005584de77d317
clang::Parser::ParseDeclOrFunctionDefInternal(clang::Parser::ParsedAttributesWithRange&,
clang::ParsingDeclSpec&, clang::AccessSpecifier)
(/home/david/llvm/build/bin/clang+++0x3632317)
#40 0x00005584de77d9c1
clang::Parser::ParseDeclarationOrFunctionDefinition(clang::Parser::ParsedAttributesWithRange&,
clang::ParsingDeclSpec*, clang::AccessSpecifier) (.part.0)
(/home/david/llvm/build/bin/clang+++0x36329c1)
#41 0x00005584de783136
clang::Parser::ParseExternalDeclaration(clang::Parser::ParsedAttributesWithRange&,
clang::ParsingDeclSpec*) (.localalias)
(/home/david/llvm/build/bin/clang+++0x3638136)
#42 0x00005584de783eab
clang::Parser::ParseTopLevelDecl(clang::OpaquePtr<clang::DeclGroupRef>&, bool)
(/home/david/llvm/build/bin/clang+++0x3638eab)
#43 0x00005584de777819 clang::ParseAST(clang::Sema&, bool, bool)
(/home/david/llvm/build/bin/clang+++0x362c819)
#44 0x00005584ddac7078 clang::CodeGenAction::ExecuteAction()
(/home/david/llvm/build/bin/clang+++0x297c078)
#45 0x00005584dd458559 clang::FrontendAction::Execute()
(/home/david/llvm/build/bin/clang+++0x230d559)
#46 0x00005584dd4123de
clang::CompilerInstance::ExecuteAction(clang::FrontendAction&)
(/home/david/llvm/build/bin/clang+++0x22c73de)
#47 0x00005584dd52c9d4
clang::ExecuteCompilerInvocation(clang::CompilerInstance*)
(/home/david/llvm/build/bin/clang+++0x23e19d4)
#48 0x00005584dbae8f3c cc1_main(llvm::ArrayRef<char const*>, char const*,
void*) (/home/david/llvm/build/bin/clang+++0x99df3c)
#49 0x00005584dbae65d7 ExecuteCC1Tool(llvm::SmallVectorImpl<char const*>&)
(/home/david/llvm/build/bin/clang+++0x99b5d7)
#50 0x00005584dd2dd1c5 void llvm::function_ref<void
()>::callback_fn<clang::driver::CC1Command::Execute(llvm::ArrayRef<llvm::Optional<llvm::StringRef>
>, std::__cxx11::basic_string<char, std::char_traits<char>,
std::allocator<char> >*, bool*) const::'lambda'()>(long)
(/home/david/llvm/build/bin/clang+++0x21921c5)
#51 0x00005584dcb78be9
llvm::CrashRecoveryContext::RunSafely(llvm::function_ref<void ()>)
(/home/david/llvm/build/bin/clang+++0x1a2dbe9)
#52 0x00005584dd2ddc76
clang::driver::CC1Command::Execute(llvm::ArrayRef<llvm::Optional<llvm::StringRef>
>, std::__cxx11::basic_string<char, std::char_traits<char>,
std::allocator<char> >*, bool*) const
(/home/david/llvm/build/bin/clang+++0x2192c76)
#53 0x00005584dd2b63f8
clang::driver::Compilation::ExecuteCommand(clang::driver::Command const&,
clang::driver::Command const*&) const
(/home/david/llvm/build/bin/clang+++0x216b3f8)
#54 0x00005584dd2b6d39
clang::driver::Compilation::ExecuteJobs(clang::driver::JobList const&,
llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*> >&) const
(/home/david/llvm/build/bin/clang+++0x216bd39)
#55 0x00005584dd2c0651
clang::driver::Driver::ExecuteCompilation(clang::driver::Compilation&,
llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*> >&)
(/home/david/llvm/build/bin/clang+++0x2175651)
#56 0x00005584dba8167a main (/home/david/llvm/build/bin/clang+++0x93667a)
#57 0x00007f8575a42153 __libc_start_main (/usr/lib/libc.so.6+0x27153)
#58 0x00005584dbae616e _start (/home/david/llvm/build/bin/clang+++0x99b16e)
clang++: /home/david/llvm/clang/lib/Parse/Parser.cpp:444: virtual
clang::Parser::~Parser(): Assertion `TemplateIds.empty() && "Still alive
TemplateIdAnnotations around?"' failed.
fish: “/home/david/llvm/build/bin/clan…” terminated by signal SIGABRT (Abort)
```

-- 
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/20200201/6233d3bd/attachment-0001.html>


More information about the llvm-bugs mailing list