I am sorry, but I still don't see the difference. See this line here: https://github.com/apache/nuttx/blob/master/include/assert.h#L119
When NDEBUG is defined, assert also compiles to nothing. As it ought to do. (NDEBUG definition is also controlled by Kconfig, with CONFIG_NDEBUG) So, is there an actual difference that I currently have overseen? On Wed, Jan 3, 2024 at 6:54 PM Tomek CEDRO <to...@cedro.info> wrote: > +1 :-) > > -- > CeDeROM, SQ7MHZ, http://www.tomek.cedro.info > > On Wed, Jan 3, 2024, 17:44 Gregory Nutt <spudan...@gmail.com> wrote: > > > +1 > > > > On 1/3/2024 10:43 AM, Nathan Hartman wrote: > > > On Wed, Jan 3, 2024 at 11:22 AM Gregory Nutt <spudan...@gmail.com> > > wrote: > > >> On 1/3/2024 10:11 AM, Fotis Panagiotopoulos wrote: > > >>>> That would seem a little odd since there was a PR a few years ago to > > >>> change all instances of assert/ASSERT to DEBUGASSERT to save code > size. > > >>> > > >>> How is that so? > > >>> > > >>> As I see here: > > >>> https://github.com/apache/nuttx/blob/master/include/assert.h#L122 > > >>> assert defined exactly as DEBUGASSERT. > > >>> > > >>> There shouldn't be any code size difference at all. > > >> When CONFIG_DEBUG_ASSERTIONS is not defined, then all occurrences of > > >> DEBUGASSERT compile to nothing (actually the current version compiles > to > > >> an expression that is optimized out): > > >> > > >> #undef DEBUGASSERT /* Like ASSERT, but only if > > >> CONFIG_DEBUG_ASSERTIONS is defined */ > > >> > > >> #ifdef CONFIG_DEBUG_ASSERTIONS > > >> # define DEBUGASSERT(f) _ASSERT(f, __DEBUG_ASSERT_FILE__, > > >> __DEBUG_ASSERT_LINE__) > > >> #else > > >> # define DEBUGASSERT(f) ((void)(1 || (f))) > > >> #endif > > >> > > >> This value, ((void)(1 || (f))), is completely removed by the optimizer > > >> because of short-circuiting and dead code removal. So the code is > much > > >> smaller if CONFIG_DEBUG_ASSERTIONS is not enabled. If DEBUGASSERT() > is > > >> replaced with assert() than that code bloat would be unconditional, > > >> although somewhat less than when assertions are enabled. > > >> > > >> This same kind of logic also applies to DEBUGPANIC and DEBUGVERIFY. > > >> > > >> Xiao Xiang made that change to reduce the size as needed by their > > >> products. He is the person you should be talking to. > > > > > > Maybe we need NX_DEBUGASSERT, NX_DEBUGPANIC, NX_DEBUGVERIFY. The NX > > > prefix would make it more clear that this is NuttX-specific. These > > > would be used in the OS only, not in applications, and > > > CONFIG_DEBUG_ASSERTIONS would continue to control if these are real or > > > optimized out. > > > > > > Applications that need their own specific, Kconfig-controlled debug > > > assertion, should define one themselves, and their own Kconfig to > > > optimize it out. Rationale: If you are debugging an application, > > > enable assertions only in that application, not everywhere throughout > > > the system. > > > > > > Cheers > > > Nathan > > > > > > >