forked from OSchip/llvm-project
[clang-tidy] Improve diagnostic message for misc-definitions-in-header.
Summary: Users might get confused easily when they see the check's message on full template function speciliations. Add a note to the output message, which mentions these kind of function specializations are treated as regular functions. Reviewers: alexfh Reviewed By: alexfh Subscribers: JDevlieghere, cfe-commits Differential Revision: https://reviews.llvm.org/D29928 llvm-svn: 295048
This commit is contained in:
parent
810b34ab8c
commit
be2588fa7f
|
@ -122,10 +122,12 @@ void DefinitionsInHeadersCheck::check(const MatchFinder::MatchResult &Result) {
|
|||
}
|
||||
}
|
||||
|
||||
bool is_full_spec = FD->getTemplateSpecializationKind() != TSK_Undeclared;
|
||||
diag(FD->getLocation(),
|
||||
"function %0 defined in a header file; "
|
||||
"function definitions in header files can lead to ODR violations")
|
||||
<< FD << FixItHint::CreateInsertion(
|
||||
"%select{function|full function template specialization}0 %1 defined "
|
||||
"in a header file; function definitions in header files can lead to "
|
||||
"ODR violations")
|
||||
<< is_full_spec << FD << FixItHint::CreateInsertion(
|
||||
FD->getReturnTypeSourceRange().getBegin(), "inline ");
|
||||
} else if (const auto *VD = dyn_cast<VarDecl>(ND)) {
|
||||
// Static data members of a class template are allowed.
|
||||
|
|
|
@ -28,7 +28,7 @@ void CA::f2() { }
|
|||
|
||||
template <>
|
||||
int CA::f3() {
|
||||
// CHECK-MESSAGES: :[[@LINE-1]]:9: warning: function 'f3<int>' defined in a header file;
|
||||
// CHECK-MESSAGES: :[[@LINE-1]]:9: warning: full function template specialization 'f3<int>' defined in a header file;
|
||||
// CHECK-FIXES: inline int CA::f3() {
|
||||
int a = 1;
|
||||
return a;
|
||||
|
@ -92,7 +92,7 @@ T f3() {
|
|||
|
||||
template <>
|
||||
int f3() {
|
||||
// CHECK-MESSAGES: :[[@LINE-1]]:5: warning: function 'f3<int>' defined in a header file;
|
||||
// CHECK-MESSAGES: :[[@LINE-1]]:5: warning: full function template specialization 'f3<int>' defined in a header file;
|
||||
// CHECK-FIXES: inline int f3() {
|
||||
int a = 1;
|
||||
return a;
|
||||
|
|
Loading…
Reference in New Issue