assert: Mark `__assert_fail` as `cold`

Noah Goldstein goldstein.w.n@gmail.com
Fri Jul 26 12:05:07 GMT 2024


On Fri, Jul 26, 2024 at 6:30 PM Xi Ruoyao <xry111@xry111.site> wrote:
>
> On Fri, 2024-07-26 at 16:41 +0800, Noah Goldstein wrote:
> > This helps compilers split the codegen for setting up the arguments
> > (`__expression`, `__filename`, etc...) from the potentially hot cold
> > where the `assert` is to a presumably cold region on the assertion
> > failure path.
> > ---
> >  assert/assert.h | 4 ++--
> >  1 file changed, 2 insertions(+), 2 deletions(-)
> >
> > diff --git a/assert/assert.h b/assert/assert.h
> > index 266a41df06..3261eb4202 100644
> > --- a/assert/assert.h
> > +++ b/assert/assert.h
> > @@ -71,13 +71,13 @@ extern void __assert_fail (const char *__assertion, const char *__file,
> >  /* Likewise, but prints the error text for ERRNUM.  */
> >  extern void __assert_perror_fail (int __errnum, const char *__file,
> >                                 unsigned int __line, const char *__function)
> > -     __THROW __attribute__ ((__noreturn__));
> > +     __THROW __attribute__ ((__noreturn__)) __COLD;
>
> Hmm, so "__assert_fail" isn't changed but "__assert_perror_fail" is
> changed despite the subject only mentions "__assert_fail"?
>
> Or am I missing something obvious here?
>
Nope, the patch didn't do the one thing it said it would xD

Fixed in V2.

> >  /* The following is not at all used here but needed for standard
> >     compliance.  */
> >  extern void __assert (const char *__assertion, const char *__file, int __line)
> > -     __THROW __attribute__ ((__noreturn__));
> > +     __THROW __attribute__ ((__noreturn__)) __COLD;
> >
> >
> >  __END_DECLS
>
> --
> Xi Ruoyao <xry111@xry111.site>
> School of Aerospace Science and Technology, Xidian University


More information about the Libc-alpha mailing list