On 10/07/2015 07:37 PM, Bernd Schmidt wrote: > On 10/07/2015 12:45 PM, Christian Bruel wrote: >> >> >> On 10/07/2015 12:18 PM, Bernd Schmidt wrote: >>> On 10/07/2015 09:04 AM, Christian Bruel wrote: >>>> + /* Similarly, relayout function's alignment if not forced. */ >>>> + if (!DECL_USER_ALIGN (fndecl) >>>> + && (TREE_CODE (fntype) != METHOD_TYPE >>>> + || TARGET_PTRMEMFUNC_VBIT_LOCATION != >>>> ptrmemfunc_vbit_in_pfn)) >>>> + DECL_ALIGN (fndecl) = FUNCTION_BOUNDARY; >>>> } >>> >>> That's a very odd-looking condition. Why the vbit location test? >> >> This is for member functions to make sure that the lsb address is >> reserved for the virtual function bit. >> >> see cp/decl.c: >> >> /* If pointers to member functions use the least significant bit to >> indicate whether a function is virtual, ensure a pointer >> to this function will have that bit clear. */ >> if (TARGET_PTRMEMFUNC_VBIT_LOCATION == ptrmemfunc_vbit_in_pfn >> && TREE_CODE (type) == METHOD_TYPE >> && DECL_ALIGN (decl) < 2 * BITS_PER_UNIT) >> DECL_ALIGN (decl) = 2 * BITS_PER_UNIT; >> >> This happens for instance on i386 that aligns member functions on 2 >> bytes, bigger than the one byte required boundary. So we cannot >> re-layout bellow that. > > Hmm, at least that would need to be spelled out in a comment, but I > think this would better be abstracted as > > #define MINIMUM_FUNCTION_BOUNDARY(FN) \ > .... > in a header file, and used in both places. > OK, Similar pattern occurs at many other places, that changed also in the attached proposal. Not fully tested (in particular the java part) and no ChangeLog. Just to make sure that we agree on the interface first. Thanks Christian > > Bernd >