[klibc] __assert_fail() is a __noreturn function

__assert_fail() never returns, and telling that to the compiler
can sometimes generate better code.

Signed-off-by: H. Peter Anvin <hpa@zytor.com>
diff --git a/usr/include/assert.h b/usr/include/assert.h
index ec74037..d89e082 100644
--- a/usr/include/assert.h
+++ b/usr/include/assert.h
@@ -5,13 +5,15 @@
 #ifndef _ASSERT_H
 #define _ASSERT_H
 
+#include <klibc/compiler.h>
+
 #ifdef NDEBUG
 
 #define assert(x) ((void)(x))
 
 #else
 
-extern void __assert_fail(const char *, const char *, unsigned int);
+extern __noreturn __assert_fail(const char *, const char *, unsigned int);
 
 #define assert(x) ((x) ? (void)0 : __assert_fail(#x, __FILE__, __LINE__))
 
diff --git a/usr/klibc/assert.c b/usr/klibc/assert.c
index b922416..cca4129 100644
--- a/usr/klibc/assert.c
+++ b/usr/klibc/assert.c
@@ -5,8 +5,9 @@
 #include <stdlib.h>
 #include <stdio.h>
 #include <assert.h>
+#include <klibc/compiler.h>
 
-void __assert_fail(const char *expr, const char *file, unsigned int line)
+__noreturn __assert_fail(const char *expr, const char *file, unsigned int line)
 {
 	printf("Assertion %s failed, file %s, line %u\n", expr, file, line);
 	abort();