summaryrefslogtreecommitdiff
path: root/src/__undefined.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/__undefined.c')
-rw-r--r--src/__undefined.c31
1 files changed, 31 insertions, 0 deletions
diff --git a/src/__undefined.c b/src/__undefined.c
new file mode 100644
index 00000000..9bffff76
--- /dev/null
+++ b/src/__undefined.c
@@ -0,0 +1,31 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdarg.h>
+#include "_safety.h"
+
+#if __STDC_VERSION__ < 199901L
+static _Noreturn void _Exit(int);
+#include "stdlib/_Exit.c"
+#endif
+
+_Noreturn void __undefined(const char *fmt, ...)
+{
+ va_list ap;
+ va_start(ap, fmt);
+ fprintf(stderr, "Undefined Behavior: ");
+ vfprintf(stderr, fmt, ap);
+ if (__checked_call.file) {
+ fprintf(stderr, " (source: %s:%ju", __checked_call.file, __checked_call.line);
+ if (__checked_call.func) {
+ fprintf(stderr, ":%s()", __checked_call.func);
+ }
+ fprintf(stderr, ")");
+ }
+ fprintf(stderr, "\n");
+ va_end(ap);
+ _Exit(-1);
+}
+
+/*
+STDC(0)
+*/