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 CXXDestructorDecl *dtor = Record->getDestructor()) {
|
||||||
if (const FinalAttr *FA = dtor->getAttr<FinalAttr>()) {
|
if (const FinalAttr *FA = dtor->getAttr<FinalAttr>()) {
|
||||||
Diag(FA->getLocation(), diag::warn_final_dtor_non_final_class)
|
Diag(FA->getLocation(), diag::warn_final_dtor_non_final_class)
|
||||||
<< FA->isSpelledAsSealed();
|
<< FA->isSpelledAsSealed()
|
||||||
Diag(Record->getLocation(), diag::note_final_dtor_non_final_class_silence)
|
<< FixItHint::CreateRemoval(FA->getLocation())
|
||||||
<< Context.getRecordType(Record)
|
<< FixItHint::CreateInsertion(
|
||||||
<< FA->isSpelledAsSealed();
|
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 -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 {
|
class A {
|
||||||
~A();
|
~A();
|
||||||
};
|
};
|
||||||
|
|
||||||
class B { // expected-note {{mark 'B' as 'final' to silence this warning}}
|
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}}
|
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 {
|
class C final {
|
||||||
|
|
Loading…
Reference in New Issue