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

    <tr>
        <th>Summary</th>
        <td>
            [-Wunsafe-buffer-usage] Incorrect fixit for unsafe pointer initialized with nullptr
        </td>
    </tr>

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

    <tr>
      <th>Assignees</th>
      <td>
            jkorous-apple
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          jkorous-apple
      </td>
    </tr>
</table>

<pre>
    There is a typo in test file
https://github.com/llvm/llvm-project/blob/main/clang/test/SemaCXX/warn-unsafe-buffer-usage-fixits-local-var-span.cpp#L117
`{{^3}}` should be `{{[^3]}}`
(It is copy-pasted to 3 more places in the test file.)

Some of the test cases fail when fixed and unfortunately it masks a real bug in `FixVarInitializerWithSpan`.

```
  // If `Init` has a constant value that is (or equivalent to) a
  // NULL pointer, we use the default constructor to initialize the span
  // object, i.e., a `std:span` variable declaration with no initializer.
  // So the fix-it is just to remove the initializer.
  if (Init->isNullPointerConstant(Ctx,
 // FIXME: Why does this function not ask for `const ASTContext
 // &`? It should. Maybe worth an NFC patch later.
 Expr::NullPointerConstantValueDependence::
 NPC_ValueDependentIsNotNull)) {
    std::optional<SourceLocation> InitLocation =
        getEndCharLoc(Init, SM, LangOpts);
    if (!InitLocation)
      return {};

    SourceRange SR(Init->getBeginLoc(), *InitLocation);
```

The problem is that for this form of initialization `int * ptr = nullptr;` the fixit removes only the "nullptr" but leaves "=" which makes the code syntactically invalid.

I can't think of a simple-enough solution that would cover all cases so filing issue for later.

`int * ptr = nullptr;`
`int * ptr {nullptr};`
The latter form is likely very uncommon but we still need to account for it.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJyUVlFv4jgQ_jXmZQQCp4XywAOFIiF1e6tlb3ffThNnknjr2Dl7DOV-_clJSmlVnXQoMkoynm--b8YzwRB0ZYlW4vZeSPn72XkXwxjb1pCQUtxuRxi5dn717tUod8V59b0mT6ADIPC5daAtMAWGUhsS062YrmvmNohsLeROyF2luY75RLlGyJ0xx9e_cevdb1Is5C43Lhdy16C2Qu6UQVsJuUtehdwdqMHNr19C7k7o7TjagCWN81iW5McxYEXjUr9oDmPjFJrxEf04tGgnqm2FzB5ns0UflphPxeI-XbcPmVhs0zWfQqhdNAXkBFcGvc3t9mI2uJB3e07clWvP4xYDUwHsIIPGeYLWoKLQKVLTmyoTIZfD_m49uIbAlW9GCgMFKFEbONVkodQvVADaAqItnedokcmcQTM0GJ6T9J7QQB6rBCbm051--YF-bzVrNPof8j8114cWrZhPJ9fYiUp_dbcAfZJgXyY3yUHSpMaEoZwNjJbhiCYScI0ddyHvnAf6O-ojGrIM7IRcAn7w-PTn4yO0TlsmL-QGTgQxUEe6oBKj4R7AR8XOJxX1JfzOKiXxg0-X9xWzAT1Jsm4AU9iBC5GtQ08Xjug15ibBKIMeWTsLJ8012GsMP_ng_OA62FK_jHVH9HcMiRx4atyxj-mz7bpMkiTpxiJ70OEpGvO1570ZFBTybsMvQm6GPQPibv_ry4PI1vCzPkPhKADXOkAZreqCto4BwzOUzieanVywPnzfOMv0wu-dCTlPac12sOehqCfwBc85wcl5rgEtPO020CKrGgzyG4WHl9an85qtP4n9R0r-llqyBVlFvd2w8enr5q9373kfnhwnL6nm5RLSaRp0AujzJLK1axM_NCLbHFz0ih6d6vIksgdISr7eg8i2b_vTryJ-sMWmRv_o1KB7KoTDl7Q-oq3-aDkk9OwKuc-RkLNr55dj2Xv2xNHbLuLF9rL7zaKP9BvaiuDw7SrlFfE9Vdr2AXXENyDk-iPWxeX7M9iv32uC1rvcUJNqrztsKe99RTjfpI5xKb9BnPlUW05Q0LJPWoGNxrTsE9Z8-lrPmocaDuCsOXePhZSvtlJCHhkMYbJIAyDbpoenWqsaGnzuCpNAuYIgnC2jYq3QpI5kj2h08a7F7EGhFXLBKXb7nOJGCLppDY3JuljVEJyJHYOO5qlrwModyQMaM7TD4FLz1LYCHUKkTozrqr1o-Z8SfG61uH816jP9apeSYJCZfC-5DmD0c2q9R_JniFa5pnG2k-tEEFgbA5b6IYBKuWj7rGmejIpVViyzJY5oNVtMF8ub2_nyblSv1LK8KeZ5Wcq5xKXMZmWBZXFLcjkrUBZqpFdyKm-mcnYjZ3KW3U3kgkrMlou8LKezuzwTN1NqUJtJmqMT56tRJ9HqbrZYypHBnEwYZrulU6_fMNf9qpu9eayCuJkaHTi8eWHNpvsoGP_8ZMyK2y3srXLek-KhrBLX3vS11V-1yGLour3Uo-jN6n9_GnSxByF3Hbd_AwAA___1C8Zf">