On Wed, Jun 22, 2011 at 10:49 PM, V, Aneesh <ane...@ti.com> wrote: > On Thu, Jun 23, 2011 at 2:53 AM, Mike Frysinger <vap...@gentoo.org> wrote: >> On Wednesday, June 22, 2011 17:04:49 Simon Glass wrote: >>> +/* >>> + * An assertion is run-time check done in debug mode only. If DEBUG is not >>> + * defined then it is skipped. It does not BUG or halt U-Boot, but tries >>> to + * continue execution in any case. It is hoped that all failing >>> assertions + * are found before release, and after release it is hoped >>> that they don't + * matter. But in any case these failing assertions >>> cannot be fixed with a + * BUG-type reset (which may just do the same >>> assertion again). >>> + */ >>> +#define assert(x) \ >>> + ({ if (!(x)) printf("Assertion failure '%s' %s line %d\n", \ >>> + #x, __FILE__, __LINE__); }) >>> #else >>> #define debug(fmt,args...) >>> #define debugX(level,fmt,args...) >>> +#define assert(x) >>> #endif /* DEBUG */ >> >> the trouble with ifdef magic like this is that errors/warnings can be >> introduced when DEBUG isnt defined, and then only noticed when DEBUG is >> defined. so how about:
Hi Aneesh, > > Symbian OS, that had an array of defensive programming features, had two > ASSERT macros: > > Something like ASSERT_DEBUG(x) and ASSERT_ALWAYS(x). Symbian OS can live on in U-Boot! > > ASSERT_DEBUG(x) could be used more liberally because it is compiled out in > production image and ASSERT_ALWAYS(x) could be used in more critical run-time > errors. > > My rule of thumb for using these two was this: > > 1. ASSERT_DEBUG(x) was used for invariant checking, that's for catching errors > that could arise out of programming errors. This was used more liberally in > the > code. > 2. ASSERT_ALWAYS(x) was used to catch erros due to invalid run-time parameters > that one may not be able to catch during testing. With this patch we have: - assert: compiled out for production code, used for debug, like your ASSERT_DEBUG I think - BUG_ON: halt/reset even in production code, used for production code and critical faults where continued execution is certainly pointless or counterproductive. Like your ASSERT_ALWAYS I think. Regards, Simon > > best regards, > Aneesh > _______________________________________________ > U-Boot mailing list > U-Boot@lists.denx.de > http://lists.denx.de/mailman/listinfo/u-boot > _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot