@@ -82,33 +82,33 @@ __libcpp_mbsrtowcs_l(wchar_t* __dest, const char** __src, size_t __len, mbstate_
8282}
8383#endif
8484
85+ _LIBCPP_DIAGNOSTIC_PUSH
86+ _LIBCPP_CLANG_DIAGNOSTIC_IGNORED (" -Wgcc-compat" )
87+ _LIBCPP_GCC_DIAGNOSTIC_IGNORED(" -Wformat-nonliteral" ) // GCC doesn't support [[gnu::format]] on variadic templates
88+ #ifdef _LIBCPP_COMPILER_CLANG_BASED
89+ # define _LIBCPP_VARIADIC_ATTRIBUTE_FORMAT (...) _LIBCPP_ATTRIBUTE_FORMAT(__VA_ARGS__)
90+ #else
91+ # define _LIBCPP_VARIADIC_ATTRIBUTE_FORMAT
92+ #endif
93+
8594template <class ... _Args>
86- _LIBCPP_HIDE_FROM_ABI int
87- __libcpp_snprintf_l (char * __s, size_t __n, locale_t __loc, const char * __format, _Args&&... __args) {
88- _LIBCPP_DIAGNOSTIC_PUSH
89- _LIBCPP_CLANG_DIAGNOSTIC_IGNORED (" -Wformat-nonliteral" )
90- _LIBCPP_GCC_DIAGNOSTIC_IGNORED (" -Wformat-nonliteral" )
95+ _LIBCPP_HIDE_FROM_ABI _LIBCPP_VARIADIC_ATTRIBUTE_FORMAT (__printf__, 4 , 5 ) int __libcpp_snprintf_l(
96+ char * __s, size_t __n, locale_t __loc, const char * __format, _Args&&... __args) {
9197 return ::snprintf_l (__s, __n, __loc, __format, std::forward<_Args>(__args)...);
92- _LIBCPP_DIAGNOSTIC_POP
9398}
9499
95100template <class ... _Args>
96- _LIBCPP_HIDE_FROM_ABI int __libcpp_asprintf_l (char ** __s, locale_t __loc, const char * __format, _Args&&... __args) {
97- _LIBCPP_DIAGNOSTIC_PUSH
98- _LIBCPP_CLANG_DIAGNOSTIC_IGNORED (" -Wformat-nonliteral" )
99- _LIBCPP_GCC_DIAGNOSTIC_IGNORED (" -Wformat-nonliteral" )
101+ _LIBCPP_HIDE_FROM_ABI _LIBCPP_VARIADIC_ATTRIBUTE_FORMAT (__printf__, 3 , 4 ) int __libcpp_asprintf_l(
102+ char ** __s, locale_t __loc, const char * __format, _Args&&... __args) {
100103 return ::asprintf_l (__s, __loc, __format, std::forward<_Args>(__args)...);
101- _LIBCPP_DIAGNOSTIC_POP
102104}
103105
104106template <class ... _Args>
105- _LIBCPP_HIDE_FROM_ABI int __libcpp_sscanf_l (const char * __s, locale_t __loc, const char * __format, _Args&&... __args) {
106- _LIBCPP_DIAGNOSTIC_PUSH
107- _LIBCPP_CLANG_DIAGNOSTIC_IGNORED (" -Wformat-nonliteral" )
108- _LIBCPP_GCC_DIAGNOSTIC_IGNORED (" -Wformat-nonliteral" )
107+ _LIBCPP_HIDE_FROM_ABI _LIBCPP_VARIADIC_ATTRIBUTE_FORMAT (__scanf__, 3 , 4 ) int __libcpp_sscanf_l(
108+ const char * __s, locale_t __loc, const char * __format, _Args&&... __args) {
109109 return ::sscanf_l (__s, __loc, __format, std::forward<_Args>(__args)...);
110- _LIBCPP_DIAGNOSTIC_POP
111110}
111+ _LIBCPP_DIAGNOSTIC_POP
112112
113113_LIBCPP_END_NAMESPACE_STD
114114
0 commit comments