[llvm-bugs] [Bug 49911] New: Crash with parameter pack in enum-base

via llvm-bugs llvm-bugs at lists.llvm.org
Fri Apr 9 13:14:28 PDT 2021


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

            Bug ID: 49911
           Summary: Crash with parameter pack in enum-base
           Product: clang
           Version: trunk
          Hardware: PC
                OS: Linux
            Status: NEW
          Severity: enhancement
          Priority: P
         Component: C++17
          Assignee: unassignedclangbugs at nondot.org
          Reporter: polacek at redhat.com
                CC: blitzrakete at gmail.com, erik.pilkington at gmail.com,
                    llvm-bugs at lists.llvm.org, richard-llvm at metafoo.co.uk

template <class... Ts>
auto f(Ts...) {
  [] { enum class e : Ts {}; };
}

int
main ()
{
  f(0, true);
}

gives

xclang++:
/home/mpolacek/src/llvm-project/clang/lib/Sema/SemaTemplateVariadic.cpp:407:
bool clang::Sema::DiagnoseUnexpandedParameterPack(clang::Expr*,
clang::Sema::UnexpandedParameterPackContext): Assertion `!Unexpanded.empty() &&
"Unable to find unexpanded parameter packs"' 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: xclang++ -c 100006.C -std=c++17
1.      100006.C:4:1: current parser token '}'
2.      100006.C:2:15: parsing function body 'f'
3.      100006.C:2:15: in compound statement ('{}')
 #0 0x0000000003a56b05 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int)
/home/mpolacek/src/llvm-project/llvm/lib/Support/Unix/Signals.inc:565:22
 #1 0x0000000003a56bbc PrintStackTraceSignalHandler(void*)
/home/mpolacek/src/llvm-project/llvm/lib/Support/Unix/Signals.inc:632:1
 #2 0x0000000003a54bb2 llvm::sys::RunSignalHandlers()
/home/mpolacek/src/llvm-project/llvm/lib/Support/Signals.cpp:76:20
 #3 0x0000000003a5646f llvm::sys::CleanupOnSignal(unsigned long)
/home/mpolacek/src/llvm-project/llvm/lib/Support/Unix/Signals.inc:361:31
 #4 0x0000000003994130 (anonymous
namespace)::CrashRecoveryContextImpl::HandleCrash(int, unsigned long)
/home/mpolacek/src/llvm-project/llvm/lib/Support/CrashRecoveryContext.cpp:75:5
 #5 0x00000000039945ce CrashRecoverySignalHandler(int)
/home/mpolacek/src/llvm-project/llvm/lib/Support/CrashRecoveryContext.cpp:389:1
 #6 0x00007f097e4ab1e0 __restore_rt (/lib64/libpthread.so.0+0x141e0)
 #7 0x00007f097df639d5 raise
/usr/src/debug/glibc-2.32-37-g760e1d2878/signal/../sysdeps/unix/sysv/linux/raise.c:50:1
 #8 0x00007f097df4c8a4 abort
/usr/src/debug/glibc-2.32-37-g760e1d2878/stdlib/abort.c:81:7
 #9 0x00007f097df4c789 get_sysdep_segment_value
/usr/src/debug/glibc-2.32-37-g760e1d2878/intl/loadmsgcat.c:509:8
#10 0x00007f097df4c789 _nl_load_domain.cold
/usr/src/debug/glibc-2.32-37-g760e1d2878/intl/loadmsgcat.c:970:34
#11 0x00007f097df5c026 (/lib64/libc.so.6+0x36026)
#12 0x0000000007714b67
clang::Sema::DiagnoseUnexpandedParameterPack(clang::Expr*,
clang::Sema::UnexpandedParameterPackContext)
/home/mpolacek/src/llvm-project/clang/lib/Sema/SemaTemplateVariadic.cpp:407:3
#13 0x00000000070c9a6b clang::Sema::ActOnFinishFullExpr(clang::Expr*,
clang::SourceLocation, bool, bool)
/home/mpolacek/src/llvm-project/clang/lib/Sema/SemaExprCXX.cpp:8423:3
#14 0x0000000007416a5a
clang::Sema::ActOnExprStmt(clang::ActionResult<clang::Expr*, true>, bool)
/home/mpolacek/src/llvm-project/clang/lib/Sema/SemaStmt.cpp:49:76
#15 0x0000000006a2cb1e
clang::Parser::handleExprStmt(clang::ActionResult<clang::Expr*, true>,
clang::Parser::ParsedStmtContext)
/home/mpolacek/src/llvm-project/clang/lib/Parse/ParseStmt.cpp:1034:1
#16 0x0000000006a2ab7b
clang::Parser::ParseExprStatement(clang::Parser::ParsedStmtContext)
/home/mpolacek/src/llvm-project/clang/lib/Parse/ParseStmt.cpp:481:1
#17 0x0000000006a29cc5
clang::Parser::ParseStatementOrDeclarationAfterAttributes(llvm::SmallVector<clang::Stmt*,
32u>&, clang::Parser::ParsedStmtContext, clang::SourceLocation*,
clang::ParsedAttributesWithRange&)
/home/mpolacek/src/llvm-project/clang/lib/Parse/ParseStmt.cpp:243:38
#18 0x0000000006a29491
clang::Parser::ParseStatementOrDeclaration(llvm::SmallVector<clang::Stmt*,
32u>&, clang::Parser::ParsedStmtContext, clang::SourceLocation*)
/home/mpolacek/src/llvm-project/clang/lib/Parse/ParseStmt.cpp:114:45
#19 0x0000000006a2cfce clang::Parser::ParseCompoundStatementBody(bool)
/home/mpolacek/src/llvm-project/clang/lib/Parse/ParseStmt.cpp:1108:56
#20 0x0000000006a315ef clang::Parser::ParseFunctionStatementBody(clang::Decl*,
clang::Parser::ParseScope&)
/home/mpolacek/src/llvm-project/clang/lib/Parse/ParseStmt.cpp:2277:48
#21 0x00000000069587b9
clang::Parser::ParseFunctionDefinition(clang::ParsingDeclarator&,
clang::Parser::ParsedTemplateInfo const&, clang::Parser::LateParsedAttrList*)
/home/mpolacek/src/llvm-project/clang/lib/Parse/Parser.cpp:1374:36
#22 0x0000000006a39e4a
clang::Parser::ParseSingleDeclarationAfterTemplate(clang::DeclaratorContext,
clang::Parser::ParsedTemplateInfo const&, clang::ParsingDeclRAIIObject&,
clang::SourceLocation&, clang::ParsedAttributes&, clang::AccessSpecifier)
/home/mpolacek/src/llvm-project/clang/lib/Parse/ParseTemplate.cpp:325:35
#23 0x0000000006a3929e
clang::Parser::ParseTemplateDeclarationOrSpecialization(clang::DeclaratorContext,
clang::SourceLocation&, clang::ParsedAttributes&, clang::AccessSpecifier)
/home/mpolacek/src/llvm-project/clang/lib/Parse/ParseTemplate.cpp:169:45
#24 0x0000000006a38ddc
clang::Parser::ParseDeclarationStartingWithTemplate(clang::DeclaratorContext,
clang::SourceLocation&, clang::ParsedAttributes&, clang::AccessSpecifier)
/home/mpolacek/src/llvm-project/clang/lib/Parse/ParseTemplate.cpp:46:50
#25 0x000000000697500e
clang::Parser::ParseDeclaration(clang::DeclaratorContext,
clang::SourceLocation&, clang::ParsedAttributesWithRange&,
clang::SourceLocation*)
/home/mpolacek/src/llvm-project/clang/lib/Parse/ParseDecl.cpp:1711:54
#26 0x0000000006956914
clang::Parser::ParseExternalDeclaration(clang::ParsedAttributesWithRange&,
clang::ParsingDeclSpec*) (.localalias)
/home/mpolacek/src/llvm-project/clang/lib/Parse/Parser.cpp:904:70
#27 0x0000000006955d7f
clang::Parser::ParseTopLevelDecl(clang::OpaquePtr<clang::DeclGroupRef>&, bool)
/home/mpolacek/src/llvm-project/clang/lib/Parse/Parser.cpp:716:42
#28 0x000000000695565e
clang::Parser::ParseFirstTopLevelDecl(clang::OpaquePtr<clang::DeclGroupRef>&)
/home/mpolacek/src/llvm-project/clang/lib/Parse/Parser.cpp:588:43
#29 0x0000000006951407 clang::ParseAST(clang::Sema&, bool, bool)
/home/mpolacek/src/llvm-project/clang/lib/Parse/ParseAST.cpp:157:47
#30 0x00000000046a72f3 clang::ASTFrontendAction::ExecuteAction()
/home/mpolacek/src/llvm-project/clang/lib/Frontend/FrontendAction.cpp:1056:11
#31 0x0000000004ffdba3 clang::CodeGenAction::ExecuteAction()
/home/mpolacek/src/llvm-project/clang/lib/CodeGen/CodeGenAction.cpp:1039:5
#32 0x00000000046a6c23 clang::FrontendAction::Execute()
/home/mpolacek/src/llvm-project/clang/lib/Frontend/FrontendAction.cpp:953:38
#33 0x00000000045f3e83
clang::CompilerInstance::ExecuteAction(clang::FrontendAction&)
/home/mpolacek/src/llvm-project/clang/lib/Frontend/CompilerInstance.cpp:960:42
#34 0x00000000048277bf
clang::ExecuteCompilerInvocation(clang::CompilerInstance*)
/home/mpolacek/src/llvm-project/clang/lib/FrontendTool/ExecuteCompilerInvocation.cpp:278:38
#35 0x0000000000bb70a8 cc1_main(llvm::ArrayRef<char const*>, char const*,
void*) /home/mpolacek/src/llvm-project/clang/tools/driver/cc1_main.cpp:246:40
#36 0x0000000000bac0b4 ExecuteCC1Tool(llvm::SmallVectorImpl<char const*>&)
/home/mpolacek/src/llvm-project/clang/tools/driver/driver.cpp:338:20
#37 0x00000000044eadfb
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'()::operator()() const
/home/mpolacek/src/llvm-project/clang/lib/Driver/Job.cpp:404:32
#38 0x00000000044eb346 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/mpolacek/src/llvm-project/llvm/include/llvm/ADT/STLExtras.h:186:40
#39 0x0000000003988f4e llvm::function_ref<void ()>::operator()() const
/home/mpolacek/src/llvm-project/llvm/include/llvm/ADT/STLExtras.h:209:62
#40 0x000000000399478a
llvm::CrashRecoveryContext::RunSafely(llvm::function_ref<void ()>)
/home/mpolacek/src/llvm-project/llvm/lib/Support/CrashRecoveryContext.cpp:425:10
#41 0x00000000044eafd7
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/mpolacek/src/llvm-project/clang/lib/Driver/Job.cpp:404:7
#42 0x00000000044a2141
clang::driver::Compilation::ExecuteCommand(clang::driver::Command const&,
clang::driver::Command const*&) const
/home/mpolacek/src/llvm-project/clang/lib/Driver/Compilation.cpp:196:22
#43 0x00000000044a2473
clang::driver::Compilation::ExecuteJobs(clang::driver::JobList const&,
llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*> >&) const
/home/mpolacek/src/llvm-project/clang/lib/Driver/Compilation.cpp:249:53
#44 0x00000000044b124b
clang::driver::Driver::ExecuteCompilation(clang::driver::Compilation&,
llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*> >&)
/home/mpolacek/src/llvm-project/clang/lib/Driver/Driver.cpp:1538:28
#45 0x0000000000bacfed main
/home/mpolacek/src/llvm-project/clang/tools/driver/driver.cpp:510:39
#46 0x00007f097df4e1e2 __libc_start_main
/usr/src/debug/glibc-2.32-37-g760e1d2878/csu/../csu/libc-start.c:314:16
#47 0x0000000000baa8ee _start
(/home/mpolacek/src/llvm-project/build/bin/clang-12+0xbaa8ee)
clang-12: error: clang frontend command failed with exit code 134 (use -v to
see invocation)
clang version 13.0.0 (https://github.com/llvm/llvm-project.git
d9065fe8ea643bd889821c0dc4c7dbec0469c28e)
Target: x86_64-unknown-linux-gnu
Thread model: posix

-- 
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/20210409/9161acc5/attachment.html>


More information about the llvm-bugs mailing list