[LLVMbugs] [Bug 15896] New: parser crash

bugzilla-daemon at llvm.org bugzilla-daemon at llvm.org
Wed May 1 22:33:40 PDT 2013


http://llvm.org/bugs/show_bug.cgi?id=15896

            Bug ID: 15896
           Summary: parser crash
           Product: clang
           Version: 3.2
          Hardware: PC
                OS: All
            Status: NEW
          Severity: release blocker
          Priority: P
         Component: C++11
          Assignee: unassignedclangbugs at nondot.org
          Reporter: lenx.wei at gmail.com
                CC: dgregor at apple.com, llvmbugs at cs.uiuc.edu
    Classification: Unclassified

When I build my libproton v1.1.2 at https://github.com/LenxWei/libproton, clang
3.1, 3.2 and 3.3(from svn) are all crashed. However, apple clang(Apple LLVM
version 4.2 (clang-425.0.27) (based on LLVM 3.2svn)) survived.

I simplify libproton to this small program:

##############
constexpr.cpp
##############
#include <iostream>
#include <tuple>

using namespace std;

constexpr long index(long i, long size)
{
    return (i<0)?i:(i+size);
}

template<long i, typename ...T>
struct at_index{
    const tuple<T...>* p;
    typedef decltype(get<i>(*p)) type;
};

template<long i, typename ...T>
typename at_index<index(i, sizeof...(T)), T...>::type at(const tuple<T...>& x)
{
    return get<index(i,sizeof...(T))>(x);
}

int main()
{
   tuple<long, long> a;
   cout << at<-1>(a) << endl;
}
##################

It can crash clang 3.2 easily as following:

##################
lenx at intel0:~/src$ clang++ -I /usr/include/x86_64-linux-gnu/c++/4.7
constexpr.cpp  -std=c++11 -o t
clang: SemaTemplateInstantiate.cpp:2683: llvm::PointerUnion<clang::Decl*,
llvm::SmallVector<clang::Decl*, 4u>*>*
clang::LocalInstantiationScope::findInstantiationOf(const clang::Decl*):
Assertion `isa<LabelDecl>(D) && "declaration not instantiated in this scope"'
failed.
0  clang           0x00000000020b3dff
1  clang           0x00000000020b4329
2  libpthread.so.0 0x00007fe7f37e5cb0
3  libc.so.6       0x00007fe7f2a33425 gsignal + 53
4  libc.so.6       0x00007fe7f2a36b8b abort + 379
5  libc.so.6       0x00007fe7f2a2c0ee
6  libc.so.6       0x00007fe7f2a2c192
7  clang           0x0000000000d7c278
clang::LocalInstantiationScope::findInstantiationOf(clang::Decl const*) + 376
8  clang           0x0000000000dac358
clang::Sema::FindInstantiatedDecl(clang::SourceLocation, clang::NamedDecl*,
clang::MultiLevelTemplateArgumentList const&) + 472
9  clang           0x0000000000d786f6
10 clang           0x0000000000d8ee21
11 clang           0x0000000000d8dbd9
12 clang           0x0000000000d93fb2
13 clang           0x0000000000d9782e
14 clang           0x0000000000d97936
15 clang           0x0000000000d8dbfa
16 clang           0x0000000000d84f98
17 clang           0x0000000000d886f8
18 clang           0x0000000000d89148
19 clang           0x0000000000d89b36
20 clang           0x0000000000d8a202
21 clang           0x0000000000d7f788
22 clang           0x0000000000d80d82
23 clang           0x0000000000d80f17
24 clang           0x0000000000d816ef clang::Sema::SubstType(clang::QualType,
clang::MultiLevelTemplateArgumentList const&, clang::SourceLocation,
clang::DeclarationName) + 143
25 clang           0x0000000000d4d8f1
clang::Sema::SubstituteExplicitTemplateArguments(clang::FunctionTemplateDecl*,
clang::TemplateArgumentListInfo&,
llvm::SmallVectorImpl<clang::DeducedTemplateArgument>&,
llvm::SmallVectorImpl<clang::QualType>&, clang::QualType*,
clang::sema::TemplateDeductionInfo&) + 1681
26 clang           0x0000000000d72ad3
clang::Sema::DeduceTemplateArguments(clang::FunctionTemplateDecl*,
clang::TemplateArgumentListInfo*, llvm::ArrayRef<clang::Expr*>,
clang::FunctionDecl*&, clang::sema::TemplateDeductionInfo&) + 627
27 clang           0x0000000000ccd7f2
clang::Sema::AddTemplateOverloadCandidate(clang::FunctionTemplateDecl*,
clang::DeclAccessPair, clang::TemplateArgumentListInfo*,
llvm::ArrayRef<clang::Expr*>, clang::OverloadCandidateSet&, bool) + 386
28 clang           0x0000000000ccf4fd
clang::Sema::AddOverloadedCallCandidates(clang::UnresolvedLookupExpr*,
llvm::ArrayRef<clang::Expr*>, clang::OverloadCandidateSet&, bool) + 445
29 clang           0x0000000000ccf7b6
clang::Sema::buildOverloadedCallSet(clang::Scope*, clang::Expr*,
clang::UnresolvedLookupExpr*, clang::Expr**, unsigned int,
clang::SourceLocation, clang::OverloadCandidateSet*,
clang::ActionResult<clang::Expr*, true>*) + 310
30 clang           0x0000000000cd0041
clang::Sema::BuildOverloadedCallExpr(clang::Scope*, clang::Expr*,
clang::UnresolvedLookupExpr*, clang::SourceLocation, clang::Expr**, unsigned
int, clang::SourceLocation, clang::Expr*, bool) + 273
31 clang           0x0000000000c26bc7 clang::Sema::ActOnCallExpr(clang::Scope*,
clang::Expr*, clang::SourceLocation, llvm::MutableArrayRef<clang::Expr*>,
clang::SourceLocation, clang::Expr*, bool) + 1383
32 clang           0x0000000000a8053f
clang::Parser::ParsePostfixExpressionSuffix(clang::ActionResult<clang::Expr*,
true>) + 2719
33 clang           0x0000000000a797bb clang::Parser::ParseCastExpression(bool,
bool, bool&, clang::Parser::TypeCastState) + 235
34 clang           0x0000000000a7bd2d clang::Parser::ParseCastExpression(bool,
bool, clang::Parser::TypeCastState) + 29
35 clang           0x0000000000a7a641 clang::Parser::ParseCastExpression(bool,
bool, bool&, clang::Parser::TypeCastState) + 3953
36 clang           0x0000000000a7bd2d clang::Parser::ParseCastExpression(bool,
bool, clang::Parser::TypeCastState) + 29
37 clang           0x0000000000a7c7d6
clang::Parser::ParseRHSOfBinaryExpression(clang::ActionResult<clang::Expr*,
true>, clang::prec::Level) + 2614
38 clang           0x0000000000a7d2af
clang::Parser::ParseAssignmentExpression(clang::Parser::TypeCastState) + 47
39 clang           0x0000000000a7e379
clang::Parser::ParseExpression(clang::Parser::TypeCastState) + 9
40 clang           0x0000000000ab2342 clang::Parser::ParseExprStatement() + 50
41 clang           0x0000000000aae67f
clang::Parser::ParseStatementOrDeclarationAfterAttributes(llvm::SmallVector<clang::Stmt*,
32u>&, bool, clang::SourceLocation*, clang::Parser::ParsedAttributesWithRange&)
+ 2607
42 clang           0x0000000000aae88e
clang::Parser::ParseStatementOrDeclaration(llvm::SmallVector<clang::Stmt*,
32u>&, bool, clang::SourceLocation*) + 142
43 clang           0x0000000000aab5b7
clang::Parser::ParseCompoundStatementBody(bool) + 663
44 clang           0x0000000000ab2efd
clang::Parser::ParseFunctionStatementBody(clang::Decl*,
clang::Parser::ParseScope&) + 141
45 clang           0x0000000000a529d9
clang::Parser::ParseFunctionDefinition(clang::ParsingDeclarator&,
clang::Parser::ParsedTemplateInfo const&, clang::Parser::LateParsedAttrList*) +
2505
46 clang           0x0000000000a68173
clang::Parser::ParseDeclGroup(clang::ParsingDeclSpec&, unsigned int, bool,
clang::SourceLocation*, clang::Parser::ForRangeInit*) + 2131
47 clang           0x0000000000a4f065
clang::Parser::ParseDeclOrFunctionDefInternal(clang::Parser::ParsedAttributesWithRange&,
clang::ParsingDeclSpec&, clang::AccessSpecifier) + 245
48 clang           0x0000000000a4f739
49 clang           0x0000000000a4f7af
clang::Parser::ParseDeclarationOrFunctionDefinition(clang::Parser::ParsedAttributesWithRange&,
clang::ParsingDeclSpec*, clang::AccessSpecifier) + 31
50 clang           0x0000000000a50bd9
clang::Parser::ParseExternalDeclaration(clang::Parser::ParsedAttributesWithRange&,
clang::ParsingDeclSpec*) + 105
51 clang           0x0000000000a51438
clang::Parser::ParseTopLevelDecl(clang::OpaquePtr<clang::DeclGroupRef>&) + 184
52 clang           0x0000000000a48e4d clang::ParseAST(clang::Sema&, bool, bool)
+ 509
53 clang           0x00000000007865f9 clang::FrontendAction::Execute() + 153
54 clang           0x0000000000769f58
clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) + 344
55 clang           0x0000000000751826
clang::ExecuteCompilerInvocation(clang::CompilerInstance*) + 1478
56 clang           0x000000000074a720 cc1_main(char const**, char const**, char
const*, void*) + 1248
57 clang           0x0000000000732d73 main + 787
58 libc.so.6       0x00007fe7f2a1e76d __libc_start_main + 237
59 clang           0x000000000074a0dd
Stack dump:
0.    Program arguments: /home/lenx/bin/clang -cc1 -triple
x86_64-unknown-linux-gnu -emit-obj -mrelax-all -disable-free -main-file-name
constexpr.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.22 -momit-leaf-frame-pointer
-resource-dir /home/lenx/bin/../lib/clang/3.2 -I
/usr/include/x86_64-linux-gnu/c++/4.7 -fmodule-cache-path
/var/tmp/clang-module-cache -c-isystem /usr/include/x86_64-linux-gnu
-cxx-isystem /usr/include/x86_64-linux-gnu -internal-isystem
/usr/lib/gcc/x86_64-linux-gnu/4.7/../../../../include/c++/4.7 -internal-isystem
/usr/lib/gcc/x86_64-linux-gnu/4.7/../../../../include/c++/4.7/x86_64-linux-gnu
-internal-isystem
/usr/lib/gcc/x86_64-linux-gnu/4.7/../../../../include/c++/4.7/backward
-internal-isystem /usr/local/include -internal-isystem
/home/lenx/bin/../lib/clang/3.2/include -internal-externc-isystem
/usr/include/x86_64-linux-gnu -internal-externc-isystem /include
-internal-externc-isystem /usr/include -std=c++11 -fdeprecated-macro
-fdebug-compilation-dir /home/lenx/src -ferror-limit 19 -fmessage-length 128
-mstackrealign -fobjc-runtime=gcc -fcxx-exceptions -fexceptions
-fdiagnostics-show-option -fcolor-diagnostics -o /tmp/constexpr-wGcazJ.o -x c++
constexpr.cpp 
1.    constexpr.cpp:26:20: current parser token ')'
2.    constexpr.cpp:24:1: parsing function body 'main'
3.    constexpr.cpp:24:1: in compound statement ('{}')
clang: error: unable to execute command: Aborted (core dumped)
clang: error: clang frontend command failed due to signal (use -v to see
invocation)
clang version 3.2 (tags/RELEASE_32/final)
Target: x86_64-unknown-linux-gnu
Thread model: posix
clang: note: diagnostic msg: PLEASE submit a bug report to
http://llvm.org/bugs/ and include the crash backtrace, preprocessed source, and
associated run script.
clang: note: diagnostic msg: 
################

The generated cpp is attached.
The generated sh is as:

lenx at intel0:~/src$ cat /tmp/constexpr-3SlfGe.sh
/home/lenx/bin/clang -cc1 -triple x86_64-unknown-linux-gnu -emit-obj
-mrelax-all -disable-free -main-file-name constexpr.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.22
-momit-leaf-frame-pointer -c-isystem /usr/include/x86_64-linux-gnu -cxx-isystem
/usr/include/x86_64-linux-gnu -std=c++11 -fdeprecated-macro -ferror-limit 19
-fmessage-length 128 -mstackrealign -fobjc-runtime=gcc -fcxx-exceptions
-fexceptions -fdiagnostics-show-option -fcolor-diagnostics -x c++
constexpr-3SlfGe.cpp

thanks,
Lenx Tao Wei
http://lenx.100871.net

-- 
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/20130502/0b124c9c/attachment.html>


More information about the llvm-bugs mailing list