Home | History | Annotate | Line # | Download | only in src
      1 /*
      2  * diagnostic.h -- compiler diagnostic abstractions
      3  *
      4  * Copyright (c) 2022-2023, NLnet Labs. All rights reserved.
      5  *
      6  * SPDX-License-Identifier: BSD-3-Clause
      7  *
      8  */
      9 #ifndef DIAGNOSTIC_H
     10 #define DIAGNOSTIC_H
     11 
     12 #if _MSC_VER
     13 # define diagnostic_push() \
     14            __pragma(warning(push))
     15 # define msvc_diagnostic_ignored(warning_specifier) \
     16            __pragma(warning(disable:warning_specifier))
     17 # define diagnostic_pop() \
     18            __pragma(warning(pop))
     19 // Support for selectively enabling and disabling warnings via
     20 // #pragma GCC diagnostic was added in GCC 4.6
     21 // (https://gcc.gnu.org/gcc-4.6/changes.html).
     22 #elif (defined __clang__) \
     23    || (defined __GNUC__ && (((__GNUC__ * 100) + __GNUC_MINOR__) >= 406))
     24 # define stringify(x) #x
     25 # define paste(flag, warning) stringify(flag ## warning)
     26 # define pragma(x) _Pragma(#x)
     27 # define diagnostic_ignored(warning) pragma(warning)
     28 
     29 # define diagnostic_push() _Pragma("GCC diagnostic push")
     30 # define diagnostic_pop() _Pragma("GCC diagnostic pop")
     31 # if __clang__
     32 #   define clang_diagnostic_ignored(warning) \
     33       diagnostic_ignored(GCC diagnostic ignored paste(-W,warning))
     34 # else
     35 #   define gcc_diagnostic_ignored(warning) \
     36       diagnostic_ignored(GCC diagnostic ignored paste(-W,warning))
     37 # endif
     38 #endif
     39 
     40 #if !defined diagnostic_push
     41 # define diagnostic_push()
     42 # define diagnostic_pop()
     43 #endif
     44 
     45 #if !defined gcc_diagnostic_ignored
     46 # define gcc_diagnostic_ignored(warning)
     47 #endif
     48 
     49 #if !defined clang_diagnostic_ignored
     50 # define clang_diagnostic_ignored(warning)
     51 #endif
     52 
     53 #if !defined msvc_diagnostic_ignored
     54 # define msvc_diagnostic_ignored(warning)
     55 #endif
     56 
     57 #endif // DIAGNOSTIC_H
     58