[clang-tools-extra] r270197 - [clang-tidy] Add more descriptive comments and examples in misc-definitions-in-headers check.
Haojian Wu via cfe-commits
cfe-commits at lists.llvm.org
Fri May 20 02:38:26 PDT 2016
Author: hokein
Date: Fri May 20 04:38:25 2016
New Revision: 270197
URL: http://llvm.org/viewvc/llvm-project?rev=270197&view=rev
Log:
[clang-tidy] Add more descriptive comments and examples in misc-definitions-in-headers check.
Reviewers: alexfh
Subscribers: cfe-commits
Differential Revision: http://reviews.llvm.org/D20463
Modified:
clang-tools-extra/trunk/docs/clang-tidy/checks/misc-definitions-in-headers.rst
Modified: clang-tools-extra/trunk/docs/clang-tidy/checks/misc-definitions-in-headers.rst
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/docs/clang-tidy/checks/misc-definitions-in-headers.rst?rev=270197&r1=270196&r2=270197&view=diff
==============================================================================
--- clang-tools-extra/trunk/docs/clang-tidy/checks/misc-definitions-in-headers.rst (original)
+++ clang-tools-extra/trunk/docs/clang-tidy/checks/misc-definitions-in-headers.rst Fri May 20 04:38:25 2016
@@ -4,38 +4,71 @@ misc-definitions-in-headers
===========================
Finds non-extern non-inline function and variable definitions in header files,
-which can lead to potential ODR violations.
+which can lead to potential ODR violations in case these headers are included
+from multiple translation units.
.. code:: c++
// Foo.h
- int a = 1; // Warning.
+ int a = 1; // Warning: variable definition.
extern int d; // OK: extern variable.
namespace N {
- int e = 2; // Warning.
+ int e = 2; // Warning: variable definition.
}
- // Internal linkage variable definitions are ignored for now.
+ // Warning: variable definition.
+ const char* str = "foo";
+
+ // OK: internal linkage variable definitions are ignored for now.
// Although these might also cause ODR violations, we can be less certain and
// should try to keep the false-positive rate down.
static int b = 1;
const int c = 1;
+ const char* const str2 = "foo";
- // Warning.
+ // Warning: function definition.
int g() {
return 1;
}
- // OK: inline function definition.
+ // OK: inline function definition is allowed to be defined multiple times.
inline int e() {
return 1;
}
class A {
public:
- int f1() { return 1; } // OK: inline member function definition.
+ int f1() { return 1; } // OK: implicitly inline member function definition is allowed.
int f2();
+ static int d;
+ };
+
+ // Warning: not an inline member function definition.
+ int A::f2() { return 1; }
+
+ // OK: class static data member declaration is allowed.
+ int A::d = 1;
+
+ // OK: function template is allowed.
+ template<typename T>
+ T f3() {
+ T a = 1;
+ return a;
+ }
+
+ // Warning: full specialization of a function template is not allowed.
+ template <>
+ int f3() {
+ int a = 1;
+ return a;
+ }
+
+ template <typename T>
+ struct B {
+ void f1();
};
- int A::f2() { return 1; } // Warning.
+ // OK: member function definition of a class template is allowed.
+ template <typename T>
+ void B<T>::f1() {}
More information about the cfe-commits
mailing list