On Thu, May 28, 2026 at 7:11 AM Iain Sandoe <[email protected]> wrote:
>
>
>
> > On 27 May 2026, at 23:41, 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.  Update default_stack_protect_guard to
> > check UINTPTR_TYPE to get unsigned integer type for uintptr_t instead.
> >
> > gcc/c-family/
> >
> > PR c/125226
> > * targhooks.cc (default_stack_protect_guard): Check UINTPTR_TYPE
> > to get unsigned integer type for uintptr_t.
>
> maybe making uintptr_type_node available would make the code smaller
> overall?

That will be a much bigger change.

> Iain
>
>
> >
> > OK for mastter?
> >
> > Thanks.
> >
> > --
> > H.J.
> > <0001-SSP-Check-UINTPTR_TYPE-to-get-uintptr_t-type.patch>
>


-- 
H.J.

Reply via email to