REGRESSION(r225769): Build errors with constexpr std::tie on older gcc
authorutatane.tea@gmail.com <utatane.tea@gmail.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 14 Dec 2017 08:17:56 +0000 (08:17 +0000)
committerutatane.tea@gmail.com <utatane.tea@gmail.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 14 Dec 2017 08:17:56 +0000 (08:17 +0000)
https://bugs.webkit.org/show_bug.cgi?id=180692

Reviewed by Carlos Garcia Campos.

Source/WebCore:

* platform/graphics/FontSelectionAlgorithm.h:
(WebCore::FontSelectionRange::operator== const):
(WebCore::FontSelectionRequest::tied const):
(WebCore::FontSelectionCapabilities::tied const):
(WebCore::FontSelectionSpecifiedCapabilities:: const):

Source/WTF:

Due to libstdc++'s bug[1], std::tie is not annotated with constexpr in libstdc++ 5.
This patch adds WTF::tie for a work around. Since we do not want to
include <tuple> in StdLibExtras.h, we define this function for all
the compilers.

[1]: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=65978

* wtf/StdLibExtras.h:

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@225896 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Source/WTF/ChangeLog
Source/WTF/wtf/StdLibExtras.h
Source/WebCore/ChangeLog
Source/WebCore/platform/graphics/FontSelectionAlgorithm.h

index 5017f93..6b70ba6 100644 (file)
@@ -1,3 +1,19 @@
+2017-12-12  Yusuke Suzuki  <utatane.tea@gmail.com>
+
+        REGRESSION(r225769): Build errors with constexpr std::tie on older gcc
+        https://bugs.webkit.org/show_bug.cgi?id=180692
+
+        Reviewed by Carlos Garcia Campos.
+
+        Due to libstdc++'s bug[1], std::tie is not annotated with constexpr in libstdc++ 5.
+        This patch adds WTF::tie for a work around. Since we do not want to
+        include <tuple> in StdLibExtras.h, we define this function for all
+        the compilers.
+
+        [1]: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=65978
+
+        * wtf/StdLibExtras.h:
+
 2017-12-13  Mark Lam  <mark.lam@apple.com>
 
         Fill out some Poisoned APIs, fix some bugs, and add some tests.
index d437f8c..855d71f 100644 (file)
@@ -445,6 +445,14 @@ IteratorTypeDst mergeDeduplicatedSorted(IteratorTypeLeft leftBegin, IteratorType
     return dstIter;
 }
 
+// libstdc++5 does not have constexpr std::tie. Since we cannot redefine std::tie with constexpr, we define WTF::tie instead.
+// https://gcc.gnu.org/bugzilla/show_bug.cgi?id=65978
+template <class ...Args>
+inline constexpr std::tuple<Args&...> tie(Args&... values) noexcept
+{
+    return std::tuple<Args&...>(values...);
+}
+
 } // namespace WTF
 
 // This version of placement new omits a 0 check.
index 263a137..bdc5203 100644 (file)
@@ -1,3 +1,16 @@
+2017-12-12  Yusuke Suzuki  <utatane.tea@gmail.com>
+
+        REGRESSION(r225769): Build errors with constexpr std::tie on older gcc
+        https://bugs.webkit.org/show_bug.cgi?id=180692
+
+        Reviewed by Carlos Garcia Campos.
+
+        * platform/graphics/FontSelectionAlgorithm.h:
+        (WebCore::FontSelectionRange::operator== const):
+        (WebCore::FontSelectionRequest::tied const):
+        (WebCore::FontSelectionCapabilities::tied const):
+        (WebCore::FontSelectionSpecifiedCapabilities:: const):
+
 2017-12-13  Daniel Bates  <dabates@apple.com>
 
         Fix the Windows build after <https://trac.webkit.org/changeset/225879>
index 66289b7..c7ce1d4 100644 (file)
@@ -283,7 +283,7 @@ struct FontSelectionRange {
 
     constexpr bool operator==(const FontSelectionRange& other) const
     {
-        return std::tie(minimum, maximum) == std::tie(other.minimum, other.maximum);
+        return WTF::tie(minimum, maximum) == WTF::tie(other.minimum, other.maximum);
     }
 
     constexpr bool isValid() const
@@ -334,7 +334,7 @@ struct FontSelectionRequest {
 
     constexpr std::tuple<Value, Value, Value> tied() const
     {
-        return std::tie(weight, width, slope);
+        return WTF::tie(weight, width, slope);
     }
 
 #if !COMPILER_SUPPORTS(NSDMI_FOR_AGGREGATES)
@@ -371,7 +371,7 @@ struct FontSelectionCapabilities {
 
     constexpr std::tuple<Range, Range, Range> tied() const
     {
-        return std::tie(weight, width, slope);
+        return WTF::tie(weight, width, slope);
     }
 
     void expand(const FontSelectionCapabilities& capabilities)
@@ -419,12 +419,12 @@ struct FontSelectionSpecifiedCapabilities {
 
     constexpr std::tuple<OptionalRange&, OptionalRange&, OptionalRange&> tied()
     {
-        return std::tie(weight, width, slope);
+        return WTF::tie(weight, width, slope);
     }
 
     constexpr std::tuple<const OptionalRange&, const OptionalRange&, const OptionalRange&> tied() const
     {
-        return std::tie(weight, width, slope);
+        return WTF::tie(weight, width, slope);
     }
 
     FontSelectionSpecifiedCapabilities& operator=(const Capabilities& other)