X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;ds=sidebyside;f=include%2Fdiagnostics.h;h=82d871b5b2ac83ec10df56212f638bdb1a442aaa;hb=456e800a63def18484f69a51f59c2338a5cc4568;hp=4a674106dc01905719f3a757e6546bef5f4969d4;hpb=95da9854466ada2572b42f5528711a06a2d42db1;p=deliverable%2Fbinutils-gdb.git diff --git a/include/diagnostics.h b/include/diagnostics.h index 4a674106dc..82d871b5b2 100644 --- a/include/diagnostics.h +++ b/include/diagnostics.h @@ -1,4 +1,4 @@ -/* Copyright (C) 2017-2018 Free Software Foundation, Inc. +/* Copyright (C) 2017-2020 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -16,6 +16,20 @@ #ifndef DIAGNOSTICS_H #define DIAGNOSTICS_H +/* If at all possible, fix the source rather than using these macros + to silence warnings. If you do use these macros be aware that + you'll need to condition their use on particular compiler versions, + which can be done for gcc using ansidecl.h's GCC_VERSION macro. + + gcc versions between 4.2 and 4.6 do not allow pragma control of + diagnostics inside functions, giving a hard error if you try to use + the finer control available with later versions. + gcc prior to 4.2 warns about diagnostic push and pop. + + The other macros have restrictions too, for example gcc-5, gcc-6 + and gcc-7 warn that -Wstringop-truncation is unknown, unless you + also add DIAGNOSTIC_IGNORE ("-Wpragma"). */ + #ifdef __GNUC__ # define DIAGNOSTIC_PUSH _Pragma ("GCC diagnostic push") # define DIAGNOSTIC_POP _Pragma ("GCC diagnostic pop") @@ -35,33 +49,38 @@ #if defined (__clang__) /* clang */ # define DIAGNOSTIC_IGNORE_SELF_MOVE DIAGNOSTIC_IGNORE ("-Wself-move") +# define DIAGNOSTIC_IGNORE_DEPRECATED_DECLARATIONS \ + DIAGNOSTIC_IGNORE ("-Wdeprecated-declarations") # define DIAGNOSTIC_IGNORE_DEPRECATED_REGISTER \ DIAGNOSTIC_IGNORE ("-Wdeprecated-register") -# define DIAGNOSTIC_IGNORE_UNUSED_FUNCTION \ - DIAGNOSTIC_IGNORE ("-Wunused-function") # if __has_warning ("-Wenum-compare-switch") # define DIAGNOSTIC_IGNORE_SWITCH_DIFFERENT_ENUM_TYPES \ DIAGNOSTIC_IGNORE ("-Wenum-compare-switch") # endif -#elif defined (__GNUC__) /* GCC */ -# define DIAGNOSTIC_IGNORE_UNUSED_FUNCTION \ - DIAGNOSTIC_IGNORE ("-Wunused-function") +# define DIAGNOSTIC_IGNORE_FORMAT_NONLITERAL \ + DIAGNOSTIC_IGNORE ("-Wformat-nonliteral") + +#elif defined (__GNUC__) /* GCC */ # define DIAGNOSTIC_IGNORE_STRINGOP_TRUNCATION \ DIAGNOSTIC_IGNORE ("-Wstringop-truncation") + +# define DIAGNOSTIC_IGNORE_FORMAT_NONLITERAL \ + DIAGNOSTIC_IGNORE ("-Wformat-nonliteral") + #endif #ifndef DIAGNOSTIC_IGNORE_SELF_MOVE # define DIAGNOSTIC_IGNORE_SELF_MOVE #endif -#ifndef DIAGNOSTIC_IGNORE_DEPRECATED_REGISTER -# define DIAGNOSTIC_IGNORE_DEPRECATED_REGISTER +#ifndef DIAGNOSTIC_IGNORE_DEPRECATED_DECLARATIONS +# define DIAGNOSTIC_IGNORE_DEPRECATED_DECLARATIONS #endif -#ifndef DIAGNOSTIC_IGNORE_UNUSED_FUNCTION -# define DIAGNOSTIC_IGNORE_UNUSED_FUNCTION +#ifndef DIAGNOSTIC_IGNORE_DEPRECATED_REGISTER +# define DIAGNOSTIC_IGNORE_DEPRECATED_REGISTER #endif #ifndef DIAGNOSTIC_IGNORE_SWITCH_DIFFERENT_ENUM_TYPES @@ -72,4 +91,8 @@ # define DIAGNOSTIC_IGNORE_STRINGOP_TRUNCATION #endif +#ifndef DIAGNOSTIC_IGNORE_FORMAT_NONLITERAL +# define DIAGNOSTIC_IGNORE_FORMAT_NONLITERAL +#endif + #endif /* DIAGNOSTICS_H */