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 }