Otherwise miri might fail in some gpui projects on macos.

Release Notes:

- N/A or Added/Fixed/Improved ...
This commit is contained in:
Lukas Wirth 2026-05-27 12:31:53 +02:00 committed by GitHub
parent a1d019bdd8
commit 75c17a6ee9
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
24 changed files with 200 additions and 213 deletions

41
Cargo.lock generated
View file

@ -4380,20 +4380,14 @@ dependencies = [
[[package]]
name = "ctor"
version = "0.4.3"
version = "1.0.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ec09e802f5081de6157da9a75701d6c713d8dc3ba52571fd4bd25f412644e8a6"
checksum = "6d765eb1c0bda10d31e0ea185f5ee15da532d60b0912d2bd1441783439e749c5"
dependencies = [
"ctor-proc-macro",
"dtor",
"link-section",
"linktime-proc-macro",
]
[[package]]
name = "ctor-proc-macro"
version = "0.0.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e2931af7e13dc045d8e9d26afccc6fa115d64e115c9c84b1166288b46f6782c2"
[[package]]
name = "ctrlc"
version = "3.5.0"
@ -5181,21 +5175,6 @@ dependencies = [
"dtoa",
]
[[package]]
name = "dtor"
version = "0.0.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "97cbdf2ad6846025e8e25df05171abfb30e3ababa12ee0a0e44b9bbe570633a8"
dependencies = [
"dtor-proc-macro",
]
[[package]]
name = "dtor-proc-macro"
version = "0.0.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7454e41ff9012c00d53cf7f475c5e3afa3b91b7c90568495495e8d9bf47a1055"
[[package]]
name = "dunce"
version = "1.0.5"
@ -10075,6 +10054,12 @@ dependencies = [
"cc",
]
[[package]]
name = "link-section"
version = "0.17.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4d1e908a416d6e9f725743b84a36feea40c4c131e805fbc26d61f9f451f36080"
[[package]]
name = "linkify"
version = "0.10.0"
@ -10084,6 +10069,12 @@ dependencies = [
"memchr",
]
[[package]]
name = "linktime-proc-macro"
version = "0.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a44cd706ff0d503ee32b2071166510ca27e281228de10cd3aa8d35ff94560f81"
[[package]]
name = "linux-raw-sys"
version = "0.4.15"

View file

@ -563,7 +563,7 @@ core-video = { version = "0.5.2", features = ["metal"] }
cpal = "0.17"
crash-handler = "0.7"
criterion = { version = "0.5", features = ["html_reports"] }
ctor = "0.4.0"
ctor = "1.0.6"
dap-types = { git = "https://github.com/zed-industries/dap-types", rev = "1b461b310481d01e02b2603c16d7144b926339f8" }
dashmap = "6.0"
derive_more = { version = "2.1.1", features = [

View file

@ -1334,7 +1334,7 @@ mod tests {
use std::env;
use util::{RandomCharIter, path};
#[ctor::ctor]
#[ctor::ctor(unsafe)]
fn init_logger() {
zlog::init_test();
}

View file

@ -4552,7 +4552,7 @@ async fn setup(cx: &mut TestAppContext, model: TestModel) -> ThreadTest {
}
#[cfg(test)]
#[ctor::ctor]
#[ctor::ctor(unsafe)]
fn init_logger() {
if std::env::var("RUST_LOG").is_ok() {
env_logger::init();

View file

@ -1175,7 +1175,7 @@ mod tests {
};
use tempfile::tempdir;
#[ctor::ctor]
#[ctor::ctor(unsafe)]
fn init_logger() {
zlog::init_test();
}

View file

@ -2168,7 +2168,7 @@ mod tests {
use unindent::Unindent as _;
use util::test::marked_text_ranges;
#[ctor::ctor]
#[ctor::ctor(unsafe)]
fn init_logger() {
zlog::init_test();
}

View file

@ -50,7 +50,7 @@ use unindent::Unindent as _;
use util::{path, rel_path::rel_path, uri};
use workspace::{Pane, ParticipantLocation};
#[ctor::ctor]
#[ctor::ctor(unsafe)]
fn init_logger() {
zlog::init_test();
}

View file

@ -30,7 +30,7 @@ use unindent::Unindent as _;
use util::{RandomCharIter, path, post_inc, rel_path::rel_path};
use workspace::MultiWorkspace;
#[ctor::ctor]
#[ctor::ctor(unsafe)]
fn init_logger() {
zlog::init_test();
}

View file

@ -3904,7 +3904,7 @@ async fn test_upsell_dismissed_via_dismissable_api(cx: &mut TestAppContext) {
kvp.delete_kvp(ZedPredictUpsell::KEY.into()).await.unwrap();
}
#[ctor::ctor]
#[ctor::ctor(unsafe)]
fn init_logger() {
zlog::init_test();
}

View file

@ -23,7 +23,7 @@ use ui::{App, BorrowAppContext, IntoElement, px};
use util::test::{generate_marked_text, marked_text_offsets, marked_text_ranges};
#[cfg(test)]
#[ctor::ctor]
#[ctor::ctor(unsafe)]
fn init_logger() {
zlog::init_test();
}

View file

@ -29,7 +29,7 @@ use theme::ThemeRegistry;
use util::{rel_path::rel_path_buf, test::TempTree};
#[cfg(test)]
#[ctor::ctor]
#[ctor::ctor(unsafe)]
fn init_logger() {
zlog::init_test();
}

View file

@ -14,7 +14,7 @@ use workspace::{
open_paths,
};
#[ctor::ctor]
#[ctor::ctor(unsafe)]
fn init_logger() {
zlog::init_test();
}

View file

@ -1852,7 +1852,7 @@ mod tests {
use super::*;
#[ctor::ctor]
#[ctor::ctor(unsafe)]
fn init_logger() {
zlog::init_test();
}

View file

@ -69,7 +69,7 @@ const MAC_PLATFORM_IVAR: &str = "platform";
static mut APP_CLASS: *const Class = ptr::null();
static mut APP_DELEGATE_CLASS: *const Class = ptr::null();
#[ctor]
#[ctor(unsafe)]
unsafe fn build_classes() {
unsafe {
APP_CLASS = {
@ -79,7 +79,7 @@ unsafe fn build_classes() {
}
};
unsafe {
APP_DELEGATE_CLASS = unsafe {
APP_DELEGATE_CLASS = {
let mut decl = ClassDecl::new("GPUIApplicationDelegate", class!(NSResponder)).unwrap();
decl.add_ivar::<*mut c_void>(MAC_PLATFORM_IVAR);
decl.add_method(

View file

@ -284,7 +284,7 @@ pub(crate) fn get_sources() -> oneshot::Receiver<Result<Vec<Rc<dyn ScreenCapture
}
}
#[ctor]
#[ctor(unsafe)]
unsafe fn build_classes() {
let mut decl = ClassDecl::new("GPUIStreamDelegate", class!(NSObject)).unwrap();
unsafe {

View file

@ -122,7 +122,7 @@ unsafe extern "C" {
) -> i32;
}
#[ctor]
#[ctor(unsafe)]
unsafe fn build_classes() {
unsafe {
WINDOW_CLASS = build_window_class("GPUIWindow", class!(NSWindow));
@ -130,181 +130,177 @@ unsafe fn build_classes() {
VIEW_CLASS = {
let mut decl = ClassDecl::new("GPUIView", class!(NSView)).unwrap();
decl.add_ivar::<*mut c_void>(WINDOW_STATE_IVAR);
unsafe {
decl.add_method(sel!(dealloc), dealloc_view as extern "C" fn(&Object, Sel));
decl.add_method(sel!(dealloc), dealloc_view as extern "C" fn(&Object, Sel));
decl.add_method(
sel!(performKeyEquivalent:),
handle_key_equivalent as extern "C" fn(&Object, Sel, id) -> BOOL,
);
decl.add_method(
sel!(keyDown:),
handle_key_down as extern "C" fn(&Object, Sel, id),
);
decl.add_method(
sel!(keyUp:),
handle_key_up as extern "C" fn(&Object, Sel, id),
);
decl.add_method(
sel!(mouseDown:),
handle_view_event as extern "C" fn(&Object, Sel, id),
);
decl.add_method(
sel!(mouseUp:),
handle_view_event as extern "C" fn(&Object, Sel, id),
);
decl.add_method(
sel!(rightMouseDown:),
handle_view_event as extern "C" fn(&Object, Sel, id),
);
decl.add_method(
sel!(rightMouseUp:),
handle_view_event as extern "C" fn(&Object, Sel, id),
);
decl.add_method(
sel!(otherMouseDown:),
handle_view_event as extern "C" fn(&Object, Sel, id),
);
decl.add_method(
sel!(otherMouseUp:),
handle_view_event as extern "C" fn(&Object, Sel, id),
);
decl.add_method(
sel!(mouseMoved:),
handle_view_event as extern "C" fn(&Object, Sel, id),
);
decl.add_method(
sel!(resetCursorRects),
reset_cursor_rects as extern "C" fn(&Object, Sel),
);
decl.add_method(
sel!(pressureChangeWithEvent:),
handle_view_event as extern "C" fn(&Object, Sel, id),
);
decl.add_method(
sel!(mouseExited:),
handle_view_event as extern "C" fn(&Object, Sel, id),
);
decl.add_method(
sel!(magnifyWithEvent:),
handle_view_event as extern "C" fn(&Object, Sel, id),
);
decl.add_method(
sel!(mouseDragged:),
handle_view_event as extern "C" fn(&Object, Sel, id),
);
decl.add_method(
sel!(rightMouseDragged:),
handle_view_event as extern "C" fn(&Object, Sel, id),
);
decl.add_method(
sel!(otherMouseDragged:),
handle_view_event as extern "C" fn(&Object, Sel, id),
);
decl.add_method(
sel!(scrollWheel:),
handle_view_event as extern "C" fn(&Object, Sel, id),
);
decl.add_method(
sel!(swipeWithEvent:),
handle_view_event as extern "C" fn(&Object, Sel, id),
);
decl.add_method(
sel!(flagsChanged:),
handle_view_event as extern "C" fn(&Object, Sel, id),
);
decl.add_method(
sel!(performKeyEquivalent:),
handle_key_equivalent as extern "C" fn(&Object, Sel, id) -> BOOL,
);
decl.add_method(
sel!(keyDown:),
handle_key_down as extern "C" fn(&Object, Sel, id),
);
decl.add_method(
sel!(keyUp:),
handle_key_up as extern "C" fn(&Object, Sel, id),
);
decl.add_method(
sel!(mouseDown:),
handle_view_event as extern "C" fn(&Object, Sel, id),
);
decl.add_method(
sel!(mouseUp:),
handle_view_event as extern "C" fn(&Object, Sel, id),
);
decl.add_method(
sel!(rightMouseDown:),
handle_view_event as extern "C" fn(&Object, Sel, id),
);
decl.add_method(
sel!(rightMouseUp:),
handle_view_event as extern "C" fn(&Object, Sel, id),
);
decl.add_method(
sel!(otherMouseDown:),
handle_view_event as extern "C" fn(&Object, Sel, id),
);
decl.add_method(
sel!(otherMouseUp:),
handle_view_event as extern "C" fn(&Object, Sel, id),
);
decl.add_method(
sel!(mouseMoved:),
handle_view_event as extern "C" fn(&Object, Sel, id),
);
decl.add_method(
sel!(resetCursorRects),
reset_cursor_rects as extern "C" fn(&Object, Sel),
);
decl.add_method(
sel!(pressureChangeWithEvent:),
handle_view_event as extern "C" fn(&Object, Sel, id),
);
decl.add_method(
sel!(mouseExited:),
handle_view_event as extern "C" fn(&Object, Sel, id),
);
decl.add_method(
sel!(magnifyWithEvent:),
handle_view_event as extern "C" fn(&Object, Sel, id),
);
decl.add_method(
sel!(mouseDragged:),
handle_view_event as extern "C" fn(&Object, Sel, id),
);
decl.add_method(
sel!(rightMouseDragged:),
handle_view_event as extern "C" fn(&Object, Sel, id),
);
decl.add_method(
sel!(otherMouseDragged:),
handle_view_event as extern "C" fn(&Object, Sel, id),
);
decl.add_method(
sel!(scrollWheel:),
handle_view_event as extern "C" fn(&Object, Sel, id),
);
decl.add_method(
sel!(swipeWithEvent:),
handle_view_event as extern "C" fn(&Object, Sel, id),
);
decl.add_method(
sel!(flagsChanged:),
handle_view_event as extern "C" fn(&Object, Sel, id),
);
decl.add_method(
sel!(makeBackingLayer),
make_backing_layer as extern "C" fn(&Object, Sel) -> id,
);
decl.add_method(
sel!(makeBackingLayer),
make_backing_layer as extern "C" fn(&Object, Sel) -> id,
);
decl.add_protocol(Protocol::get("CALayerDelegate").unwrap());
decl.add_method(
sel!(viewDidChangeBackingProperties),
view_did_change_backing_properties as extern "C" fn(&Object, Sel),
);
decl.add_method(
sel!(setFrameSize:),
set_frame_size as extern "C" fn(&Object, Sel, NSSize),
);
decl.add_method(
sel!(displayLayer:),
display_layer as extern "C" fn(&Object, Sel, id),
);
decl.add_protocol(Protocol::get("CALayerDelegate").unwrap());
decl.add_method(
sel!(viewDidChangeBackingProperties),
view_did_change_backing_properties as extern "C" fn(&Object, Sel),
);
decl.add_method(
sel!(setFrameSize:),
set_frame_size as extern "C" fn(&Object, Sel, NSSize),
);
decl.add_method(
sel!(displayLayer:),
display_layer as extern "C" fn(&Object, Sel, id),
);
decl.add_protocol(Protocol::get("NSTextInputClient").unwrap());
decl.add_method(
sel!(validAttributesForMarkedText),
valid_attributes_for_marked_text as extern "C" fn(&Object, Sel) -> id,
);
decl.add_method(
sel!(hasMarkedText),
has_marked_text as extern "C" fn(&Object, Sel) -> BOOL,
);
decl.add_method(
sel!(markedRange),
marked_range as extern "C" fn(&Object, Sel) -> NSRange,
);
decl.add_method(
sel!(selectedRange),
selected_range as extern "C" fn(&Object, Sel) -> NSRange,
);
decl.add_method(
sel!(firstRectForCharacterRange:actualRange:),
first_rect_for_character_range
as extern "C" fn(&Object, Sel, NSRange, id) -> NSRect,
);
decl.add_method(
sel!(insertText:replacementRange:),
insert_text as extern "C" fn(&Object, Sel, id, NSRange),
);
decl.add_method(
sel!(setMarkedText:selectedRange:replacementRange:),
set_marked_text as extern "C" fn(&Object, Sel, id, NSRange, NSRange),
);
decl.add_method(sel!(unmarkText), unmark_text as extern "C" fn(&Object, Sel));
decl.add_method(
sel!(attributedSubstringForProposedRange:actualRange:),
attributed_substring_for_proposed_range
as extern "C" fn(&Object, Sel, NSRange, *mut c_void) -> id,
);
decl.add_method(
sel!(viewDidChangeEffectiveAppearance),
view_did_change_effective_appearance as extern "C" fn(&Object, Sel),
);
decl.add_protocol(Protocol::get("NSTextInputClient").unwrap());
decl.add_method(
sel!(validAttributesForMarkedText),
valid_attributes_for_marked_text as extern "C" fn(&Object, Sel) -> id,
);
decl.add_method(
sel!(hasMarkedText),
has_marked_text as extern "C" fn(&Object, Sel) -> BOOL,
);
decl.add_method(
sel!(markedRange),
marked_range as extern "C" fn(&Object, Sel) -> NSRange,
);
decl.add_method(
sel!(selectedRange),
selected_range as extern "C" fn(&Object, Sel) -> NSRange,
);
decl.add_method(
sel!(firstRectForCharacterRange:actualRange:),
first_rect_for_character_range
as extern "C" fn(&Object, Sel, NSRange, id) -> NSRect,
);
decl.add_method(
sel!(insertText:replacementRange:),
insert_text as extern "C" fn(&Object, Sel, id, NSRange),
);
decl.add_method(
sel!(setMarkedText:selectedRange:replacementRange:),
set_marked_text as extern "C" fn(&Object, Sel, id, NSRange, NSRange),
);
decl.add_method(sel!(unmarkText), unmark_text as extern "C" fn(&Object, Sel));
decl.add_method(
sel!(attributedSubstringForProposedRange:actualRange:),
attributed_substring_for_proposed_range
as extern "C" fn(&Object, Sel, NSRange, *mut c_void) -> id,
);
decl.add_method(
sel!(viewDidChangeEffectiveAppearance),
view_did_change_effective_appearance as extern "C" fn(&Object, Sel),
);
// Suppress beep on keystrokes with modifier keys.
decl.add_method(
sel!(doCommandBySelector:),
do_command_by_selector as extern "C" fn(&Object, Sel, Sel),
);
// Suppress beep on keystrokes with modifier keys.
decl.add_method(
sel!(doCommandBySelector:),
do_command_by_selector as extern "C" fn(&Object, Sel, Sel),
);
decl.add_method(
sel!(acceptsFirstMouse:),
accepts_first_mouse as extern "C" fn(&Object, Sel, id) -> BOOL,
);
decl.add_method(
sel!(acceptsFirstMouse:),
accepts_first_mouse as extern "C" fn(&Object, Sel, id) -> BOOL,
);
decl.add_method(
sel!(characterIndexForPoint:),
character_index_for_point as extern "C" fn(&Object, Sel, NSPoint) -> u64,
);
}
decl.add_method(
sel!(characterIndexForPoint:),
character_index_for_point as extern "C" fn(&Object, Sel, NSPoint) -> u64,
);
decl.register()
};
BLURRED_VIEW_CLASS = {
let mut decl = ClassDecl::new("BlurredView", class!(NSVisualEffectView)).unwrap();
unsafe {
decl.add_method(
sel!(initWithFrame:),
blurred_view_init_with_frame as extern "C" fn(&Object, Sel, NSRect) -> id,
);
decl.add_method(
sel!(updateLayer),
blurred_view_update_layer as extern "C" fn(&Object, Sel),
);
decl.register()
}
decl.add_method(
sel!(initWithFrame:),
blurred_view_init_with_frame as extern "C" fn(&Object, Sel, NSRect) -> id,
);
decl.add_method(
sel!(updateLayer),
blurred_view_update_layer as extern "C" fn(&Object, Sel),
);
decl.register()
};
}
}

View file

@ -38,7 +38,7 @@ pub static TRAILING_WHITESPACE_REGEX: LazyLock<regex::Regex> = LazyLock::new(||
});
#[cfg(test)]
#[ctor::ctor]
#[ctor::ctor(unsafe)]
fn init_logger() {
zlog::init_test();
}

View file

@ -2083,7 +2083,7 @@ mod tests {
use gpui::TestAppContext;
use std::str::FromStr;
#[ctor::ctor]
#[ctor::ctor(unsafe)]
fn init_logger() {
zlog::init_test();
}

View file

@ -12,7 +12,7 @@ use util::RandomCharIter;
use util::rel_path::rel_path;
use util::test::sample_text;
#[ctor::ctor]
#[ctor::ctor(unsafe)]
fn init_logger() {
zlog::init_test();
}

View file

@ -1732,7 +1732,7 @@ mod tests {
use std::{cmp::Ordering, env, io::Read};
use util::RandomCharIter;
#[ctor::ctor]
#[ctor::ctor(unsafe)]
fn init_logger() {
zlog::init_test();
}

View file

@ -1396,7 +1396,7 @@ mod tests {
use rand::{distr::StandardUniform, prelude::*};
use std::cmp;
#[ctor::ctor]
#[ctor::ctor(unsafe)]
fn init_logger() {
zlog::init_test();
}

View file

@ -7,7 +7,7 @@ use serde_json::json;
use util::{path, rel_path::rel_path};
use workspace::{ActivatePreviousItem, AppState, MultiWorkspace, Workspace, item::test::TestItem};
#[ctor::ctor]
#[ctor::ctor(unsafe)]
fn init_logger() {
zlog::init_test();
}

View file

@ -9,7 +9,7 @@ use std::{
};
#[cfg(test)]
#[ctor::ctor]
#[ctor::ctor(unsafe)]
fn init_logger() {
zlog::init_test();
}

View file

@ -285,7 +285,7 @@ mod tests {
futures::future::join_all(tasks).await;
}
#[ctor::ctor]
#[ctor::ctor(unsafe)]
fn init_logger() {
zlog::init_test();
}