Skip to content

Commit

Permalink
[clang-tidy] Improve diagnostic message for misc-definitions-in-header.
Browse files Browse the repository at this point in the history
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
  • Loading branch information
hokein committed Feb 14, 2017
1 parent 810b34a commit be2588f
Show file tree
Hide file tree
Showing 2 changed files with 7 additions and 5 deletions.
Expand Up @@ -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.
Expand Down
Expand Up @@ -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;
Expand Down Expand Up @@ -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;
Expand Down

0 comments on commit be2588f

Please sign in to comment.