+//\r
+// Signaling compilers and analyzers that a certain function cannot return may\r
+// remove all following code and thus lead to better optimization and less\r
+// false positives.\r
+//\r
+#ifndef NORETURN\r
+ #if defined (__GNUC__) || defined (__clang__)\r
+ ///\r
+ /// Signal compilers and analyzers that the function cannot return.\r
+ /// It is up to the compiler to remove any code past a call to functions\r
+ /// flagged with this attribute.\r
+ ///\r
+ #define NORETURN __attribute__((noreturn))\r
+ #elif defined(_MSC_EXTENSIONS) && !defined(MDE_CPU_EBC)\r
+ ///\r
+ /// Signal compilers and analyzers that the function cannot return.\r
+ /// It is up to the compiler to remove any code past a call to functions\r
+ /// flagged with this attribute.\r
+ ///\r
+ #define NORETURN __declspec(noreturn)\r
+ #else\r
+ ///\r
+ /// Signal compilers and analyzers that the function cannot return.\r
+ /// It is up to the compiler to remove any code past a call to functions\r
+ /// flagged with this attribute.\r
+ ///\r
+ #define NORETURN\r
+ #endif\r
+#endif\r
+\r
+//\r
+// Should be used in combination with ANALYZER_NORETURN to avoid 'noreturn'\r
+// returns warnings.\r
+//\r
+#ifndef ANALYZER_UNREACHABLE\r
+ #ifdef __clang_analyzer__\r
+ #if __has_builtin (__builtin_unreachable)\r
+ ///\r
+ /// Signal the analyzer that this call is not reachable.\r
+ /// This excludes compilers.\r
+ ///\r
+ #define ANALYZER_UNREACHABLE() __builtin_unreachable ()\r
+ #endif\r
+ #endif\r
+\r
+ #ifndef ANALYZER_UNREACHABLE\r
+ ///\r
+ /// Signal the analyzer that this call is not reachable.\r
+ /// This excludes compilers.\r
+ ///\r
+ #define ANALYZER_UNREACHABLE()\r
+ #endif\r
+#endif\r
+\r
+//\r
+// Static Analyzers may issue errors about potential NULL-dereferences when\r
+// dereferencing a pointer, that has been checked before, outside of a\r
+// NULL-check. This may lead to false positives, such as when using ASSERT()\r
+// for verification.\r
+//\r
+#ifndef ANALYZER_NORETURN\r
+ #ifdef __has_feature\r
+ #if __has_feature (attribute_analyzer_noreturn)\r
+ ///\r
+ /// Signal analyzers that the function cannot return.\r
+ /// This excludes compilers.\r
+ ///\r
+ #define ANALYZER_NORETURN __attribute__((analyzer_noreturn))\r
+ #endif\r
+ #endif\r
+\r
+ #ifndef ANALYZER_NORETURN\r
+ ///\r
+ /// Signal the analyzer that the function cannot return.\r
+ /// This excludes compilers.\r
+ ///\r
+ #define ANALYZER_NORETURN\r
+ #endif\r