mirror of
https://github.com/llvm/llvm-project.git
synced 2025-04-25 11:26:06 +00:00

# What This PR renames the newly-introduced llvm attribute `sanitize_realtime_unsafe` to `sanitize_realtime_blocking`. Likewise, sibling variables such as `SanitizeRealtimeUnsafe` are renamed to `SanitizeRealtimeBlocking` respectively. There are no other functional changes. # Why? - There are a number of problems that can cause a function to be real-time "unsafe", - we wish to communicate what problems rtsan detects and *why* they're unsafe, and - a generic "unsafe" attribute is, in our opinion, too broad a net - which may lead to future implementations that need extra contextual information passed through them in order to communicate meaningful reasons to users. - We want to avoid this situation and make the runtime library boundary API/ABI as simple as possible, and - we believe that restricting the scope of attributes to names like `sanitize_realtime_blocking` is an effective means of doing so. We also feel that the symmetry between `[[clang::blocking]]` and `sanitize_realtime_blocking` is easier to follow as a developer. # Concerns - I'm aware that the LLVM attribute `sanitize_realtime_unsafe` has been part of the tree for a few weeks now (introduced here: https://github.com/llvm/llvm-project/pull/106754). Given that it hasn't been released in version 20 yet, am I correct in considering this to not be a breaking change?
12 lines
436 B
C
12 lines
436 B
C
// RUN: %clang_cc1 -triple x86_64-unknown-linux -fsanitize=realtime %s -emit-llvm -o - %s | FileCheck %s
|
|
|
|
float process(float *a) [[clang::nonblocking]] { return *a; }
|
|
// CHECK: @process{{.*}} #0 {
|
|
// CHECK: attributes #0 = {
|
|
// CHECK-SAME: {{.*sanitize_realtime .*}}
|
|
|
|
int spinlock(int *a) [[clang::blocking]] { return *a; }
|
|
// CHECK: @spinlock{{.*}} #1 {
|
|
// CHECK: attributes #1 = {
|
|
// CHECK-SAME: {{.*sanitize_realtime_blocking .*}}
|