Disable -Wimplicit-fallthrough for funcs.generated.h

This is code generated by gperf, so there's nothing we can do about it.
The code does have /*FALLTHROUGH*/ comments but clang doesn't recognize
them.
This commit is contained in:
James McCoy
2020-06-19 22:18:30 -04:00
parent 8c49e3d509
commit 37fa8d3f44
4 changed files with 25 additions and 2 deletions

View File

@@ -267,8 +267,8 @@ else()
-Wstrict-prototypes -std=gnu99 -Wshadow -Wconversion -Wstrict-prototypes -std=gnu99 -Wshadow -Wconversion
-Wmissing-prototypes) -Wmissing-prototypes)
check_c_compiler_flag(-Wimplicit-fallthrough HAS_WIMPLICIT_FALLTHROUGH_FLAG) check_c_compiler_flag(-Wimplicit-fallthrough HAVE_WIMPLICIT_FALLTHROUGH_FLAG)
if(HAS_WIMPLICIT_FALLTHROUGH_FLAG) if(HAVE_WIMPLICIT_FALLTHROUGH_FLAG)
add_compile_options(-Wimplicit-fallthrough) add_compile_options(-Wimplicit-fallthrough)
endif() endif()

View File

@@ -60,5 +60,6 @@
#cmakedefine HAVE_EXECINFO_BACKTRACE #cmakedefine HAVE_EXECINFO_BACKTRACE
#cmakedefine HAVE_BUILTIN_ADD_OVERFLOW #cmakedefine HAVE_BUILTIN_ADD_OVERFLOW
#cmakedefine HAVE_WIMPLICIT_FALLTHROUGH_FLAG
#endif // AUTO_CONFIG_H #endif // AUTO_CONFIG_H

View File

@@ -32,6 +32,7 @@
#include "nvim/indent.h" #include "nvim/indent.h"
#include "nvim/indent_c.h" #include "nvim/indent_c.h"
#include "nvim/lua/executor.h" #include "nvim/lua/executor.h"
#include "nvim/macros.h"
#include "nvim/mark.h" #include "nvim/mark.h"
#include "nvim/math.h" #include "nvim/math.h"
#include "nvim/memline.h" #include "nvim/memline.h"
@@ -86,8 +87,10 @@ KHASH_MAP_INIT_STR(functions, VimLFuncDef)
#endif #endif
PRAGMA_DIAG_PUSH_IGNORE_MISSING_PROTOTYPES PRAGMA_DIAG_PUSH_IGNORE_MISSING_PROTOTYPES
PRAGMA_DIAG_PUSH_IGNORE_IMPLICIT_FALLTHROUGH
#include "funcs.generated.h" #include "funcs.generated.h"
PRAGMA_DIAG_POP PRAGMA_DIAG_POP
PRAGMA_DIAG_POP
#endif #endif

View File

@@ -1,6 +1,8 @@
#ifndef NVIM_MACROS_H #ifndef NVIM_MACROS_H
#define NVIM_MACROS_H #define NVIM_MACROS_H
#include "auto/config.h"
// EXTERN is only defined in main.c. That's where global variables are // EXTERN is only defined in main.c. That's where global variables are
// actually defined and initialized. // actually defined and initialized.
#ifndef EXTERN #ifndef EXTERN
@@ -203,16 +205,33 @@
# define PRAGMA_DIAG_PUSH_IGNORE_MISSING_PROTOTYPES \ # define PRAGMA_DIAG_PUSH_IGNORE_MISSING_PROTOTYPES \
_Pragma("clang diagnostic push") \ _Pragma("clang diagnostic push") \
_Pragma("clang diagnostic ignored \"-Wmissing-prototypes\"") _Pragma("clang diagnostic ignored \"-Wmissing-prototypes\"")
# ifdef HAVE_WIMPLICIT_FALLTHROUGH_FLAG
# define PRAGMA_DIAG_PUSH_IGNORE_IMPLICIT_FALLTHROUGH \
_Pragma("clang diagnostic push") \
_Pragma("clang diagnostic ignored \"-Wimplicit-fallthrough\"")
# else
# define PRAGMA_DIAG_PUSH_IGNORE_IMPLICIT_FALLTHROUGH \
_Pragma("clang diagnostic push")
# endif
# define PRAGMA_DIAG_POP \ # define PRAGMA_DIAG_POP \
_Pragma("clang diagnostic pop") _Pragma("clang diagnostic pop")
#elif defined(__GNUC__) #elif defined(__GNUC__)
# define PRAGMA_DIAG_PUSH_IGNORE_MISSING_PROTOTYPES \ # define PRAGMA_DIAG_PUSH_IGNORE_MISSING_PROTOTYPES \
_Pragma("GCC diagnostic push") \ _Pragma("GCC diagnostic push") \
_Pragma("GCC diagnostic ignored \"-Wmissing-prototypes\"") _Pragma("GCC diagnostic ignored \"-Wmissing-prototypes\"")
# ifdef HAVE_WIMPLICIT_FALLTHROUGH_FLAG
# define PRAGMA_DIAG_PUSH_IGNORE_IMPLICIT_FALLTHROUGH \
_Pragma("GCC diagnostic push") \
_Pragma("GCC diagnostic ignored \"-Wimplicit-fallthrough\"")
# else
# define PRAGMA_DIAG_PUSH_IGNORE_IMPLICIT_FALLTHROUGH \
_Pragma("GCC diagnostic push")
# endif
# define PRAGMA_DIAG_POP \ # define PRAGMA_DIAG_POP \
_Pragma("GCC diagnostic pop") _Pragma("GCC diagnostic pop")
#else #else
# define PRAGMA_DIAG_PUSH_IGNORE_MISSING_PROTOTYPES # define PRAGMA_DIAG_PUSH_IGNORE_MISSING_PROTOTYPES
# define PRAGMA_DIAG_PUSH_IGNORE_IMPLICIT_FALLTHROUGH
# define PRAGMA_DIAG_POP # define PRAGMA_DIAG_POP
#endif #endif