[libc-commits] [PATCH] D146863: [libc] Define LLVM_LIBC_FUNCTION with a layer of macro expansion
Roland McGrath via Phabricator via libc-commits
libc-commits at lists.llvm.org
Fri Mar 24 20:31:12 PDT 2023
mcgrathr created this revision.
mcgrathr added a reviewer: abrachet.
Herald added subscribers: libc-commits, ecnelises, tschuett.
Herald added projects: libc-project, All.
mcgrathr requested review of this revision.
Move the real LLVM_LIBC_FUNCTION macro definitions to
LLVM_LIBC_FUNCTION_IMPL and make LLVM_LIBC_FUNCTION a wrapper to
expand macros in its arguments. This makes it possible to
compile libc implementation and test files with -Dfunc=othername.
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D146863
Files:
libc/src/__support/common.h
Index: libc/src/__support/common.h
===================================================================
--- libc/src/__support/common.h
+++ libc/src/__support/common.h
@@ -18,21 +18,25 @@
// GPU targets do not support aliasing.
#if defined(LIBC_COPT_PUBLIC_PACKAGING) && defined(LIBC_TARGET_ARCH_IS_GPU)
-#define LLVM_LIBC_FUNCTION(type, name, arglist) \
+#define LLVM_LIBC_FUNCTION_IMPL(type, name, arglist) \
LLVM_LIBC_FUNCTION_ATTR decltype(__llvm_libc::name) \
__##name##_impl__ __asm__(#name); \
type __##name##_impl__ arglist
// MacOS needs to be excluded because it does not support aliasing.
#elif defined(LIBC_COPT_PUBLIC_PACKAGING) && (!defined(__APPLE__))
-#define LLVM_LIBC_FUNCTION(type, name, arglist) \
+#define LLVM_LIBC_FUNCTION_IMPL(type, name, arglist) \
LLVM_LIBC_FUNCTION_ATTR decltype(__llvm_libc::name) \
__##name##_impl__ __asm__(#name); \
decltype(__llvm_libc::name) name [[gnu::alias(#name)]]; \
type __##name##_impl__ arglist
#else
-#define LLVM_LIBC_FUNCTION(type, name, arglist) type name arglist
+#define LLVM_LIBC_FUNCTION_IMPL(type, name, arglist) type name arglist
#endif
+// 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)
+
namespace __llvm_libc {
namespace internal {
constexpr bool same_string(char const *lhs, char const *rhs) {
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D146863.508275.patch
Type: text/x-patch
Size: 1729 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/libc-commits/attachments/20230325/5648cb30/attachment-0001.bin>
More information about the libc-commits
mailing list