-
Notifications
You must be signed in to change notification settings - Fork 12.3k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[libc++] __uglify [[clang::noescape]]
#113280
[libc++] __uglify [[clang::noescape]]
#113280
Conversation
@llvm/pr-subscribers-libcxx Author: A. Jiang (frederick-vs-ja) ChangesIdentifiers Also changes the occurrences of that attribute to a macro, following the convention for Addresses #91651 (comment). Full diff: https://github.com/llvm/llvm-project/pull/113280.diff 4 Files Affected:
diff --git a/libcxx/include/__charconv/from_chars_floating_point.h b/libcxx/include/__charconv/from_chars_floating_point.h
index 2860b0e8da83af..5cd3fc4a41ea1d 100644
--- a/libcxx/include/__charconv/from_chars_floating_point.h
+++ b/libcxx/include/__charconv/from_chars_floating_point.h
@@ -37,13 +37,13 @@ struct __from_chars_result {
template <class _Fp>
_LIBCPP_EXPORTED_FROM_ABI __from_chars_result<_Fp> __from_chars_floating_point(
- [[clang::noescape]] const char* __first, [[clang::noescape]] const char* __last, chars_format __fmt);
+ _LIBCPP_NOESCAPE const char* __first, _LIBCPP_NOESCAPE const char* __last, chars_format __fmt);
extern template __from_chars_result<float> __from_chars_floating_point(
- [[clang::noescape]] const char* __first, [[clang::noescape]] const char* __last, chars_format __fmt);
+ _LIBCPP_NOESCAPE const char* __first, _LIBCPP_NOESCAPE const char* __last, chars_format __fmt);
extern template __from_chars_result<double> __from_chars_floating_point(
- [[clang::noescape]] const char* __first, [[clang::noescape]] const char* __last, chars_format __fmt);
+ _LIBCPP_NOESCAPE const char* __first, _LIBCPP_NOESCAPE const char* __last, chars_format __fmt);
template <class _Fp>
_LIBCPP_HIDE_FROM_ABI from_chars_result
diff --git a/libcxx/include/__config b/libcxx/include/__config
index fcba56f7e3d5b1..fca1a01851e81e 100644
--- a/libcxx/include/__config
+++ b/libcxx/include/__config
@@ -1167,6 +1167,12 @@ typedef __char32_t char32_t;
# define _LIBCPP_LIFETIMEBOUND
# endif
+# if __has_cpp_attribute(_Clang::__noescape__)
+# define _LIBCPP_NOESCAPE [[_Clang::__noescape__]]
+# else
+# define _LIBCPP_NOESCAPE
+# endif
+
# if __has_attribute(__nodebug__)
# define _LIBCPP_NODEBUG __attribute__((__nodebug__))
# else
diff --git a/libcxx/src/charconv.cpp b/libcxx/src/charconv.cpp
index 3fe0afec0e283c..5e8cb7d97703b4 100644
--- a/libcxx/src/charconv.cpp
+++ b/libcxx/src/charconv.cpp
@@ -77,13 +77,13 @@ to_chars_result to_chars(char* __first, char* __last, long double __value, chars
template <class _Fp>
__from_chars_result<_Fp> __from_chars_floating_point(
- [[clang::noescape]] const char* __first, [[clang::noescape]] const char* __last, chars_format __fmt) {
+ _LIBCPP_NOESCAPE const char* __first, _LIBCPP_NOESCAPE const char* __last, chars_format __fmt) {
return std::__from_chars_floating_point_impl<_Fp>(__first, __last, __fmt);
}
template __from_chars_result<float> __from_chars_floating_point(
- [[clang::noescape]] const char* __first, [[clang::noescape]] const char* __last, chars_format __fmt);
+ _LIBCPP_NOESCAPE const char* __first, _LIBCPP_NOESCAPE const char* __last, chars_format __fmt);
template __from_chars_result<double> __from_chars_floating_point(
- [[clang::noescape]] const char* __first, [[clang::noescape]] const char* __last, chars_format __fmt);
+ _LIBCPP_NOESCAPE const char* __first, _LIBCPP_NOESCAPE const char* __last, chars_format __fmt);
_LIBCPP_END_NAMESPACE_STD
diff --git a/libcxx/test/libcxx/system_reserved_names.gen.py b/libcxx/test/libcxx/system_reserved_names.gen.py
index e29e7a2cdd6144..f3ded81cb0a2d6 100644
--- a/libcxx/test/libcxx/system_reserved_names.gen.py
+++ b/libcxx/test/libcxx/system_reserved_names.gen.py
@@ -154,6 +154,11 @@
#define Xp SYSTEM_RESERVED_NAME
#define Xs SYSTEM_RESERVED_NAME
+// These attribute-tokens are not reserved, so the user can macro-define them.
+#define clang SYSTEM_RESERVED_NAME
+#define lifetimebound SYSTEM_RESERVED_NAME
+#define noescape SYSTEM_RESERVED_NAME
+
// The classic Windows min/max macros
#define min SYSTEM_RESERVED_NAME
#define max SYSTEM_RESERVED_NAME
|
This comment was marked as resolved.
This comment was marked as resolved.
Identifiers `clang` and `noescape` are not reserved by the C++ standard, so perhaps we need to use the equivalent reserved forms. Also changes the occurrences of that attribute to a macro, following the convention for `[[_Clang::__lifetimebound__]]`.
577cdb2
to
3a0dba9
Compare
No, I don't have a patch yet. I just wanted to add documentation that can reference that macro. |
Identifiers `clang` and `noescape` are not reserved by the C++ standard, so perhaps we need to use the equivalent reserved forms. Also changes the occurrences of that attribute to a macro, following the convention for `[[_Clang::__lifetimebound__]]`. Addresses llvm#91651 (comment).
Identifiers
clang
andnoescape
are not reserved by the C++ standard, so perhaps we need to use the equivalent reserved forms.Also changes the occurrences of that attribute to a macro, following the convention for
[[_Clang::__lifetimebound__]]
.Addresses #91651 (comment).