On 10/05/2015 11:40 AM, Segher Boessenkool wrote: > On Mon, Oct 05, 2015 at 11:20:20AM +0200, Florian Weimer wrote: >> On 10/02/2015 09:37 PM, Segher Boessenkool wrote: >>> On Fri, Oct 02, 2015 at 01:25:31PM +0200, Florian Weimer wrote: >>>> glibc has a preprocessor macro called internal_function which switches >>>> to a different calling convention on certain targets (i386 uses stdcall >>>> and regparams). For non-K&R function definitions, the compiler enforces >>>> that both the prototype declaration and the definition match. >>>> >>>> When someone writes a patch on a different architecture than i386 and >>>> forgets to specify internal_function on both prototype and definition, >>>> the build will pass, even though i386 will not compile. >>>> >>>> Is there a way to use a certain harmless attribute to detect this >>>> mismatch even on architectures where internal_function has no effect? >>> >>> Maybe aligned(1) will do what you want? >> >> Interesting idea. Would this alter generated code? > > It shouldn't -- it can only increase alignment (not decrease it). Why do you think that? aligned(1) on variables decreases alignment on s390(x) because the ABI requires that top-level variables are located on even addresses, and GCC assumes this alignment if the programmer does not specify aligned(1). I suspect there might be similar cases for functions (or there might be in the future). Florian