Define the VPX_NO_RETURN macro for MSVC

Define VPX_NO_RETURN as __declspec(noreturn) for MSVC. See
https://docs.microsoft.com/en-us/cpp/cpp/noreturn?view=msvc-160

This requires moving VPX_NO_RETURN before function declarations because
__declspec(noreturn) must be placed there. Fortunately GCC's
__attribute__((noreturn)) can be placed either before or after function
declarations.

Change-Id: Id9bb0077e2a4f16ec2ca9c913dd93673a0e385cf
This commit is contained in:
Wan-Teh Chang
2021-09-10 15:54:51 -07:00
parent 65a1751e5b
commit 8a6fbc0b4e
2 changed files with 10 additions and 6 deletions

6
args.c
View File

@@ -16,8 +16,10 @@
#include "vpx/vpx_integer.h"
#include "vpx_ports/msvc.h"
#if defined(__GNUC__) && __GNUC__
extern void die(const char *fmt, ...) __attribute__((noreturn));
#if defined(__GNUC__)
__attribute__((noreturn)) extern void die(const char *fmt, ...);
#elif defined(_MSC_VER)
__declspec(noreturn) extern void die(const char *fmt, ...);
#else
extern void die(const char *fmt, ...);
#endif

View File

@@ -110,6 +110,8 @@ extern "C" {
#if defined(__GNUC__)
#define VPX_NO_RETURN __attribute__((noreturn))
#elif defined(_MSC_VER)
#define VPX_NO_RETURN __declspec(noreturn)
#else
#define VPX_NO_RETURN
#endif
@@ -117,14 +119,14 @@ extern "C" {
/* Sets a stdio stream into binary mode */
FILE *set_binary_mode(FILE *stream);
void die(const char *fmt, ...) VPX_NO_RETURN;
void fatal(const char *fmt, ...) VPX_NO_RETURN;
VPX_NO_RETURN void die(const char *fmt, ...);
VPX_NO_RETURN void fatal(const char *fmt, ...);
void warn(const char *fmt, ...);
void die_codec(vpx_codec_ctx_t *ctx, const char *s) VPX_NO_RETURN;
VPX_NO_RETURN void die_codec(vpx_codec_ctx_t *ctx, const char *s);
/* The tool including this file must define usage_exit() */
void usage_exit(void) VPX_NO_RETURN;
VPX_NO_RETURN void usage_exit(void);
#undef VPX_NO_RETURN