binutils (2.41)

(root)/
include/
diagnostics.h
       1  /* Copyright (C) 2017-2023 Free Software Foundation, Inc.
       2  
       3     This program is free software; you can redistribute it and/or modify
       4     it under the terms of the GNU General Public License as published by
       5     the Free Software Foundation; either version 3 of the License, or
       6     (at your option) any later version.
       7  
       8     This program is distributed in the hope that it will be useful,
       9     but WITHOUT ANY WARRANTY; without even the implied warranty of
      10     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
      11     GNU General Public License for more details.
      12  
      13     You should have received a copy of the GNU General Public License
      14     along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
      15  
      16  #ifndef DIAGNOSTICS_H
      17  #define DIAGNOSTICS_H
      18  
      19  /* If at all possible, fix the source rather than using these macros
      20     to silence warnings.  If you do use these macros be aware that
      21     you'll need to condition their use on particular compiler versions,
      22     which can be done for gcc using ansidecl.h's GCC_VERSION macro.
      23  
      24     gcc versions between 4.2 and 4.6 do not allow pragma control of
      25     diagnostics inside functions, giving a hard error if you try to use
      26     the finer control available with later versions.
      27     gcc prior to 4.2 warns about diagnostic push and pop.
      28  
      29     The other macros have restrictions too, for example gcc-5, gcc-6
      30     and gcc-7 warn that -Wstringop-truncation is unknown, unless you
      31     also add DIAGNOSTIC_IGNORE ("-Wpragma").  */
      32  
      33  #ifdef __GNUC__
      34  # define DIAGNOSTIC_PUSH _Pragma ("GCC diagnostic push")
      35  # define DIAGNOSTIC_POP _Pragma ("GCC diagnostic pop")
      36  
      37  /* Stringification.  */
      38  # define DIAGNOSTIC_STRINGIFY_1(x) #x
      39  # define DIAGNOSTIC_STRINGIFY(x) DIAGNOSTIC_STRINGIFY_1 (x)
      40  
      41  # define DIAGNOSTIC_IGNORE(option) \
      42    _Pragma (DIAGNOSTIC_STRINGIFY (GCC diagnostic ignored option))
      43  # define DIAGNOSTIC_ERROR(option) \
      44    _Pragma (DIAGNOSTIC_STRINGIFY (GCC diagnostic error option))
      45  #else
      46  # define DIAGNOSTIC_PUSH
      47  # define DIAGNOSTIC_POP
      48  # define DIAGNOSTIC_IGNORE(option)
      49  #endif
      50  
      51  #if defined (__clang__) /* clang */
      52  
      53  # define DIAGNOSTIC_IGNORE_SELF_MOVE DIAGNOSTIC_IGNORE ("-Wself-move")
      54  # define DIAGNOSTIC_IGNORE_DEPRECATED_DECLARATIONS \
      55    DIAGNOSTIC_IGNORE ("-Wdeprecated-declarations")
      56  # define DIAGNOSTIC_IGNORE_DEPRECATED_REGISTER \
      57    DIAGNOSTIC_IGNORE ("-Wdeprecated-register")
      58  # if __has_warning ("-Wenum-compare-switch")
      59  #  define DIAGNOSTIC_IGNORE_SWITCH_DIFFERENT_ENUM_TYPES \
      60     DIAGNOSTIC_IGNORE ("-Wenum-compare-switch")
      61  # endif
      62  
      63  # define DIAGNOSTIC_IGNORE_FORMAT_NONLITERAL \
      64    DIAGNOSTIC_IGNORE ("-Wformat-nonliteral")
      65  
      66  # if __has_warning ("-Wuser-defined-warnings")
      67  #  define DIAGNOSTIC_IGNORE_USER_DEFINED_WARNINGS \
      68     DIAGNOSTIC_IGNORE ("-Wuser-defined-warnings")
      69  # endif
      70  
      71  # if __has_warning ("-Wunused-but-set-variable")
      72  #  define DIAGNOSTIC_IGNORE_UNUSED_BUT_SET_VARIABLE \
      73     DIAGNOSTIC_IGNORE ("-Wunused-but-set-variable")
      74  # endif
      75  
      76  # define DIAGNOSTIC_ERROR_SWITCH \
      77    DIAGNOSTIC_ERROR ("-Wswitch")
      78  
      79  # if __has_warning ("-Wenum-constexpr-conversion")
      80  #  define DIAGNOSTIC_IGNORE_ENUM_CONSTEXPR_CONVERSION \
      81     DIAGNOSTIC_IGNORE ("-Wenum-constexpr-conversion")
      82  # endif
      83  
      84  #elif defined (__GNUC__) /* GCC */
      85  
      86  # define DIAGNOSTIC_IGNORE_DEPRECATED_DECLARATIONS \
      87    DIAGNOSTIC_IGNORE ("-Wdeprecated-declarations")
      88  
      89  # if __GNUC__ >= 7
      90  #  define DIAGNOSTIC_IGNORE_DEPRECATED_REGISTER \
      91     DIAGNOSTIC_IGNORE ("-Wregister")
      92  # endif
      93  
      94  # define DIAGNOSTIC_IGNORE_STRINGOP_TRUNCATION \
      95    DIAGNOSTIC_IGNORE ("-Wstringop-truncation")
      96  
      97  # if __GNUC__ >= 11
      98  # define DIAGNOSTIC_IGNORE_STRINGOP_OVERREAD \
      99    DIAGNOSTIC_IGNORE ("-Wstringop-overread")
     100  #endif
     101  
     102  # define DIAGNOSTIC_IGNORE_FORMAT_NONLITERAL \
     103    DIAGNOSTIC_IGNORE ("-Wformat-nonliteral")
     104  
     105  # if __GNUC__ >= 5
     106  #  define DIAGNOSTIC_IGNORE_UNUSED_BUT_SET_VARIABLE \
     107     DIAGNOSTIC_IGNORE ("-Wunused-but-set-variable")
     108  # endif
     109  
     110  # if __GNUC__ >= 13
     111  #  define DIAGNOSTIC_IGNORE_SELF_MOVE DIAGNOSTIC_IGNORE ("-Wself-move")
     112  # endif
     113  
     114  /* GCC 4.8's "diagnostic push/pop" seems broken when using this, -Wswitch
     115     remains enabled at the error level even after a pop.  Therefore, don't
     116     use it for GCC < 5.  */
     117  # if __GNUC__ >= 5
     118  #  define DIAGNOSTIC_ERROR_SWITCH DIAGNOSTIC_ERROR ("-Wswitch")
     119  # endif
     120  
     121  #endif
     122  
     123  #ifndef DIAGNOSTIC_IGNORE_SELF_MOVE
     124  # define DIAGNOSTIC_IGNORE_SELF_MOVE
     125  #endif
     126  
     127  #ifndef DIAGNOSTIC_IGNORE_DEPRECATED_DECLARATIONS
     128  # define DIAGNOSTIC_IGNORE_DEPRECATED_DECLARATIONS
     129  #endif
     130  
     131  #ifndef DIAGNOSTIC_IGNORE_DEPRECATED_REGISTER
     132  # define DIAGNOSTIC_IGNORE_DEPRECATED_REGISTER
     133  #endif
     134  
     135  #ifndef DIAGNOSTIC_IGNORE_SWITCH_DIFFERENT_ENUM_TYPES
     136  # define DIAGNOSTIC_IGNORE_SWITCH_DIFFERENT_ENUM_TYPES
     137  #endif
     138  
     139  #ifndef DIAGNOSTIC_IGNORE_STRINGOP_TRUNCATION
     140  # define DIAGNOSTIC_IGNORE_STRINGOP_TRUNCATION
     141  #endif
     142  
     143  #ifndef DIAGNOSTIC_IGNORE_STRINGOP_OVERREAD
     144  # define DIAGNOSTIC_IGNORE_STRINGOP_OVERREAD
     145  #endif
     146  
     147  #ifndef DIAGNOSTIC_IGNORE_FORMAT_NONLITERAL
     148  # define DIAGNOSTIC_IGNORE_FORMAT_NONLITERAL
     149  #endif
     150  
     151  #ifndef DIAGNOSTIC_IGNORE_USER_DEFINED_WARNINGS
     152  # define DIAGNOSTIC_IGNORE_USER_DEFINED_WARNINGS
     153  #endif
     154  
     155  #ifndef DIAGNOSTIC_IGNORE_UNUSED_BUT_SET_VARIABLE
     156  # define DIAGNOSTIC_IGNORE_UNUSED_BUT_SET_VARIABLE
     157  #endif
     158  
     159  #ifndef DIAGNOSTIC_ERROR_SWITCH
     160  # define DIAGNOSTIC_ERROR_SWITCH
     161  #endif
     162  
     163  #ifndef DIAGNOSTIC_IGNORE_ENUM_CONSTEXPR_CONVERSION
     164  # define DIAGNOSTIC_IGNORE_ENUM_CONSTEXPR_CONVERSION
     165  #endif
     166  
     167  #endif /* DIAGNOSTICS_H */