The integer promotions apply to bitfields as well, but
rather oddly. If you have a bitfield with a lower width
than int, then the type of the member expression will
be int regardless of the type of the bitfield member.
This means that you can effectively get 'type demotion'
in a bitfield member expression.
However, when analyzing format string types, we
would look through argument promotions like integer
promotion. Looking through bitfield demotion means
that we would get the wrong type when analyzing,
hiding -Wformat issues.
This patch fixes this so that we only explicitly look
through integer and floating point promotion where
the result type is actually a promotion.
Looking at Sema::DefaultArgumentPromotion(), it seems there is some special logic there for _Float16 vs half/fp16. Do we need to deal with that here as well?