]> git.proxmox.com Git - mirror_ubuntu-bionic-kernel.git/blame - include/linux/compiler-clang.h
net: rtnetlink: validate IFLA_MTU attribute in rtnl_create_link()
[mirror_ubuntu-bionic-kernel.git] / include / linux / compiler-clang.h
CommitLineData
b2441318 1/* SPDX-License-Identifier: GPL-2.0 */
d1515582 2#ifndef __LINUX_COMPILER_TYPES_H
565cbdc2
MC
3#error "Please don't include <linux/compiler-clang.h> directly, include <linux/compiler.h> instead."
4#endif
5
6/* Some compiler specific definitions are overwritten here
7 * for Clang compiler
8 */
9
10#ifdef uninitialized_var
11#undef uninitialized_var
12#define uninitialized_var(x) x = *(&(x))
13#endif
b41c29b0
AB
14
15/* same as gcc, this was present in clang-2.6 so we can assume it works
16 * with any version that can compile the kernel
17 */
18#define __UNIQUE_ID(prefix) __PASTE(__PASTE(__UNIQUE_ID_, prefix), __COUNTER__)
4ca59b14 19
a4fce118
AK
20#undef __no_sanitize_address
21#define __no_sanitize_address __attribute__((no_sanitize("address")))
22
79a1bd31
DW
23/* Clang doesn't have a way to turn it off per-function, yet. */
24#ifdef __noretpoline
25#undef __noretpoline
26#endif
a8b18c24
RV
27
28/*
29 * Not all versions of clang implement the the type-generic versions
30 * of the builtin overflow checkers. Fortunately, clang implements
31 * __has_builtin allowing us to avoid awkward version
32 * checks. Unfortunately, we don't know which version of gcc clang
33 * pretends to be, so the macro may or may not be defined.
34 */
35#undef COMPILER_HAS_GENERIC_BUILTIN_OVERFLOW
36#if __has_builtin(__builtin_mul_overflow) && \
37 __has_builtin(__builtin_add_overflow) && \
38 __has_builtin(__builtin_sub_overflow)
39#define COMPILER_HAS_GENERIC_BUILTIN_OVERFLOW 1
40#endif