diff --git a/irr/src/OpenGL/Driver.cpp b/irr/src/OpenGL/Driver.cpp index 0dd6ea1bb..95d760548 100644 --- a/irr/src/OpenGL/Driver.cpp +++ b/irr/src/OpenGL/Driver.cpp @@ -107,6 +107,7 @@ static const VertexType &getVertexTypeDescription(E_VERTEX_TYPE type) return vtTangents; default: assert(false); + CODE_UNREACHABLE(); } } diff --git a/irr/src/os.h b/irr/src/os.h index fcbaeddd5..58699ab3e 100644 --- a/irr/src/os.h +++ b/irr/src/os.h @@ -10,6 +10,22 @@ #include "ILogger.h" #include "ITimer.h" +// CODE_UNREACHABLE(): Invokes undefined behavior for unreachable code optimization +#if defined(__cpp_lib_unreachable) +#include +#define CODE_UNREACHABLE() std::unreachable() +#elif defined(__has_builtin) +#if __has_builtin(__builtin_unreachable) +#define CODE_UNREACHABLE() __builtin_unreachable() +#endif +#elif defined(_MSC_VER) +#define CODE_UNREACHABLE() __assume(false) +#endif + +#ifndef CODE_UNREACHABLE +#define CODE_UNREACHABLE() (void)0 +#endif + namespace irr {