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
- Repository
- rL LLVM
Event Timeline
| clang-tidy/cppcoreguidelines/ProTypeMemberInitCheck.cpp | ||
|---|---|---|
| 284 ↗ | (On Diff #55441) | 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 ↗ | (On Diff #55441) | I don't think it ever diagnosed on the dynamic storage duration, since it doesn't match cxxNewExpr ;) |
| clang-tidy/cppcoreguidelines/ProTypeMemberInitCheck.cpp | ||
|---|---|---|
| 284 ↗ | (On Diff #55441) | 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 ↗ | (On Diff #55441) | Shouldn't it have diagnosed: struct s {
int *i;
s() {}
};? |
| clang-tidy/cppcoreguidelines/ProTypeMemberInitCheck.cpp | |||
|---|---|---|---|
| 284 ↗ | (On Diff #55441) | 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 ↗ | (On Diff #55441) | 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 ↗ | (On Diff #55441) | Ah, that's a very valid point. |