Skip to content

Commit 94f7133

Browse files
committed
Use attribute format
1 parent 57492af commit 94f7133

File tree

1 file changed

+16
-16
lines changed

1 file changed

+16
-16
lines changed

libcxx/include/__locale_dir/locale_base_api/bsd_locale_defaults.h

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -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+
8594
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) {
9197
return ::snprintf_l(__s, __n, __loc, __format, std::forward<_Args>(__args)...);
92-
_LIBCPP_DIAGNOSTIC_POP
9398
}
9499

95100
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) {
100103
return ::asprintf_l(__s, __loc, __format, std::forward<_Args>(__args)...);
101-
_LIBCPP_DIAGNOSTIC_POP
102104
}
103105

104106
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) {
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

Comments
 (0)