Add 'inline' attribute to __init to inline the basic_string's constructor
basic_string's constructor calls init which was not getting inlined. This
prevented optimization of const string as init would appear as a call in between
a string's def and use.
Patch by Laxman Sole and Aditya Kumar.
Differential Revision: https://reviews.llvm.org/D22782
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@278356 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/include/string b/include/string
index 94e70e0..8d947c6 100644
--- a/include/string
+++ b/include/string
@@ -1442,6 +1442,7 @@
}
template <class _CharT, class _Traits, class _Allocator>
+inline _LIBCPP_INLINE_VISIBILITY
void
basic_string<_CharT, _Traits, _Allocator>::__init(const value_type* __s, size_type __sz, size_type __reserve)
{
@@ -1466,6 +1467,7 @@
}
template <class _CharT, class _Traits, class _Allocator>
+inline _LIBCPP_INLINE_VISIBILITY
void
basic_string<_CharT, _Traits, _Allocator>::__init(const value_type* __s, size_type __sz)
{
@@ -1603,6 +1605,7 @@
#endif // _LIBCPP_HAS_NO_RVALUE_REFERENCES
template <class _CharT, class _Traits, class _Allocator>
+inline _LIBCPP_INLINE_VISIBILITY
void
basic_string<_CharT, _Traits, _Allocator>::__init(size_type __n, value_type __c)
{
@@ -1699,6 +1702,7 @@
template <class _CharT, class _Traits, class _Allocator>
template <class _InputIterator>
+inline _LIBCPP_INLINE_VISIBILITY
typename enable_if
<
__is_exactly_input_iterator<_InputIterator>::value,
@@ -1726,6 +1730,7 @@
template <class _CharT, class _Traits, class _Allocator>
template <class _ForwardIterator>
+inline _LIBCPP_INLINE_VISIBILITY
typename enable_if
<
__is_forward_iterator<_ForwardIterator>::value,