[patch] Use __builtin_FILE and __builtin_LINE in assert implementation in C++

Paul Pluzhnikov ppluzhnikov@google.com
Sun Feb 5 21:51:25 GMT 2023


On Sun, Feb 5, 2023 at 12:08 PM Florian Weimer <fweimer@redhat.com> wrote:

> As I said before, use of these builtins needs to be conditionalized.

Yes (revised patch attached).
I was more asking whether there were any fundamental objections.

Thanks,

--
Paul Pluzhnikov
-------------- next part --------------
diff --git a/assert/assert.h b/assert/assert.h
index 72209bc5e7..6edcb01d0a 100644
--- a/assert/assert.h
+++ b/assert/assert.h
@@ -86,10 +86,18 @@ __END_DECLS
    parentheses around EXPR.  Otherwise, those added parentheses would
    suppress warnings we'd expect to be detected by gcc's -Wparentheses.  */
 # if defined __cplusplus
+#  if __has_builtin(__builtin_FILE)
+#   define __ASSERT_FILE __builtin_FILE()
+#   define __ASSERT_LINE __builtin_LINE()
+#  else
+#   define __ASSERT_FILE __FILE__
+#   define __ASSERT_LINE __LINE__
+#  endif
 #  define assert(expr)							\
      (static_cast <bool> (expr)						\
       ? void (0)							\
-      : __assert_fail (#expr, __FILE__, __LINE__, __ASSERT_FUNCTION))
+      : __assert_fail (#expr, __ASSERT_FILE, __ASSERT_LINE,             \
+                       __ASSERT_FUNCTION))
 # elif !defined __GNUC__ || defined __STRICT_ANSI__
 #  define assert(expr)							\
     ((expr)								\


More information about the Libc-alpha mailing list