[llvm-bugs] [Bug 33189] New: Clang crashes on template destructor declaration

via llvm-bugs llvm-bugs at lists.llvm.org
Fri May 26 15:27:47 PDT 2017


https://bugs.llvm.org/show_bug.cgi?id=33189

            Bug ID: 33189
           Summary: Clang crashes on template destructor declaration
           Product: clang
           Version: 4.0
          Hardware: Other
                OS: Linux
            Status: NEW
          Severity: enhancement
          Priority: P
         Component: C++
          Assignee: unassignedclangbugs at nondot.org
          Reporter: kuanghe at ca.ibm.com
                CC: dgregor at apple.com, llvm-bugs at lists.llvm.org

> cat m14146.cc

class foo
 {
 template <class U>
 ~foo() { }
 };

> clang++ -c m14146.cc
m14146.c:16:2: error: destructor cannot be declared as a template
        ~foo() { }  // error - dtor is template member fn
        ^
clang-5.0: /home/kuanghe/CLANG_40/pure/llvm/include/llvm/Support/Casting.h:254:
typename llvm::cast_retty<X, Y*>::ret_type llvm::cast(Y*) [with X =
clang::CXXDestructorDecl; Y = clang::NamedDecl; typename llvm::cast_retty<X,
Y*>::ret_type = clang::CXXDestructorDecl*]: Assertion `isa<X>(Val) &&
"cast<Ty>() argument of incompatible type!"' failed.
#0 0x0000000012ecb76c llvm::sys::PrintStackTrace(llvm::raw_ostream&)
/home/kuanghe/CLANG_40/pure/llvm/lib/Support/Unix/Signals.inc:398:0
#1 0x0000000012ecb870 PrintStackTraceSignalHandler(void*)
/home/kuanghe/CLANG_40/pure/llvm/lib/Support/Unix/Signals.inc:461:0
#2 0x0000000012ec9570 llvm::sys::RunSignalHandlers()
/home/kuanghe/CLANG_40/pure/llvm/lib/Support/Signals.cpp:44:0
#3 0x0000000012ecad14 SignalHandler(int)
/home/kuanghe/CLANG_40/pure/llvm/lib/Support/Unix/Signals.inc:242:0
#4 0x00003fff8ffd0478  0x478 __GI_abort
#5 0x00003fff8ffd0478
#6 0x00003fff8ffd0478 __assert_fail_base (+0x478)
#7 0x00003fff8fa20d70 __GI___assert_fail (/lib64/libc.so.6+0x40d70)
#8 0x00003fff8fa148a4 llvm::cast_retty<clang::CXXDestructorDecl,
clang::NamedDecl*>::ret_type llvm::cast<clang::CXXDestructorDecl,
clang::NamedDecl>(clang::NamedDecl*)
/home/kuanghe/CLANG_40/pure/llvm/include/llvm/Support/Casting.h:254:0
#9 0x00003fff8fa14994 clang::CXXRecordDecl::getDestructor() const
/home/kuanghe/CLANG_40/pure/llvm/tools/clang/lib/AST/DeclCXX.cpp:1423:0
#10 0x00000000170a1878 clang::Sema::ActOnFields(clang::Scope*,
clang::SourceLocation, clang::Decl*, llvm::ArrayRef<clang::Decl*>,
clang::SourceLocation, clang::SourceLocation, clang::AttributeList*)
/home/kuanghe/CLANG_40/pure/llvm/tools/clang/lib/Sema/SemaDecl.cpp:14935:0
#11 0x0000000017097be0
clang::Sema::ActOnFinishCXXMemberSpecification(clang::Scope*,
clang::SourceLocation, clang::Decl*, clang::SourceLocation,
clang::SourceLocation, clang::AttributeList*)
/home/kuanghe/CLANG_40/pure/llvm/tools/clang/lib/Sema/SemaDeclCXX.cpp:7477:0
#12 0x0000000015959f10
clang::Parser::ParseCXXMemberSpecification(clang::SourceLocation,
clang::SourceLocation, clang::Parser::ParsedAttributesWithRange&, unsigned int,
clang::Decl*)
/home/kuanghe/CLANG_40/pure/llvm/tools/clang/lib/Parse/ParseDeclCXX.cpp:3264:0
#13 0x0000000015bc98d8
clang::Parser::ParseClassSpecifier(clang::tok::TokenKind,
clang::SourceLocation, clang::DeclSpec&, clang::Parser::ParsedTemplateInfo
const&, clang::AccessSpecifier, bool, clang::Parser::DeclSpecContext,
clang::Parser::ParsedAttributesWithRange&)
/home/kuanghe/CLANG_40/pure/llvm/tools/clang/lib/Parse/ParseDeclCXX.cpp:1909:0
#14 0x00000000153c7d3c
clang::Parser::ParseDeclarationSpecifiers(clang::DeclSpec&,
clang::Parser::ParsedTemplateInfo const&, clang::AccessSpecifier,
clang::Parser::DeclSpecContext, clang::Parser::LateParsedAttrList*)
/home/kuanghe/CLANG_40/pure/llvm/tools/clang/lib/Parse/ParseDecl.cpp:3588:0
#15 0x00000000153c2264
clang::Parser::ParseSingleDeclarationAfterTemplate(unsigned int,
clang::Parser::ParsedTemplateInfo const&, clang::ParsingDeclRAIIObject&,
clang::SourceLocation&, clang::AccessSpecifier, clang::AttributeList*)
/home/kuanghe/CLANG_40/pure/llvm/tools/clang/lib/Parse/ParseTemplate.cpp:211:0
#16 0x000000001539cbac
clang::Parser::ParseTemplateDeclarationOrSpecialization(unsigned int,
clang::SourceLocation&, clang::AccessSpecifier, clang::AttributeList*)
/home/kuanghe/CLANG_40/pure/llvm/tools/clang/lib/Parse/ParseTemplate.cpp:157:0
#17 0x000000001544dd14
clang::Parser::ParseDeclarationStartingWithTemplate(unsigned int,
clang::SourceLocation&, clang::AccessSpecifier, clang::AttributeList*)
/home/kuanghe/CLANG_40/pure/llvm/tools/clang/lib/Parse/ParseTemplate.cpp:39:0
#18 0x000000001544da78 clang::Parser::ParseDeclaration(unsigned int,
clang::SourceLocation&, clang::Parser::ParsedAttributesWithRange&)
/home/kuanghe/CLANG_40/pure/llvm/tools/clang/lib/Parse/ParseDecl.cpp:1656:0
#19 0x000000001544d56c
clang::Parser::ParseExternalDeclaration(clang::Parser::ParsedAttributesWithRange&,
clang::ParsingDeclSpec*)
/home/kuanghe/CLANG_40/pure/llvm/tools/clang/lib/Parse/Parser.cpp:775:0
#20 0x0000000015395564
clang::Parser::ParseTopLevelDecl(clang::OpaquePtr<clang::DeclGroupRef>&)
/home/kuanghe/CLANG_40/pure/llvm/tools/clang/lib/Parse/Parser.cpp:611:0
#21 0x000000001536e7d8
clang::Parser::ParseFirstTopLevelDecl(clang::OpaquePtr<clang::DeclGroupRef>&)
/home/kuanghe/CLANG_40/pure/llvm/tools/clang/lib/Parse/Parser.cpp:533:0
#22 0x000000001536d9fc clang::ParseAST(clang::Sema&, bool, bool)
/home/kuanghe/CLANG_40/pure/llvm/tools/clang/lib/Parse/ParseAST.cpp:146:0
#23 0x000000001536d55c clang::ASTFrontendAction::ExecuteAction()
/home/kuanghe/CLANG_40/pure/llvm/tools/clang/lib/Frontend/FrontendAction.cpp:939:0
#24 0x00000000153684a0 clang::CodeGenAction::ExecuteAction()
/home/kuanghe/CLANG_40/pure/llvm/tools/clang/lib/CodeGen/CodeGenAction.cpp:989:0
#25 0x0000000013ad48a8 clang::FrontendAction::Execute()
/home/kuanghe/CLANG_40/pure/llvm/tools/clang/lib/Frontend/FrontendAction.cpp:838:0
#26 0x000000001410acec
clang::CompilerInstance::ExecuteAction(clang::FrontendAction&)
/home/kuanghe/CLANG_40/pure/llvm/tools/clang/lib/Frontend/CompilerInstance.cpp:970:0
#27 0x0000000013ad4134
clang::ExecuteCompilerInvocation(clang::CompilerInstance*)
/home/kuanghe/CLANG_40/pure/llvm/tools/clang/lib/FrontendTool/ExecuteCompilerInvocation.cpp:249:0
#28 0x0000000013a50274 cc1_main(llvm::ArrayRef<char const*>, char const*,
void*)
/home/kuanghe/CLANG_40/pure/llvm/tools/clang/tools/driver/cc1_main.cpp:221:0
#29 0x0000000013c98894 ExecuteCC1Tool(llvm::ArrayRef<char const*>,
llvm::StringRef)
/home/kuanghe/CLANG_40/pure/llvm/tools/clang/tools/driver/driver.cpp:299:0
#30 0x0000000011773128 main
/home/kuanghe/CLANG_40/pure/llvm/tools/clang/tools/driver/driver.cpp:380:0
#31 0x00000000117619fc generic_start_main.isra.0
(/nfs/terran/home/kuanghe/clang_4.0_build/bin/clang-5.0+0x117619fc)
#32 0x00000000117625a8 __libc_start_main 

It seems invalid template destructor caused assertion in Clang 4.0 cast.

-- 
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/20170526/07b05ec8/attachment-0001.html>


More information about the llvm-bugs mailing list