[PATCH 5/5] asm-generic: fix build error in fix_to_virt with CONFIG_DEBUG_EXPERIENCE

From: changbin . du
Date: Tue May 01 2018 - 09:11:13 EST


From: Changbin Du <changbin.du@xxxxxxxxx>

With '-Og' optimization level, GCC would not optimize a count for a loop
as a constant value. But BUILD_BUG_ON() only accept compile-time constant
values.

arch/arm/mm/mmu.o: In function `fix_to_virt':
/home/changbin/work/linux/./include/asm-generic/fixmap.h:31: undefined reference to `__compiletime_assert_31'
Makefile:1051: recipe for target 'vmlinux' failed
make: *** [vmlinux] Error 1

Signed-off-by: Changbin Du <changbin.du@xxxxxxxxx>
---
include/asm-generic/fixmap.h | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/include/asm-generic/fixmap.h b/include/asm-generic/fixmap.h
index 827e4d3..a6576d4 100644
--- a/include/asm-generic/fixmap.h
+++ b/include/asm-generic/fixmap.h
@@ -28,7 +28,8 @@
*/
static __always_inline unsigned long fix_to_virt(const unsigned int idx)
{
- BUILD_BUG_ON(idx >= __end_of_fixed_addresses);
+ BUILD_BUG_ON(__builtin_constant_p(idx) &&
+ idx >= __end_of_fixed_addresses);
return __fix_to_virt(idx);
}

--
2.7.4