[llvm-bugs] [Bug 49888] New: Crash with invalid noexcept specifier

via llvm-bugs llvm-bugs at lists.llvm.org
Wed Apr 7 18:36:17 PDT 2021


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

            Bug ID: 49888
           Summary: Crash with invalid noexcept specifier
           Product: clang
           Version: trunk
          Hardware: PC
                OS: Linux
            Status: NEW
          Severity: enhancement
          Priority: P
         Component: C++11
          Assignee: unassignedclangbugs at nondot.org
          Reporter: polacek at redhat.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

struct S {
  template<typename T>
  void f(T) noexcept(B);
  bool B = true;
};

(invalid) results in a crash:

$ xclang++ z.cc -c
z.cc:3:22: error: argument to noexcept specifier must be a constant expression
  void f(T) noexcept(B);
                     ^
z.cc:3:22: note: implicit use of 'this' pointer is only allowed within the
evaluation of a call to a 'constexpr' member function
xclang++: /home/mpolacek/src/llvm-project/clang/lib/AST/ASTContext.cpp:3142:
void clang::ASTContext::adjustExceptionSpec(clang::FunctionDecl*, const
clang::FunctionProtoType::ExceptionSpecInfo&, bool): Assertion
`TypeLoc::getFullDataSizeForType(Updated) ==
TypeLoc::getFullDataSizeForType(TSInfo->getType()) && "TypeLoc size mismatch
from updating exception specification"' 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++ z.cc -c
1.      <eof> parser at end of file
2.      z.cc:1:1: parsing struct/union/class body 'S'
 #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 0x00007f666c5ab1e0 __restore_rt (/lib64/libpthread.so.0+0x141e0)
 #7 0x00007f666c0639d5 raise
/usr/src/debug/glibc-2.32-37-g760e1d2878/signal/../sysdeps/unix/sysv/linux/raise.c:50:1
 #8 0x00007f666c04c8a4 abort
/usr/src/debug/glibc-2.32-37-g760e1d2878/stdlib/abort.c:81:7
 #9 0x00007f666c04c789 get_sysdep_segment_value
/usr/src/debug/glibc-2.32-37-g760e1d2878/intl/loadmsgcat.c:509:8
#10 0x00007f666c04c789 _nl_load_domain.cold
/usr/src/debug/glibc-2.32-37-g760e1d2878/intl/loadmsgcat.c:970:34
#11 0x00007f666c05c026 (/lib64/libc.so.6+0x36026)
#12 0x0000000007c0aa61
clang::ASTContext::adjustExceptionSpec(clang::FunctionDecl*,
clang::FunctionProtoType::ExceptionSpecInfo const&, bool)
/home/mpolacek/src/llvm-project/clang/lib/AST/ASTContext.cpp:3142:5
#13 0x0000000006da8d1c
clang::Sema::actOnDelayedExceptionSpecification(clang::Decl*,
clang::ExceptionSpecificationType, clang::SourceRange,
llvm::ArrayRef<clang::OpaquePtr<clang::QualType> >,
llvm::ArrayRef<clang::SourceRange>, clang::Expr*)
/home/mpolacek/src/llvm-project/clang/lib/Sema/SemaDeclCXX.cpp:17785:23
#14 0x0000000006967eb2
clang::Parser::ParseLexedMethodDeclaration(clang::Parser::LateParsedMethodDeclaration&)
/home/mpolacek/src/llvm-project/clang/lib/Parse/ParseCXXInlineMethods.cpp:480:47
#15 0x0000000006967191
clang::Parser::LateParsedMethodDeclaration::ParseLexedMethodDeclarations()
/home/mpolacek/src/llvm-project/clang/lib/Parse/ParseCXXInlineMethods.cpp:257:1
#16 0x00000000069672b3
clang::Parser::ParseLexedMethodDeclarations(clang::Parser::ParsingClass&)
/home/mpolacek/src/llvm-project/clang/lib/Parse/ParseCXXInlineMethods.cpp:324:3
#17 0x00000000069a0fb7
clang::Parser::ParseCXXMemberSpecification(clang::SourceLocation,
clang::SourceLocation, clang::ParsedAttributesWithRange&, unsigned int,
clang::Decl*)
/home/mpolacek/src/llvm-project/clang/lib/Parse/ParseDeclCXX.cpp:3431:5
#18 0x000000000699b5d6
clang::Parser::ParseClassSpecifier(clang::tok::TokenKind,
clang::SourceLocation, clang::DeclSpec&, clang::Parser::ParsedTemplateInfo
const&, clang::AccessSpecifier, bool, clang::Parser::DeclSpecContext,
clang::ParsedAttributesWithRange&)
/home/mpolacek/src/llvm-project/clang/lib/Parse/ParseDeclCXX.cpp:1990:34
#19 0x000000000697d648
clang::Parser::ParseDeclarationSpecifiers(clang::DeclSpec&,
clang::Parser::ParsedTemplateInfo const&, clang::AccessSpecifier,
clang::Parser::DeclSpecContext, clang::Parser::LateParsedAttrList*)
/home/mpolacek/src/llvm-project/clang/lib/Parse/ParseDecl.cpp:3960:26
#20 0x00000000069571e6
clang::Parser::ParseDeclOrFunctionDefInternal(clang::ParsedAttributesWithRange&,
clang::ParsingDeclSpec&, clang::AccessSpecifier)
/home/mpolacek/src/llvm-project/clang/lib/Parse/Parser.cpp:1045:26
#21 0x00000000069578a4
clang::Parser::ParseDeclarationOrFunctionDefinition(clang::ParsedAttributesWithRange&,
clang::ParsingDeclSpec*, clang::AccessSpecifier)
/home/mpolacek/src/llvm-project/clang/lib/Parse/Parser.cpp:1150:57
#22 0x0000000006956d7b
clang::Parser::ParseExternalDeclaration(clang::ParsedAttributesWithRange&,
clang::ParsingDeclSpec*) (.localalias)
/home/mpolacek/src/llvm-project/clang/lib/Parse/Parser.cpp:970:58
#23 0x0000000006955d7f
clang::Parser::ParseTopLevelDecl(clang::OpaquePtr<clang::DeclGroupRef>&, bool)
/home/mpolacek/src/llvm-project/clang/lib/Parse/Parser.cpp:716:42
#24 0x000000000695565e
clang::Parser::ParseFirstTopLevelDecl(clang::OpaquePtr<clang::DeclGroupRef>&)
/home/mpolacek/src/llvm-project/clang/lib/Parse/Parser.cpp:588:43
#25 0x0000000006951407 clang::ParseAST(clang::Sema&, bool, bool)
/home/mpolacek/src/llvm-project/clang/lib/Parse/ParseAST.cpp:157:47
#26 0x00000000046a72f3 clang::ASTFrontendAction::ExecuteAction()
/home/mpolacek/src/llvm-project/clang/lib/Frontend/FrontendAction.cpp:1056:11
#27 0x0000000004ffdba3 clang::CodeGenAction::ExecuteAction()
/home/mpolacek/src/llvm-project/clang/lib/CodeGen/CodeGenAction.cpp:1039:5
#28 0x00000000046a6c23 clang::FrontendAction::Execute()
/home/mpolacek/src/llvm-project/clang/lib/Frontend/FrontendAction.cpp:953:38
#29 0x00000000045f3e83
clang::CompilerInstance::ExecuteAction(clang::FrontendAction&)
/home/mpolacek/src/llvm-project/clang/lib/Frontend/CompilerInstance.cpp:960:42
#30 0x00000000048277bf
clang::ExecuteCompilerInvocation(clang::CompilerInstance*)
/home/mpolacek/src/llvm-project/clang/lib/FrontendTool/ExecuteCompilerInvocation.cpp:278:38
#31 0x0000000000bb70a8 cc1_main(llvm::ArrayRef<char const*>, char const*,
void*) /home/mpolacek/src/llvm-project/clang/tools/driver/cc1_main.cpp:246:40
#32 0x0000000000bac0b4 ExecuteCC1Tool(llvm::SmallVectorImpl<char const*>&)
/home/mpolacek/src/llvm-project/clang/tools/driver/driver.cpp:338:20
#33 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
#34 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
#35 0x0000000003988f4e llvm::function_ref<void ()>::operator()() const
/home/mpolacek/src/llvm-project/llvm/include/llvm/ADT/STLExtras.h:209:62
#36 0x000000000399478a
llvm::CrashRecoveryContext::RunSafely(llvm::function_ref<void ()>)
/home/mpolacek/src/llvm-project/llvm/lib/Support/CrashRecoveryContext.cpp:425:10
#37 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
#38 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
#39 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
#40 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
#41 0x0000000000bacfed main
/home/mpolacek/src/llvm-project/clang/tools/driver/driver.cpp:510:39
#42 0x00007f666c04e1e2 __libc_start_main
/usr/src/debug/glibc-2.32-37-g760e1d2878/csu/../csu/libc-start.c:314:16
#43 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)

-- 
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/20210408/89e29202/attachment.html>


More information about the llvm-bugs mailing list