/**************************************************************************** * libs/libc/limits_check.c * * SPDX-License-Identifier: Apache-2.0 * * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. The * ASF licenses this file to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance with the * License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations * under the License. * ****************************************************************************/ /* NuttX prefers defining limits per architecture directly as constants * instead of using compiler provided definitions. That is to support * compilers that do not provide such definitions. On the other hand in case * compiler provides these definitions we should not deviate from them. This * file thus contains only checks of NuttX's defined limits against compiler * definitions if available. */ /**************************************************************************** * Included Files ****************************************************************************/ #include #include #include #include /**************************************************************************** * Pre-processor Prototypes ****************************************************************************/ #ifdef static_assert # define static_assert_equal(COMPILER_DEF, DEF) \ static_assert(COMPILER_DEF == DEF, "Compiler definition mismatch for " #DEF) #else # define DEFINITION_ASSERT(COMPILER_DEF, DEF) #endif #ifdef __CHAR_BIT__ static_assert_equal(__CHAR_BIT__, CHAR_BIT); #endif #ifdef __SCHAR_MAX__ static_assert_equal(__SCHAR_MAX__, SCHAR_MAX); #endif #ifdef __SHRT_MAX__ static_assert_equal(__SHRT_MAX__, SHRT_MAX); #endif #ifdef __LONG_MAX__ static_assert_equal(__LONG_MAX__, LONG_MAX); #endif #ifdef __LONG_LONG_MAX__ static_assert_equal(__LONG_LONG_MAX__, LLONG_MAX); #endif #ifdef __UINTPTR_MAX__ static_assert_equal(__UINTPTR_MAX__, UPTR_MAX); #endif #ifdef __WCHAR_MAX__ static_assert_equal(__WCHAR_MAX__, WCHAR_MAX); #endif #ifdef __FLT_MANT_DIG__ static_assert_equal(__FLT_MANT_DIG__, FLT_MANT_DIG); #endif #ifdef __DBL_MANT_DIG__ static_assert_equal(__DBL_MANT_DIG__, DBL_MANT_DIG); #endif #ifdef __LDBL_MANT_DIG__ static_assert_equal(__LDBL_MANT_DIG__, LDBL_MANT_DIG); #endif #ifdef __FLT_DIG__ static_assert_equal(__FLT_DIG__, FLT_DIG); #endif #ifdef __DBL_DIG__ static_assert_equal(__DBL_DIG__, DBL_DIG); #endif #ifdef __LDBL_DIG__ static_assert_equal(__LDBL_DIG__, LDBL_DIG); #endif #ifdef __FLT_MIN_EXP__ static_assert_equal(__FLT_MIN_EXP__, FLT_MIN_EXP); #endif #ifdef __DBL_MIN_EXP__ static_assert_equal(__DBL_MIN_EXP__, DBL_MIN_EXP); #endif #ifdef __LDBL_MIN_EXP__ static_assert_equal(__LDBL_MIN_EXP__, LDBL_MIN_EXP); #endif #ifdef __FLT_MIN_10_EXP__ static_assert_equal(__FLT_MIN_10_EXP__, FLT_MIN_10_EXP); #endif #ifdef __DBL_MIN_10_EXP__ static_assert_equal(__DBL_MIN_10_EXP__, DBL_MIN_10_EXP); #endif #ifdef __LDBL_MIN_10_EXP__ static_assert_equal(__LDBL_MIN_10_EXP__, LDBL_MIN_10_EXP); #endif #ifdef __FLT_MAX_EXP__ static_assert_equal(__FLT_MAX_EXP__, FLT_MAX_EXP); #endif #ifdef __DBL_MAX_EXP__ static_assert_equal(__DBL_MAX_EXP__, DBL_MAX_EXP); #endif #ifdef __LDBL_MAX_EXP__ static_assert_equal(__LDBL_MAX_EXP__, LDBL_MAX_EXP); #endif #ifdef __FLT_MAX_10_EXP__ static_assert_equal(__FLT_MAX_10_EXP__, FLT_MAX_10_EXP); #endif #ifdef __DBL_MAX_10_EXP__ static_assert_equal(__DBL_MAX_10_EXP__, DBL_MAX_10_EXP); #endif #ifdef __LDBL_MAX_10_EXP__ static_assert_equal(__LDBL_MAX_10_EXP__, LDBL_MAX_10_EXP); #endif #ifdef __FLT_MAX__ static_assert_equal(__FLT_MAX__, FLT_MAX); #endif #ifdef __DBL_MAX__ static_assert_equal(__DBL_MAX__, DBL_MAX); #endif #ifdef __LDBL_MAX__ static_assert_equal(__LDBL_MAX__, LDBL_MAX); #endif #ifdef __FLT_EPSILON__ static_assert_equal(__FLT_EPSILON__, FLT_EPSILON); #endif #ifdef __DBL_EPSILON__ static_assert_equal(__DBL_EPSILON__, DBL_EPSILON); #endif #ifdef __LDBL_EPSILON__ static_assert_equal(__LDBL_EPSILON__, LDBL_EPSILON); #endif #ifdef __FLT_MIN__ static_assert_equal(__FLT_MIN__, FLT_MIN); #endif #ifdef __DBL_MIN__ static_assert_equal(__DBL_MIN__, DBL_MIN); #endif #ifdef __LDBL_MIN__ static_assert_equal(__LDBL_MIN__, LDBL_MIN); #endif /**************************************************************************** * Private Functions ****************************************************************************/ /**************************************************************************** * Public Data ****************************************************************************/