LLVM Bugzilla is read-only and represents the historical archive of all LLVM issues filled before November 26, 2021. Use github to submit LLVM bugs

Bug 10109 - Segfault compiling template with invalid nested type
Summary: Segfault compiling template with invalid nested type
Status: RESOLVED FIXED
Alias: None
Product: clang
Classification: Unclassified
Component: C++ (show other bugs)
Version: trunk
Hardware: PC Linux
: P normal
Assignee: Unassigned Clang Bugs
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2011-06-09 04:10 PDT by Max Kellermann
Modified: 2011-06-24 15:00 PDT (History)
4 users (show)

See Also:
Fixed By Commit(s):


Attachments
test source code (73 bytes, text/x-c++src)
2011-06-09 04:10 PDT, Max Kellermann
Details

Note You need to log in before you can comment on or make changes to this bug.
Description Max Kellermann 2011-06-09 04:10:59 PDT
Created attachment 6715 [details]
test source code

The attached source code cannot be compiled with clang trunk/2.9. It is important that both the "template" and the "protected" keywords are present; with "public" or "private", it does not crash. I get the following crash message:

bug.cpp:5:13: error: template specialization or definition requires a template parameter list corresponding to the nested type 'A<T>'
  struct B::C;
            ^
bug.cpp:5:13: error: no struct named 'C' in 'A::B'
  struct B::C;
         ~~~^
0  clang           0x00000000017e537f
1  clang           0x00000000017e57e9
2  libpthread.so.0 0x00007f81adad9020
3  clang           0x00000000008dfe1a
4  clang           0x00000000008e1359
5  clang           0x00000000008e2511
6  clang           0x00000000008e2779
7  clang           0x00000000008ebdc2 clang::Sema::HandleDelayedAccessCheck(clang::sema::DelayedDiagnostic&, clang::Decl*) + 1602
8  clang           0x000000000096c7fc clang::Sema::DelayedDiagnostics::popParsingDecl(clang::Sema&, clang::Sema::ParsingDeclState, clang::Decl*) + 124
9  clang           0x00000000008b4307 clang::Parser::ParseCXXClassMemberDeclaration(clang::AccessSpecifier, clang::Parser::ParsedTemplateInfo const&, clang::Parser::ParsingDeclRAIIObject*) + 5799
10 clang           0x00000000008b522f clang::Parser::ParseCXXMemberSpecification(clang::SourceLocation, unsigned int, clang::Decl*) + 1455
11 clang           0x00000000008b6360 clang::Parser::ParseClassSpecifier(clang::tok::TokenKind, clang::SourceLocation, clang::DeclSpec&, clang::Parser::ParsedTemplateInfo const&, clang::AccessSpecifier, bool) + 3376
12 clang           0x00000000008a3d51 clang::Parser::ParseDeclarationSpecifiers(clang::DeclSpec&, clang::Parser::ParsedTemplateInfo const&, clang::AccessSpecifier, clang::Parser::DeclSpecContext) + 1345
13 clang           0x0000000000886ddd clang::Parser::ParseSingleDeclarationAfterTemplate(unsigned int, clang::Parser::ParsedTemplateInfo const&, clang::Parser::ParsingDeclRAIIObject&, clang::SourceLocation&, clang::AccessSpecifier) + 749
14 clang           0x000000000088a106 clang::Parser::ParseTemplateDeclarationOrSpecialization(unsigned int, clang::SourceLocation&, clang::AccessSpecifier) + 614
15 clang           0x00000000008a841a clang::Parser::ParseDeclaration(clang::ASTOwningVector<clang::Stmt*, 32u>&, unsigned int, clang::SourceLocation&, clang::Parser::ParsedAttributesWithRange&) + 458
16 clang           0x0000000000896931 clang::Parser::ParseExternalDeclaration(clang::Parser::ParsedAttributesWithRange&, clang::Parser::ParsingDeclSpec*) + 769
17 clang           0x00000000008974bc clang::Parser::ParseTopLevelDecl(clang::OpaquePtr<clang::DeclGroupRef>&) + 140
18 clang           0x0000000000870c9d clang::ParseAST(clang::Sema&, bool) + 253
19 clang           0x0000000000750e13 clang::CodeGenAction::ExecuteAction() + 51
20 clang           0x000000000066a9a3 clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) + 307
21 clang           0x000000000064a74b clang::ExecuteCompilerInvocation(clang::CompilerInstance*) + 955
22 clang           0x000000000063ff62 cc1_main(char const**, char const**, char const*, void*) + 706
23 clang           0x0000000000649106 main + 678
24 libc.so.6       0x00007f81acdbfead __libc_start_main + 253
25 clang           0x000000000063fb39
Stack dump:
0.      Program arguments: /usr/local/stow/llvm/bin/clang -cc1 -triple x86_64-unknown-linux-gnu -emit-obj -mrelax-all -disable-free -disable-llvm-verifier -main-file-name bug.cpp -mrelocation-model static -mdisable-fp-elim -masm-verbose -mconstructor-aliases -munwind-tables -target-cpu x86-64 -target-linker-version 2.21.52.20110606 -momit-leaf-frame-pointer -resource-dir /usr/local/stow/llvm/bin/../lib/clang/3.0 -fdeprecated-macro -ferror-limit 19 -fmessage-length 266 -fcxx-exceptions -fexceptions -fgnu-runtime -fdiagnostics-show-option -fcolor-diagnostics -o /tmp/cc-MO7CtE.o -x c++ bug.cpp 
1.      bug.cpp:6:1: current parser token '}'
2.      bug.cpp:2:1: parsing struct/union/class body 'A'
clang: error: unable to execute command: Segmentation fault
clang: error: clang frontend command failed due to signal 2 (use -v to see invocation)
Comment 1 Ted Kremenek 2011-06-09 17:53:50 PDT
cloned to <rdar://problem/9584039>
Comment 2 Argyrios Kyrtzidis 2011-06-24 15:00:17 PDT
Fixed in r133816.