[PATCH] D74468: [clang-tidy] No misc-definitions-in-headers warning on C++14 variable templates.
This revision was automatically updated to reflect the committed changes. Closed by commit rGa45ca670f5c4: [clang-tidy] No misc-definitions-in-headers warning on C++14 variable templates. (authored by hokein). Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D74468/new/ https://reviews.llvm.org/D74468 Files: clang-tools-extra/clang-tidy/misc/DefinitionsInHeadersCheck.cpp clang-tools-extra/docs/clang-tidy/checks/misc-definitions-in-headers.rst clang-tools-extra/test/clang-tidy/checkers/misc-definitions-in-headers-1z.hpp Index: clang-tools-extra/test/clang-tidy/checkers/misc-definitions-in-headers-1z.hpp === --- clang-tools-extra/test/clang-tidy/checkers/misc-definitions-in-headers-1z.hpp +++ clang-tools-extra/test/clang-tidy/checkers/misc-definitions-in-headers-1z.hpp @@ -1,4 +1,4 @@ -// RUN: %check_clang_tidy %s misc-definitions-in-headers %t -- -- -std=c++1z +// RUN: %check_clang_tidy -std=c++17-or-later %s misc-definitions-in-headers %t class CE { constexpr static int i = 5; // OK: inline variable definition. @@ -8,3 +8,7 @@ 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] + +// OK: C++14 variable template. +template +constexpr T pi = T(3.1415926L); Index: clang-tools-extra/docs/clang-tidy/checks/misc-definitions-in-headers.rst === --- clang-tools-extra/docs/clang-tidy/checks/misc-definitions-in-headers.rst +++ clang-tools-extra/docs/clang-tidy/checks/misc-definitions-in-headers.rst @@ -83,6 +83,10 @@ constexpr int f10() { return 0; } // OK: constexpr function implies inline. + // OK: C++14 variable templates are inline. + template + constexpr T pi = T(3.1415926L); + Options --- Index: clang-tools-extra/clang-tidy/misc/DefinitionsInHeadersCheck.cpp === --- clang-tools-extra/clang-tidy/misc/DefinitionsInHeadersCheck.cpp +++ clang-tools-extra/clang-tidy/misc/DefinitionsInHeadersCheck.cpp @@ -134,6 +134,9 @@ DiagnosticIDs::Note) << FixItHint::CreateInsertion(FD->getInnerLocStart(), "inline "); } else if (const auto *VD = dyn_cast(ND)) { +// C++14 variable templates are allowed. +if (VD->getDescribedVarTemplate()) + return; // Static data members of a class template are allowed. if (VD->getDeclContext()->isDependentContext() && VD->isStaticDataMember()) return; Index: clang-tools-extra/test/clang-tidy/checkers/misc-definitions-in-headers-1z.hpp === --- clang-tools-extra/test/clang-tidy/checkers/misc-definitions-in-headers-1z.hpp +++ clang-tools-extra/test/clang-tidy/checkers/misc-definitions-in-headers-1z.hpp @@ -1,4 +1,4 @@ -// RUN: %check_clang_tidy %s misc-definitions-in-headers %t -- -- -std=c++1z +// RUN: %check_clang_tidy -std=c++17-or-later %s misc-definitions-in-headers %t class CE { constexpr static int i = 5; // OK: inline variable definition. @@ -8,3 +8,7 @@ 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] + +// OK: C++14 variable template. +template +constexpr T pi = T(3.1415926L); Index: clang-tools-extra/docs/clang-tidy/checks/misc-definitions-in-headers.rst === --- clang-tools-extra/docs/clang-tidy/checks/misc-definitions-in-headers.rst +++ clang-tools-extra/docs/clang-tidy/checks/misc-definitions-in-headers.rst @@ -83,6 +83,10 @@ constexpr int f10() { return 0; } // OK: constexpr function implies inline. + // OK: C++14 variable templates are inline. + template + constexpr T pi = T(3.1415926L); + Options --- Index: clang-tools-extra/clang-tidy/misc/DefinitionsInHeadersCheck.cpp === --- clang-tools-extra/clang-tidy/misc/DefinitionsInHeadersCheck.cpp +++ clang-tools-extra/clang-tidy/misc/DefinitionsInHeadersCheck.cpp @@ -134,6 +134,9 @@ DiagnosticIDs::Note) << FixItHint::CreateInsertion(FD->getInnerLocStart(), "inline "); } else if (const auto *VD = dyn_cast(ND)) { +// C++14 variable templates are allowed. +if (VD->getDescribedVarTemplate()) + return; // Static data members of a class template are allowed. if (VD->getDeclContext()->isDependentContext() && VD->isStaticDataMember()) return; ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D74468: [clang-tidy] No misc-definitions-in-headers warning on C++14 variable templates.
hokein updated this revision to Diff 244184. hokein marked 2 inline comments as done. hokein added a comment. Address review comments. Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D74468/new/ https://reviews.llvm.org/D74468 Files: clang-tools-extra/clang-tidy/misc/DefinitionsInHeadersCheck.cpp clang-tools-extra/docs/clang-tidy/checks/misc-definitions-in-headers.rst clang-tools-extra/test/clang-tidy/checkers/misc-definitions-in-headers-1z.hpp Index: clang-tools-extra/test/clang-tidy/checkers/misc-definitions-in-headers-1z.hpp === --- clang-tools-extra/test/clang-tidy/checkers/misc-definitions-in-headers-1z.hpp +++ clang-tools-extra/test/clang-tidy/checkers/misc-definitions-in-headers-1z.hpp @@ -1,4 +1,4 @@ -// RUN: %check_clang_tidy %s misc-definitions-in-headers %t -- -- -std=c++1z +// RUN: %check_clang_tidy -std=c++17-or-later %s misc-definitions-in-headers %t class CE { constexpr static int i = 5; // OK: inline variable definition. @@ -8,3 +8,7 @@ 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] + +// OK: C++14 variable template. +template +constexpr T pi = T(3.1415926L); Index: clang-tools-extra/docs/clang-tidy/checks/misc-definitions-in-headers.rst === --- clang-tools-extra/docs/clang-tidy/checks/misc-definitions-in-headers.rst +++ clang-tools-extra/docs/clang-tidy/checks/misc-definitions-in-headers.rst @@ -83,6 +83,10 @@ constexpr int f10() { return 0; } // OK: constexpr function implies inline. + // OK: C++14 variable templates are inline. + template + constexpr T pi = T(3.1415926L); + Options --- Index: clang-tools-extra/clang-tidy/misc/DefinitionsInHeadersCheck.cpp === --- clang-tools-extra/clang-tidy/misc/DefinitionsInHeadersCheck.cpp +++ clang-tools-extra/clang-tidy/misc/DefinitionsInHeadersCheck.cpp @@ -134,6 +134,9 @@ DiagnosticIDs::Note) << FixItHint::CreateInsertion(FD->getInnerLocStart(), "inline "); } else if (const auto *VD = dyn_cast(ND)) { +// C++14 variable templates are allowed. +if (VD->getDescribedVarTemplate()) + return; // Static data members of a class template are allowed. if (VD->getDeclContext()->isDependentContext() && VD->isStaticDataMember()) return; Index: clang-tools-extra/test/clang-tidy/checkers/misc-definitions-in-headers-1z.hpp === --- clang-tools-extra/test/clang-tidy/checkers/misc-definitions-in-headers-1z.hpp +++ clang-tools-extra/test/clang-tidy/checkers/misc-definitions-in-headers-1z.hpp @@ -1,4 +1,4 @@ -// RUN: %check_clang_tidy %s misc-definitions-in-headers %t -- -- -std=c++1z +// RUN: %check_clang_tidy -std=c++17-or-later %s misc-definitions-in-headers %t class CE { constexpr static int i = 5; // OK: inline variable definition. @@ -8,3 +8,7 @@ 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] + +// OK: C++14 variable template. +template +constexpr T pi = T(3.1415926L); Index: clang-tools-extra/docs/clang-tidy/checks/misc-definitions-in-headers.rst === --- clang-tools-extra/docs/clang-tidy/checks/misc-definitions-in-headers.rst +++ clang-tools-extra/docs/clang-tidy/checks/misc-definitions-in-headers.rst @@ -83,6 +83,10 @@ constexpr int f10() { return 0; } // OK: constexpr function implies inline. + // OK: C++14 variable templates are inline. + template + constexpr T pi = T(3.1415926L); + Options --- Index: clang-tools-extra/clang-tidy/misc/DefinitionsInHeadersCheck.cpp === --- clang-tools-extra/clang-tidy/misc/DefinitionsInHeadersCheck.cpp +++ clang-tools-extra/clang-tidy/misc/DefinitionsInHeadersCheck.cpp @@ -134,6 +134,9 @@ DiagnosticIDs::Note) << FixItHint::CreateInsertion(FD->getInnerLocStart(), "inline "); } else if (const auto *VD = dyn_cast(ND)) { +// C++14 variable templates are allowed. +if (VD->getDescribedVarTemplate()) + return; // Static data members of a class template are allowed. if (VD->getDeclContext()->isDependentContext() && VD->isStaticDataMember()) return; ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D74468: [clang-tidy] No misc-definitions-in-headers warning on C++14 variable templates.
hokein added inline comments. Comment at: clang-tools-extra/test/clang-tidy/checkers/misc-definitions-in-headers-1z.hpp:14 +template +constexpr T pi = T(3.1415926L); gribozavr2 wrote: > I would prefer if you could make the test compatible with all language modes > after C++11. You can do it by wrapping the variable template in `#if`s on the > `__cplusplus` macro that contains the language version. I'd prefer keep it as it-is. using `__cplusplus` seems a bit hacky to me, and I think it only works for non-CHECK-MESSAGES cases. Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D74468/new/ https://reviews.llvm.org/D74468 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D74468: [clang-tidy] No misc-definitions-in-headers warning on C++14 variable templates.
gribozavr2 accepted this revision. gribozavr2 added inline comments. This revision is now accepted and ready to land. Comment at: clang-tools-extra/docs/clang-tidy/checks/misc-definitions-in-headers.rst:86 + // OK: C++14 variable template is allowed. + template s/is allowed/are inline/ Comment at: clang-tools-extra/test/clang-tidy/checkers/misc-definitions-in-headers-1z.hpp:14 +template +constexpr T pi = T(3.1415926L); I would prefer if you could make the test compatible with all language modes after C++11. You can do it by wrapping the variable template in `#if`s on the `__cplusplus` macro that contains the language version. Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D74468/new/ https://reviews.llvm.org/D74468 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D74468: [clang-tidy] No misc-definitions-in-headers warning on C++14 variable templates.
hokein created this revision. hokein added a reviewer: gribozavr2. Herald added a subscriber: xazax.hun. Herald added a project: clang. Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D74468 Files: clang-tools-extra/clang-tidy/misc/DefinitionsInHeadersCheck.cpp clang-tools-extra/docs/clang-tidy/checks/misc-definitions-in-headers.rst clang-tools-extra/test/clang-tidy/checkers/misc-definitions-in-headers-1z.hpp Index: clang-tools-extra/test/clang-tidy/checkers/misc-definitions-in-headers-1z.hpp === --- clang-tools-extra/test/clang-tidy/checkers/misc-definitions-in-headers-1z.hpp +++ clang-tools-extra/test/clang-tidy/checkers/misc-definitions-in-headers-1z.hpp @@ -1,4 +1,4 @@ -// RUN: %check_clang_tidy %s misc-definitions-in-headers %t -- -- -std=c++1z +// RUN: %check_clang_tidy -std=c++17-or-later %s misc-definitions-in-headers %t class CE { constexpr static int i = 5; // OK: inline variable definition. @@ -8,3 +8,7 @@ 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] + +// OK: C++14 variable template. +template +constexpr T pi = T(3.1415926L); Index: clang-tools-extra/docs/clang-tidy/checks/misc-definitions-in-headers.rst === --- clang-tools-extra/docs/clang-tidy/checks/misc-definitions-in-headers.rst +++ clang-tools-extra/docs/clang-tidy/checks/misc-definitions-in-headers.rst @@ -83,6 +83,10 @@ constexpr int f10() { return 0; } // OK: constexpr function implies inline. + // OK: C++14 variable template is allowed. + template + constexpr T pi = T(3.1415926L); + Options --- Index: clang-tools-extra/clang-tidy/misc/DefinitionsInHeadersCheck.cpp === --- clang-tools-extra/clang-tidy/misc/DefinitionsInHeadersCheck.cpp +++ clang-tools-extra/clang-tidy/misc/DefinitionsInHeadersCheck.cpp @@ -134,6 +134,9 @@ DiagnosticIDs::Note) << FixItHint::CreateInsertion(FD->getInnerLocStart(), "inline "); } else if (const auto *VD = dyn_cast(ND)) { +// C++14 variable templates are allowed. +if (VD->getDescribedVarTemplate()) + return; // Static data members of a class template are allowed. if (VD->getDeclContext()->isDependentContext() && VD->isStaticDataMember()) return; Index: clang-tools-extra/test/clang-tidy/checkers/misc-definitions-in-headers-1z.hpp === --- clang-tools-extra/test/clang-tidy/checkers/misc-definitions-in-headers-1z.hpp +++ clang-tools-extra/test/clang-tidy/checkers/misc-definitions-in-headers-1z.hpp @@ -1,4 +1,4 @@ -// RUN: %check_clang_tidy %s misc-definitions-in-headers %t -- -- -std=c++1z +// RUN: %check_clang_tidy -std=c++17-or-later %s misc-definitions-in-headers %t class CE { constexpr static int i = 5; // OK: inline variable definition. @@ -8,3 +8,7 @@ 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] + +// OK: C++14 variable template. +template +constexpr T pi = T(3.1415926L); Index: clang-tools-extra/docs/clang-tidy/checks/misc-definitions-in-headers.rst === --- clang-tools-extra/docs/clang-tidy/checks/misc-definitions-in-headers.rst +++ clang-tools-extra/docs/clang-tidy/checks/misc-definitions-in-headers.rst @@ -83,6 +83,10 @@ constexpr int f10() { return 0; } // OK: constexpr function implies inline. + // OK: C++14 variable template is allowed. + template + constexpr T pi = T(3.1415926L); + Options --- Index: clang-tools-extra/clang-tidy/misc/DefinitionsInHeadersCheck.cpp === --- clang-tools-extra/clang-tidy/misc/DefinitionsInHeadersCheck.cpp +++ clang-tools-extra/clang-tidy/misc/DefinitionsInHeadersCheck.cpp @@ -134,6 +134,9 @@ DiagnosticIDs::Note) << FixItHint::CreateInsertion(FD->getInnerLocStart(), "inline "); } else if (const auto *VD = dyn_cast(ND)) { +// C++14 variable templates are allowed. +if (VD->getDescribedVarTemplate()) + return; // Static data members of a class template are allowed. if (VD->getDeclContext()->isDependentContext() && VD->isStaticDataMember()) return; ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits