summaryrefslogtreecommitdiff
path: root/tools/include/nolibc/compiler.h
diff options
context:
space:
mode:
Diffstat (limited to 'tools/include/nolibc/compiler.h')
-rw-r--r--tools/include/nolibc/compiler.h21
1 files changed, 20 insertions, 1 deletions
diff --git a/tools/include/nolibc/compiler.h b/tools/include/nolibc/compiler.h
index a8c7619dcdde..b56570bf9f69 100644
--- a/tools/include/nolibc/compiler.h
+++ b/tools/include/nolibc/compiler.h
@@ -47,6 +47,12 @@
# define __nolibc_fallthrough do { } while (0)
#endif /* __nolibc_has_attribute(fallthrough) */
+#if defined(__STDC_VERSION__)
+# define __nolibc_stdc_version __STDC_VERSION__
+#else
+# define __nolibc_stdc_version 0
+#endif
+
#define __nolibc_version(_major, _minor, _patch) ((_major) * 10000 + (_minor) * 100 + (_patch))
#ifdef __GNUC__
@@ -63,7 +69,7 @@
# define __nolibc_clang_version 0
#endif /* __clang__ */
-#if __STDC_VERSION__ >= 201112L || \
+#if __nolibc_stdc_version >= 201112L || \
__nolibc_gnuc_version >= __nolibc_version(4, 6, 0) || \
__nolibc_clang_version >= __nolibc_version(3, 0, 0)
# define __nolibc_static_assert(_t) _Static_assert(_t, "")
@@ -71,4 +77,17 @@
# define __nolibc_static_assert(_t)
#endif
+/* Make the optimizer believe the variable can be manipulated arbitrarily. */
+#define _NOLIBC_OPTIMIZER_HIDE_VAR(var) __asm__ ("" : "+r" (var))
+
+#if __nolibc_has_feature(undefined_behavior_sanitizer)
+# if defined(__clang__)
+# define __nolibc_no_sanitize_undefined __attribute__((no_sanitize("function")))
+# else
+# define __nolibc_no_sanitize_undefined __attribute__((no_sanitize_undefined))
+# endif
+#else
+# define __nolibc_no_sanitize_undefined
+#endif
+
#endif /* _NOLIBC_COMPILER_H */