Added fixit notes for -Wfinal-dtor-non-final-class
llvm-svn: 370737
This commit is contained in:
parent
25d5b54542
commit
c50da3d052
|
@ -6241,10 +6241,14 @@ void Sema::CheckCompletedCXXClass(CXXRecordDecl *Record) {
|
|||
if (const CXXDestructorDecl *dtor = Record->getDestructor()) {
|
||||
if (const FinalAttr *FA = dtor->getAttr<FinalAttr>()) {
|
||||
Diag(FA->getLocation(), diag::warn_final_dtor_non_final_class)
|
||||
<< FA->isSpelledAsSealed();
|
||||
Diag(Record->getLocation(), diag::note_final_dtor_non_final_class_silence)
|
||||
<< Context.getRecordType(Record)
|
||||
<< FA->isSpelledAsSealed();
|
||||
<< FA->isSpelledAsSealed()
|
||||
<< FixItHint::CreateRemoval(FA->getLocation())
|
||||
<< FixItHint::CreateInsertion(
|
||||
getLocForEndOfToken(Record->getLocation()),
|
||||
(FA->isSpelledAsSealed() ? " sealed" : " final"));
|
||||
Diag(Record->getLocation(),
|
||||
diag::note_final_dtor_non_final_class_silence)
|
||||
<< Context.getRecordType(Record) << FA->isSpelledAsSealed();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,11 +1,14 @@
|
|||
// RUN: %clang_cc1 -fsyntax-only -std=c++11 -verify %s -Wfinal-dtor-non-final-class
|
||||
// RUN: %clang_cc1 -fsyntax-only -std=c++11 %s -Wfinal-dtor-non-final-class -fdiagnostics-parseable-fixits 2>&1 | FileCheck %s
|
||||
|
||||
class A {
|
||||
~A();
|
||||
};
|
||||
|
||||
class B { // expected-note {{mark 'B' as 'final' to silence this warning}}
|
||||
// CHECK: fix-it:"{{.*}}":{[[@LINE-1]]:8-[[@LINE-1]]:8}:" final"
|
||||
virtual ~B() final; // expected-warning {{class with destructor marked 'final' cannot be inherited from}}
|
||||
// CHECK: fix-it:"{{.*}}":{[[@LINE-1]]:18-[[@LINE-1]]:23}:""
|
||||
};
|
||||
|
||||
class C final {
|
||||
|
|
Loading…
Reference in New Issue