https://gcc.gnu.org/bugzilla/show_bug.cgi?id=69681
Georg-Johann Lay <gjl at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |gjl at gcc dot gnu.org
--- Comment #6 from Georg-Johann Lay <gjl at gcc dot gnu.org> ---
(In reply to Patrick Palka from comment #3)
> Either way, such code still fails to compile.
I still don't see how the compiler could determine the addresses of functions
as they are only determined at link time. Just suppose functions drawn from a
library or where you are def'ing symbols in the linker description file or by
means of -Wl,--defsym,foo=bar.
There are even cases where functions with different prototypes reside at the
came address (because the functions are built-in, their implementation is in
libgcc and the compiler knows that the binary code is exactly the same even
though the prototypes are not. The avr back-end has an example of this, cf.
PR78562 for an example).
So even if there are situations where such expressions can be folded to a
compile time constant, this is not possible in general.
If an application relies on this, it's likely to have a design problem.