https://gcc.gnu.org/bugzilla/show_bug.cgi?id=77488

--- Comment #5 from Martin Sebor <msebor at gcc dot gnu.org> ---
> How would that help here?  You obviously pass the address of the string
> literal to the __assert_func or how is the assertion passed, thus it escapes.

With the optimization in place the assert macro could be defined similarly to
the one below.  __builtin_printf is known not to escape string arguments of its
%s directives (or form pointers prior to their beginning).

#define FILE  (__builtin_strrchr (__FILE__, '/') ? __builtin_strrchr (__FILE__,
'/') + 1 : __FILE__)

#define assert(e) ((e) ? (void)0 : (void)(__builtin_printf ("%s:%i: assertion
%s failed\n", FILE, __LINE__, #e), __builtin_abort ()))

To make the optimization more generally applicable (so that it could work with
arbitrary functions including __assert_func) a new attribute might need to be
introduced to tell GCC about the same guarantee.

Reply via email to