Interesting, so IIUC, "compatible" is really only one way, C++ can read C, especially with the ctags parser, so it probably has the same type keyword string, so same hash. But changing C++ to C will almost certainly fail quickly (at the first occurrence of "class" for eg) but (IIUC) if the parser fails Geany leaves the typenames the same so as to try to minimise flashing and changing of the symbols pane as the user types, so again hash is the same.
Confirmed by adding `typedef foo int;` to change the hash and get colouring again.
But since 0 is a valid hash value maybe `keyword_hash` should be incremented to get a different hash value so the comparison fails, otherwise the problem might still appear one in every 2^32 times the user swaps C and C++ types on the file :stuck_out_tongue_winking_eye: .