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

    <tr>
        <th>Summary</th>
        <td>
            clang-static-analyzer: Aggregate-initialized struct field incorrectly marked undefined
        </td>
    </tr>

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

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

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

<pre>
    This code:

```cpp
#include <iostream>
#include <string>

struct Structy {
  std::string foo;
  int bar;
};

int main() {
  auto *s = new Structy{
 .foo = "foo",
      .bar = 1,
  };
  std::cout << s->foo << s->bar;
  delete s;
}
```

produces the following static analyzer warning:

```
$ clang-tidy -p . test.cpp 
1 warning generated.
/home/rojer/allterco/shelly-ng3/qq.cpp:14:3: error: 1st function call argument is an uninitialized value [clang-analyzer-core.CallAndMessage,-warnings-as-errors]
   14 | std::cout << s->foo << s->bar;
      |   ^ ~~~~~~
/home/rojer/allterco/shelly-ng3/qq.cpp:10:13: note: Uninitialized value stored to field 'bar'
   10 |   auto *s = new Structy{
      | ^~~~~~~~~~~~
   11 |       .foo = "foo",
      | ~~~~~~~~~~~~~
   12 |       .bar = 1,
      |       ~~~~~~~~~
   13 |   };
      |   ~
/home/rojer/allterco/shelly-ng3/qq.cpp:14:3: note: 1st function call argument is an uninitialized value
   14 |   std::cout << s->foo << s->bar;
      |   ^                      ~~~~~~
1 warning treated as error
```

`s->bar` is of course explicitly initialized to 1, so the generated warning is a false-positive.

swapping field order to bar, foo makes it go away.


tested with latest main (20.0.0git ec353b7418e272e96cd63cc61bec586ab49da92f).
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJykVc2S4yYQfhp86ZJKAsmyDjp47fEtpyQPgKAlk8WgBTQT72GePQX-kZ1yKqkJ5cISTf993f2Je69Gg9iR-hup9ys-h6N1nbN_oFv1Vp67347Kg7ASCduSYk-K274uLj8xTdcTypQRepYIhO2U9cEhPxH29krsg1NmXIRp98HNIsCv6e8MpPl2OQfwQUb_bHvRg8Fawu5SZQL03N1PSLNfntMeb5y4MoRuCG0fLfM5WCB064GwPRj8uLlf7uSDtUlKKI2OKSV0d9OPK--5SxfKB8FjEA8JCDuHCABhO_AZYW8X48v7YyIAEjUGBP-U23MBHvOcnJWzQA_hiDBYre1HhMsHHpQAbrg-_0QHH9yZBP_rkt4KVoHQ3IxZUPIM2QQ5BPQhF9MElyvlzRKMaNDxgDK_KR-O9oSEHlIvEXrgWgd0whJ68EfU-pyZkRF6-PEjGiRsW1aEbRlhW0DnrIsPpQ8wzEYEZQ0IrjVwN84nNAGUB25gNsqooLhWP1HCO9czAqm_XcK-pZsJ6zDfca23Rv6C3vMRCd1l19h9xn2WXHpS7-91LSsgze7LhYsr6gOQ-g0-0_o6NEXcEjbGhjiK8PuLzH2wDiUEC4NCLYHQJgZFmyWp4hrUf2j7ewqkfvtc1mKrvNpKI_BvMxKvfn6-tEMf7bwapQXLuF5YYDeon2ZuUfsfyN-b8gb8V3ry7031dT54bquX6xGcZUAjGQeUwP11vP6ZRMi6uHteFzErO4Cws_MI-OeklVBBn-Exy2BTwcDbxDx3Nri7j9DAwLXHbLJeBfWO-RP1f_BpSsyeOtc6iS5aTf27i3wPJ_4dPagAowX-wc9P-pc90lN0qsIRNI9vifWB0A0t8iIvRhUABatZ31TlBmlDsV0LuWZCrMseRb1Z875qJW_pQGibr2THZMtavsKubFjZlEXB2OrYyXXBNqwSvRhYy4uG95y1QyGrjRR12bOV6mhBq7Isa0oZq1nelhvRyl62jSibQg6kKvDElc61fj_l1o0r5f2MXVmuq6paad6j9um7TGmczySNc1XvV66LSlk_j55UhVY--MVMUEFjd6HAC_HfmTD273YcHY48YPZYwOun94K-MsI6hyJW-cTdd5QwG4mDMihXs9PdMYTJx_6lB0IPowrHuc-FPRF6iGFc_7IpjpkIhB5S8J7QwzW7947-FQAA__9L137j">