On Fri, May 8, 2026 at 6:05 PM H.J. Lu <[email protected]> wrote:
>
> default_stack_protect_guard calls
>
>   lang_hooks.types.type_for_mode (ptr_mode, 1);
>
> to get an integer type for __stack_chk_guard which is declared as a
> global symbol of type uintptr_t.  For 32-bit systems, uintptr_t may
> be either unsigned int or unsigned long int.  On 32-bit Darwin, we get
>
> $ cat /tmp/x.c
> __UINTPTR_TYPE__ __stack_chk_guard = 0x1000;
> $ ./xgcc -B./ -S /tmp/x.c -m32
> /tmp/x.c:1:18: error: conflicting types for ‘__stack_chk_guard’; have
> ‘long unsigned int’
>     1 | __UINTPTR_TYPE__ __stack_chk_guard = 0x1000;
>       |                  ^~~~~~~~~~~~~~~~~
> cc1: note: previous declaration of ‘__stack_chk_guard’ with type ‘unsigned 
> int’
> $
>
> since lang_hooks.types.type_for_mode returns unsigned int while Darwin's
> uintptr_t is unsigned long int.
>
> Add LANG_HOOKS_TYPE_FOR_MODE_KIND to specify signed or unsigned integer
> type for pointer and update default_stack_protect_guard to call
>
>   lang_hooks.types.type_for_mode_kind
>     (ptr_mode, 1, KIND_IS_INTEGER_FOR_POINTER);
>
> to get unsigned integer type for pointer.
>
> gcc/
>
> PR c/125226
> * langhooks-def.h (LANG_HOOKS_TYPE_FOR_MODE_KIND): New.
> (LANG_HOOKS_FOR_TYPES_INITIALIZER): Add
> LANG_HOOKS_TYPE_FOR_MODE_KIND.
> * langhooks.h (type_kind): New enum.
> (lang_hooks_for_types): Add type_for_mode_kind.
> * targhooks.c (default_stack_protect_guard): Call
> lang_hooks.types.type_for_mode_kind if not NULL.
>
> gcc/c-family/
>
> PR c/125226
> * c-common.cc (c_common_type_for_mode): Renamed to ...
> (c_common_type_for_mode_kind): This.  Add an argument for type
> kind.  Return intptr_type_node/uintptr_type_node when asking
> for integer type for pointers.
> (c_common_type_for_mode): New.  Call c_common_type_for_mode_kind
> with KIND_IS_UNKNOWN.
> * c-common.h: Include "langhooks.h".
> (c_common_type_for_mode_kind): New prototype.
> * c-objc-common.h (LANG_HOOKS_TYPE_FOR_MODE_KIND): New.
>
> gcc/cp/
>
> PR c/125226
> * cp-objcp-common.h (LANG_HOOKS_TYPE_FOR_MODE_KIND): New.
>
>
> --
> H.J.

Jason, Joseph,

Can you review this patch?

Thanks.

-- 
H.J.

Reply via email to