From e31d27e46048ccc3294d6b215dc778b3390e7834 Mon Sep 17 00:00:00 2001 From: Mark de Wever Date: Thu, 15 Dec 2022 18:58:17 +0100 Subject: [PATCH] [libc++][format] Renames __null_sentinel. While the FreeBSD CI was enabled in D128084 it was discovered libc++ uses the name of a system macro on FreeBSD. This renames the macro to fix the issue. Reviewed By: emaste, #libc, philnik Differential Revision: https://reviews.llvm.org/D140117 --- libcxx/include/__format/formatter_output.h | 6 +++--- libcxx/test/libcxx/nasty_macros.compile.pass.cpp | 5 +++++ 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/libcxx/include/__format/formatter_output.h b/libcxx/include/__format/formatter_output.h index 4f2c044..adef574 100644 --- a/libcxx/include/__format/formatter_output.h +++ b/libcxx/include/__format/formatter_output.h @@ -373,10 +373,10 @@ _LIBCPP_HIDE_FROM_ABI auto __write_string( # if _LIBCPP_STD_VER > 20 -struct __null_sentinel {}; +struct __nul_terminator {}; template -_LIBCPP_HIDE_FROM_ABI bool operator==(const _CharT* __cstr, __null_sentinel) { +_LIBCPP_HIDE_FROM_ABI bool operator==(const _CharT* __cstr, __nul_terminator) { return *__cstr == _CharT('\0'); } @@ -384,7 +384,7 @@ template _LIBCPP_HIDE_FROM_ABI void __write_escaped_code_unit(basic_string<_CharT>& __str, char32_t __value, const _CharT* __prefix) { back_insert_iterator __out_it{__str}; - std::ranges::copy(__prefix, __null_sentinel{}, __out_it); + std::ranges::copy(__prefix, __nul_terminator{}, __out_it); char __buffer[8]; to_chars_result __r = std::to_chars(std::begin(__buffer), std::end(__buffer), __value, 16); diff --git a/libcxx/test/libcxx/nasty_macros.compile.pass.cpp b/libcxx/test/libcxx/nasty_macros.compile.pass.cpp index d2d875f..93c54a4 100644 --- a/libcxx/test/libcxx/nasty_macros.compile.pass.cpp +++ b/libcxx/test/libcxx/nasty_macros.compile.pass.cpp @@ -59,6 +59,11 @@ # undef _M #endif +// Test that libc++ doesn't use names that collide with FreeBSD system macros. +#ifndef __FreeBSD__ +# define __null_sentinel NASTY_MACRO +#endif + // tchar.h defines these macros on Windows #ifndef _WIN32 # define _UI NASTY_MACRO -- 2.7.4