Bug#724550: clang-3.3: crash when parsing (invalid) c++ source
Julian Blake Kongslie
jblake at duckytech.com
Wed Sep 25 00:02:03 UTC 2013
Package: clang-3.3
Version: 1:3.3-9
Severity: normal
Dear Maintainer,
I was writing a class where I wanted to do something similar to this:
class Foo {
class Bar {
Foo::Qux get_qux();
};
class Qux {
};
};
And clang (rightly) complains that get_qux can't be declared at that
position because there's no type named Foo:Qux yet.
So I figured, in my tired and incoherent state, let's just try adding
the class keyword so clang knows it's an incomplete type:
class Foo {
class Bar {
class Foo::Qux get_qux();
};
class Qux {
};
};
This, as it happens, crashes clang. It probably shouldn't do that, even
though it's not valid C++. Interestingly, I still get the correct error
message out of clang before it crashes.
Here's the complete output from clang as it crashes:
foo.cpp:3:14: error: no class named 'Qux' in 'Foo'
class Foo::Qux get_qux();
~~~~~^
0 libLLVM-3.3.so.1 0x00007f6154856652 llvm::sys::PrintStackTrace(_IO_FILE*) + 34
1 libLLVM-3.3.so.1 0x00007f61548564b9
2 libpthread.so.0 0x00007f615382f210
3 clang 0x0000000000c09ad0
4 clang 0x0000000000c0cfde clang::Sema::GetTypeForDeclarator(clang::Declarator&, clang::Scope*) + 190
5 clang 0x00000000009fabff clang::Sema::HandleDeclarator(clang::Scope*, clang::Declarator&, llvm::MutableArrayRef<clang::TemplateParameterList*>) + 831
6 clang 0x0000000000a440dd clang::Sema::ActOnCXXMemberDeclarator(clang::Scope*, clang::AccessSpecifier, clang::Declarator&, llvm::MutableArrayRef<clang::TemplateParameterList*>, clang::Expr*, clang::VirtSpecifiers const&, clang::InClassInitStyle) + 861
7 clang 0x00000000008f54cb clang::Parser::ParseCXXClassMemberDeclaration(clang::AccessSpecifier, clang::AttributeList*, clang::Parser::ParsedTemplateInfo const&, clang::ParsingDeclRAIIObject*) + 5467
8 clang 0x00000000008f6ad9 clang::Parser::ParseCXXMemberSpecification(clang::SourceLocation, clang::SourceLocation, clang::Parser::ParsedAttributesWithRange&, unsigned int, clang::Decl*) + 1961
9 clang 0x00000000008f8415 clang::Parser::ParseClassSpecifier(clang::tok::TokenKind, clang::SourceLocation, clang::DeclSpec&, clang::Parser::ParsedTemplateInfo const&, clang::AccessSpecifier, bool, clang::Parser::DeclSpecContext, clang::Parser::ParsedAttributesWithRange&) + 3685
10 clang 0x00000000008e57bf clang::Parser::ParseDeclarationSpecifiers(clang::DeclSpec&, clang::Parser::ParsedTemplateInfo const&, clang::AccessSpecifier, clang::Parser::DeclSpecContext, clang::Parser::LateParsedAttrList*) + 4047
11 clang 0x00000000008f446b clang::Parser::ParseCXXClassMemberDeclaration(clang::AccessSpecifier, clang::AttributeList*, clang::Parser::ParsedTemplateInfo const&, clang::ParsingDeclRAIIObject*) + 1275
12 clang 0x00000000008f6ad9 clang::Parser::ParseCXXMemberSpecification(clang::SourceLocation, clang::SourceLocation, clang::Parser::ParsedAttributesWithRange&, unsigned int, clang::Decl*) + 1961
13 clang 0x00000000008f8415 clang::Parser::ParseClassSpecifier(clang::tok::TokenKind, clang::SourceLocation, clang::DeclSpec&, clang::Parser::ParsedTemplateInfo const&, clang::AccessSpecifier, bool, clang::Parser::DeclSpecContext, clang::Parser::ParsedAttributesWithRange&) + 3685
14 clang 0x00000000008e57bf clang::Parser::ParseDeclarationSpecifiers(clang::DeclSpec&, clang::Parser::ParsedTemplateInfo const&, clang::AccessSpecifier, clang::Parser::DeclSpecContext, clang::Parser::LateParsedAttrList*) + 4047
15 clang 0x00000000008cfa74 clang::Parser::ParseDeclOrFunctionDefInternal(clang::Parser::ParsedAttributesWithRange&, clang::ParsingDeclSpec&, clang::AccessSpecifier) + 84
16 clang 0x00000000008d02ee clang::Parser::ParseDeclarationOrFunctionDefinition(clang::Parser::ParsedAttributesWithRange&, clang::ParsingDeclSpec*, clang::AccessSpecifier) + 926
17 clang 0x00000000008d38a9 clang::Parser::ParseExternalDeclaration(clang::Parser::ParsedAttributesWithRange&, clang::ParsingDeclSpec*) + 249
18 clang 0x00000000008d3ed2 clang::Parser::ParseTopLevelDecl(clang::OpaquePtr<clang::DeclGroupRef>&) + 194
19 clang 0x00000000008cc440 clang::ParseAST(clang::Sema&, bool, bool) + 352
20 clang 0x000000000063d129 clang::FrontendAction::Execute() + 169
21 clang 0x000000000061eb22 clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) + 290
22 clang 0x000000000060a997 clang::ExecuteCompilerInvocation(clang::CompilerInstance*) + 1575
23 clang 0x0000000000605db8 cc1_main(char const**, char const**, char const*, void*) + 1160
24 clang 0x0000000000604847 main + 7847
25 libc.so.6 0x00007f6152872995 __libc_start_main + 245
26 clang 0x0000000000604e05
Stack dump:
0. Program arguments: /usr/bin/clang -cc1 -triple x86_64-pc-linux-gnu -emit-obj -mrelax-all -disable-free -disable-llvm-verifier -main-file-name foo.cpp -mrelocation-model static -mdisable-fp-elim -fmath-errno -masm-verbose -mconstructor-aliases -munwind-tables -fuse-init-array -target-cpu x86-64 -target-linker-version 2.23.52.20130828 -resource-dir /usr/bin/../lib/clang/3.3 -internal-isystem /usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../include/c++/4.8 -internal-isystem /usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../include/c++/4.8/x86_64-linux-gnu -internal-isystem /usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../include/c++/4.8/backward -internal-isystem /usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../include/x86_64-linux-gnu/c++/4.8 -internal-isystem /usr/local/include -internal-isystem /usr/bin/../lib/clang/3.3/include -internal-isystem /usr/include/clang/3.3/include/ -internal-externc-isystem /usr/include/x86_64-linux-gnu -internal-externc-isystem /usr/include/x86_64-linux-g!
nu -internal-externc-isystem /usr/include -fdeprecated-macro -fdebug-compilation-dir /home/jblake -ferror-limit 19 -fmessage-length 159 -mstackrealign -fobjc-runtime=gcc -fobjc-default-synthesize-properties -fcxx-exceptions -fexceptions -fdiagnostics-show-option -fcolor-diagnostics -backend-option -vectorize-loops -o /tmp/foo-cVZXYa.o -x c++ foo.cpp
1. foo.cpp:3:27: current parser token ';'
2. foo.cpp:1:1: parsing struct/union/class body 'Foo'
3. foo.cpp:2:2: parsing struct/union/class body 'Bar'
clang: error: unable to execute command: Segmentation fault
clang: error: clang frontend command failed due to signal (use -v to see invocation)
Debian clang version 3.3-9 (branches/release_33) (based on LLVM 3.3)
Target: x86_64-pc-linux-gnu
Thread model: posix
clang: note: diagnostic msg: PLEASE submit a bug report to http://bugs.debian.org/ and include the crash backtrace, preprocessed source, and associated run script.
clang: note: diagnostic msg:
********************
PLEASE ATTACH THE FOLLOWING FILES TO THE BUG REPORT:
Preprocessed source(s) and associated run script(s) are located at:
clang: note: diagnostic msg: /tmp/foo-1Vw0aR.cpp
clang: note: diagnostic msg: /tmp/foo-1Vw0aR.sh
clang: note: diagnostic msg:
********************
I've attached the relevant files (foo.cpp, /tmp/foo-1Vw0aR.cpp,
/tmp/foo-1Vw0aR.sh) to this report. The command I ran was simply:
clang++ foo.cpp
Please let me know if there's anything further I can do to assist.
Thanks for your time,
-Jules
-- System Information:
Debian Release: jessie/sid
APT prefers stable-updates
APT policy: (500, 'stable-updates'), (500, 'proposed-updates'), (500, 'oldstable-updates'), (500, 'oldstable-proposed-updates'), (500, 'unstable'), (500, 'testing'), (500, 'stable'), (500, 'oldstable'), (1, 'experimental')
Architecture: amd64 (x86_64)
Foreign Architectures: i386
Kernel: Linux 3.2.0-4-rt-amd64 (SMP w/4 CPU cores; PREEMPT)
Locale: LANG=en_US.UTF-8, LC_CTYPE=en_US.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/dash
Versions of packages clang-3.3 depends on:
ii libc6 2.17-93
ii libclang-common-3.3-dev 1:3.3-9
ii libclang1-3.3 1:3.3-9
ii libffi6 3.0.13-4
ii libgcc-4.8-dev 4.8.1-10
ii libgcc1 1:4.8.1-10
ii libllvm3.3 1:3.3-9
ii libobjc-4.8-dev 4.8.1-10
ii libstdc++-4.8-dev 4.8.1-10
ii libstdc++6 4.8.1-10
Versions of packages clang-3.3 recommends:
ii llvm-3.3-dev 1:3.3-9
ii python 2.7.5-5
clang-3.3 suggests no packages.
-- no debconf information
-------------- next part --------------
A non-text attachment was scrubbed...
Name: foo.cpp
Type: text/x-c++
Size: 77 bytes
Desc: not available
URL: <http://lists.alioth.debian.org/pipermail/pkg-llvm-team/attachments/20130924/626c9f78/attachment.bin>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: foo-1Vw0aR.cpp
Type: text/x-c++
Size: 93 bytes
Desc: not available
URL: <http://lists.alioth.debian.org/pipermail/pkg-llvm-team/attachments/20130924/626c9f78/attachment-0001.bin>
-------------- next part --------------
/usr/bin/clang -cc1 -triple x86_64-pc-linux-gnu -emit-obj -mrelax-all -disable-free -disable-llvm-verifier -main-file-name foo.cpp -mrelocation-model static -mdisable-fp-elim -fmath-errno -masm-verbose -mconstructor-aliases -munwind-tables -fuse-init-array -target-cpu x86-64 -target-linker-version 2.23.52.20130828 -fdeprecated-macro -ferror-limit 19 -fmessage-length 159 -mstackrealign -fobjc-runtime=gcc -fobjc-default-synthesize-properties -fcxx-exceptions -fexceptions -fdiagnostics-show-option -fcolor-diagnostics -backend-option -vectorize-loops -x c++ foo-1Vw0aR.cpp
More information about the Pkg-llvm-team
mailing list