mirror of
https://github.com/espressif/esp-idf
synced 2025-03-09 17:19:09 -04:00
feat(newlib): add option to disable eval of expression in assert() when NDEBUG set
According to the standard assert(X) should be replaced by a void expression when NDEBUG is set. IDF's behavior was to not trigger an assertion, but we would still evaluate X, e.g. if X was a function it would be ran. This MR adds a kconfig option CONFIG_COMPILER_ASSERT_NDEBUG_EVALUATE which allows us revert the behavior to be inline with the standard. With IDF v6.0 the plan is to make CONFIG_COMPILER_ASSERT_NDEBUG_EVALUATE=n the default behavior. Closes https://github.com/espressif/esp-idf/issues/10136 Closes https://github.com/espressif/esp-idf/issues/2758
This commit is contained in:
parent
c01ccd1f62
commit
ff8265b6b3
15
Kconfig
15
Kconfig
@ -388,6 +388,21 @@ mainmenu "Espressif IoT Development Framework Configuration"
|
|||||||
|
|
||||||
endchoice # assertions
|
endchoice # assertions
|
||||||
|
|
||||||
|
config COMPILER_ASSERT_NDEBUG_EVALUATE
|
||||||
|
bool "Enable to evaluate the expression inside assert(X) when NDEBUG is set"
|
||||||
|
default y
|
||||||
|
help
|
||||||
|
When NDEBUG is set, assert(X) will not cause code to trigger an assertion.
|
||||||
|
With this option set assert(X) will still evaluate the expression X, though
|
||||||
|
the result will never cause an assertion. This means that if X is a function
|
||||||
|
then the function will be called.
|
||||||
|
|
||||||
|
This is not according to the standard, which states that the assert(X) should
|
||||||
|
be replaced with ((void)0) if NDEBUG is defined.
|
||||||
|
|
||||||
|
In ESP-IDF v6.0 the default behavior will change to "no" to be inline with the
|
||||||
|
standard.
|
||||||
|
|
||||||
choice COMPILER_FLOAT_LIB_FROM
|
choice COMPILER_FLOAT_LIB_FROM
|
||||||
prompt "Compiler float lib source"
|
prompt "Compiler float lib source"
|
||||||
default COMPILER_FLOAT_LIB_FROM_RVFPLIB if ESP_ROM_HAS_RVFPLIB
|
default COMPILER_FLOAT_LIB_FROM_RVFPLIB if ESP_ROM_HAS_RVFPLIB
|
||||||
|
@ -30,7 +30,11 @@
|
|||||||
|
|
||||||
#if defined(NDEBUG)
|
#if defined(NDEBUG)
|
||||||
|
|
||||||
|
#if CONFIG_COMPILER_ASSERT_NDEBUG_EVALUATE
|
||||||
#define assert(__e) ((void)(__e))
|
#define assert(__e) ((void)(__e))
|
||||||
|
#else
|
||||||
|
#define assert(__e) ((void)0)
|
||||||
|
#endif //CONFIG_COMPILER_ASSERT_NDEBUG_EVALUATE
|
||||||
|
|
||||||
#elif CONFIG_COMPILER_OPTIMIZATION_ASSERTIONS_SILENT
|
#elif CONFIG_COMPILER_OPTIMIZATION_ASSERTIONS_SILENT
|
||||||
|
|
||||||
|
2
tools/test_apps/system/startup/sdkconfig.ci.no_asserts
Normal file
2
tools/test_apps/system/startup/sdkconfig.ci.no_asserts
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
CONFIG_COMPILER_OPTIMIZATION_ASSERTIONS_DISABLE=y
|
||||||
|
CONFIG_COMPILER_ASSERT_NDEBUG_EVALUATE=n
|
Loading…
x
Reference in New Issue
Block a user