https://gcc.gnu.org/bugzilla/show_bug.cgi?id=93848
--- Comment #4 from Vincent Lefèvre <vincent-gcc at vinc17 dot net> --- Perhaps this was not the intent of the standard (and this is far from being clear because this might affect optimizations -- there are already many things that are forbidden with pointers though they could have a valid interpretation with a basic memory model). But this is currently forbidden. Note that in my example, the * operator is evaluated, so that both the end of 6.5.6p8 and 6.5.3.2p4 (which is about evaluation since it describes what the result is) apply. FYI, this is not supported by some tcc version, though I suspect that this may be due to a bug that could affect valid code too. But who knows...