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

    <tr>
        <th>Summary</th>
        <td>
            clang-tidy false positive va_arg is called on an uninitialized va_list when passing a pointer to va_list
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
      </td>
    </tr>

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

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

<pre>
    The following MCVE that passes a pointer to `va_list` vauses `clang-tidy` to display an error message that the `va_list` is uninitialized. This is a false positive. `va` is a _pointer_ to `va_list` - it is just getting initialized by the caller.

```
#include <stdarg.h>
int va_list_get_int(va_list *va) {
        return va_arg(*va, int);
}
```

when run against `clang-tidy` outputs:

```
$ clang-tidy example.c 
Error while trying to load a compilation database:
Could not auto-detect compilation database for file "example.c"
No compilation database found in /dev/shm/.1000.home.tmp.dir or any parent directory
json-compilation-database: Error while opening JSON database: No such file or directory
fixed-compilation-database: Error while opening fixed database: No such file or directory
Running without flags.
1 warning generated.
example.c:3:9: warning: va_arg() is called on an uninitialized va_list [clang-analyzer-valist.Uninitialized]
        return va_arg(*va, int);
               ^
/usr/lib/clang/13.0.1/include/stdarg.h:19:29: note: expanded from macro 'va_arg'
#define va_arg(ap, type)    __builtin_va_arg(ap, type)
                            ^~~~~~~~~~~~~~~~~~~~~~~~~~
example.c:3:9: note: va_arg() is called on an uninitialized va_list
        return va_arg(*va, int);
               ^
/usr/lib/clang/13.0.1/include/stdarg.h:19:29: note: expanded from macro 'va_arg'
#define va_arg(ap, type)    __builtin_va_arg(ap, type)
                            ^~~~~~~~~~~~~~~~~~~~~~~~~~
```

Environment:

```
$ clang-tidy --version
LLVM (http://llvm.org/):
  LLVM version 13.0.1
  Optimized build.
  Default target: x86_64-pc-linux-gnu
  Host CPU: amdfam10
$ clang --version
clang version 13.0.1
Target: x86_64-pc-linux-gnu
Thread model: posix
InstalledDir: /usr/bin
$ uname -a
Linux leonidas 5.17.1-zen1-1-zen #1 ZEN SMP PREEMPT Mon, 28 Mar 2022 21:56:46 +0000 x86_64 GNU/Linux
$ cat /etc/arch-release 
Arch Linux release
```

</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJztVktv2zgQ_jXyZSBBDz8PPjiJva86Ddqkh70YlDi22KVIgaScOL--Q0l2nNTdbYAF9rKCTNGcGc43Lw5zzQ_z-xJhq6XUj0LtYH39ZQmuZA5qZi1aYFBroRwacBqCcbxnGymsoxnsWeM5aFpIpnahE_zg14mRC1tLdgCmAI3RBiq0lu2w29qRytdbCQuNEko4waR4Rh7BfUlrwuvfMmmRUFii7jHqJHshBpse3uZ7fCEI55m-NtbBDp3zBp4pgfzQQimYlGiiIL4J4kU_juP-7f6mmVCFbDjhzq6t48zsojLIlh2ZAECvd0N6NvQ_SKf9CgTpgvCmMwgmV0cdM4OuMcpL0VbE3DNdQys7C7Ij6-TmMqJ2fCxRgWkUsB0Tyut6GwvduLpxNsgWf2veEF7EAJ9YVUuMCujIyzaCj6WQFD9z8F4kX0vNOPm_0FUtJHNCK-DMsZxZPGm71o3koLQD1jgdcnRYuIsilIIGtl5DkKYnADTvNrrVP5JqFCefkdSK455GW1Y0Rkkcx1GpK4xcVUdcGKD9mTpQWhukcNEKQdHm0O3_1WoVnmkIz0yBc_t1jco74PfPH2_P7QVCaJui7Gwg9jcKtuIJ-bs0tBLvUfGpUa3go3AlhR22ku1sn9UJPDLTUneo0DBHJdZRXnydLTL6zbymntlPzzJ05oupLRYOFASq7Vc1C6eEH1112cQUk4dnNOGeeUL0cM4ejPrMhv752ZKA108wWh6zeNVYQ6MUOY0tBPomWRRHCU36CvY5cirgReLtTVujKU1bN-NTzRQne7ZGV1CxwtDBkk6OuCanI4HjVih8Acxqj9YdavS-omezyRsh6djZXOa5aM93xk3-vffHET8a__5w_x_E_yKIF9vBUu2F0aqiA-5dB34Y7tFYOpQ66ocPX9bkrGnpXO33SVc-HnJfRdqbv2rjuDja3XL38tDHqSd9rJ2ouk5LLjyeOAA3uGWNpHsAuRM9VHiajjfjYVgXoRSqeQp3qjky_6rpSLm-e_BsrOJbViVvrXhrQLd4CdP9P2u8Lw1SZ6s0R-kZ_cXjqSP9Ri22rYcbYTzplKy5UC-QGsUqhJD1zvS7g0StBGcWRlEyiZLwGVUSth_aJEvgz-UtfF7fwd2n5XJ9dw9rMoVSLJ3CmhlI4zSFNCGVozENwzEJXVGDi3sr4JfbB0LRqjpzDfN3jxU6aqMrZooyNCjRd82OZ0FL0MHrCRdzZcDnGZ9lMzZwwkmcn-XN65tZX0M_2STaq4u_Y_qm9OqS2XMMGiPnPgXtKQd31NmaPKIu2idk_wlro79SK_Tng7UNWpqMRnE8G5TzeMZGWTwu4nGeT_JJlsdTPhumOIqHY5zF2UCyHKWdU9OijjQQc-_seJgm8TROknGUFzwdTrZsinw4Sfk4GMZYMSGjY0EMzLzFkDc7S0QP3b4QvYE7hXjcn-5BpTbzP1glZNH8NWjxzluw3wCgg39E">