Good catch!
The problem is actually #3268. After a closer inspection the ctags "local" flag detection isn't very profound - it checks source file names and if the file name has a header extension, then the flag is non-local, otherwise it's local. So for the `*.foo` extension, it's assumed to be a C source where `xx_foo` is local just for the file, which is wrong.
Another problem would be when a user has two files open, such as `foo.c` and `bar.c` and doesn't use anything like ProjectOrganizer that would parse also the corresponding headers. Then symbols from `foo.c` won't be visible in `bar.c`.
So while it's nice that #3268 reduces the number of possibly invalid autocompletion symbols, it's not good in its current form. We could either revert it completely or modify it a bit to honor the `local` flag only in cases where we can be absolutely sure the given symbol won't leave the current file (such as static declarations). I'll try to play with it a little.