bmalloc: Fix 'noreturn' warnings when compiling with -std=gnu++17
authorddkilzer@apple.com <ddkilzer@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 7 Jun 2018 21:05:29 +0000 (21:05 +0000)
committerddkilzer@apple.com <ddkilzer@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 7 Jun 2018 21:05:29 +0000 (21:05 +0000)
<https://webkit.org/b/186400>

Reviewed by Saam Barati.

Fixes the following warnings when compiling with gnu++17:

    Source/bmalloc/bmalloc/Scavenger.cpp:363:1: error: function 'threadRunLoop' could be declared with attribute 'noreturn' [-Werror,-Wmissing-noreturn]
    {
    ^
    Source/bmalloc/bmalloc/Scavenger.cpp:358:1: error: function 'threadEntryPoint' could be declared with attribute 'noreturn' [-Werror,-Wmissing-noreturn]
    {
    ^

* bmalloc/BCompiler.h:
(BCOMPILER): Add support for the BCOMPILER() macro, then add
BCOMPILER(GCC_OR_CLANG).  Taken from Source/WTF/wtf/Compiler.h.
(BNO_RETURN): Implement 'norerturn' support using the new
BCOMPILER() macros.  Taken from Source/WTF/wtf/Compiler.h.
* bmalloc/Scavenger.cpp:
(bmalloc::Scavenger::threadRunLoop): Remove the workaround that
tricked older compilers into thinking the while() loop wasn't
infinite.
* bmalloc/Scavenger.h:
(bmalloc::Scavenger::threadEntryPoint): Add BNO_RETURN attribute.
(bmalloc::Scavenger::threadRunLoop): Ditto.

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

Source/bmalloc/ChangeLog
Source/bmalloc/bmalloc/BCompiler.h
Source/bmalloc/bmalloc/Scavenger.cpp
Source/bmalloc/bmalloc/Scavenger.h

index 2e9c829..c0de689 100644 (file)
@@ -1,3 +1,32 @@
+2018-06-07  David Kilzer  <ddkilzer@apple.com>
+
+        bmalloc: Fix 'noreturn' warnings when compiling with -std=gnu++17
+        <https://webkit.org/b/186400>
+
+        Reviewed by Saam Barati.
+
+        Fixes the following warnings when compiling with gnu++17:
+
+            Source/bmalloc/bmalloc/Scavenger.cpp:363:1: error: function 'threadRunLoop' could be declared with attribute 'noreturn' [-Werror,-Wmissing-noreturn]
+            {
+            ^
+            Source/bmalloc/bmalloc/Scavenger.cpp:358:1: error: function 'threadEntryPoint' could be declared with attribute 'noreturn' [-Werror,-Wmissing-noreturn]
+            {
+            ^
+
+        * bmalloc/BCompiler.h:
+        (BCOMPILER): Add support for the BCOMPILER() macro, then add
+        BCOMPILER(GCC_OR_CLANG).  Taken from Source/WTF/wtf/Compiler.h.
+        (BNO_RETURN): Implement 'norerturn' support using the new
+        BCOMPILER() macros.  Taken from Source/WTF/wtf/Compiler.h.
+        * bmalloc/Scavenger.cpp:
+        (bmalloc::Scavenger::threadRunLoop): Remove the workaround that
+        tricked older compilers into thinking the while() loop wasn't
+        infinite.
+        * bmalloc/Scavenger.h:
+        (bmalloc::Scavenger::threadEntryPoint): Add BNO_RETURN attribute.
+        (bmalloc::Scavenger::threadRunLoop): Ditto.
+
 2018-05-29  Saam Barati  <sbarati@apple.com>
 
         JSC should put bmalloc's scavenger into mini mode
index 1a927d8..055326e 100644 (file)
@@ -25,6 +25,9 @@
 
 #pragma once
 
+/* BCOMPILER() - the compiler being used to build the project */
+#define BCOMPILER(BFEATURE) (defined BCOMPILER_##BFEATURE && BCOMPILER_##BFEATURE)
+
 /* BCOMPILER_HAS_CLANG_FEATURE() - whether the compiler supports a particular language or library feature. */
 /* http://clang.llvm.org/docs/LanguageExtensions.html#has-feature-and-has-extension */
 #ifdef __has_feature
 
 #define BASAN_ENABLED BCOMPILER_HAS_CLANG_FEATURE(address_sanitizer)
 
+/* BCOMPILER(GCC_OR_CLANG) - GNU Compiler Collection or Clang */
+
+#if defined(__GNUC__)
+#define BCOMPILER_GCC_OR_CLANG 1
+#endif
+
+/* BNO_RETURN */
+
+#if !defined(BNO_RETURN) && BCOMPILER(GCC_OR_CLANG)
+#define BNO_RETURN __attribute((__noreturn__))
+#endif
+
+#if !defined(BNO_RETURN)
+#define BNO_RETURN
+#endif
+
index 724c3f7..de99c17 100644 (file)
@@ -374,9 +374,7 @@ void Scavenger::threadRunLoop()
     // We require any state change while we are sleeping to signal to our
     // condition variable and wake us up.
     
-    auto truth = [] { return true; };
-    
-    while (truth()) {
+    while (true) {
         if (m_state == State::Sleep) {
             std::unique_lock<Mutex> lock(m_mutex);
             m_condition.wait(lock, [&]() { return m_state != State::Sleep; });
index 919f6e9..849d4d9 100644 (file)
@@ -82,8 +82,8 @@ private:
 
     void scheduleIfUnderMemoryPressureHoldingLock(size_t bytes);
 
-    static void threadEntryPoint(Scavenger*);
-    void threadRunLoop();
+    BNO_RETURN static void threadEntryPoint(Scavenger*);
+    BNO_RETURN void threadRunLoop();
     
     void setSelfQOSClass();
     void setThreadName(const char*);