@@ -82,33 +82,33 @@ __libcpp_mbsrtowcs_l(wchar_t* __dest, const char** __src, size_t __len, mbstate_
82
82
}
83
83
#endif
84
84
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
+
85
94
template <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) {
91
97
return ::snprintf_l (__s, __n, __loc, __format, std::forward<_Args>(__args)...);
92
- _LIBCPP_DIAGNOSTIC_POP
93
98
}
94
99
95
100
template <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) {
100
103
return ::asprintf_l (__s, __loc, __format, std::forward<_Args>(__args)...);
101
- _LIBCPP_DIAGNOSTIC_POP
102
104
}
103
105
104
106
template <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) {
109
109
return ::sscanf_l (__s, __loc, __format, std::forward<_Args>(__args)...);
110
- _LIBCPP_DIAGNOSTIC_POP
111
110
}
111
+ _LIBCPP_DIAGNOSTIC_POP
112
112
113
113
_LIBCPP_END_NAMESPACE_STD
114
114
0 commit comments