FOLLY_NORETURN
authorTudor Bosman <tudorb@fb.com>
Sat, 20 Apr 2013 20:17:18 +0000 (13:17 -0700)
committerJordan DeLong <jdelong@fb.com>
Sun, 21 Apr 2013 20:21:44 +0000 (13:21 -0700)
Summary: Seems like a good idea.

Test Plan: compiled all of folly

Reviewed By: delong.j@fb.com

FB internal diff: D783104

folly/Exception.h
folly/FormatArg.h
folly/Portability.h
folly/experimental/exception_tracer/ExceptionTracerLib.cpp
folly/experimental/io/HugePageUtil.cpp

index c2e6eea787122386c3465a28d8b04b19e13b7129..a9300ce451121768d7fb7e680aa545ac31763bf8 100644 (file)
 
 #include "folly/Conv.h"
 #include "folly/Likely.h"
+#include "folly/Portability.h"
 
 namespace folly {
 
 // Helper to throw std::system_error
-void throwSystemError(int err, const char* msg) __attribute__((noreturn));
+void throwSystemError(int err, const char* msg) FOLLY_NORETURN;
 inline void throwSystemError(int err, const char* msg) {
   throw std::system_error(err, std::system_category(), msg);
 }
 
 // Helper to throw std::system_error from errno
-void throwSystemError(const char* msg) __attribute__((noreturn));
+void throwSystemError(const char* msg) FOLLY_NORETURN;
 inline void throwSystemError(const char* msg) {
   throwSystemError(errno, msg);
 }
 
 // Helper to throw std::system_error from errno and components of a string
 template <class... Args>
-void throwSystemError(Args... args) __attribute__((noreturn));
+void throwSystemError(Args... args) FOLLY_NORETURN;
 template <class... Args>
 inline void throwSystemError(Args... args) {
   throwSystemError(errno, folly::to<std::string>(args...));
index c72c03005f799fb9fc8863be9ec3b41c451b652e..124d621d732f0fbf0511e584c1091c7e59647664 100644 (file)
 #define FOLLY_FORMATARG_H_
 
 #include <stdexcept>
-#include "folly/Range.h"
-#include "folly/Likely.h"
 #include "folly/Conv.h"
+#include "folly/Likely.h"
+#include "folly/Portability.h"
+#include "folly/Range.h"
 
 namespace folly {
 
@@ -71,7 +72,7 @@ struct FormatArg {
   }
 
   template <typename... Args>
-  void error(Args&&... args) const __attribute__((noreturn));
+  void error(Args&&... args) const FOLLY_NORETURN;
   /**
    * Full argument string, as passed in to the constructor.
    */
index 14b7c5b081c5178e67f542761597b19796018a4b..a317350c0fdb134bf2f7ad44049838fc034eeeef 100644 (file)
@@ -60,4 +60,10 @@ struct MaxAlign { char c; } __attribute__((aligned));
 # error Cannot define MaxAlign on this platform
 #endif
 
+#if defined(__clang__) || defined(__GNUC__)
+# define FOLLY_NORETURN __attribute__((noreturn))
+#else
+# define FOLLY_NORETURN
+#endif
+
 #endif // FOLLY_PORTABILITY_H_
index 2a7c954b8619c04011088e4e5e5bb97023d71d79..eab33fd3efbb0836f9859acea6b61591f3248f0f 100644 (file)
@@ -20,6 +20,7 @@
 
 #include <glog/logging.h>
 
+#include "folly/Portability.h"
 #include "folly/experimental/exception_tracer/StackTrace.h"
 #include "folly/experimental/exception_tracer/ExceptionAbi.h"
 #include "folly/experimental/exception_tracer/ExceptionTracer.h"
@@ -28,9 +29,9 @@ namespace __cxxabiv1 {
 
 extern "C" {
 void __cxa_throw(void* thrownException, std::type_info* type,
-                 void (*destructor)(void)) __attribute__((noreturn));
+                 void (*destructor)(void)) FOLLY_NORETURN;
 void* __cxa_begin_catch(void* excObj);
-void __cxa_rethrow(void) __attribute__((noreturn));
+void __cxa_rethrow(void) FOLLY_NORETURN;
 void __cxa_end_catch(void);
 }
 
@@ -45,10 +46,10 @@ pthread_once_t initialized = PTHREAD_ONCE_INIT;
 
 extern "C" {
 typedef void (*CxaThrowType)(void*, std::type_info*, void (*)(void))
-  __attribute__((noreturn));
+  FOLLY_NORETURN;
 typedef void* (*CxaBeginCatchType)(void*);
 typedef void (*CxaRethrowType)(void)
-  __attribute__((noreturn));
+  FOLLY_NORETURN;
 typedef void (*CxaEndCatchType)(void);
 
 CxaThrowType orig_cxa_throw;
@@ -58,7 +59,7 @@ CxaEndCatchType orig_cxa_end_catch;
 }  // extern "C"
 
 typedef void (*RethrowExceptionType)(std::exception_ptr)
-  __attribute__((noreturn));
+  FOLLY_NORETURN;
 RethrowExceptionType orig_rethrow_exception;
 
 void initialize() {
index 1715da99673b0527d2e6ac49f2adff8c5960b8c4..3b2053ec9febe3bf4baa9866c8add0e215426d8f 100644 (file)
 
 #include <gflags/gflags.h>
 
-#include "folly/experimental/io/HugePages.h"
 #include "folly/Format.h"
+#include "folly/Portability.h"
 #include "folly/Range.h"
 #include "folly/ScopeGuard.h"
+#include "folly/experimental/io/HugePages.h"
 
 DEFINE_bool(cp, false, "Copy file");
 
@@ -38,7 +39,7 @@ using namespace folly;
 
 namespace {
 
-void usage(const char* name) __attribute__((noreturn));
+void usage(const char* name) FOLLY_NORETURN;
 
 void usage(const char* name) {
   std::cerr << folly::format(