[clang-tidy] Enable inline variable definitions in headers

Differential Revision: https://reviews.llvm.org/D34449

llvm-svn: 306538
This commit is contained in:
Gabor Horvath 2017-06-28 12:47:35 +00:00
parent 86cf07a32e
commit 2990ac1ebd
4 changed files with 24 additions and 1 deletions

View File

@ -139,6 +139,9 @@ void DefinitionsInHeadersCheck::check(const MatchFinder::MatchResult &Result) {
// Ignore variable definition within function scope.
if (VD->hasLocalStorage() || VD->isStaticLocal())
return;
// Ignore inline variables.
if (VD->isInline())
return;
diag(VD->getLocation(),
"variable %0 defined in a header file; "

View File

@ -74,6 +74,14 @@ from multiple translation units.
template <typename T>
void B<T>::f1() {}
class CE {
constexpr static int i = 5; // OK: inline variable definition.
};
inline int i = 5; // OK: inline variable definition.
constexpr int k = 1; // OK: constexpr variable has internal linkage.
Options
-------

View File

@ -0,0 +1,10 @@
// RUN: %check_clang_tidy %s misc-definitions-in-headers %t -- -- -std=c++1z
class CE {
constexpr static int i = 5; // OK: inline variable definition.
};
inline int i = 5; // OK: inline variable definition.
int b = 1;
// CHECK-MESSAGES: :[[@LINE-1]]:5: warning: variable 'b' defined in a header file; variable definitions in header files can lead to ODR violations [misc-definitions-in-headers]

View File

@ -1,4 +1,4 @@
// RUN: %check_clang_tidy %s misc-definitions-in-headers %t
// RUN: %check_clang_tidy %s misc-definitions-in-headers %t -- -- -std=c++11
int f() {
// CHECK-MESSAGES: :[[@LINE-1]]:5: warning: function 'f' defined in a header file; function definitions in header files can lead to ODR violations [misc-definitions-in-headers]
@ -175,3 +175,5 @@ template <typename T>
int CD<T, int>::f() { // OK: partial template specialization.
return 0;
}
constexpr int k = 1; // OK: constexpr variable has internal linkage.