Julius Werner would like Shelley Chen, Furquan Shaikh and Angel Pons to review this change.

View Change

assert.h: Try to evaluate assertions at compile time

Many places in coreboot seem to like to do things like

assert(CONFIG(SOME_KCONFIG));

This is somewhat suboptimal since assert() is a runtime check, so you
don't see that this fails until someone actually tries to boot it even
though the compiler is totally aware of it already. We already have the
dead_code() macro to do this better:

if (CONFIG(SOME_KCONFIG))
dead_code();

Rather than fixing all these and trying to carefully educate people
about which type of check is more appropriate in what situation, we can
just employ the magic of __builtin_constant_p() to automatically make
the former statement behave like the latter.

Signed-off-by: Julius Werner <jwerner@chromium.org>
Change-Id: I06691b732598eb2a847a17167a1cb92149710916
---
M src/include/assert.h
1 file changed, 5 insertions(+), 2 deletions(-)

git pull ssh://review.coreboot.org:29418/coreboot refs/changes/44/44044/1
diff --git a/src/include/assert.h b/src/include/assert.h
index 0463175..d9883fd 100644
--- a/src/include/assert.h
+++ b/src/include/assert.h
@@ -22,9 +22,12 @@
#define __ASSERT_LINE__ __LINE__
#endif

+#define __build_time_assert(x) (__builtin_constant_p(x) ? \
+ ((x) ? 1 : dead_code_t(int)) : 0)
+
/* GCC and CAR versions */
#define ASSERT(x) { \
- if (!(x)) { \
+ if (!__build_time_assert(x) && !(x)) { \
printk(BIOS_EMERG, \
"ASSERTION ERROR: file '%s', line %d\n", \
__ASSERT_FILE__, __ASSERT_LINE__); \
@@ -33,7 +36,7 @@
} \
}
#define ASSERT_MSG(x, msg) { \
- if (!(x)) { \
+ if (!__build_time_assert(x) && !(x)) { \
printk(BIOS_EMERG, \
"ASSERTION ERROR: file '%s', line %d\n", \
__ASSERT_FILE__, __ASSERT_LINE__); \

To view, visit change 44044. To unsubscribe, or for help writing mail filters, visit settings.

Gerrit-Project: coreboot
Gerrit-Branch: master
Gerrit-Change-Id: I06691b732598eb2a847a17167a1cb92149710916
Gerrit-Change-Number: 44044
Gerrit-PatchSet: 1
Gerrit-Owner: Julius Werner <jwerner@chromium.org>
Gerrit-Reviewer: Angel Pons <th3fanbus@gmail.com>
Gerrit-Reviewer: Furquan Shaikh <furquan@google.com>
Gerrit-Reviewer: Shelley Chen <shchen@google.com>
Gerrit-MessageType: newchange