
# 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?
10 lines
298 B
LLVM
10 lines
298 B
LLVM
; RUN: not llvm-as -disable-output %s 2>&1 | FileCheck %s
|
|
|
|
; CHECK: Attributes 'sanitize_realtime and sanitize_realtime_blocking' are incompatible!
|
|
; CHECK-NEXT: ptr @sanitize_unsafe
|
|
define void @sanitize_unsafe() #0 {
|
|
ret void
|
|
}
|
|
|
|
attributes #0 = { sanitize_realtime sanitize_realtime_blocking }
|