mirror of
https://github.com/espressif/esp-idf.git
synced 2024-10-05 20:47:46 -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
|
||||
|
||||
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
|
||||
prompt "Compiler float lib source"
|
||||
default COMPILER_FLOAT_LIB_FROM_RVFPLIB if ESP_ROM_HAS_RVFPLIB
|
||||
|
@ -30,7 +30,11 @@
|
||||
|
||||
#if defined(NDEBUG)
|
||||
|
||||
#if CONFIG_COMPILER_ASSERT_NDEBUG_EVALUATE
|
||||
#define assert(__e) ((void)(__e))
|
||||
#else
|
||||
#define assert(__e) ((void)0)
|
||||
#endif //CONFIG_COMPILER_ASSERT_NDEBUG_EVALUATE
|
||||
|
||||
#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…
Reference in New Issue
Block a user