Adapt the shipped rust-bindgen copy for LLVM-18 and later, and tell cargo we've modified the code of rust-bindgen so the checksum verification of this crate should be skipped diff -rup a/Cargo.lock b/Cargo.lock --- a/Cargo.lock 2024-03-14 06:21:23.000000000 +0100 +++ b/Cargo.lock 2024-03-20 13:15:35.146224179 +0100 @@ -414,8 +414,8 @@ dependencies = [ [[package]] name = "bindgen" version = "0.64.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4243e6031260db77ede97ad86c27e501d646a27ab57b59a574f725d98ab1fb4" +#source = "registry+https://github.com/rust-lang/crates.io-index" +#checksum = "c4243e6031260db77ede97ad86c27e501d646a27ab57b59a574f725d98ab1fb4" dependencies = [ "bitflags 1.3.2", "cexpr", diff -rup a/Cargo.toml b/Cargo.toml --- a/Cargo.toml 2024-03-20 13:09:16.152828408 +0100 +++ b/Cargo.toml 2024-03-20 13:14:09.072867031 +0100 @@ -193,3 +193,8 @@ weedle2 = "=4.0.0" # Shut up such messages for now to make the build succeed [future-incompat-report] frequency = "never" + +[patch.crates-io.bindgen_0_64_0] +package = "bindgen" +version = "0.64.0" +path = "third_party/rust/bindgen" diff -rup a/third_party/rust/bindgen/ir/item.rs b/third_party/rust/bindgen/ir/item.rs --- a/third_party/rust/bindgen/ir/item.rs 2024-03-14 06:21:40.000000000 +0100 +++ b/third_party/rust/bindgen/ir/item.rs 2024-03-20 13:11:32.062844514 +0100 @@ -1434,6 +1434,7 @@ impl Item { // We allowlist cursors here known to be unhandled, to prevent being // too noisy about this. match cursor.kind() { + CXCursor_LinkageSpec => return Err(ParseError::Recurse), CXCursor_MacroDefinition | CXCursor_MacroExpansion | CXCursor_UsingDeclaration | Adapt the WebRTC code to use 64-bit timestamp to fix a build failure with Clang-18 and later diff -rup a/dom/media/gmp-plugin-openh264/gmp-fake-openh264.cpp b/dom/media/gmp-plugin-openh264/gmp-fake-openh264.cpp --- a/dom/media/gmp-plugin-openh264/gmp-fake-openh264.cpp 2024-03-14 06:21:25.000000000 +0100 +++ b/dom/media/gmp-plugin-openh264/gmp-fake-openh264.cpp 2024-03-20 13:17:20.839584778 +0100 @@ -99,7 +99,7 @@ struct EncodedFrame { uint8_t y_; uint8_t u_; uint8_t v_; - uint32_t timestamp_; + uint64_t timestamp_; } idr_nalu; }; #pragma pack(pop) diff -rup a/dom/media/gtest/TestGMPRemoveAndDelete.cpp b/dom/media/gtest/TestGMPRemoveAndDelete.cpp --- a/dom/media/gtest/TestGMPRemoveAndDelete.cpp 2024-03-14 06:21:25.000000000 +0100 +++ b/dom/media/gtest/TestGMPRemoveAndDelete.cpp 2024-03-20 13:17:20.839584778 +0100 @@ -361,7 +361,7 @@ void GMPRemoveTest::gmp_Decode() { uint8_t y_; uint8_t u_; uint8_t v_; - uint32_t timestamp_; + uint64_t timestamp_; } idr_nalu; }; #pragma pack(pop) diff -rup a/dom/media/webrtc/libwebrtcglue/WebrtcGmpVideoCodec.cpp b/dom/media/webrtc/libwebrtcglue/WebrtcGmpVideoCodec.cpp --- a/dom/media/webrtc/libwebrtcglue/WebrtcGmpVideoCodec.cpp 2024-03-14 06:21:24.000000000 +0100 +++ b/dom/media/webrtc/libwebrtcglue/WebrtcGmpVideoCodec.cpp 2024-03-20 13:17:20.842918112 +0100 @@ -540,7 +540,7 @@ void WebrtcGmpVideoEncoder::Encoded( webrtc::VideoFrameType ft; GmpFrameTypeToWebrtcFrameType(aEncodedFrame->FrameType(), &ft); - uint32_t timestamp = (aEncodedFrame->TimeStamp() * 90ll + 999) / 1000; + uint64_t timestamp = (aEncodedFrame->TimeStamp() * 90ll + 999) / 1000; GMP_LOG_DEBUG("GMP Encoded: %" PRIu64 ", type %d, len %d", aEncodedFrame->TimeStamp(), aEncodedFrame->BufferType(), diff -rup a/dom/media/webrtc/libwebrtcglue/WebrtcGmpVideoCodec.h b/dom/media/webrtc/libwebrtcglue/WebrtcGmpVideoCodec.h --- a/dom/media/webrtc/libwebrtcglue/WebrtcGmpVideoCodec.h 2024-03-14 06:21:24.000000000 +0100 +++ b/dom/media/webrtc/libwebrtcglue/WebrtcGmpVideoCodec.h 2024-03-20 13:17:32.442921055 +0100 @@ -302,7 +302,7 @@ class WebrtcGmpVideoEncoder : public GMP int64_t timestamp_us; }; // Map rtp time -> input image data - DataMutex> mInputImageMap; + DataMutex> mInputImageMap; MediaEventProducer mInitPluginEvent; MediaEventProducer mReleasePluginEvent;