blob: 8a28ef5bb5247c7cb8917f48265184db43f8d8dd [file]
/****************************************************************************
* 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 <nuttx/config.h>
#include <assert.h>
#include <limits.h>
#include <float.h>
/****************************************************************************
* 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
****************************************************************************/