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. |