WebAssembly: Suppress warnings & errors in GCC
authorutatane.tea@gmail.com <utatane.tea@gmail.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Sat, 14 Jan 2017 19:35:23 +0000 (19:35 +0000)
committerutatane.tea@gmail.com <utatane.tea@gmail.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Sat, 14 Jan 2017 19:35:23 +0000 (19:35 +0000)
https://bugs.webkit.org/show_bug.cgi?id=167049

Reviewed by Sam Weinig.

Source/JavaScriptCore:

* wasm/WasmFunctionParser.h:
Add missing { } after the switch. Ideally, it is not necessary.
But in GCC, it is required. Since this function is fairly large,
I think the code generated by this does not cause performance
regression.

* wasm/WasmPageCount.h:
UINT_MAX is defined in limits.h.

* wasm/generateWasmValidateInlinesHeader.py:
On the other hand, we use this suppress pragma here to solve the
same problem in wasm/WasmFunctionParser.h. Since the load function
is fairly small, the additional `return { };` may generate some
suboptimal code. See bug 150794 for more detail.

Source/WTF:

* wtf/LEBDecoder.h:
(WTF::LEBDecoder::decodeInt):
If T = int, it performs `-1 << shift`. It causes
warning in GCC. Instead, we first cast it to the
UnsignedT, perform operation and re-cast to the
T.

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

Source/JavaScriptCore/ChangeLog
Source/JavaScriptCore/wasm/WasmFunctionParser.h
Source/JavaScriptCore/wasm/WasmPageCount.h
Source/JavaScriptCore/wasm/generateWasmValidateInlinesHeader.py
Source/WTF/ChangeLog
Source/WTF/wtf/LEBDecoder.h

index 552f736..2eb7807 100644 (file)
@@ -1,5 +1,27 @@
 2017-01-14  Yusuke Suzuki  <utatane.tea@gmail.com>
 
+        WebAssembly: Suppress warnings & errors in GCC
+        https://bugs.webkit.org/show_bug.cgi?id=167049
+
+        Reviewed by Sam Weinig.
+
+        * wasm/WasmFunctionParser.h:
+        Add missing { } after the switch. Ideally, it is not necessary.
+        But in GCC, it is required. Since this function is fairly large,
+        I think the code generated by this does not cause performance
+        regression.
+
+        * wasm/WasmPageCount.h:
+        UINT_MAX is defined in limits.h.
+
+        * wasm/generateWasmValidateInlinesHeader.py:
+        On the other hand, we use this suppress pragma here to solve the
+        same problem in wasm/WasmFunctionParser.h. Since the load function
+        is fairly small, the additional `return { };` may generate some
+        suboptimal code. See bug 150794 for more detail.
+
+2017-01-14  Yusuke Suzuki  <utatane.tea@gmail.com>
+
         Reserve capacity for StringBuilder in unescape
         https://bugs.webkit.org/show_bug.cgi?id=167008
 
index 31105d8..64e3b36 100644 (file)
@@ -327,7 +327,7 @@ auto FunctionParser<Context>::parseExpression(OpType op) -> PartialResult
         if (result != Context::emptyExpression)
             m_expressionStack.append(result);
 
-            return { };
+        return { };
     }
 
     case CallIndirect: {
@@ -511,6 +511,7 @@ auto FunctionParser<Context>::parseExpression(OpType op) -> PartialResult
     }
 
     ASSERT_NOT_REACHED();
+    return { };
 }
 
 // FIXME: We should try to use the same decoder function for both unreachable and reachable code. https://bugs.webkit.org/show_bug.cgi?id=165965
index 67dbb55..e43847c 100644 (file)
@@ -27,6 +27,8 @@
 
 #if ENABLE(WEBASSEMBLY)
 
+#include <limits.h>
+
 namespace WTF {
 class PrintStream;
 }
index 52b66b1..c3d3712 100755 (executable)
@@ -125,6 +125,13 @@ contents = wasm.header + """
 
 #if ENABLE(WEBASSEMBLY)
 
+#include <wtf/StdLibExtras.h>
+
+#if COMPILER(GCC) && ASSERT_DISABLED
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wreturn-type"
+#endif // COMPILER(GCC) && ASSERT_DISABLED
+
 namespace JSC { namespace Wasm {
 
 """ + unarySpecializations + binarySpecializations + """
@@ -151,6 +158,10 @@ auto Validate::store(StoreOpType op, ExpressionType pointer, ExpressionType valu
 
 } } // namespace JSC::Wasm
 
+#if COMPILER(GCC) && ASSERT_DISABLED
+#pragma GCC diagnostic pop
+#endif // COMPILER(GCC) && ASSERT_DISABLED
+
 #endif // ENABLE(WEBASSEMBLY)
 
 """
index 3add8e6..49ca3a8 100644 (file)
@@ -1,3 +1,17 @@
+2017-01-14  Yusuke Suzuki  <utatane.tea@gmail.com>
+
+        WebAssembly: Suppress warnings & errors in GCC
+        https://bugs.webkit.org/show_bug.cgi?id=167049
+
+        Reviewed by Sam Weinig.
+
+        * wtf/LEBDecoder.h:
+        (WTF::LEBDecoder::decodeInt):
+        If T = int, it performs `-1 << shift`. It causes
+        warning in GCC. Instead, we first cast it to the
+        UnsignedT, perform operation and re-cast to the
+        T.
+
 2017-01-13  Joseph Pecoraro  <pecoraro@apple.com>
 
         Remove ENABLE(DETAILS_ELEMENT) guards
index 1d48176..e14a527 100644 (file)
@@ -78,8 +78,9 @@ inline bool WARN_UNUSED_RETURN decodeInt(const uint8_t* bytes, size_t length, si
             return false;
     }
 
+    using UnsignedT = typename std::make_unsigned<T>::type;
     if (shift < numBits && (byte & 0x40))
-        result |= static_cast<T>(-1) << shift;
+        result = static_cast<T>(static_cast<UnsignedT>(result) | (static_cast<UnsignedT>(-1) << shift));
     return true;
 }