<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/61919>61919</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            Clang Static Analyzer "optin.cplusplus.UninitializedObject" false positive
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            new issue
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          tiagomacarios
      </td>
    </tr>
</table>

<pre>
    optin.cplusplus.UninitializedObject will flag the class `derived` below as having missing initializer. The clang AST lists the field as being initialized. It looks like the initializer is missing logic for base class aggregate initialization.

https://godbolt.org/z/faaej1EP4
```
struct base {
    bool b;
};

struct derived : base {
    int i;

 derived()
    : base{}
    , i{} // note: 1 uninitialized field at the end of the constructor call
    {} // warning: 1 uninitialized field at the end of the constructor call [clang-analyzer-optin.cplusplus.UninitializedObject]
};

void _() {
    derived d{}; // note: Calling default constructor for 'derived'
}
```

AST:
```
| |-CXXConstructorDecl <line:8:5, col:30> col:5 used derived 'void ()' implicit-inline
| | |-CXXCtorInitializer 'base':'base'
| | | `-InitListExpr <col:21, col:22> 'base':'base'
| | |   `-ImplicitValueInitExpr 'bool'
| | |-CXXCtorInitializer Field 0x557cf12f8dd8 'i' 'int'
| | | `-InitListExpr <col:26, col:27> 'int'
| | `-CompoundStmt <col:29, col:30>
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJykVdGOqzYQ_RrzMgoydoDwwEOWbKQrVWql3Vb3rTLYkLnXsSNssnf36ysD2ZAolbaqlGAwPmfOzBwb4Rx2RqmSpE8k3UVi8Afblx5FZ4-iET1aF9VWvpf25NHEzUkPLvzjPw0a9Cg0fij5e_1DNR7eUGtotejAHxQ0WjgHJKNS9XhWkmQUaqXtGwgHB3FG08ERnQvjlauP4XUCmw62L6-g0Xk3EraotAzgWt1iZAzfPGhrfzrQ-FONqxeUgO4zkrYdNtDaHmrhLiJF1_WqE36BEh6tiQndEbqdrgfvT47wLWF7wvadlbXVPrZ9R9j-g7B9K4T6kTz_sZ5BGZ1_46Pz_dD4KSjJn6ZJAIDaWg014fMUyXfX-yVyriIQvn3AgsYD3gEvEMI2hBXXtReGQJDvFvOsApwmYUoSjPUqLE9gWPb70go_VloZCbadem7NJNf20AitF-Q3vG-iN2i6_0MNJH0aXbISRuj3D9WvvuBRku7-rc5nixL-nop1W9xL6eVcMf50X59KaB3cJVUrBu1vxAavEZZ_NiO_CnhklOm6fXkNVnu4IK-A5NWq-v69uobZqUYD4ZVGExRtCN-moaGN1YRvOSX8eb5PYXAhmYufWD5mPruE5YDHk8YG_QrNyLaM-hnZ2_7bYocRlo-WYvm4Qz4f7rHhPFgF4G_o_POvUx80T7pYctXLWND7ZVKYaGfdfwk9qBBj4md52GKPcI8S2Y_2o7_SNG_ahLUbKTeBA0Nlwmj8f80rW-SVz3k9pMnoqrLHkx2MfPFHv6Ao7lp5Z4xIllwWvBCRKpNsQ9NsnRc8OpRcCpqm7ZqKJuOsyYpEtnyT8TVndZKKJMKSUcbpmnLGOU94nGaF3FCpeCKoLNYNWVN1FKhjrc_HcNpF6NygyiwpkiLSolbajV8Pxox6g_ElYSx8TPoyYFb10DmypuM5fmXx6LUqq_GYf_HCYwPbeR8DYewrW5kxaIV2Ck7WocezioZel3fHNPrDUMeNPRK2D8HnYXXq7USyHyU7wvZjSv8EAAD__03sIjo">