[llvm-bugs] [Bug 38671] New: "destructor cannot be declared as a template" leads to segfault in Sema::LookupSpecialMember
    via llvm-bugs 
    llvm-bugs at lists.llvm.org
       
    Wed Aug 22 10:27:37 PDT 2018
    
    
  
https://bugs.llvm.org/show_bug.cgi?id=38671
            Bug ID: 38671
           Summary: "destructor cannot be declared as a template" leads to
                    segfault in Sema::LookupSpecialMember
           Product: clang
           Version: trunk
          Hardware: PC
                OS: All
            Status: NEW
          Severity: enhancement
          Priority: P
         Component: C++
          Assignee: unassignedclangbugs at nondot.org
          Reporter: arthur.j.odwyer at gmail.com
                CC: dgregor at apple.com, llvm-bugs at lists.llvm.org
cat >test.cc <<EOF
struct S {
    template<class> ~S();
};
struct T : S {
    ~T() = default;
};
EOF
clang++ -std=c++11 -c test.cc
segfaults.
Partial stack trace:
4  libsystem_platform.dylib 0x000000000a876600 _sigtramp + 2173608176
5  clang-8                  0x000000010992decd
clang::Sema::CheckCompletedCXXClass(clang::CXXRecordDecl*) + 10061
6  clang-8                  0x0000000109934e91
clang::Sema::ActOnFinishCXXMemberSpecification(clang::Scope*,
clang::SourceLocation, clang::Decl*, clang::SourceLocation,
clang::SourceLocation, clang::ParsedAttributesView const&) + 465
7  clang-8                  0x000000010953692c
clang::Parser::ParseCXXMemberSpecification(clang::SourceLocation,
clang::SourceLocation, clang::Parser::ParsedAttributesWithRange&, unsigned int,
clang::Decl*) + 1980
What's happening here is that when we emit err_destructor_template, we produce
a CXXRecordDecl with no destructor (because the destructor the user wrote was
invalid). Therefore, in Sema::LookupSpecialMember, `DD = RD->getDestructor()`
is nullptr; and then the call to `DD->isDeleted()` blows up.
I'm not sure what the appropriate fix is, but I think it would involve doing a
better fixup to `RD->getDestructor()` all the way back where we emit
err_destructor_template.
-- 
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/20180822/70dc7ae4/attachment.html>
    
    
More information about the llvm-bugs
mailing list