[libc-commits] [libc] [libc] Allow LLVM_LIBC_FUNCTION macro to take another parameter for function alias. (PR #187154)

Victor Campos via libc-commits libc-commits at lists.llvm.org
Fri Mar 20 07:55:34 PDT 2026


================
@@ -48,25 +50,33 @@
 // symbol.  Moreover, a C symbol `func` in macOS is mangled as `_func`.
 #if defined(LIBC_COPT_PUBLIC_PACKAGING) && !defined(LIBC_COMPILER_IS_MSVC)
 #ifndef __APPLE__
-#define LLVM_LIBC_FUNCTION_IMPL(type, name, arglist)                           \
+#define LLVM_LIBC_FUNCTION_IMPL_4(type, name, arglist, c_alias)                \
   LLVM_LIBC_ATTR(name)                                                         \
   LLVM_LIBC_FUNCTION_ATTR decltype(LIBC_NAMESPACE::name)                       \
-      __##name##_impl__ asm(#name);                                            \
-  decltype(LIBC_NAMESPACE::name) name [[gnu::alias(#name)]];                   \
+      __##name##_impl__ asm(c_alias);                                          \
+  decltype(LIBC_NAMESPACE::name) name [[gnu::alias(c_alias)]];                 \
   type __##name##_impl__ arglist
 #else // __APPLE__
-#define LLVM_LIBC_FUNCTION_IMPL(type, name, arglist)                           \
+#define LLVM_LIBC_FUNCTION_IMPL_4(type, name, arglist, c_alias)                \
   LLVM_LIBC_ATTR(name)                                                         \
-  LLVM_LIBC_FUNCTION_ATTR decltype(LIBC_NAMESPACE::name) name asm("_" #name);  \
+  LLVM_LIBC_FUNCTION_ATTR decltype(LIBC_NAMESPACE::name) name asm(             \
+      "_" c_alias);                                                            \
   type name arglist
 #endif // __APPLE__
+
 #else  // LIBC_COPT_PUBLIC_PACKAGING
-#define LLVM_LIBC_FUNCTION_IMPL(type, name, arglist) type name arglist
+#define LLVM_LIBC_FUNCTION_IMPL_4(type, name, arglist, c_alias)                \
+  type name arglist
 #endif // LIBC_COPT_PUBLIC_PACKAGING
 
-// This extra layer of macro allows `name` to be a macro to rename a function.
-#define LLVM_LIBC_FUNCTION(type, name, arglist)                                \
-  LLVM_LIBC_FUNCTION_IMPL(type, name, arglist)
+#define LLVM_LIBC_FUNCTION_IMPL_3(type, name, arglist)                         \
+  LLVM_LIBC_FUNCTION_IMPL_4(type, name, arglist, #name)
+
+// LLVM_LIBC_FUNCTION(type, name, arglist) is equivalent to
+// LLVM_LIBC_FUNCTION(type, name, arglist, #name)
+#define LLVM_LIBC_FUNCTION(...)                                                \
----------------
vhscampos wrote:

What about creating a new macro like `LLVM_LIBC_FUNCTION_WITH_ALIAS` instead?

https://github.com/llvm/llvm-project/pull/187154


More information about the libc-commits mailing list