https://gcc.gnu.org/bugzilla/show_bug.cgi?id=38354
--- Comment #6 from Adam Warner <adam at consulting dot net.nz> --- Just to make sure I understand this correctly: 1. You won't confirm this bug because it violates the C standard. 2. GNU provides extensions to C when the C standard is too restrictive. In this case the initializer element is *clearly* computable at load time because all function pointers are *already* 32 bits under the non-large code model. 3. To demonstrate this, a GNU extension to C++ has no problem computing the address of the function pointer at load time and storing it in a 32-bit integer array. 4. Just because C is supposed to be a portable assembler and lower level than C++ doesn't mean you should be able to store a 32-bit address in a 32-bit integer at load time. Even though GNU C++ can. 5. Use GNU C++ if you want code to run fast when the L1 data cache is being trashed by function pointer lookup tables that are twice their necessary size. C has strict type checking which must not be violated at load time. Goto 1.