summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJakob Kaivo <jkk@ung.org>2023-11-14 14:59:21 -0500
committerJakob Kaivo <jkk@ung.org>2023-11-14 14:59:21 -0500
commit00a8e6711ea5f22e47f81bed85b49511a9c2a60e (patch)
tree30b1bcb0bc62d0ad34754d59845bf42c1d42a4b5
parent30226c2f0959ef4a74f67de4ed762cdc4dffb82f (diff)
add a function that triggers UB if the assert() macro is suppressed to access an actual function
-rw-r--r--mk/assert.d10
-rw-r--r--src/assert/assert.c13
2 files changed, 23 insertions, 0 deletions
diff --git a/mk/assert.d b/mk/assert.d
new file mode 100644
index 00000000..aae9fcd0
--- /dev/null
+++ b/mk/assert.d
@@ -0,0 +1,10 @@
+libc_C.0: libc.a(assert.o)
+libc.a(assert.o): $(OBJDIR)/assert.o
+ @$(AR) $(ARFLAGS) $@ $(OBJDIR)/$%
+
+$(OBJDIR)/assert.o: src/assert/assert.c
+$(OBJDIR)/assert.o: src/stdlib/_stdlib.h
+$(OBJDIR)/assert.o:
+ @echo " [CC] $@"
+ @mkdir -p $(@D)
+ @$(CC) -c -o $@ $(CFLAGS) src/assert/assert.c
diff --git a/src/assert/assert.c b/src/assert/assert.c
new file mode 100644
index 00000000..2a5551a4
--- /dev/null
+++ b/src/assert/assert.c
@@ -0,0 +1,13 @@
+#include <stdlib.h>
+#include "stdlib/_stdlib.h"
+
+_Noreturn void assert(int exp)
+{
+ (void)exp;
+ __stdlib.constraint_handler("Undefined Behavior: The assert() macro has been suppressed to access an actual function", NULL, 0);
+ abort();
+}
+
+/*
+STDC(0)
+*/