Variables with static storage duration are zero-initialized per
[stmt.dcl]p4 and [basic.start.init]p2.
Details
- Reviewers
aaron.ballman sbenza - Commits
- rGfabdbe4732e5: [clang-tidy] cppcoreguidelines-pro-type-member-init should not complain about…
rCTE267933: [clang-tidy] cppcoreguidelines-pro-type-member-init should not complain about…
rL267933: [clang-tidy] cppcoreguidelines-pro-type-member-init should not complain about…
Diff Detail
Event Timeline
| clang-tidy/cppcoreguidelines/ProTypeMemberInitCheck.cpp | ||
|---|---|---|
| 284 | We should add a test that this still diagnoses variables with dynamic storage duration. Alternatively, this could be unless(anyOf(hasStaticStorageDuration(), hasThreadStorageDuration())) | |
| clang-tidy/cppcoreguidelines/ProTypeMemberInitCheck.cpp | ||
|---|---|---|
| 284 | I don't think it ever diagnosed on the dynamic storage duration, since it doesn't match cxxNewExpr ;) | |
| clang-tidy/cppcoreguidelines/ProTypeMemberInitCheck.cpp | ||
|---|---|---|
| 284 | Perhaps unrelated but a new expression without the parens wouldn't value-initialize a record type with a default constructor and potentially be a problematic. Maybe we should be checking cxxNewExpr. | |
| clang-tidy/cppcoreguidelines/ProTypeMemberInitCheck.cpp | ||
|---|---|---|
| 284 | Shouldn't it have diagnosed: struct s {
int *i;
s() {}
};? | |
| clang-tidy/cppcoreguidelines/ProTypeMemberInitCheck.cpp | |||
|---|---|---|---|
| 284 | This code does not introduce an object with dynamic storage duration. Variable i is just a member variable, and the fact that it's a pointer doesn't change much. The check used to warn in this case and continues to do so: /tmp/q.cc:3:3: warning: constructor does not initialize these fields: i [cppcoreguidelines-pro-type-member-init]
s() {}
^
: i()To resolve the confusion: [basic.stc]p2
| ||
| 284 | Michael, we should be checking cxxNewExpr, but I would leave this to you or someone else. In this patch I'm just trying to make the check less noisy. | ||
| clang-tidy/cppcoreguidelines/ProTypeMemberInitCheck.cpp | ||
|---|---|---|
| 284 | Ah, that's a very valid point. | |
We should add a test that this still diagnoses variables with dynamic storage duration. Alternatively, this could be unless(anyOf(hasStaticStorageDuration(), hasThreadStorageDuration()))