From bc632aeb4740e0270138a0311e7b36a427f4080e Mon Sep 17 00:00:00 2001 From: Ryo Yamashita Date: Sat, 19 Oct 2024 18:01:30 +0900 Subject: [PATCH] =?UTF-8?q?chore:=20Rust=E3=82=921.82.0=E3=81=AB=E4=B8=8A?= =?UTF-8?q?=E3=81=92=E3=80=81=E3=81=9D=E3=81=AE=E6=96=B0=E6=A9=9F=E8=83=BD?= =?UTF-8?q?=E3=82=92=E5=88=A9=E7=94=A8=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Rustを1.82.0に上げてClippyの対応を行うとともに、次の新機能を利用する。 - `unsafe_attributes` (rust-lang/rust#128771) - `raw_ref_op` (rust-lang/rust#127679) --- crates/voicevox_core/src/devices.rs | 8 +- .../src/infer/runtimes/onnxruntime.rs | 2 +- .../src/compatible_engine.rs | 30 ++++-- crates/voicevox_core_c_api/src/lib.rs | 98 +++++++++++++++++++ crates/voicevox_core_c_api/src/slice_owner.rs | 4 +- .../tests/e2e/assert_cdylib.rs | 1 + .../e2e/testcases/user_dict_manipulate.rs | 20 ++-- crates/voicevox_core_java_api/src/info.rs | 4 +- crates/voicevox_core_java_api/src/logger.rs | 3 +- .../voicevox_core_java_api/src/onnxruntime.rs | 9 +- .../voicevox_core_java_api/src/open_jtalk.rs | 9 +- .../voicevox_core_java_api/src/synthesizer.rs | 53 ++++++---- .../voicevox_core_java_api/src/user_dict.rs | 33 ++++--- .../voicevox_core_java_api/src/voice_model.rs | 15 ++- rust-toolchain | 2 +- 15 files changed, 226 insertions(+), 65 deletions(-) diff --git a/crates/voicevox_core/src/devices.rs b/crates/voicevox_core/src/devices.rs index ebffcb360..0890c0cff 100644 --- a/crates/voicevox_core/src/devices.rs +++ b/crates/voicevox_core/src/devices.rs @@ -230,11 +230,15 @@ mod tests { reason = "比較対象としてここは網羅されてなければなりません" )] let SupportedDevices { cpu: _, cuda, dml } = &SUPPORTED_DEVICES; - [cuda as *const _, dml as *const _] + #[expect( + clippy::borrow_deref_ref, + reason = "多分raw記法自体にまだ対応していない" + )] + [&raw const *cuda, &raw const *dml] }, *GpuSpec::defaults() .into_iter() - .map(|gpu| &SUPPORTED_DEVICES[gpu] as *const _) + .map(|gpu| &raw const SUPPORTED_DEVICES[gpu]) .collect::>(), ); } diff --git a/crates/voicevox_core/src/infer/runtimes/onnxruntime.rs b/crates/voicevox_core/src/infer/runtimes/onnxruntime.rs index f7f92355e..ffeb55e5f 100644 --- a/crates/voicevox_core/src/infer/runtimes/onnxruntime.rs +++ b/crates/voicevox_core/src/infer/runtimes/onnxruntime.rs @@ -282,7 +282,7 @@ pub(crate) mod blocking { /// assert_eq!(ptr_addr(ort1), ptr_addr(ort2)); /// /// fn ptr_addr(obj: &impl Sized) -> usize { - /// obj as *const _ as _ + /// &raw const *obj as _ /// } /// # Ok(()) /// # } diff --git a/crates/voicevox_core_c_api/src/compatible_engine.rs b/crates/voicevox_core_c_api/src/compatible_engine.rs index 7b1a03e7e..92ecfcf94 100644 --- a/crates/voicevox_core_c_api/src/compatible_engine.rs +++ b/crates/voicevox_core_c_api/src/compatible_engine.rs @@ -112,7 +112,8 @@ fn set_message(message: &str) { .replace_range(.., &format!("{message}\0")); } -#[no_mangle] +// SAFETY: voicevox_core_c_apiを構成するライブラリの中に、これと同名のシンボルは存在しない +#[unsafe(no_mangle)] pub extern "C" fn initialize(use_gpu: bool, cpu_num_threads: c_int, load_all_models: bool) -> bool { init_logger_once(); let result = (|| { @@ -150,7 +151,8 @@ pub extern "C" fn initialize(use_gpu: bool, cpu_num_threads: c_int, load_all_mod } } -#[no_mangle] +// SAFETY: voicevox_core_c_apiを構成するライブラリの中に、これと同名のシンボルは存在しない +#[unsafe(no_mangle)] pub extern "C" fn load_model(style_id: i64) -> bool { init_logger_once(); let style_id = StyleId::new(style_id as u32); @@ -171,33 +173,38 @@ pub extern "C" fn load_model(style_id: i64) -> bool { } } -#[no_mangle] +// SAFETY: voicevox_core_c_apiを構成するライブラリの中に、これと同名のシンボルは存在しない +#[unsafe(no_mangle)] pub extern "C" fn is_model_loaded(speaker_id: i64) -> bool { init_logger_once(); ensure_initialized!(&*lock_synthesizer()) .is_loaded_model_by_style_id(StyleId::new(speaker_id as u32)) } -#[no_mangle] +// SAFETY: voicevox_core_c_apiを構成するライブラリの中に、これと同名のシンボルは存在しない +#[unsafe(no_mangle)] pub extern "C" fn finalize() { init_logger_once(); *lock_synthesizer() = None; } -#[no_mangle] +// SAFETY: voicevox_core_c_apiを構成するライブラリの中に、これと同名のシンボルは存在しない +#[unsafe(no_mangle)] pub extern "C" fn metas() -> *const c_char { init_logger_once(); let model_set = voice_model_set(); model_set.all_metas_json.as_ptr() } -#[no_mangle] +// SAFETY: voicevox_core_c_apiを構成するライブラリの中に、これと同名のシンボルは存在しない +#[unsafe(no_mangle)] pub extern "C" fn last_error_message() -> *const c_char { init_logger_once(); ERROR_MESSAGE.lock().unwrap().as_ptr() as *const c_char } -#[no_mangle] +// SAFETY: voicevox_core_c_apiを構成するライブラリの中に、これと同名のシンボルは存在しない +#[unsafe(no_mangle)] pub extern "C" fn supported_devices() -> *const c_char { init_logger_once(); return SUPPORTED_DEVICES.as_ptr(); @@ -214,7 +221,8 @@ pub extern "C" fn supported_devices() -> *const c_char { }); } -#[no_mangle] +// SAFETY: voicevox_core_c_apiを構成するライブラリの中に、これと同名のシンボルは存在しない +#[unsafe(no_mangle)] pub extern "C" fn yukarin_s_forward( length: i64, phoneme_list: *mut i64, @@ -240,7 +248,8 @@ pub extern "C" fn yukarin_s_forward( } } -#[no_mangle] +// SAFETY: voicevox_core_c_apiを構成するライブラリの中に、これと同名のシンボルは存在しない +#[unsafe(no_mangle)] pub extern "C" fn yukarin_sa_forward( length: i64, vowel_phoneme_list: *mut i64, @@ -277,7 +286,8 @@ pub extern "C" fn yukarin_sa_forward( } } -#[no_mangle] +// SAFETY: voicevox_core_c_apiを構成するライブラリの中に、これと同名のシンボルは存在しない +#[unsafe(no_mangle)] pub extern "C" fn decode_forward( length: i64, phoneme_size: i64, diff --git a/crates/voicevox_core_c_api/src/lib.rs b/crates/voicevox_core_c_api/src/lib.rs index 76a23a442..883103c81 100644 --- a/crates/voicevox_core_c_api/src/lib.rs +++ b/crates/voicevox_core_c_api/src/lib.rs @@ -91,6 +91,8 @@ fn init_logger_once() { //#[cfg(feature = "load-onnxruntime")] //pub const VOICEVOX_ONNXRUNTIME_LIB_VERSION: &CStr = ..; +// TODO: cbindgenが`#[unsafe(no_mangle)]`に対応したら`#[no_mangle]`を置き換える +// SAFETY: voicevox_core_c_apiを構成するライブラリの中に、これと同名のシンボルは存在しない /// ONNX Runtimeの動的ライブラリの、バージョン付きのファイル名。 /// /// WindowsとAndroidでは ::voicevox_get_onnxruntime_lib_unversioned_filename と同じ。 @@ -106,6 +108,8 @@ pub extern "C" fn voicevox_get_onnxruntime_lib_versioned_filename() -> *const c_ C_STRING_DROP_CHECKER.blacklist(filename).as_ptr() } +// TODO: cbindgenが`#[unsafe(no_mangle)]`に対応したら`#[no_mangle]`を置き換える +// SAFETY: voicevox_core_c_apiを構成するライブラリの中に、これと同名のシンボルは存在しない /// ONNX Runtimeの動的ライブラリの、バージョン無しのファイル名。 /// /// \availability{ @@ -133,6 +137,8 @@ pub struct VoicevoxLoadOnnxruntimeOptions { filename: *const c_char, } +// TODO: cbindgenが`#[unsafe(no_mangle)]`に対応したら`#[no_mangle]`を置き換える +// SAFETY: voicevox_core_c_apiを構成するライブラリの中に、これと同名のシンボルは存在しない /// デフォルトの ::voicevox_onnxruntime_load_once のオプションを生成する。 /// /// @return デフォルトの ::voicevox_onnxruntime_load_once のオプション @@ -171,6 +177,8 @@ pub struct VoicevoxOnnxruntime(!); #[repr(transparent)] pub struct VoicevoxOnnxruntime(voicevox_core::blocking::Onnxruntime); +// TODO: cbindgenが`#[unsafe(no_mangle)]`に対応したら`#[no_mangle]`を置き換える +// SAFETY: voicevox_core_c_apiを構成するライブラリの中に、これと同名のシンボルは存在しない /// ::VoicevoxOnnxruntime のインスタンスが既に作られているならそれを得る。 /// /// 作られていなければ`NULL`を返す。 @@ -181,6 +189,8 @@ pub extern "C" fn voicevox_onnxruntime_get() -> Option<&'static VoicevoxOnnxrunt VoicevoxOnnxruntime::get() } +// TODO: cbindgenが`#[unsafe(no_mangle)]`に対応したら`#[no_mangle]`を置き換える +// SAFETY: voicevox_core_c_apiを構成するライブラリの中に、これと同名のシンボルは存在しない /// ONNX Runtimeをロードして初期化する。 /// /// 一度成功したら、以後は引数を無視して同じ参照を返す。 @@ -219,6 +229,8 @@ pub unsafe extern "C" fn voicevox_onnxruntime_load_once( })()) } +// TODO: cbindgenが`#[unsafe(no_mangle)]`に対応したら`#[no_mangle]`を置き換える +// SAFETY: voicevox_core_c_apiを構成するライブラリの中に、これと同名のシンボルは存在しない /// ONNX Runtimeを初期化する。 /// /// 一度成功したら以後は同じ参照を返す。 @@ -271,6 +283,8 @@ pub struct OpenJtalkRc { _padding: MaybeUninit<[u8; 1]>, } +// TODO: cbindgenが`#[unsafe(no_mangle)]`に対応したら`#[no_mangle]`を置き換える +// SAFETY: voicevox_core_c_apiを構成するライブラリの中に、これと同名のシンボルは存在しない /// ::OpenJtalkRc を構築(_construct_)する。 /// /// 解放は ::voicevox_open_jtalk_rc_delete で行う。 @@ -305,6 +319,8 @@ pub unsafe extern "C" fn voicevox_open_jtalk_rc_new( })()) } +// TODO: cbindgenが`#[unsafe(no_mangle)]`に対応したら`#[no_mangle]`を置き換える +// SAFETY: voicevox_core_c_apiを構成するライブラリの中に、これと同名のシンボルは存在しない /// OpenJtalkの使うユーザー辞書を設定する。 /// /// この関数を呼び出した後にユーザー辞書を変更した場合、再度この関数を呼び出す必要がある。 @@ -323,6 +339,8 @@ pub extern "C" fn voicevox_open_jtalk_rc_use_user_dict( })()) } +// TODO: cbindgenが`#[unsafe(no_mangle)]`に対応したら`#[no_mangle]`を置き換える +// SAFETY: voicevox_core_c_apiを構成するライブラリの中に、これと同名のシンボルは存在しない /// ::OpenJtalkRc を破棄(_destruct_)する。 /// /// 破棄対象への他スレッドでのアクセスが存在する場合、それらがすべて終わるのを待ってから破棄する。 @@ -368,6 +386,8 @@ pub struct VoicevoxInitializeOptions { cpu_num_threads: u16, } +// TODO: cbindgenが`#[unsafe(no_mangle)]`に対応したら`#[no_mangle]`を置き換える +// SAFETY: voicevox_core_c_apiを構成するライブラリの中に、これと同名のシンボルは存在しない /// デフォルトの初期化オプションを生成する /// @return デフォルト値が設定された初期化オプション #[no_mangle] @@ -376,6 +396,8 @@ pub extern "C" fn voicevox_make_default_initialize_options() -> VoicevoxInitiali VoicevoxInitializeOptions::default() } +// TODO: cbindgenが`#[unsafe(no_mangle)]`に対応したら`#[no_mangle]`を置き換える +// SAFETY: voicevox_core_c_apiを構成するライブラリの中に、これと同名のシンボルは存在しない /// voicevoxのバージョンを取得する。 /// @return SemVerでフォーマットされたバージョン。 #[no_mangle] @@ -410,6 +432,8 @@ pub type VoicevoxVoiceModelId<'a> = &'a [u8; 16]; /// VOICEVOXにおける、ある話者(_speaker_)のあるスタイル(_style_)を指す。 pub type VoicevoxStyleId = u32; +// TODO: cbindgenが`#[unsafe(no_mangle)]`に対応したら`#[no_mangle]`を置き換える +// SAFETY: voicevox_core_c_apiを構成するライブラリの中に、これと同名のシンボルは存在しない /// VVMファイルを開く。 /// /// @param [in] path vvmファイルへのUTF-8のファイルパス @@ -435,6 +459,8 @@ pub unsafe extern "C" fn voicevox_voice_model_file_open( })()) } +// TODO: cbindgenが`#[unsafe(no_mangle)]`に対応したら`#[no_mangle]`を置き換える +// SAFETY: voicevox_core_c_apiを構成するライブラリの中に、これと同名のシンボルは存在しない /// ::VoicevoxVoiceModelFile からIDを取得する。 /// /// @param [in] model 音声モデル @@ -453,6 +479,8 @@ pub unsafe extern "C" fn voicevox_voice_model_file_id( unsafe { output_voice_model_id.write_unaligned(id) }; } +// TODO: cbindgenが`#[unsafe(no_mangle)]`に対応したら`#[no_mangle]`を置き換える +// SAFETY: voicevox_core_c_apiを構成するライブラリの中に、これと同名のシンボルは存在しない /// ::VoicevoxVoiceModelFile からメタ情報を取得する。 /// /// JSONの解放は ::voicevox_json_free で行う。 @@ -468,6 +496,8 @@ pub extern "C" fn voicevox_voice_model_file_create_metas_json( C_STRING_DROP_CHECKER.whitelist(model.metas()).into_raw() } +// TODO: cbindgenが`#[unsafe(no_mangle)]`に対応したら`#[no_mangle]`を置き換える +// SAFETY: voicevox_core_c_apiを構成するライブラリの中に、これと同名のシンボルは存在しない /// ::VoicevoxVoiceModelFile を、所有しているファイルディスクリプタを閉じた上で破棄(_destruct_)する。 /// /// 破棄対象への他スレッドでのアクセスが存在する場合、それらがすべて終わるのを待ってから破棄する。 @@ -490,6 +520,8 @@ pub struct VoicevoxSynthesizer { _padding: MaybeUninit<[u8; 1]>, } +// TODO: cbindgenが`#[unsafe(no_mangle)]`に対応したら`#[no_mangle]`を置き換える +// SAFETY: voicevox_core_c_apiを構成するライブラリの中に、これと同名のシンボルは存在しない /// ::VoicevoxSynthesizer を構築(_construct_)する。 /// /// @param [in] onnxruntime @@ -520,6 +552,8 @@ pub unsafe extern "C" fn voicevox_synthesizer_new( })()) } +// TODO: cbindgenが`#[unsafe(no_mangle)]`に対応したら`#[no_mangle]`を置き換える +// SAFETY: voicevox_core_c_apiを構成するライブラリの中に、これと同名のシンボルは存在しない /// ::VoicevoxSynthesizer を破棄(_destruct_)する。 /// /// 破棄対象への他スレッドでのアクセスが存在する場合、それらがすべて終わるのを待ってから破棄する。 @@ -533,6 +567,8 @@ pub extern "C" fn voicevox_synthesizer_delete(synthesizer: *mut VoicevoxSynthesi synthesizer.drop_body(); } +// TODO: cbindgenが`#[unsafe(no_mangle)]`に対応したら`#[no_mangle]`を置き換える +// SAFETY: voicevox_core_c_apiを構成するライブラリの中に、これと同名のシンボルは存在しない /// 音声モデルを読み込む。 /// /// @param [in] synthesizer 音声シンセサイザ @@ -548,6 +584,8 @@ pub extern "C" fn voicevox_synthesizer_load_voice_model( into_result_code_with_error(synthesizer.load_voice_model(&model.body())) } +// TODO: cbindgenが`#[unsafe(no_mangle)]`に対応したら`#[no_mangle]`を置き換える +// SAFETY: voicevox_core_c_apiを構成するライブラリの中に、これと同名のシンボルは存在しない /// 音声モデルの読み込みを解除する。 /// /// @param [in] synthesizer 音声シンセサイザ @@ -568,6 +606,8 @@ pub extern "C" fn voicevox_synthesizer_unload_voice_model( into_result_code_with_error(synthesizer.unload_voice_model(model_id).map_err(Into::into)) } +// TODO: cbindgenが`#[unsafe(no_mangle)]`に対応したら`#[no_mangle]`を置き換える +// SAFETY: voicevox_core_c_apiを構成するライブラリの中に、これと同名のシンボルは存在しない /// ::VoicevoxOnnxruntime のインスタンスを得る。 /// /// @param [in] synthesizer 音声シンセサイザ @@ -580,6 +620,8 @@ pub extern "C" fn voicevox_synthesizer_get_onnxruntime( synthesizer.onnxruntime() } +// TODO: cbindgenが`#[unsafe(no_mangle)]`に対応したら`#[no_mangle]`を置き換える +// SAFETY: voicevox_core_c_apiを構成するライブラリの中に、これと同名のシンボルは存在しない /// ハードウェアアクセラレーションがGPUモードか判定する。 /// /// @param [in] synthesizer 音声シンセサイザ @@ -593,6 +635,8 @@ pub extern "C" fn voicevox_synthesizer_is_gpu_mode( synthesizer.body().is_gpu_mode() } +// TODO: cbindgenが`#[unsafe(no_mangle)]`に対応したら`#[no_mangle]`を置き換える +// SAFETY: voicevox_core_c_apiを構成するライブラリの中に、これと同名のシンボルは存在しない /// 指定したIDの音声モデルが読み込まれているか判定する。 /// /// @param [in] synthesizer 音声シンセサイザ @@ -613,6 +657,8 @@ pub extern "C" fn voicevox_synthesizer_is_loaded_voice_model( synthesizer.body().is_loaded_voice_model(model_id) } +// TODO: cbindgenが`#[unsafe(no_mangle)]`に対応したら`#[no_mangle]`を置き換える +// SAFETY: voicevox_core_c_apiを構成するライブラリの中に、これと同名のシンボルは存在しない /// 今読み込んでいる音声モデルのメタ情報を、JSONで取得する。 /// /// JSONの解放は ::voicevox_json_free で行う。 @@ -629,6 +675,8 @@ pub extern "C" fn voicevox_synthesizer_create_metas_json( C_STRING_DROP_CHECKER.whitelist(metas).into_raw() } +// TODO: cbindgenが`#[unsafe(no_mangle)]`に対応したら`#[no_mangle]`を置き換える +// SAFETY: voicevox_core_c_apiを構成するライブラリの中に、これと同名のシンボルは存在しない /// ONNX Runtimeとして利用可能なデバイスの情報を、JSONで取得する。 /// /// JSONの解放は ::voicevox_json_free で行う。 @@ -669,6 +717,8 @@ pub unsafe extern "C" fn voicevox_onnxruntime_create_supported_devices_json( })()) } +// TODO: cbindgenが`#[unsafe(no_mangle)]`に対応したら`#[no_mangle]`を置き換える +// SAFETY: voicevox_core_c_apiを構成するライブラリの中に、これと同名のシンボルは存在しない /// AquesTalk風記法から、AudioQueryをJSONとして生成する。 /// /// 生成したJSON文字列を解放するには ::voicevox_json_free を使う。 @@ -716,6 +766,8 @@ pub unsafe extern "C" fn voicevox_synthesizer_create_audio_query_from_kana( })()) } +// TODO: cbindgenが`#[unsafe(no_mangle)]`に対応したら`#[no_mangle]`を置き換える +// SAFETY: voicevox_core_c_apiを構成するライブラリの中に、これと同名のシンボルは存在しない /// 日本語テキストから、AudioQueryをJSONとして生成する。 /// /// 生成したJSON文字列を解放するには ::voicevox_json_free を使う。 @@ -763,6 +815,8 @@ pub unsafe extern "C" fn voicevox_synthesizer_create_audio_query( })()) } +// TODO: cbindgenが`#[unsafe(no_mangle)]`に対応したら`#[no_mangle]`を置き換える +// SAFETY: voicevox_core_c_apiを構成するライブラリの中に、これと同名のシンボルは存在しない /// AquesTalk風記法から、AccentPhrase (アクセント句)の配列をJSON形式で生成する。 /// /// 生成したJSON文字列を解放するには ::voicevox_json_free を使う。 @@ -809,6 +863,8 @@ pub unsafe extern "C" fn voicevox_synthesizer_create_accent_phrases_from_kana( })()) } +// TODO: cbindgenが`#[unsafe(no_mangle)]`に対応したら`#[no_mangle]`を置き換える +// SAFETY: voicevox_core_c_apiを構成するライブラリの中に、これと同名のシンボルは存在しない /// 日本語テキストから、AccentPhrase (アクセント句)の配列をJSON形式で生成する。 /// /// 生成したJSON文字列を解放するには ::voicevox_json_free を使う。 @@ -854,6 +910,8 @@ pub unsafe extern "C" fn voicevox_synthesizer_create_accent_phrases( })()) } +// TODO: cbindgenが`#[unsafe(no_mangle)]`に対応したら`#[no_mangle]`を置き換える +// SAFETY: voicevox_core_c_apiを構成するライブラリの中に、これと同名のシンボルは存在しない /// AccentPhraseの配列の音高・音素長を、特定の声で生成しなおす。 /// /// 生成したJSON文字列を解放するには ::voicevox_json_free を使う。 @@ -892,6 +950,8 @@ pub unsafe extern "C" fn voicevox_synthesizer_replace_mora_data( })()) } +// TODO: cbindgenが`#[unsafe(no_mangle)]`に対応したら`#[no_mangle]`を置き換える +// SAFETY: voicevox_core_c_apiを構成するライブラリの中に、これと同名のシンボルは存在しない /// AccentPhraseの配列の音素長を、特定の声で生成しなおす。 /// /// 生成したJSON文字列を解放するには ::voicevox_json_free を使う。 @@ -930,6 +990,8 @@ pub unsafe extern "C" fn voicevox_synthesizer_replace_phoneme_length( })()) } +// TODO: cbindgenが`#[unsafe(no_mangle)]`に対応したら`#[no_mangle]`を置き換える +// SAFETY: voicevox_core_c_apiを構成するライブラリの中に、これと同名のシンボルは存在しない /// AccentPhraseの配列の音高を、特定の声で生成しなおす。 /// /// 生成したJSON文字列を解放するには ::voicevox_json_free を使う。 @@ -975,6 +1037,8 @@ pub struct VoicevoxSynthesisOptions { enable_interrogative_upspeak: bool, } +// TODO: cbindgenが`#[unsafe(no_mangle)]`に対応したら`#[no_mangle]`を置き換える +// SAFETY: voicevox_core_c_apiを構成するライブラリの中に、これと同名のシンボルは存在しない /// デフォルトの `voicevox_synthesizer_synthesis` のオプションを生成する /// @return デフォルト値が設定された `voicevox_synthesizer_synthesis` のオプション #[no_mangle] @@ -983,6 +1047,8 @@ pub extern "C" fn voicevox_make_default_synthesis_options() -> VoicevoxSynthesis VoicevoxSynthesisOptions::default() } +// TODO: cbindgenが`#[unsafe(no_mangle)]`に対応したら`#[no_mangle]`を置き換える +// SAFETY: voicevox_core_c_apiを構成するライブラリの中に、これと同名のシンボルは存在しない /// AudioQueryから音声合成を行う。 /// /// 生成したWAVデータを解放するには ::voicevox_wav_free を使う。 @@ -1034,6 +1100,8 @@ pub struct VoicevoxTtsOptions { enable_interrogative_upspeak: bool, } +// TODO: cbindgenが`#[unsafe(no_mangle)]`に対応したら`#[no_mangle]`を置き換える +// SAFETY: voicevox_core_c_apiを構成するライブラリの中に、これと同名のシンボルは存在しない /// デフォルトのテキスト音声合成オプションを生成する /// @return テキスト音声合成オプション #[no_mangle] @@ -1042,6 +1110,8 @@ pub extern "C" fn voicevox_make_default_tts_options() -> VoicevoxTtsOptions { voicevox_core::TtsOptions::default().into() } +// TODO: cbindgenが`#[unsafe(no_mangle)]`に対応したら`#[no_mangle]`を置き換える +// SAFETY: voicevox_core_c_apiを構成するライブラリの中に、これと同名のシンボルは存在しない /// AquesTalk風記法から音声合成を行う。 /// /// 生成したWAVデータを解放するには ::voicevox_wav_free を使う。 @@ -1082,6 +1152,8 @@ pub unsafe extern "C" fn voicevox_synthesizer_tts_from_kana( })()) } +// TODO: cbindgenが`#[unsafe(no_mangle)]`に対応したら`#[no_mangle]`を置き換える +// SAFETY: voicevox_core_c_apiを構成するライブラリの中に、これと同名のシンボルは存在しない /// 日本語テキストから音声合成を行う。 /// /// 生成したWAVデータを解放するには ::voicevox_wav_free を使う。 @@ -1121,6 +1193,8 @@ pub unsafe extern "C" fn voicevox_synthesizer_tts( })()) } +// TODO: cbindgenが`#[unsafe(no_mangle)]`に対応したら`#[no_mangle]`を置き換える +// SAFETY: voicevox_core_c_apiを構成するライブラリの中に、これと同名のシンボルは存在しない /// JSON文字列を解放する。 /// /// @param [in] json 解放するJSON文字列 @@ -1146,6 +1220,8 @@ pub unsafe extern "C" fn voicevox_json_free(json: *mut c_char) { drop(CString::from_raw(C_STRING_DROP_CHECKER.check(json))); } +// TODO: cbindgenが`#[unsafe(no_mangle)]`に対応したら`#[no_mangle]`を置き換える +// SAFETY: voicevox_core_c_apiを構成するライブラリの中に、これと同名のシンボルは存在しない /// WAVデータを解放する。 /// /// @param [in] wav 解放するWAVデータ @@ -1163,6 +1239,8 @@ pub extern "C" fn voicevox_wav_free(wav: *mut u8) { U8_SLICE_OWNER.drop_for(wav); } +// TODO: cbindgenが`#[unsafe(no_mangle)]`に対応したら`#[no_mangle]`を置き換える +// SAFETY: voicevox_core_c_apiを構成するライブラリの中に、これと同名のシンボルは存在しない /// 結果コードに対応したメッセージ文字列を取得する。 /// /// @param [in] result_code 結果コード @@ -1235,6 +1313,8 @@ pub enum VoicevoxUserDictWordType { VOICEVOX_USER_DICT_WORD_TYPE_SUFFIX = 4, } +// TODO: cbindgenが`#[unsafe(no_mangle)]`に対応したら`#[no_mangle]`を置き換える +// SAFETY: voicevox_core_c_apiを構成するライブラリの中に、これと同名のシンボルは存在しない /// ::VoicevoxUserDictWord を最低限のパラメータで作成する。 /// /// @param [in] surface 表記 @@ -1255,6 +1335,8 @@ pub extern "C" fn voicevox_user_dict_word_make( } } +// TODO: cbindgenが`#[unsafe(no_mangle)]`に対応したら`#[no_mangle]`を置き換える +// SAFETY: voicevox_core_c_apiを構成するライブラリの中に、これと同名のシンボルは存在しない /// ユーザー辞書をb>構築(_construct_)する。 /// /// @returns ::VoicevoxUserDict @@ -1264,6 +1346,8 @@ pub extern "C" fn voicevox_user_dict_new() -> NonNull { VoicevoxUserDict::new(Default::default()) } +// TODO: cbindgenが`#[unsafe(no_mangle)]`に対応したら`#[no_mangle]`を置き換える +// SAFETY: voicevox_core_c_apiを構成するライブラリの中に、これと同名のシンボルは存在しない /// ユーザー辞書にファイルを読み込ませる。 /// /// @param [in] user_dict ユーザー辞書 @@ -1287,6 +1371,8 @@ pub unsafe extern "C" fn voicevox_user_dict_load( })()) } +// TODO: cbindgenが`#[unsafe(no_mangle)]`に対応したら`#[no_mangle]`を置き換える +// SAFETY: voicevox_core_c_apiを構成するライブラリの中に、これと同名のシンボルは存在しない /// ユーザー辞書に単語を追加する。 /// /// @param [in] ユーザー辞書 @@ -1317,6 +1403,8 @@ pub unsafe extern "C" fn voicevox_user_dict_add_word( })()) } +// TODO: cbindgenが`#[unsafe(no_mangle)]`に対応したら`#[no_mangle]`を置き換える +// SAFETY: voicevox_core_c_apiを構成するライブラリの中に、これと同名のシンボルは存在しない /// ユーザー辞書の単語を更新する。 /// /// @param [in] user_dict ユーザー辞書 @@ -1344,6 +1432,8 @@ pub unsafe extern "C" fn voicevox_user_dict_update_word( })()) } +// TODO: cbindgenが`#[unsafe(no_mangle)]`に対応したら`#[no_mangle]`を置き換える +// SAFETY: voicevox_core_c_apiを構成するライブラリの中に、これと同名のシンボルは存在しない /// ユーザー辞書から単語を削除する。 /// /// @param [in] user_dict ユーザー辞書 @@ -1366,6 +1456,8 @@ pub extern "C" fn voicevox_user_dict_remove_word( })()) } +// TODO: cbindgenが`#[unsafe(no_mangle)]`に対応したら`#[no_mangle]`を置き換える +// SAFETY: voicevox_core_c_apiを構成するライブラリの中に、これと同名のシンボルは存在しない // FIXME: infallibleなので、`char*`を戻り値にしてもよいはず /// ユーザー辞書の単語をJSON形式で出力する。 /// @@ -1390,6 +1482,8 @@ pub unsafe extern "C" fn voicevox_user_dict_to_json( VoicevoxResultCode::VOICEVOX_RESULT_OK } +// TODO: cbindgenが`#[unsafe(no_mangle)]`に対応したら`#[no_mangle]`を置き換える +// SAFETY: voicevox_core_c_apiを構成するライブラリの中に、これと同名のシンボルは存在しない /// 他のユーザー辞書をインポートする。 /// /// @param [in] user_dict ユーザー辞書 @@ -1407,6 +1501,8 @@ pub extern "C" fn voicevox_user_dict_import( })()) } +// TODO: cbindgenが`#[unsafe(no_mangle)]`に対応したら`#[no_mangle]`を置き換える +// SAFETY: voicevox_core_c_apiを構成するライブラリの中に、これと同名のシンボルは存在しない /// ユーザー辞書をファイルに保存する。 /// /// @param [in] user_dict ユーザー辞書 @@ -1428,6 +1524,8 @@ pub unsafe extern "C" fn voicevox_user_dict_save( })()) } +// TODO: cbindgenが`#[unsafe(no_mangle)]`に対応したら`#[no_mangle]`を置き換える +// SAFETY: voicevox_core_c_apiを構成するライブラリの中に、これと同名のシンボルは存在しない /// ユーザー辞書を破棄(_destruct_)する。 /// /// 破棄対象への他スレッドでのアクセスが存在する場合、それらがすべて終わるのを待ってから破棄する。 diff --git a/crates/voicevox_core_c_api/src/slice_owner.rs b/crates/voicevox_core_c_api/src/slice_owner.rs index 239847cb7..cedcd7417 100644 --- a/crates/voicevox_core_c_api/src/slice_owner.rs +++ b/crates/voicevox_core_c_api/src/slice_owner.rs @@ -124,7 +124,7 @@ mod tests { )] fn it_denies_unknown_ptr() { let owner = SliceOwner::::new(); - let x = 42; - owner.drop_for(&x as *const i32 as *mut i32); + let mut x = 42; + owner.drop_for(&raw mut x); } } diff --git a/crates/voicevox_core_c_api/tests/e2e/assert_cdylib.rs b/crates/voicevox_core_c_api/tests/e2e/assert_cdylib.rs index e779fdc23..14f8cae18 100644 --- a/crates/voicevox_core_c_api/tests/e2e/assert_cdylib.rs +++ b/crates/voicevox_core_c_api/tests/e2e/assert_cdylib.rs @@ -121,6 +121,7 @@ pub(crate) trait TestCase: Send { unsafe fn exec(&self, lib: Library) -> anyhow::Result<()>; /// 別プロセスで実行された`exec`の結果をチェックする。 + #[expect(clippy::result_large_err, reason = "多分assert_cmdの責務")] fn assert_output(&self, output: Utf8Output) -> AssertResult; } diff --git a/crates/voicevox_core_c_api/tests/e2e/testcases/user_dict_manipulate.rs b/crates/voicevox_core_c_api/tests/e2e/testcases/user_dict_manipulate.rs index 1bd6484fe..313b00125 100644 --- a/crates/voicevox_core_c_api/tests/e2e/testcases/user_dict_manipulate.rs +++ b/crates/voicevox_core_c_api/tests/e2e/testcases/user_dict_manipulate.rs @@ -29,9 +29,9 @@ impl assert_cdylib::TestCase for TestCase { unsafe fn exec(&self, lib: Library) -> anyhow::Result<()> { let lib = CApi::from_library(lib)?; - let get_json = |dict: &*mut VoicevoxUserDict| -> String { + let get_json = |dict: *const VoicevoxUserDict| -> String { let mut json = MaybeUninit::uninit(); - assert_ok(lib.voicevox_user_dict_to_json((*dict) as *const _, json.as_mut_ptr())); + assert_ok(lib.voicevox_user_dict_to_json(dict, json.as_mut_ptr())); let ret = CStr::from_ptr(json.assume_init()) .to_str() @@ -48,7 +48,11 @@ impl assert_cdylib::TestCase for TestCase { let add_word = |dict: *const VoicevoxUserDict, word: &VoicevoxUserDictWord| -> Uuid { let mut word_uuid = [0u8; 16]; - assert_ok(lib.voicevox_user_dict_add_word(dict, word as *const _, &mut word_uuid)); + #[expect( + clippy::borrow_deref_ref, + reason = "多分raw記法自体にまだ対応していない" + )] + assert_ok(lib.voicevox_user_dict_add_word(dict, &raw const *word, &mut word_uuid)); Uuid::from_slice(&word_uuid).expect("invalid uuid") }; @@ -61,7 +65,7 @@ impl assert_cdylib::TestCase for TestCase { let word_uuid = add_word(dict, &word); - let json = get_json(&dict); + let json = get_json(dict); assert!(json.contains("hoge")); assert!(json.contains("ホゲ")); @@ -72,7 +76,7 @@ impl assert_cdylib::TestCase for TestCase { assert_ok(lib.voicevox_user_dict_update_word(dict, &word_uuid.into_bytes(), &word)); - let json = get_json(&dict); + let json = get_json(dict); assert!(!json.contains("hoge")); assert!(!json.contains("ホゲ")); @@ -89,7 +93,7 @@ impl assert_cdylib::TestCase for TestCase { assert_ok(lib.voicevox_user_dict_import(dict, other_dict)); - let json = get_json(&dict); + let json = get_json(dict); assert!(json.contains("fuga")); assert!(json.contains("フガ")); assert_contains_uuid(&json, &word_uuid); @@ -100,7 +104,7 @@ impl assert_cdylib::TestCase for TestCase { // 単語の削除のテスト assert_ok(lib.voicevox_user_dict_remove_word(dict, &word_uuid.into_bytes())); - let json = get_json(&dict); + let json = get_json(dict); assert_not_contains_uuid(&json, &word_uuid); // 他の単語は残っている assert_contains_uuid(&json, &other_word_uuid); @@ -114,7 +118,7 @@ impl assert_cdylib::TestCase for TestCase { assert_ok(lib.voicevox_user_dict_save(dict, temp_path.as_ptr())); assert_ok(lib.voicevox_user_dict_load(other_dict, temp_path.as_ptr())); - let json = get_json(&other_dict); + let json = get_json(other_dict); assert_contains_uuid(&json, &word_uuid); assert_contains_uuid(&json, &other_word_uuid); diff --git a/crates/voicevox_core_java_api/src/info.rs b/crates/voicevox_core_java_api/src/info.rs index 7328d4de8..301c296cb 100644 --- a/crates/voicevox_core_java_api/src/info.rs +++ b/crates/voicevox_core_java_api/src/info.rs @@ -1,6 +1,8 @@ use crate::common::throw_if_err; use jni::{sys::jobject, JNIEnv}; -#[no_mangle] + +// SAFETY: voicevox_core_c_apiを構成するライブラリの中に、これと同名のシンボルは存在しない +#[unsafe(no_mangle)] extern "system" fn Java_jp_hiroshiba_voicevoxcore_GlobalInfo_rsGetVersion( env: JNIEnv<'_>, ) -> jobject { diff --git a/crates/voicevox_core_java_api/src/logger.rs b/crates/voicevox_core_java_api/src/logger.rs index d7feb6d65..82c6a8a83 100644 --- a/crates/voicevox_core_java_api/src/logger.rs +++ b/crates/voicevox_core_java_api/src/logger.rs @@ -1,6 +1,7 @@ use jni::{objects::JObject, JNIEnv}; -#[no_mangle] +// SAFETY: voicevox_core_c_apiを構成するライブラリの中に、これと同名のシンボルは存在しない +#[unsafe(no_mangle)] extern "system" fn Java_jp_hiroshiba_voicevoxcore_Dll_00024LoggerInitializer_initLogger( _: JNIEnv<'_>, _: JObject<'_>, diff --git a/crates/voicevox_core_java_api/src/onnxruntime.rs b/crates/voicevox_core_java_api/src/onnxruntime.rs index 004ff4d97..55cfcffc7 100644 --- a/crates/voicevox_core_java_api/src/onnxruntime.rs +++ b/crates/voicevox_core_java_api/src/onnxruntime.rs @@ -9,6 +9,7 @@ use jni::{ use crate::common::throw_if_err; +// SAFETY: voicevox_core_c_apiを構成するライブラリの中に、これと同名のシンボルは存在しない #[duplicate_item( f CONST; [ Java_jp_hiroshiba_voicevoxcore_Onnxruntime_rsLibName ] [ LIB_NAME ]; @@ -16,7 +17,7 @@ use crate::common::throw_if_err; [ Java_jp_hiroshiba_voicevoxcore_Onnxruntime_rsLibVersionedFilename ] [ LIB_VERSIONED_FILENAME ]; [ Java_jp_hiroshiba_voicevoxcore_Onnxruntime_rsLibUnversionedFilename ] [ LIB_UNVERSIONED_FILENAME ]; )] -#[no_mangle] +#[unsafe(no_mangle)] extern "system" fn f(env: JNIEnv<'_>) -> jobject { throw_if_err(env, ptr::null_mut(), |env| { let s = env.new_string(voicevox_core::blocking::Onnxruntime::CONST)?; @@ -24,7 +25,8 @@ extern "system" fn f(env: JNIEnv<'_>) -> jobject { }) } -#[no_mangle] +// SAFETY: voicevox_core_c_apiを構成するライブラリの中に、これと同名のシンボルは存在しない +#[unsafe(no_mangle)] unsafe extern "system" fn Java_jp_hiroshiba_voicevoxcore_Onnxruntime_rsNew<'local>( env: JNIEnv<'local>, this: JObject<'local>, @@ -40,7 +42,8 @@ unsafe extern "system" fn Java_jp_hiroshiba_voicevoxcore_Onnxruntime_rsNew<'loca }) } -#[no_mangle] +// SAFETY: voicevox_core_c_apiを構成するライブラリの中に、これと同名のシンボルは存在しない +#[unsafe(no_mangle)] unsafe extern "system" fn Java_jp_hiroshiba_voicevoxcore_Onnxruntime_rsSupportedDevices<'local>( env: JNIEnv<'local>, this: JObject<'local>, diff --git a/crates/voicevox_core_java_api/src/open_jtalk.rs b/crates/voicevox_core_java_api/src/open_jtalk.rs index 905baa2b1..448eba052 100644 --- a/crates/voicevox_core_java_api/src/open_jtalk.rs +++ b/crates/voicevox_core_java_api/src/open_jtalk.rs @@ -6,7 +6,8 @@ use jni::{ JNIEnv, }; -#[no_mangle] +// SAFETY: voicevox_core_c_apiを構成するライブラリの中に、これと同名のシンボルは存在しない +#[unsafe(no_mangle)] unsafe extern "system" fn Java_jp_hiroshiba_voicevoxcore_OpenJtalk_rsNew<'local>( env: JNIEnv<'local>, this: JObject<'local>, @@ -23,7 +24,8 @@ unsafe extern "system" fn Java_jp_hiroshiba_voicevoxcore_OpenJtalk_rsNew<'local> }) } -#[no_mangle] +// SAFETY: voicevox_core_c_apiを構成するライブラリの中に、これと同名のシンボルは存在しない +#[unsafe(no_mangle)] unsafe extern "system" fn Java_jp_hiroshiba_voicevoxcore_OpenJtalk_rsUseUserDict<'local>( env: JNIEnv<'local>, this: JObject<'local>, @@ -44,7 +46,8 @@ unsafe extern "system" fn Java_jp_hiroshiba_voicevoxcore_OpenJtalk_rsUseUserDict }) } -#[no_mangle] +// SAFETY: voicevox_core_c_apiを構成するライブラリの中に、これと同名のシンボルは存在しない +#[unsafe(no_mangle)] unsafe extern "system" fn Java_jp_hiroshiba_voicevoxcore_OpenJtalk_rsDrop<'local>( env: JNIEnv<'local>, this: JObject<'local>, diff --git a/crates/voicevox_core_java_api/src/synthesizer.rs b/crates/voicevox_core_java_api/src/synthesizer.rs index 32cdf1200..7b97309c8 100644 --- a/crates/voicevox_core_java_api/src/synthesizer.rs +++ b/crates/voicevox_core_java_api/src/synthesizer.rs @@ -10,7 +10,8 @@ use jni::{ }; use std::sync::Arc; -#[no_mangle] +// SAFETY: voicevox_core_c_apiを構成するライブラリの中に、これと同名のシンボルは存在しない +#[unsafe(no_mangle)] unsafe extern "system" fn Java_jp_hiroshiba_voicevoxcore_Synthesizer_rsNew<'local>( env: JNIEnv<'local>, this: JObject<'local>, @@ -63,7 +64,9 @@ unsafe extern "system" fn Java_jp_hiroshiba_voicevoxcore_Synthesizer_rsNew<'loca Ok(()) }) } -#[no_mangle] + +// SAFETY: voicevox_core_c_apiを構成するライブラリの中に、これと同名のシンボルは存在しない +#[unsafe(no_mangle)] unsafe extern "system" fn Java_jp_hiroshiba_voicevoxcore_Synthesizer_rsIsGpuMode<'local>( env: JNIEnv<'local>, this: JObject<'local>, @@ -79,7 +82,9 @@ unsafe extern "system" fn Java_jp_hiroshiba_voicevoxcore_Synthesizer_rsIsGpuMode }) .into() } -#[no_mangle] + +// SAFETY: voicevox_core_c_apiを構成するライブラリの中に、これと同名のシンボルは存在しない +#[unsafe(no_mangle)] unsafe extern "system" fn Java_jp_hiroshiba_voicevoxcore_Synthesizer_rsGetMetasJson<'local>( env: JNIEnv<'local>, this: JObject<'local>, @@ -99,7 +104,8 @@ unsafe extern "system" fn Java_jp_hiroshiba_voicevoxcore_Synthesizer_rsGetMetasJ }) } -#[no_mangle] +// SAFETY: voicevox_core_c_apiを構成するライブラリの中に、これと同名のシンボルは存在しない +#[unsafe(no_mangle)] unsafe extern "system" fn Java_jp_hiroshiba_voicevoxcore_Synthesizer_rsLoadVoiceModel<'local>( env: JNIEnv<'local>, this: JObject<'local>, @@ -120,7 +126,8 @@ unsafe extern "system" fn Java_jp_hiroshiba_voicevoxcore_Synthesizer_rsLoadVoice }) } -#[no_mangle] +// SAFETY: voicevox_core_c_apiを構成するライブラリの中に、これと同名のシンボルは存在しない +#[unsafe(no_mangle)] unsafe extern "system" fn Java_jp_hiroshiba_voicevoxcore_Synthesizer_rsUnloadVoiceModel<'local>( env: JNIEnv<'local>, this: JObject<'local>, @@ -141,7 +148,8 @@ unsafe extern "system" fn Java_jp_hiroshiba_voicevoxcore_Synthesizer_rsUnloadVoi }) } -#[no_mangle] +// SAFETY: voicevox_core_c_apiを構成するライブラリの中に、これと同名のシンボルは存在しない +#[unsafe(no_mangle)] unsafe extern "system" fn Java_jp_hiroshiba_voicevoxcore_Synthesizer_rsIsLoadedVoiceModel< 'local, >( @@ -165,7 +173,8 @@ unsafe extern "system" fn Java_jp_hiroshiba_voicevoxcore_Synthesizer_rsIsLoadedV .into() } -#[no_mangle] +// SAFETY: voicevox_core_c_apiを構成するライブラリの中に、これと同名のシンボルは存在しない +#[unsafe(no_mangle)] unsafe extern "system" fn Java_jp_hiroshiba_voicevoxcore_Synthesizer_rsAudioQueryFromKana< 'local, >( @@ -195,7 +204,8 @@ unsafe extern "system" fn Java_jp_hiroshiba_voicevoxcore_Synthesizer_rsAudioQuer }) } -#[no_mangle] +// SAFETY: voicevox_core_c_apiを構成するライブラリの中に、これと同名のシンボルは存在しない +#[unsafe(no_mangle)] unsafe extern "system" fn Java_jp_hiroshiba_voicevoxcore_Synthesizer_rsAudioQuery<'local>( env: JNIEnv<'local>, this: JObject<'local>, @@ -222,7 +232,8 @@ unsafe extern "system" fn Java_jp_hiroshiba_voicevoxcore_Synthesizer_rsAudioQuer }) } -#[no_mangle] +// SAFETY: voicevox_core_c_apiを構成するライブラリの中に、これと同名のシンボルは存在しない +#[unsafe(no_mangle)] unsafe extern "system" fn Java_jp_hiroshiba_voicevoxcore_Synthesizer_rsAccentPhrasesFromKana< 'local, >( @@ -252,7 +263,8 @@ unsafe extern "system" fn Java_jp_hiroshiba_voicevoxcore_Synthesizer_rsAccentPhr }) } -#[no_mangle] +// SAFETY: voicevox_core_c_apiを構成するライブラリの中に、これと同名のシンボルは存在しない +#[unsafe(no_mangle)] unsafe extern "system" fn Java_jp_hiroshiba_voicevoxcore_Synthesizer_rsAccentPhrases<'local>( env: JNIEnv<'local>, this: JObject<'local>, @@ -280,7 +292,8 @@ unsafe extern "system" fn Java_jp_hiroshiba_voicevoxcore_Synthesizer_rsAccentPhr }) } -#[no_mangle] +// SAFETY: voicevox_core_c_apiを構成するライブラリの中に、これと同名のシンボルは存在しない +#[unsafe(no_mangle)] unsafe extern "system" fn Java_jp_hiroshiba_voicevoxcore_Synthesizer_rsReplaceMoraData<'local>( env: JNIEnv<'local>, this: JObject<'local>, @@ -309,7 +322,8 @@ unsafe extern "system" fn Java_jp_hiroshiba_voicevoxcore_Synthesizer_rsReplaceMo }) } -#[no_mangle] +// SAFETY: voicevox_core_c_apiを構成するライブラリの中に、これと同名のシンボルは存在しない +#[unsafe(no_mangle)] unsafe extern "system" fn Java_jp_hiroshiba_voicevoxcore_Synthesizer_rsReplacePhonemeLength< 'local, >( @@ -340,7 +354,8 @@ unsafe extern "system" fn Java_jp_hiroshiba_voicevoxcore_Synthesizer_rsReplacePh }) } -#[no_mangle] +// SAFETY: voicevox_core_c_apiを構成するライブラリの中に、これと同名のシンボルは存在しない +#[unsafe(no_mangle)] unsafe extern "system" fn Java_jp_hiroshiba_voicevoxcore_Synthesizer_rsReplaceMoraPitch<'local>( env: JNIEnv<'local>, this: JObject<'local>, @@ -369,7 +384,8 @@ unsafe extern "system" fn Java_jp_hiroshiba_voicevoxcore_Synthesizer_rsReplaceMo }) } -#[no_mangle] +// SAFETY: voicevox_core_c_apiを構成するライブラリの中に、これと同名のシンボルは存在しない +#[unsafe(no_mangle)] unsafe extern "system" fn Java_jp_hiroshiba_voicevoxcore_Synthesizer_rsSynthesis<'local>( env: JNIEnv<'local>, this: JObject<'local>, @@ -407,7 +423,8 @@ unsafe extern "system" fn Java_jp_hiroshiba_voicevoxcore_Synthesizer_rsSynthesis }) } -#[no_mangle] +// SAFETY: voicevox_core_c_apiを構成するライブラリの中に、これと同名のシンボルは存在しない +#[unsafe(no_mangle)] unsafe extern "system" fn Java_jp_hiroshiba_voicevoxcore_Synthesizer_rsTtsFromKana<'local>( env: JNIEnv<'local>, this: JObject<'local>, @@ -439,7 +456,8 @@ unsafe extern "system" fn Java_jp_hiroshiba_voicevoxcore_Synthesizer_rsTtsFromKa }) } -#[no_mangle] +// SAFETY: voicevox_core_c_apiを構成するライブラリの中に、これと同名のシンボルは存在しない +#[unsafe(no_mangle)] unsafe extern "system" fn Java_jp_hiroshiba_voicevoxcore_Synthesizer_rsTts<'local>( env: JNIEnv<'local>, this: JObject<'local>, @@ -471,7 +489,8 @@ unsafe extern "system" fn Java_jp_hiroshiba_voicevoxcore_Synthesizer_rsTts<'loca }) } -#[no_mangle] +// SAFETY: voicevox_core_c_apiを構成するライブラリの中に、これと同名のシンボルは存在しない +#[unsafe(no_mangle)] unsafe extern "system" fn Java_jp_hiroshiba_voicevoxcore_Synthesizer_rsDrop<'local>( env: JNIEnv<'local>, this: JObject<'local>, diff --git a/crates/voicevox_core_java_api/src/user_dict.rs b/crates/voicevox_core_java_api/src/user_dict.rs index ceee1f42e..f7677255c 100644 --- a/crates/voicevox_core_java_api/src/user_dict.rs +++ b/crates/voicevox_core_java_api/src/user_dict.rs @@ -8,7 +8,8 @@ use jni::{ JNIEnv, }; -#[no_mangle] +// SAFETY: voicevox_core_c_apiを構成するライブラリの中に、これと同名のシンボルは存在しない +#[unsafe(no_mangle)] unsafe extern "system" fn Java_jp_hiroshiba_voicevoxcore_UserDict_rsNew<'local>( env: JNIEnv<'local>, this: JObject<'local>, @@ -22,7 +23,8 @@ unsafe extern "system" fn Java_jp_hiroshiba_voicevoxcore_UserDict_rsNew<'local>( }) } -#[no_mangle] +// SAFETY: voicevox_core_c_apiを構成するライブラリの中に、これと同名のシンボルは存在しない +#[unsafe(no_mangle)] unsafe extern "system" fn Java_jp_hiroshiba_voicevoxcore_UserDict_rsAddWord<'local>( env: JNIEnv<'local>, this: JObject<'local>, @@ -46,7 +48,8 @@ unsafe extern "system" fn Java_jp_hiroshiba_voicevoxcore_UserDict_rsAddWord<'loc }) } -#[no_mangle] +// SAFETY: voicevox_core_c_apiを構成するライブラリの中に、これと同名のシンボルは存在しない +#[unsafe(no_mangle)] unsafe extern "system" fn Java_jp_hiroshiba_voicevoxcore_UserDict_rsUpdateWord<'local>( env: JNIEnv<'local>, this: JObject<'local>, @@ -72,7 +75,8 @@ unsafe extern "system" fn Java_jp_hiroshiba_voicevoxcore_UserDict_rsUpdateWord<' }) } -#[no_mangle] +// SAFETY: voicevox_core_c_apiを構成するライブラリの中に、これと同名のシンボルは存在しない +#[unsafe(no_mangle)] unsafe extern "system" fn Java_jp_hiroshiba_voicevoxcore_UserDict_rsRemoveWord<'local>( env: JNIEnv<'local>, this: JObject<'local>, @@ -92,7 +96,8 @@ unsafe extern "system" fn Java_jp_hiroshiba_voicevoxcore_UserDict_rsRemoveWord<' }) } -#[no_mangle] +// SAFETY: voicevox_core_c_apiを構成するライブラリの中に、これと同名のシンボルは存在しない +#[unsafe(no_mangle)] unsafe extern "system" fn Java_jp_hiroshiba_voicevoxcore_UserDict_rsImportDict<'local>( env: JNIEnv<'local>, this: JObject<'local>, @@ -112,7 +117,8 @@ unsafe extern "system" fn Java_jp_hiroshiba_voicevoxcore_UserDict_rsImportDict<' }) } -#[no_mangle] +// SAFETY: voicevox_core_c_apiを構成するライブラリの中に、これと同名のシンボルは存在しない +#[unsafe(no_mangle)] unsafe extern "system" fn Java_jp_hiroshiba_voicevoxcore_UserDict_rsLoad<'local>( env: JNIEnv<'local>, this: JObject<'local>, @@ -132,7 +138,8 @@ unsafe extern "system" fn Java_jp_hiroshiba_voicevoxcore_UserDict_rsLoad<'local> }) } -#[no_mangle] +// SAFETY: voicevox_core_c_apiを構成するライブラリの中に、これと同名のシンボルは存在しない +#[unsafe(no_mangle)] unsafe extern "system" fn Java_jp_hiroshiba_voicevoxcore_UserDict_rsSave<'local>( env: JNIEnv<'local>, this: JObject<'local>, @@ -152,7 +159,8 @@ unsafe extern "system" fn Java_jp_hiroshiba_voicevoxcore_UserDict_rsSave<'local> }) } -#[no_mangle] +// SAFETY: voicevox_core_c_apiを構成するライブラリの中に、これと同名のシンボルは存在しない +#[unsafe(no_mangle)] unsafe extern "system" fn Java_jp_hiroshiba_voicevoxcore_UserDict_rsGetWords<'local>( env: JNIEnv<'local>, this: JObject<'local>, @@ -169,7 +177,8 @@ unsafe extern "system" fn Java_jp_hiroshiba_voicevoxcore_UserDict_rsGetWords<'lo }) } -#[no_mangle] +// SAFETY: voicevox_core_c_apiを構成するライブラリの中に、これと同名のシンボルは存在しない +#[unsafe(no_mangle)] unsafe extern "system" fn Java_jp_hiroshiba_voicevoxcore_UserDict_rsDrop<'local>( env: JNIEnv<'local>, this: JObject<'local>, @@ -180,7 +189,8 @@ unsafe extern "system" fn Java_jp_hiroshiba_voicevoxcore_UserDict_rsDrop<'local> }) } -#[no_mangle] +// SAFETY: voicevox_core_c_apiを構成するライブラリの中に、これと同名のシンボルは存在しない +#[unsafe(no_mangle)] extern "system" fn Java_jp_hiroshiba_voicevoxcore_UserDict_rsToZenkaku<'local>( env: JNIEnv<'local>, _cls: JClass<'local>, @@ -197,7 +207,8 @@ extern "system" fn Java_jp_hiroshiba_voicevoxcore_UserDict_rsToZenkaku<'local>( }) } -#[no_mangle] +// SAFETY: voicevox_core_c_apiを構成するライブラリの中に、これと同名のシンボルは存在しない +#[unsafe(no_mangle)] extern "system" fn Java_jp_hiroshiba_voicevoxcore_UserDict_rsValidatePronunciation<'local>( env: JNIEnv<'local>, _cls: JClass<'local>, diff --git a/crates/voicevox_core_java_api/src/voice_model.rs b/crates/voicevox_core_java_api/src/voice_model.rs index ef24edbfe..1e99e4409 100644 --- a/crates/voicevox_core_java_api/src/voice_model.rs +++ b/crates/voicevox_core_java_api/src/voice_model.rs @@ -13,7 +13,8 @@ impl HasJavaClassIdent for voicevox_core::blocking::VoiceModelFile { const JAVA_CLASS_IDENT: &str = "VoiceModelFile"; } -#[no_mangle] +// SAFETY: voicevox_core_c_apiを構成するライブラリの中に、これと同名のシンボルは存在しない +#[unsafe(no_mangle)] unsafe extern "system" fn Java_jp_hiroshiba_voicevoxcore_VoiceModelFile_rsOpen<'local>( env: JNIEnv<'local>, this: JObject<'local>, @@ -31,7 +32,8 @@ unsafe extern "system" fn Java_jp_hiroshiba_voicevoxcore_VoiceModelFile_rsOpen<' }) } -#[no_mangle] +// SAFETY: voicevox_core_c_apiを構成するライブラリの中に、これと同名のシンボルは存在しない +#[unsafe(no_mangle)] unsafe extern "system" fn Java_jp_hiroshiba_voicevoxcore_VoiceModelFile_rsGetId<'local>( env: JNIEnv<'local>, this: JObject<'local>, @@ -48,7 +50,8 @@ unsafe extern "system" fn Java_jp_hiroshiba_voicevoxcore_VoiceModelFile_rsGetId< }) } -#[no_mangle] +// SAFETY: voicevox_core_c_apiを構成するライブラリの中に、これと同名のシンボルは存在しない +#[unsafe(no_mangle)] unsafe extern "system" fn Java_jp_hiroshiba_voicevoxcore_VoiceModelFile_rsGetMetasJson<'local>( env: JNIEnv<'local>, this: JObject<'local>, @@ -65,7 +68,8 @@ unsafe extern "system" fn Java_jp_hiroshiba_voicevoxcore_VoiceModelFile_rsGetMet }) } -#[no_mangle] +// SAFETY: voicevox_core_c_apiを構成するライブラリの中に、これと同名のシンボルは存在しない +#[unsafe(no_mangle)] unsafe extern "system" fn Java_jp_hiroshiba_voicevoxcore_VoiceModelFile_rsClose<'local>( env: JNIEnv<'local>, this: JObject<'local>, @@ -77,7 +81,8 @@ unsafe extern "system" fn Java_jp_hiroshiba_voicevoxcore_VoiceModelFile_rsClose< }) } -#[no_mangle] +// SAFETY: voicevox_core_c_apiを構成するライブラリの中に、これと同名のシンボルは存在しない +#[unsafe(no_mangle)] unsafe extern "system" fn Java_jp_hiroshiba_voicevoxcore_VoiceModelFile_rsDrop<'local>( env: JNIEnv<'local>, this: JObject<'local>, diff --git a/rust-toolchain b/rust-toolchain index dbd41264a..71fae54fb 100644 --- a/rust-toolchain +++ b/rust-toolchain @@ -1 +1 @@ -1.81.0 +1.82.0