[PATCH] D64671: [clang-tidy] New check: misc-init-local-variables
Aaron Ballman via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Wed Sep 4 15:09:40 PDT 2019
aaron.ballman added inline comments.
================
Comment at: clang-tools-extra/clang-tidy/cppcoreguidelines/InitVariablesCheck.cpp:76
+ else if (TypePtr->isFloatingType()) {
+ InitializationString = " = NAN";
+ AddMathInclude = true;
----------------
jpakkane wrote:
> aaron.ballman wrote:
> > In C++11 mode, I think this should recommend `std::numeric_limits<type>::quiet_NaN()` if possible, from `<limits>` rather than `<math.h>`.
> As a stylistic point I would disagree with this. In this particular case the "C++ way" looks very verbose and confusing. For a single variable this is not a huge problem, but it gets very ugly when you have something like this (which is common in real world code bases):
>
>
> ```
> double d1, d2, d3, d4, d5, d6, d7;
> ```
>
> This just explodes and is very ugly and unpleasant to read when every one of these gets the `std::numeric_limits` template value. I would recommend using plain `NAN` for terseness and readability, but can update the PR if the template form is deemed the better choice.
Let's go with `NAN` for now. We can always add an option letting the user pick which style to replace with later.
================
Comment at: clang-tools-extra/clang-tidy/cppcoreguidelines/InitVariablesCheck.cpp:66
+ // not come from a macro expansion.
+ if (MatchedDecl->getEndLoc().isMacroID()) {
+ return;
----------------
Elide braces.
================
Comment at: clang-tools-extra/docs/clang-tidy/checks/cppcoreguidelines-init-variables.rst:33
+ char *txt = nullptr;
+ double d = (0.0/0.0);
+
----------------
This looks incorrect.
================
Comment at: clang-tools-extra/test/clang-tidy/cppcoreguidelines-init-variables.cpp:3
+
+#define DO_NOTHING(x) ((void)x)
+
----------------
You can drop this and its uses, we don't care about warnings produced by Clang about the variables not being used.
================
Comment at: clang-tools-extra/test/clang-tidy/cppcoreguidelines-init-variables.cpp:36
+void init_unit_tests() {
+ int x;
+ // CHECK-MESSAGES: :[[@LINE-1]]:7: warning: variable 'x' is not initialized [cppcoreguidelines-init-variables]
----------------
I'd like to see a test using a local static (which should not diagnose, as it's zero-initialized by default) and a local extern (which should not diagnose because it cannot have an initializer).
================
Comment at: clang-tools-extra/test/clang-tidy/cppcoreguidelines-init-variables.cpp:55
+ // CHECK-FIXES: {{^}} int y0 = 0, y1 = 1, y2 = 0;{{$}}
+ int hasval = 42;
+
----------------
I'd like to see some tests for other initialization forms as well:
```
int braces{42};
int parens(42);
```
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D64671/new/
https://reviews.llvm.org/D64671
More information about the cfe-commits
mailing list