I think some of the errors you're seeing (i.e. in #6) might be due to use of GNU alternate keywords.
https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Alternate-Keywords.html#Alternate-Keywords
Here's what I'm currently accepting in my compiler, which has been sufficient for most projects I've tried to build: https://git.sr.ht/~mcf/cproc/tree/master/pp.c#L29-40
I'm not sure if there is a complete list somewhere of the keywords gcc accepts, or if you have to dig in the source, but the list above might be a good starting point.
Whoops, I see you are already handling some of these, not sure how I missed that.
Comparing the existing ones, and the ones I found I needed to handle, the differences are
__asm
__inline__
__signed
__thread
I've also seen
__attribute
in one package. Not sure how commonly used that one is.