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

Jonathan Wakely <redi at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|UNCONFIRMED                 |NEW
     Ever confirmed|0                           |1
   Last reconfirmed|                            |2023-01-05

--- Comment #1 from Jonathan Wakely <redi at gcc dot gnu.org> ---
(In reply to LIU Hao from comment #0)
>   791 | #define abort() fancy_abort (__FILE__, __LINE__, __FUNCTION__)

The C++ standard says this is undefined.

We should do something like:

#ifdef __has_builtin
# define HAS_BUILTIN(X) __has_builtin(X)
#else
# define HAS_BUILTIN(X) 0
#endif

namespace gcc {
#if HAS_BUILTIN(__builtin_FILE) && HAS_BUILTIN(__builtin_LINE) \
  && HAS_BUILTIN(__builtin_FUNCTION)
__attribute__((noreturn))
inline void
abort(const char* file = __builtin_FILE(),
      long line = __builtin_LINE(),
      const char* func = __builtin_FUNCTION())
{ fancy_abort(file, line, func); }
#else
__attribute__((noreturn))
inline void
abort()
{ fancy_abort("<unavailable>", 0, "<unavailable>"); }
#endif
}

Reply via email to