Skip to content

Commit 7da5378

Browse files
committed
PiJoules suggestion
1 parent b6a7ce7 commit 7da5378

File tree

2 files changed

+73
-20
lines changed

2 files changed

+73
-20
lines changed

clang/include/clang/Basic/Features.def

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -303,7 +303,14 @@ FEATURE(is_trivially_assignable, LangOpts.CPlusPlus)
303303
FEATURE(is_trivially_constructible, LangOpts.CPlusPlus)
304304
FEATURE(is_trivially_copyable, LangOpts.CPlusPlus)
305305
FEATURE(is_union, LangOpts.CPlusPlus)
306-
FEATURE(cfi, LangOpts.Sanitize.hasOneOf(SanitizerKind::CFI | SanitizerKind::CFICastStrict | SanitizerKind::KCFI))
306+
FEATURE(cfi_sanitizer, LangOpts.Sanitize.hasOneOf(SanitizerKind::CFI | SanitizerKind::CFICastStrict | SanitizerKind::KCFI))
307+
FEATURE(cfi_cast_strict_sanitizer, LangOpts.Sanitize.has(SanitizerKind::CFICastStrict))
308+
FEATURE(cfi_derived_cast_sanitizer, LangOpts.Sanitize.has(SanitizerKind::CFIDerivedCast))
309+
FEATURE(cfi_icall_sanitizer, LangOpts.Sanitize.has(SanitizerKind::CFIICall))
310+
FEATURE(cfi_mfcall_sanitizer, LangOpts.Sanitize.has(SanitizerKind::CFIMFCall))
311+
FEATURE(cfi_unrelated_cast_sanitizer, LangOpts.Sanitize.has(SanitizerKind::CFIUnrelatedCast))
312+
FEATURE(cfi_nvcall_sanitizer, LangOpts.Sanitize.has(SanitizerKind::CFINVCall))
313+
FEATURE(cfi_vcall_sanitizer, LangOpts.Sanitize.has(SanitizerKind::CFIVCall))
307314
FEATURE(kcfi, LangOpts.Sanitize.has(SanitizerKind::KCFI))
308315
FEATURE(kcfi_arity, LangOpts.Sanitize.has(SanitizerKind::KCFI))
309316
FEATURE(modules, LangOpts.Modules)

clang/test/Lexer/has_feature_cfi.c

Lines changed: 65 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,77 @@
1-
// RUN: %clang_cc1 -E -fsanitize=cfi-cast-strict -o - %s | FileCheck --check-prefix=CHECK-CFISAN %s
2-
// RUN: %clang_cc1 -E -fsanitize=cfi-derived-cast -o - %s | FileCheck --check-prefix=CHECK-CFISAN %s
3-
// RUN: %clang_cc1 -E -fsanitize=cfi-icall -o - %s | FileCheck --check-prefix=CHECK-CFISAN %s
4-
// RUN: %clang_cc1 -E -fsanitize=cfi-mfcall -o - %s | FileCheck --check-prefix=CHECK-CFISAN %s
5-
// RUN: %clang_cc1 -E -fsanitize=cfi-unrelated-cast -o - %s | FileCheck --check-prefix=CHECK-CFISAN %s
6-
// RUN: %clang_cc1 -E -fsanitize=cfi-nvcall -o - %s | FileCheck --check-prefix=CHECK-CFISAN %s
7-
// RUN: %clang_cc1 -E -fsanitize=cfi-vcall -o - %s | FileCheck --check-prefix=CHECK-CFISAN %s
1+
// RUN: %clang -E -fvisibility=hidden -flto -fno-sanitize-ignorelist -fsanitize=cfi -c %s -o - | FileCheck %s --check-prefix=CHECK-CFI
2+
// RUN: %clang -E -fvisibility=hidden -flto -fno-sanitize-ignorelist -fsanitize=cfi -fsanitize-cfi-cross-dso -c %s -o - | FileCheck %s --check-prefix=CHECK-CFI
3+
// RUN: %clang -E -fvisibility=hidden -flto -fno-sanitize-ignorelist -fsanitize=cfi -fno-sanitize=cfi-nvcall,cfi-vcall,cfi-mfcall,cfi-icall -c %s -o - | FileCheck %s --check-prefix=CHECK-CFI
4+
// RUN: %clang -E -fsanitize=kcfi -c %s -o - | FileCheck %s --check-prefix=CHECK-CFI
5+
// CHECK-CFI: CFISanitizerEnabled
86

9-
// RUN: %clang_cc1 -E -fsanitize=kcfi -o - %s | FileCheck --check-prefix=CHECK-CFISAN %s
7+
// RUN: %clang -E -c %s -o - | FileCheck %s --check-prefix=CHECK-NO-CFI
8+
// CHECK-NO-CFI: CFISanitizerDisabled
109

11-
// RUN: %clang -E -fvisibility=hidden -fno-sanitize-ignorelist -fsanitize=cfi -flto -c %s -o - | FileCheck %s --check-prefix=CHECK-CFISAN
12-
// RUN: %clang -E -fvisibility=hidden -fno-sanitize-ignorelist -fsanitize=cfi -fsanitize-cfi-cross-dso -flto -c %s -o - | FileCheck %s --check-prefix=CHECK-CFISAN
10+
// RUN: %clang -E -fsanitize=cfi-cast-strict -c %s -o - | FileCheck %s --check-prefixes=CHECK-CFI,CHECK-CFI-CAST-STRICT
11+
// CHECK-CFI-CAST-STRICT: CFICastStrictSanitizerEnabled
1312

14-
// Disable CFI sanitizers.
15-
// RUN: %clang -E -fvisibility=hidden -fno-sanitize=cfi -flto -c %s -o - | FileCheck %s --check-prefix=CHECK-NO-CFISAN
13+
// RUN: %clang -E -fvisibility=hidden -flto -fno-sanitize-ignorelist -fsanitize=cfi-derived-cast -c %s -o - | FileCheck %s --check-prefixes=CHECK-CFI,CHECK-CFI-DERIVED-CAST
14+
// CHECK-CFI-DERIVED-CAST: CFIDerivedCastSanitizerEnabled
1615

17-
// Disable some but not all CFI schemes.
18-
// RUN: %clang -E -fvisibility=hidden -fno-sanitize-ignorelist -fsanitize=cfi -fno-sanitize-cfi-cross-dso -fno-sanitize=cfi-nvcall,cfi-vcall,cfi-mfcall,cfi-icall -flto -c %s -o - | FileCheck %s --check-prefix=CHECK-CFISAN
16+
// RUN: %clang -E -fvisibility=hidden -flto -fno-sanitize-ignorelist -fsanitize=cfi-icall -c %s -o - | FileCheck %s --check-prefixes=CHECK-CFI,CHECK-CFI-ICALL
17+
// CHECK-CFI-ICALL: CFIICallSanitizerEnabled
1918

20-
// Disable all CFI schemes. This essentially disables CFI sanitizers.
21-
// RUN: %clang -E -fvisibility=hidden -fsanitize=cfi -fno-sanitize-cfi-cross-dso -fno-sanitize=cfi-nvcall,cfi-vcall,cfi-mfcall,cfi-icall,cfi-cast-strict,cfi-derived-cast,cfi-unrelated-cast -flto -c %s -o - | FileCheck %s --check-prefix=CHECK-NO-CFISAN
19+
// RUN: %clang -E -fvisibility=hidden -flto -fno-sanitize-ignorelist -fsanitize=cfi-mfcall -c %s -o - | FileCheck %s --check-prefixes=CHECK-CFI,CHECK-CFI-MFCALL
20+
// CHECK-CFI-MFCALL: CFIMFCallSanitizerEnabled
2221

23-
#if __has_feature(cfi)
22+
// RUN: %clang -E -fvisibility=hidden -flto -fno-sanitize-ignorelist -fsanitize=cfi-unrelated-cast -c %s -o - | FileCheck %s --check-prefixes=CHECK-CFI,CHECK-CFI-UNRELATED-CAST
23+
// CHECK-CFI-UNRELATED-CAST: CFIUnrelatedCastSanitizerEnabled
24+
25+
// RUN: %clang -E -fvisibility=hidden -flto -fno-sanitize-ignorelist -fsanitize=cfi-nvcall -c %s -o - | FileCheck %s --check-prefixes=CHECK-CFI,CHECK-CFI-NVCALL
26+
// CHECK-CFI-NVCALL: CFINVCallSanitizerEnabled
27+
28+
// RUN: %clang -E -fvisibility=hidden -flto -fno-sanitize-ignorelist -fsanitize=cfi-vcall -c %s -o - | FileCheck %s --check-prefixes=CHECK-CFI,CHECK-CFI-VCALL
29+
// CHECK-CFI-VCALL: CFIVCallSanitizerEnabled
30+
31+
#if __has_feature(cfi_sanitizer)
2432
int CFISanitizerEnabled();
2533
#else
2634
int CFISanitizerDisabled();
2735
#endif
2836

29-
// CHECK-CFISAN: CFISanitizerEnabled
30-
// CHECK-NO-CFISAN: CFISanitizerDisabled
37+
#if __has_feature(cfi_cast_strict_sanitizer)
38+
int CFICastStrictSanitizerEnabled();
39+
#else
40+
int CFICastStrictSanitizerDisabled();
41+
#endif
42+
43+
#if __has_feature(cfi_derived_cast_sanitizer)
44+
int CFIDerivedCastSanitizerEnabled();
45+
#else
46+
int CFIDerivedCastSanitizerDisabled();
47+
#endif
48+
49+
#if __has_feature(cfi_icall_sanitizer)
50+
int CFIICallSanitizerEnabled();
51+
#else
52+
int CFIICallSanitizerDisabled();
53+
#endif
54+
55+
#if __has_feature(cfi_mfcall_sanitizer)
56+
int CFIMFCallSanitizerEnabled();
57+
#else
58+
int CFIMFCallSanitizerDisabled();
59+
#endif
60+
61+
#if __has_feature(cfi_unrelated_cast_sanitizer)
62+
int CFIUnrelatedCastSanitizerEnabled();
63+
#else
64+
int CFIUnrelatedCastSanitizerDisabled();
65+
#endif
3166

67+
#if __has_feature(cfi_nvcall_sanitizer)
68+
int CFINVCallSanitizerEnabled();
69+
#else
70+
int CFINVCallSanitizerDisabled();
71+
#endif
72+
73+
#if __has_feature(cfi_vcall_sanitizer)
74+
int CFIVCallSanitizerEnabled();
75+
#else
76+
int CFIVCallSanitizerDisabled();
77+
#endif

0 commit comments

Comments
 (0)