And YES I have a port with multiple pointer sizes, and YES the customer wanted both sizes supported in a single compilation unit
This is actually not that uncommon. Oh, and sometimes gcc randomly uses pointer_mode instead of Pmode. I haven't a clue why there's a difference, or how badly gcc would break if pointer_mode and Pmode were different. Ok, I lied, I *do* know how badly it breaks if they differ; I did try that at one point. There have been a number of ports where these differ. Though undoubtably there are bugs in this support, it does basically work.