Versions before 144 vendor bindgen 0.69, which emits invalid Rust for
libc++ 21's attributed basic_string::__self_view alias on Darwin.
This was exposed by commit 0758fc3add ("darwin.libcxx:
20.1.0+apple-sdk-26.0 -> 21.1.6+apple-sdk-26.4"), where libc++
changed `basic_string::__self_view` from a typedef to an attributed
`using` alias. bindgen then drops the alias template parameter and emits
`basic_string___self_view = ...<_CharT>`.
The solution is to blocklist the unused `string_view` internals for the
profiler Rust API. They are not used in the actual build.
Note: Mozilla 144 updated vendored bindgen via:
https://bugzilla.mozilla.org/show_bug.cgi?id=1985509
Assisted-by: Codex gpt-5.5 xhigh
16 lines
850 B
Diff
16 lines
850 B
Diff
diff --git a/tools/profiler/rust-api/build.rs b/tools/profiler/rust-api/build.rs
|
|
index 9bb27eb83e5e..3f09f7f01bcb 100644
|
|
--- a/tools/profiler/rust-api/build.rs
|
|
+++ b/tools/profiler/rust-api/build.rs
|
|
@@ -88,6 +88,10 @@ fn generate_bindings() {
|
|
// successfully. Otherwise, it fails to build because MarkerSchema has
|
|
// some std::strings as its fields.
|
|
.opaque_type("std::string")
|
|
+ .blocklist_type(".*basic_string_view.*")
|
|
+ .opaque_type(".*basic_string_view.*")
|
|
+ .blocklist_type(".*basic_string___self_view.*")
|
|
+ .opaque_type(".*basic_string___self_view.*")
|
|
// std::vector needs to be converted to an opaque type because, if it's
|
|
// not an opaque type, bindgen can't find its size properly and
|
|
// MarkerSchema's total size reduces. That causes a heap buffer overflow.
|