CTSRD-CHERI / clang

DO NOT USE. Use llvm-project instead
Other
9 stars 8 forks source link

Parser crash in HandleCHERICapabilityAttr #165

Closed arichardson closed 6 years ago

arichardson commented 6 years ago

Test case:

// RUN: not --crash %cheri_purecap_cc1 -fsyntax-only -ast-dump -std=c++1z -fdeprecated-macro -fmessage-length 121 -o -  %s
// REQUIRES: asserts
int strncmp_c(__attribute__((cheri_capability)) const char *, __attribute__((cheri_capability)) const char *);

fails with the following assertion:

clang: /local/scratch/alr48/cheri/llvm/tools/clang/lib/Frontend/TextDiagnostic.cpp:490: void selectInterestingSourceRegion(std::string &, std::string &, std::string &, unsigned int, const (anonymous namespace)::SourceColumnMap &): Assertion `FrontColumnsRemoved+ColumnsKept+BackColumnsRemoved > Columns' failed.

Backtrace:

/local/scratch/alr48/cheri/llvm/tools/clang/test/Parser/cheri-attribute-crash.cpp:4:60: warning: use of __capability
      before the pointer type is deprecated
int strncmp_c(__attribute__((cheri_capability)) const char *, __attribute__((cheri_capability)) const char *);
              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~            ^
                                                             __capability 
/local/scratch/alr48/cheri/llvm/tools/clang/test/Parser/cheri-attribute-crash.cpp:4:108: warning: use of __capability
      before the pointer type is deprecated
clang: /local/scratch/alr48/cheri/llvm/tools/clang/lib/Frontend/TextDiagnostic.cpp:490: void selectInterestingSourceRegion(std::string &, std::string &, std::string &, unsigned int, const (anonymous namespace)::SourceColumnMap &): Assertion `FrontColumnsRemoved+ColumnsKept+BackColumnsRemoved > Columns' failed.
#0 0x00007fbbb0b3fd29 llvm::sys::PrintStackTrace(llvm::raw_ostream&) /local/scratch/alr48/cheri/llvm/lib/Support/Unix/Signals.inc:398:11
#1 0x00007fbbb0b3fed9 PrintStackTraceSignalHandler(void*) /local/scratch/alr48/cheri/llvm/lib/Support/Unix/Signals.inc:494:1
#2 0x00007fbbb0b3e483 llvm::sys::RunSignalHandlers() /local/scratch/alr48/cheri/llvm/lib/Support/Signals.cpp:0:5
#3 0x00007fbbb0b40234 SignalHandler(int) /local/scratch/alr48/cheri/llvm/lib/Support/Unix/Signals.inc:252:1
#4 0x00007fbbb006a390 __restore_rt (/lib/x86_64-linux-gnu/libpthread.so.0+0x11390)
#5 0x00007fbbadd9a428 gsignal /build/glibc-bfm8X4/glibc-2.23/signal/../sysdeps/unix/sysv/linux/raise.c:54:0
#6 0x00007fbbadd9c02a abort /build/glibc-bfm8X4/glibc-2.23/stdlib/abort.c:91:0
#7 0x00007fbbadd92bd7 __assert_fail_base /build/glibc-bfm8X4/glibc-2.23/assert/assert.c:92:0
#8 0x00007fbbadd92c82 (/lib/x86_64-linux-gnu/libc.so.6+0x2dc82)
#9 0x00007fbbaee417d7 selectInterestingSourceRegion(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&, unsigned int, (anonymous namespace)::SourceColumnMap const&) /local/scratch/alr48/cheri/llvm/tools/clang/lib/Frontend/TextDiagnostic.cpp:494:7
#10 0x00007fbbaee3f3d6 clang::TextDiagnostic::emitSnippetAndCaret(clang::FullSourceLoc, clang::DiagnosticsEngine::Level, llvm::SmallVectorImpl<clang::CharSourceRange>&, llvm::ArrayRef<clang::FixItHint>) /local/scratch/alr48/cheri/llvm/tools/clang/lib/Frontend/TextDiagnostic.cpp:1237:9
#11 0x00007fbbaee43f38 clang::TextDiagnostic::emitCodeContext(clang::FullSourceLoc, clang::DiagnosticsEngine::Level, llvm::SmallVectorImpl<clang::CharSourceRange>&, llvm::ArrayRef<clang::FixItHint>) /local/scratch/alr48/cheri/llvm/tools/clang/include/clang/Frontend/TextDiagnostic.h:91:3
#12 0x00007fbbaedc9e47 clang::DiagnosticRenderer::emitCaret(clang::FullSourceLoc, clang::DiagnosticsEngine::Level, llvm::ArrayRef<clang::CharSourceRange>, llvm::ArrayRef<clang::FixItHint>) /local/scratch/alr48/cheri/llvm/tools/clang/lib/Frontend/DiagnosticRenderer.cpp:400:3
#13 0x00007fbbaedc9639 clang::DiagnosticRenderer::emitDiagnostic(clang::FullSourceLoc, clang::DiagnosticsEngine::Level, llvm::StringRef, llvm::ArrayRef<clang::CharSourceRange>, llvm::ArrayRef<clang::FixItHint>, llvm::PointerUnion<clang::Diagnostic const*, clang::StoredDiagnostic const*>) /local/scratch/alr48/cheri/llvm/tools/clang/lib/Frontend/DiagnosticRenderer.cpp:122:5
#14 0x00007fbbaee47739 clang::TextDiagnosticPrinter::HandleDiagnostic(clang::DiagnosticsEngine::Level, clang::Diagnostic const&) /local/scratch/alr48/cheri/llvm/tools/clang/lib/Frontend/TextDiagnosticPrinter.cpp:157:3
#15 0x00007fbbafe9d54c clang::DiagnosticIDs::EmitDiag(clang::DiagnosticsEngine&, clang::DiagnosticIDs::Level) const /local/scratch/alr48/cheri/llvm/tools/clang/lib/Basic/DiagnosticIDs.cpp:708:7
#16 0x00007fbbafe9d3da clang::DiagnosticIDs::ProcessDiag(clang::DiagnosticsEngine&) const /local/scratch/alr48/cheri/llvm/tools/clang/lib/Basic/DiagnosticIDs.cpp:700:3
#17 0x00007fbbafe90b3f clang::DiagnosticsEngine::ProcessDiag() /local/scratch/alr48/cheri/llvm/tools/clang/include/clang/Basic/Diagnostic.h:879:5
#18 0x00007fbbafe8c241 clang::DiagnosticsEngine::EmitCurrentDiagnostic(bool) /local/scratch/alr48/cheri/llvm/tools/clang/lib/Basic/Diagnostic.cpp:419:13
#19 0x00007fbbaa581df9 clang::Sema::EmitCurrentDiagnostic(unsigned int) /local/scratch/alr48/cheri/llvm/tools/clang/lib/Sema/Sema.cpp:1275:7
#20 0x00007fbbaa49020b clang::Sema::SemaDiagnosticBuilder::~SemaDiagnosticBuilder() /local/scratch/alr48/cheri/llvm/tools/clang/include/clang/Sema/Sema.h:1257:5
#21 0x00007fbbab1632c2 HandleCHERICapabilityAttr(clang::QualType&, (anonymous namespace)::TypeProcessingState&, TypeAttrLocation, clang::AttributeList&) /local/scratch/alr48/cheri/llvm/tools/clang/lib/Sema/SemaType.cpp:7141:25
#22 0x00007fbbab15eeb4 processTypeAttrs((anonymous namespace)::TypeProcessingState&, clang::QualType&, TypeAttrLocation, clang::AttributeList*) /local/scratch/alr48/cheri/llvm/tools/clang/lib/Sema/SemaType.cpp:7460:7
#23 0x00007fbbab153dc3 GetFullTypeForDeclarator((anonymous namespace)::TypeProcessingState&, clang::QualType, clang::TypeSourceInfo*) /local/scratch/alr48/cheri/llvm/tools/clang/lib/Sema/SemaType.cpp:4127:59
#24 0x00007fbbab14dbb6 clang::Sema::GetTypeForDeclarator(clang::Declarator&, clang::Scope*) /local/scratch/alr48/cheri/llvm/tools/clang/lib/Sema/SemaType.cpp:4977:10
#25 0x00007fbbaa6ff25a clang::Sema::ActOnParamDeclarator(clang::Scope*, clang::Declarator&) /local/scratch/alr48/cheri/llvm/tools/clang/lib/Sema/SemaDecl.cpp:11820:19
#26 0x00007fbbab269f1d clang::Parser::ParseParameterDeclarationClause(clang::Declarator&, clang::ParsedAttributes&, llvm::SmallVectorImpl<clang::DeclaratorChunk::ParamInfo>&, clang::SourceLocation&) /local/scratch/alr48/cheri/llvm/tools/clang/lib/Parse/ParseDecl.cpp:6365:29
#27 0x00007fbbab26805a clang::Parser::ParseFunctionDeclarator(clang::Declarator&, clang::ParsedAttributes&, clang::BalancedDelimiterTracker&, bool, bool) /local/scratch/alr48/cheri/llvm/tools/clang/lib/Parse/ParseDecl.cpp:6014:7
#28 0x00007fbbab2665db clang::Parser::ParseDirectDeclarator(clang::Declarator&) /local/scratch/alr48/cheri/llvm/tools/clang/lib/Parse/ParseDecl.cpp:5753:7
#29 0x00007fbbab26454d clang::Parser::ParseDeclaratorInternal(clang::Declarator&, void (clang::Parser::*)(clang::Declarator&)) /local/scratch/alr48/cheri/llvm/tools/clang/lib/Parse/ParseDecl.cpp:5320:5
#30 0x00007fbbab2491e8 clang::Parser::ParseDeclarator(clang::Declarator&) /local/scratch/alr48/cheri/llvm/tools/clang/lib/Parse/ParseDecl.cpp:5191:1
#31 0x00007fbbab25b00c clang::Parser::ParseDeclGroup(clang::ParsingDeclSpec&, unsigned int, clang::SourceLocation*, clang::Parser::ForRangeInit*) /local/scratch/alr48/cheri/llvm/tools/clang/lib/Parse/ParseDecl.cpp:1904:3
#32 0x00007fbbab33f441 clang::Parser::ParseDeclOrFunctionDefInternal(clang::Parser::ParsedAttributesWithRange&, clang::ParsingDeclSpec&, clang::AccessSpecifier) /local/scratch/alr48/cheri/llvm/tools/clang/lib/Parse/Parser.cpp:979:10
#33 0x00007fbbab33eb80 clang::Parser::ParseDeclarationOrFunctionDefinition(clang::Parser::ParsedAttributesWithRange&, clang::ParsingDeclSpec*, clang::AccessSpecifier) /local/scratch/alr48/cheri/llvm/tools/clang/lib/Parse/Parser.cpp:995:12
#34 0x00007fbbab33e477 clang::Parser::ParseExternalDeclaration(clang::Parser::ParsedAttributesWithRange&, clang::ParsingDeclSpec*) /local/scratch/alr48/cheri/llvm/tools/clang/lib/Parse/Parser.cpp:845:12
#35 0x00007fbbab33d028 clang::Parser::ParseTopLevelDecl(clang::OpaquePtr<clang::DeclGroupRef>&) /local/scratch/alr48/cheri/llvm/tools/clang/lib/Parse/Parser.cpp:613:12
#36 0x00007fbbab33cade clang::Parser::ParseFirstTopLevelDecl(clang::OpaquePtr<clang::DeclGroupRef>&) /local/scratch/alr48/cheri/llvm/tools/clang/lib/Parse/Parser.cpp:535:8
#37 0x00007fbbab239322 clang::ParseAST(clang::Sema&, bool, bool) /local/scratch/alr48/cheri/llvm/tools/clang/lib/Parse/ParseAST.cpp:146:13
#38 0x00007fbbaedd620c clang::ASTFrontendAction::ExecuteAction() /local/scratch/alr48/cheri/llvm/tools/clang/lib/Frontend/FrontendAction.cpp:1000:1
#39 0x00007fbbaedd5c80 clang::FrontendAction::Execute() /local/scratch/alr48/cheri/llvm/tools/clang/lib/Frontend/FrontendAction.cpp:901:7
#40 0x00007fbbaed4e3ca clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) /local/scratch/alr48/cheri/llvm/tools/clang/lib/Frontend/CompilerInstance.cpp:992:7
#41 0x00007fbbae9fe846 clang::ExecuteCompilerInvocation(clang::CompilerInstance*) /local/scratch/alr48/cheri/llvm/tools/clang/lib/FrontendTool/ExecuteCompilerInvocation.cpp:252:8
#42 0x000000000023b609 cc1_main(llvm::ArrayRef<char const*>, char const*, void*) /local/scratch/alr48/cheri/llvm/tools/clang/tools/driver/cc1_main.cpp:221:11
#43 0x000000000022e519 ExecuteCC1Tool(llvm::ArrayRef<char const*>, llvm::StringRef) /local/scratch/alr48/cheri/llvm/tools/clang/tools/driver/driver.cpp:309:5
#44 0x000000000022d21d main /local/scratch/alr48/cheri/llvm/tools/clang/tools/driver/driver.cpp:388:5
#45 0x00007fbbadd85830 __libc_start_main /build/glibc-bfm8X4/glibc-2.23/csu/../csu/libc-start.c:325:0
#46 0x000000000022c029 _start (/local/scratch/alr48/cheri/llvm/cmake-build-debug/bin/clang+0x22c029)
Stack dump: