aboutsummaryrefslogtreecommitdiff
path: root/libstdc++-v3
diff options
context:
space:
mode:
authorJonathan Wakely <jwakely@redhat.com>2015-10-02 20:38:38 +0100
committerJonathan Wakely <redi@gcc.gnu.org>2015-10-02 20:38:38 +0100
commit7fcdbdd21d6adc14421bc8de439bf91b58eae6d1 (patch)
treeb5f3384755c093faaa1c510b9ac28d3738c27c76 /libstdc++-v3
parent43222a5ec8d80b39a3731194c2e960be50dde221 (diff)
downloadgcc-7fcdbdd21d6adc14421bc8de439bf91b58eae6d1.zip
gcc-7fcdbdd21d6adc14421bc8de439bf91b58eae6d1.tar.gz
gcc-7fcdbdd21d6adc14421bc8de439bf91b58eae6d1.tar.bz2
Allow Filesystem TS to compile without wchar_t
* include/bits/locale_conv.h [!_GLIBCXX_USE_WCHAR_T] (__do_str_codecvt, __str_codecvt_in, __str_codecvt_out): Enable. * include/experimental/fs_path.h [!_GLIBCXX_USE_WCHAR_T] (path::wstring, path::generic_wstring): Disable. * src/filesystem/path.cc (path::_S_convert_loc) [!_GLIBCXX_USE_WCHAR_T]: Skip conversion. * testsuite/experimental/filesystem/path/assign/assign.cc: Check for wchar_t support. * testsuite/experimental/filesystem/path/concat/strings.cc: Likewise. * testsuite/experimental/filesystem/path/construct/range.cc: Likewise. From-SVN: r228417
Diffstat (limited to 'libstdc++-v3')
-rw-r--r--libstdc++-v3/ChangeLog11
-rw-r--r--libstdc++-v3/include/bits/locale_conv.h8
-rw-r--r--libstdc++-v3/include/experimental/fs_path.h8
-rw-r--r--libstdc++-v3/src/filesystem/path.cc6
-rw-r--r--libstdc++-v3/testsuite/experimental/filesystem/path/assign/assign.cc4
-rw-r--r--libstdc++-v3/testsuite/experimental/filesystem/path/concat/strings.cc4
-rw-r--r--libstdc++-v3/testsuite/experimental/filesystem/path/construct/range.cc9
7 files changed, 42 insertions, 8 deletions
diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog
index 287768e..57b9f47 100644
--- a/libstdc++-v3/ChangeLog
+++ b/libstdc++-v3/ChangeLog
@@ -1,5 +1,16 @@
2015-10-02 Jonathan Wakely <jwakely@redhat.com>
+ * include/bits/locale_conv.h [!_GLIBCXX_USE_WCHAR_T]
+ (__do_str_codecvt, __str_codecvt_in, __str_codecvt_out): Enable.
+ * include/experimental/fs_path.h [!_GLIBCXX_USE_WCHAR_T]
+ (path::wstring, path::generic_wstring): Disable.
+ * src/filesystem/path.cc (path::_S_convert_loc)
+ [!_GLIBCXX_USE_WCHAR_T]: Skip conversion.
+ * testsuite/experimental/filesystem/path/assign/assign.cc: Check for
+ wchar_t support.
+ * testsuite/experimental/filesystem/path/concat/strings.cc: Likewise.
+ * testsuite/experimental/filesystem/path/construct/range.cc: Likewise.
+
* testsuite/util/testsuite_fs.h (nonexistent_path): Use less generic
name for paths. Prefer snprintf to sprintf.
diff --git a/libstdc++-v3/include/bits/locale_conv.h b/libstdc++-v3/include/bits/locale_conv.h
index 146f78b..16b4875 100644
--- a/libstdc++-v3/include/bits/locale_conv.h
+++ b/libstdc++-v3/include/bits/locale_conv.h
@@ -44,8 +44,6 @@ namespace std _GLIBCXX_VISIBILITY(default)
{
_GLIBCXX_BEGIN_NAMESPACE_VERSION
-#ifdef _GLIBCXX_USE_WCHAR_T
-
/**
* @addtogroup locales
* @{
@@ -157,6 +155,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
return __str_codecvt_out(__first, __last, __outstr, __cvt, __state, __n);
}
+#ifdef _GLIBCXX_USE_WCHAR_T
+
_GLIBCXX_BEGIN_NAMESPACE_CXX11
/// String conversions
@@ -533,10 +533,10 @@ _GLIBCXX_END_NAMESPACE_CXX11
bool _M_always_noconv;
};
- /// @} group locales
-
#endif // _GLIBCXX_USE_WCHAR_T
+ /// @} group locales
+
_GLIBCXX_END_NAMESPACE_VERSION
} // namespace
diff --git a/libstdc++-v3/include/experimental/fs_path.h b/libstdc++-v3/include/experimental/fs_path.h
index 5daef12..40462a6 100644
--- a/libstdc++-v3/include/experimental/fs_path.h
+++ b/libstdc++-v3/include/experimental/fs_path.h
@@ -279,7 +279,9 @@ _GLIBCXX_BEGIN_NAMESPACE_CXX11
string(const _Allocator& __a = _Allocator()) const;
std::string string() const;
+#if _GLIBCXX_USE_WCHAR_T
std::wstring wstring() const;
+#endif
std::string u8string() const;
std::u16string u16string() const;
std::u32string u32string() const;
@@ -291,7 +293,9 @@ _GLIBCXX_BEGIN_NAMESPACE_CXX11
generic_string(const _Allocator& __a = _Allocator()) const;
std::string generic_string() const;
+#if _GLIBCXX_USE_WCHAR_T
std::wstring generic_wstring() const;
+#endif
std::string generic_u8string() const;
std::u16string generic_u16string() const;
std::u32string generic_u32string() const;
@@ -828,8 +832,10 @@ _GLIBCXX_BEGIN_NAMESPACE_CXX11
inline std::string
path::string() const { return string<char>(); }
+#if _GLIBCXX_USE_WCHAR_T
inline std::wstring
path::wstring() const { return string<wchar_t>(); }
+#endif
inline std::string
path::u8string() const
@@ -865,8 +871,10 @@ _GLIBCXX_BEGIN_NAMESPACE_CXX11
inline std::string
path::generic_string() const { return string(); }
+#if _GLIBCXX_USE_WCHAR_T
inline std::wstring
path::generic_wstring() const { return wstring(); }
+#endif
inline std::string
path::generic_u8string() const { return u8string(); }
diff --git a/libstdc++-v3/src/filesystem/path.cc b/libstdc++-v3/src/filesystem/path.cc
index a5441b9..e85c9fc 100644
--- a/libstdc++-v3/src/filesystem/path.cc
+++ b/libstdc++-v3/src/filesystem/path.cc
@@ -437,8 +437,9 @@ path::_M_trim()
path::string_type
path::_S_convert_loc(const char* __first, const char* __last,
- const std::locale& __loc)
+ const std::locale& __loc)
{
+#if _GLIBCXX_USE_WCHAR_T
auto& __cvt = std::use_facet<codecvt<wchar_t, char, mbstate_t>>(__loc);
basic_string<wchar_t> __ws;
if (!__str_codecvt_in(__first, __last, __ws, __cvt))
@@ -450,6 +451,9 @@ path::_S_convert_loc(const char* __first, const char* __last,
#else
return _Cvt<wchar_t>::_S_convert(__ws.data(), __ws.data() + __ws.size());
#endif
+#else
+ return {__first, __last};
+#endif
}
std::size_t
diff --git a/libstdc++-v3/testsuite/experimental/filesystem/path/assign/assign.cc b/libstdc++-v3/testsuite/experimental/filesystem/path/assign/assign.cc
index 6fd24a7..fe4f96c 100644
--- a/libstdc++-v3/testsuite/experimental/filesystem/path/assign/assign.cc
+++ b/libstdc++-v3/testsuite/experimental/filesystem/path/assign/assign.cc
@@ -36,6 +36,7 @@ test01()
p2 = s.c_str();
compare_paths(p0, p2);
+#if _GLIBCXX_USE_WCHAR_T
std::wstring ws(s.begin(), s.end());
p3 = ws;
@@ -43,6 +44,7 @@ test01()
p4 = ws.c_str();
compare_paths(p0, p4);
+#endif
}
}
@@ -65,6 +67,7 @@ test02()
p4.assign( s.c_str(), s.c_str() + s.size() );
compare_paths(p0, p4);
+#if _GLIBCXX_USE_WCHAR_T
std::wstring ws(s.begin(), s.end());
p5.assign(ws);
@@ -78,6 +81,7 @@ test02()
p8.assign( ws.c_str(), ws.c_str() + ws.size() );
compare_paths(p0, p8);
+#endif
}
}
diff --git a/libstdc++-v3/testsuite/experimental/filesystem/path/concat/strings.cc b/libstdc++-v3/testsuite/experimental/filesystem/path/concat/strings.cc
index e75e790..61ef7e4 100644
--- a/libstdc++-v3/testsuite/experimental/filesystem/path/concat/strings.cc
+++ b/libstdc++-v3/testsuite/experimental/filesystem/path/concat/strings.cc
@@ -35,7 +35,11 @@ test01()
VERIFY( p.filename() == "foobar" );
p += '/';
VERIFY( p.parent_path() == "/foobar" && p.filename() == "." );
+#if _GLIBCXX_USE_WCHAR_T
p += L"baz.txt";
+#else
+ p += "baz.txt";
+#endif
VERIFY( p.filename() == "baz.txt" );
p.concat("/dir/");
VERIFY( p.parent_path() == "/foobar/baz.txt/dir" && p.filename() == "." );
diff --git a/libstdc++-v3/testsuite/experimental/filesystem/path/construct/range.cc b/libstdc++-v3/testsuite/experimental/filesystem/path/construct/range.cc
index 03e5085..2e892291 100644
--- a/libstdc++-v3/testsuite/experimental/filesystem/path/construct/range.cc
+++ b/libstdc++-v3/testsuite/experimental/filesystem/path/construct/range.cc
@@ -37,19 +37,22 @@ test01()
path p3( s.c_str() );
path p4( s.c_str(), s.c_str() + s.size() );
+ compare_paths(p1, p2);
+ compare_paths(p1, p3);
+ compare_paths(p1, p4);
+
+#if _GLIBCXX_USE_WCHAR_T
std::wstring ws(s.begin(), s.end());
path p5 = ws;
path p6( ws.begin(), ws.end() );
path p7( ws.c_str() );
path p8( ws.c_str(), ws.c_str() + ws.size() );
- compare_paths(p1, p2);
- compare_paths(p1, p3);
- compare_paths(p1, p4);
compare_paths(p1, p5);
compare_paths(p1, p6);
compare_paths(p1, p7);
compare_paths(p1, p8);
+#endif
}
}