[clang-tools-extra] [clang-tidy] The first PR our of many PRs for the "Initialized Class Members" check. (PR #65189)

via cfe-commits cfe-commits at lists.llvm.org
Thu Sep 7 11:26:31 PDT 2023


================
@@ -0,0 +1,32 @@
+.. title:: clang-tidy - google-cpp-init-class-members
+
+google-cpp-init-class-members
+=============================
+
+Checks that class members are initialized in constructors (implicitly or
+explicitly). Reports constructors or classes where class members are not
+initialized. The goal of this checker is to eliminate UUM (Use of
+Uninitialized Memory) bugs caused by uninitialized class members.
+
+This checker is different from ProTypeMemberInitCheck in that this checker
+attempts to eliminate UUMs as a bug class, at the expense of false
+positives.
----------------
adriannistor wrote:

# Examples 
>  Could you provide an example where ProTypeMemberInitCheck doesn't detect the problem, and this check does? 

The 2 cases for which this PR is written (available in the unit tests) are not found by `ProTypeMemberInitCheck`.

Specifically (I copy them from the unit test):

```
class PositiveDefaultedDefaultConstructor {
public:
  PositiveDefaultedDefaultConstructor() = default;
  // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: constructor should initialize these fields: X

private:
  int X;
};
```

and 

```
struct PositiveStruct {
  // CHECK-MESSAGES: :[[@LINE-1]]:8: warning: these fields should be initialized: X, Y
  int X;
  int Y;
};
```

Also a variation (again, copied them from the unit test)

```
class PositiveDefaultedConstructorObjectAndPrimitive {
 public:
  PositiveDefaultedConstructorObjectAndPrimitive() = default;
  // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: constructor should initialize these fields: Y

  Helper* GetHelper() { return &X; }

  void SetY(bool enabled) { Y = enabled; }

  bool IsY() { return Y; }

 private:
  Helper X;
  bool Y;
};

# Regarding adding to the existing checker.

I fully discuss this in the [comment below](https://github.com/llvm/llvm-project/pull/65189#issuecomment-1709185690). Please take a look there for the full context. Thank you!

https://github.com/llvm/llvm-project/pull/65189


More information about the cfe-commits mailing list