Quuxplusone / LLVMBugzillaTest

0 stars 0 forks source link

segfault when diffing template parameter with no default value in typedef #17509

Closed Quuxplusone closed 11 years ago

Quuxplusone commented 11 years ago
Bugzilla Link PR17510
Status RESOLVED FIXED
Importance P normal
Reported by hilbig@zbh.uni-hamburg.de
Reported on 2013-10-08 09:47:14 -0700
Last modified on 2013-10-08 12:05:09 -0700
Version 3.3
Hardware PC Linux
CC benny.kra@gmail.com, llvm-bugs@lists.llvm.org
Fixed by commit(s)
Attachments Converter.7z (927758 bytes, application/x-7z-compressed)
Blocks
Blocked by
See also
Clang 3.3 segfaults with the following backtrace:

In file included from Converter-ZxwmZJ.cpp:1:
tool/utils/generate_2d_coords/Converter.cpp:46:22: error: no matching
constructor for initialization of 'MolLib::AtomVector' (aka 'vector<const
MolLib::Atom *, std::allocator<const MolLib::Atom *> >')
  MolLib::AtomVector heavyAtoms(MolLib::AtomVectorUtils::getNonHydrogenAtoms(molecule->getAtoms()));
                     ^          ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/lib64/gcc/x86_64-suse-
linux/4.7/../../../../include/c++/4.7/bits/stl_vector.h:257:7: note: candidate
constructor not viable: no known conversion from 'std::vector<Atom *>' to
'const allocator_type' (aka 'const std::allocator<const MolLib::Atom *>') for
1st argument
      vector(const allocator_type& __a)
      ^
/usr/lib64/gcc/x86_64-suse-
linux/4.7/../../../../include/c++/4.7/bits/stl_vector.h:295:7: note: candidate
constructor not viable: no known conversion from 'std::vector<Atom *>' to
'size_type' (aka 'unsigned long') for 1st argument
      vector(size_type __n, const value_type& __value = value_type(),
      ^
0  clang           0x0000000001ac23c5 llvm::sys::PrintStackTrace(_IO_FILE*) + 37
1  clang           0x0000000001ac27a3
2  libpthread.so.0 0x00007f425d4b2140
3  clang           0x0000000000f3d013
4  clang           0x0000000000f39081
clang::FormatASTNodeDiagnosticArgument(clang::DiagnosticsEngine::ArgumentKind,
long, char const*, unsigned int, char const*, unsigned int,
std::pair<clang::DiagnosticsEngine::ArgumentKind, long> const*, unsigned int,
llvm::SmallVectorImpl<char>&, void*, llvm::ArrayRef<long>) + 1937
5  clang           0x000000000104b2dd clang::Diagnostic::FormatDiagnostic(char
const*, char const*, llvm::SmallVectorImpl<char>&) const + 5885
6  clang           0x00000000006b3080
clang::TextDiagnosticPrinter::HandleDiagnostic(clang::DiagnosticsEngine::Level,
clang::Diagnostic const&) + 96
7  clang           0x000000000104deb2
clang::DiagnosticIDs::ProcessDiag(clang::DiagnosticsEngine&) const + 626
8  clang           0x0000000001049919
clang::DiagnosticsEngine::EmitCurrentDiagnostic(bool) + 89
9  clang           0x0000000000978eee
clang::Sema::EmitCurrentDiagnostic(unsigned int) + 974
10 clang           0x0000000000b2ee41
11 clang           0x0000000000b1f0a0
clang::OverloadCandidateSet::NoteCandidates(clang::Sema&,
clang::OverloadCandidateDisplayKind, llvm::ArrayRef<clang::Expr*>,
llvm::StringRef, clang::SourceLocation) + 2816
12 clang           0x0000000000aebbf2
clang::InitializationSequence::Diagnose(clang::Sema&, clang::InitializedEntity
const&, clang::InitializationKind const&, llvm::ArrayRef<clang::Expr*>) + 7058
13 clang           0x0000000000ae7918
clang::InitializationSequence::Perform(clang::Sema&, clang::InitializedEntity
const&, clang::InitializationKind const&, llvm::MutableArrayRef<clang::Expr*>,
clang::QualType*) + 232
14 clang           0x00000000009fe67b
clang::Sema::AddInitializerToDecl(clang::Decl*, clang::Expr*, bool, bool) + 3051
15 clang           0x0000000000912a88
clang::Parser::ParseDeclarationAfterDeclaratorAndAttributes(clang::Declarator&,
clang::Parser::ParsedTemplateInfo const&) + 1640
16 clang           0x00000000009114e2
clang::Parser::ParseDeclGroup(clang::ParsingDeclSpec&, unsigned int, bool,
clang::SourceLocation*, clang::Parser::ForRangeInit*) + 1762
17 clang           0x000000000090e395
clang::Parser::ParseSimpleDeclaration(llvm::SmallVector<clang::Stmt*, 32u>&,
unsigned int, clang::SourceLocation&,
clang::Parser::ParsedAttributesWithRange&, bool, clang::Parser::ForRangeInit*)
+ 469
18 clang           0x000000000090e15d
clang::Parser::ParseDeclaration(llvm::SmallVector<clang::Stmt*, 32u>&, unsigned
int, clang::SourceLocation&, clang::Parser::ParsedAttributesWithRange&) + 637
19 clang           0x0000000000955d71
clang::Parser::ParseStatementOrDeclarationAfterAttributes(llvm::SmallVector<clang::Stmt*,
32u>&, bool, clang::SourceLocation*, clang::Parser::ParsedAttributesWithRange&)
+ 2161
20 clang           0x0000000000955490
clang::Parser::ParseStatementOrDeclaration(llvm::SmallVector<clang::Stmt*,
32u>&, bool, clang::SourceLocation*) + 144
21 clang           0x000000000095b7b1
clang::Parser::ParseCompoundStatementBody(bool) + 1665
22 clang           0x000000000095e5c0
clang::Parser::ParseFunctionStatementBody(clang::Decl*,
clang::Parser::ParseScope&) + 176
23 clang           0x0000000000902bbc
clang::Parser::ParseFunctionDefinition(clang::ParsingDeclarator&,
clang::Parser::ParsedTemplateInfo const&, clang::Parser::LateParsedAttrList*) +
1932
24 clang           0x0000000000911316
clang::Parser::ParseDeclGroup(clang::ParsingDeclSpec&, unsigned int, bool,
clang::SourceLocation*, clang::Parser::ForRangeInit*) + 1302
25 clang           0x000000000090233b
clang::Parser::ParseDeclOrFunctionDefInternal(clang::Parser::ParsedAttributesWithRange&,
clang::ParsingDeclSpec&, clang::AccessSpecifier) + 587
26 clang           0x0000000000901ef0
clang::Parser::ParseDeclarationOrFunctionDefinition(clang::Parser::ParsedAttributesWithRange&,
clang::ParsingDeclSpec*, clang::AccessSpecifier) + 368
27 clang           0x0000000000901645
clang::Parser::ParseExternalDeclaration(clang::Parser::ParsedAttributesWithRange&,
clang::ParsingDeclSpec*) + 2245
28 clang           0x0000000000900d00
clang::Parser::ParseTopLevelDecl(clang::OpaquePtr<clang::DeclGroupRef>&) + 304
29 clang           0x00000000008fdf56 clang::ParseAST(clang::Sema&, bool, bool)
+ 454
30 clang           0x00000000007e4699 clang::CodeGenAction::ExecuteAction() + 73
31 clang           0x0000000000692b37 clang::FrontendAction::Execute() + 87
32 clang           0x000000000067343d
clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) + 797
33 clang           0x000000000065da2f
clang::ExecuteCompilerInvocation(clang::CompilerInstance*) + 3055
34 clang           0x0000000000655212 cc1_main(char const**, char const**, char
const*, void*) + 674
35 clang           0x000000000065b200 main + 6640
36 libc.so.6       0x00007f425c4ff455 __libc_start_main + 245
37 clang           0x0000000000654ea9
Stack dump:
0.  Program arguments: /work/amd/amd_tools/llvm/bin/clang -cc1 -triple x86_64-
unknown-linux-gnu -emit-obj -disable-free -disable-llvm-verifier -main-file-
name Converter.cpp -mrelocation-model pic -pic-level 2 -fmath-errno -masm-
verbose -mconstructor-aliases -munwind-tables -fuse-init-array -target-cpu x86-
64 -target-linker-version 2.20.1 -momit-leaf-frame-pointer -g -D
_LARGEFILE_SOURCE -D _FILE_OFFSET_BITS=64 -D NDEBUG -D QT_SQL_LIB -D QT_GUI_LIB
-D QT_SVG_LIB -D QT_NETWORK_LIB -D QT_SCRIPT_LIB -D QT_CORE_LIB -D
QT_OPENGL_LIB -O3 -Wall -fdeprecated-macro -ferror-limit 19 -fmessage-length 0 -
funroll-loops -mstackrealign -fobjc-runtime=gcc -fobjc-default-synthesize-
properties -fcxx-exceptions -fexceptions -fdiagnostics-show-option -backend-
option -vectorize-loops -x c++ Converter-ZxwmZJ.cpp
1.  tool/utils/generate_2d_coords/Converter.cpp:46:100: current parser token ';'
2.  tool/utils/generate_2d_coords/Converter.cpp:42:99: parsing function body
'createCoords'
3.  tool/utils/generate_2d_coords/Converter.cpp:42:99: in compound statement
('{}')
Converter-ZxwmZJ.sh: line 1: 18784 Segmentation fault
/work/amd/amd_tools/llvm/bin/clang -cc1 -triple x86_64-unknown-linux-gnu -emit-
obj -disable-free -disable-llvm-verifier -main-file-name Converter.cpp -
mrelocation-model pic -pic-level 2 -fmath-errno -masm-verbose -mconstructor-
aliases -munwind-tables -fuse-init-array -target-cpu x86-64 -target-linker-
version 2.20.1 -momit-leaf-frame-pointer -g -D "_LARGEFILE_SOURCE" -D
"_FILE_OFFSET_BITS=64" -D "NDEBUG" -D "QT_SQL_LIB" -D "QT_GUI_LIB" -D
"QT_SVG_LIB" -D "QT_NETWORK_LIB" -D "QT_SCRIPT_LIB" -D "QT_CORE_LIB" -D
"QT_OPENGL_LIB" -O3 -Wall -fdeprecated-macro -ferror-limit 19 -fmessage-length
0 -funroll-loops -mstackrealign -fobjc-runtime=gcc -fobjc-default-synthesize-
properties -fcxx-exceptions -fexceptions -fdiagnostics-show-option -backend-
option -vectorize-loops -x c++ Converter-ZxwmZJ.cpp
Quuxplusone commented 11 years ago

Attached Converter.7z (927758 bytes, application/x-7z-compressed): failing c++ source and sh file

Quuxplusone commented 11 years ago
Reduced test case:

class Atom;

template <typename T> class allocator;
template <typename T, typename A> class vector;

typedef vector<const Atom *, allocator<const Atom *> > AtomVector;

template <typename T, typename A = allocator<const Atom *> > class vector {};

void foo() {
  vector<Atom *> v;
  AtomVector v2(v);
}
Quuxplusone commented 11 years ago

r192202 fixes the crash.