1
0
mirror of https://git.FreeBSD.org/ports.git synced 2024-12-27 05:10:36 +00:00

www/firefox-esr: fix build with clang18

Submitted by:	jkim
PR:				278989
This commit is contained in:
Christoph Moench-Tegeder 2024-05-15 22:14:29 +02:00
parent 0f1e62d922
commit 3c6cc9a950

View File

@ -0,0 +1,199 @@
From cd10f3ba0d83f34ca978cc4c7a552b72fdd068aa Mon Sep 17 00:00:00 2001
From: David Tolnay <dtolnay@gmail.com>
Date: Tue, 28 Nov 2023 11:18:39 -0800
Subject: [PATCH 1/2] Flatten cursor.kind() matching in Item::parse down to one
match
---
bindgen/ir/item.rs | 84 ++++++++++++++++++++++------------------------
1 file changed, 41 insertions(+), 43 deletions(-)
diff --git bindgen/ir/item.rs bindgen/ir/item.rs
index 0556452bfa..4f2d361e51 100644
--- third_party/rust/bindgen/ir/item.rs
+++ third_party/rust/bindgen/ir/item.rs
@@ -1427,53 +1427,52 @@
}
}
- // Guess how does clang treat extern "C" blocks?
- if cursor.kind() == CXCursor_UnexposedDecl {
- Err(ParseError::Recurse)
- } else {
+ match cursor.kind() {
+ // Guess how does clang treat extern "C" blocks?
+ CXCursor_UnexposedDecl => Err(ParseError::Recurse),
+
// We allowlist cursors here known to be unhandled, to prevent being
// too noisy about this.
- match cursor.kind() {
- CXCursor_MacroDefinition |
- CXCursor_MacroExpansion |
- CXCursor_UsingDeclaration |
- CXCursor_UsingDirective |
- CXCursor_StaticAssert |
- CXCursor_FunctionTemplate => {
- debug!(
- "Unhandled cursor kind {:?}: {:?}",
- cursor.kind(),
- cursor
- );
- }
- CXCursor_InclusionDirective => {
- let file = cursor.get_included_file_name();
- match file {
- None => {
- warn!(
- "Inclusion of a nameless file in {:?}",
- cursor
- );
- }
- Some(filename) => {
- ctx.include_file(filename);
- }
- }
- }
- _ => {
- // ignore toplevel operator overloads
- let spelling = cursor.spelling();
- if !spelling.starts_with("operator") {
+ CXCursor_MacroDefinition |
+ CXCursor_MacroExpansion |
+ CXCursor_UsingDeclaration |
+ CXCursor_UsingDirective |
+ CXCursor_StaticAssert |
+ CXCursor_FunctionTemplate => {
+ debug!(
+ "Unhandled cursor kind {:?}: {:?}",
+ cursor.kind(),
+ cursor
+ );
+ Err(ParseError::Continue)
+ }
+ CXCursor_InclusionDirective => {
+ let file = cursor.get_included_file_name();
+ match file {
+ None => {
warn!(
- "Unhandled cursor kind {:?}: {:?}",
- cursor.kind(),
+ "Inclusion of a nameless file in {:?}",
cursor
);
}
+ Some(filename) => {
+ ctx.include_file(filename);
+ }
}
+ Err(ParseError::Continue)
+ }
+ _ => {
+ // ignore toplevel operator overloads
+ let spelling = cursor.spelling();
+ if !spelling.starts_with("operator") {
+ warn!(
+ "Unhandled cursor kind {:?}: {:?}",
+ cursor.kind(),
+ cursor
+ );
+ }
+ Err(ParseError::Continue)
}
-
- Err(ParseError::Continue)
}
}
From 2997017b5a3065b83e9d76f0080d6cb99c94c0c1 Mon Sep 17 00:00:00 2001
From: David Tolnay <dtolnay@gmail.com>
Date: Tue, 28 Nov 2023 11:21:18 -0800
Subject: [PATCH 2/2] Handle CXCursor_LinkageSpec in Clang 18+
---
bindgen/ir/item.rs | 7 +++++--
1 file changed, 5 insertions(+), 2 deletions(-)
diff --git bindgen/ir/item.rs bindgen/ir/item.rs
index 4f2d361e51..dd587b088b 100644
--- third_party/rust/bindgen/ir/item.rs
+++ third_party/rust/bindgen/ir/item.rs
@@ -1433,8 +1433,11 @@ impl Item {
}
match cursor.kind() {
- // Guess how does clang treat extern "C" blocks?
- CXCursor_UnexposedDecl => Err(ParseError::Recurse),
+ // On Clang 18+, extern "C" is reported accurately as a LinkageSpec.
+ // Older LLVM treat it as UnexposedDecl.
+ CXCursor_LinkageSpec | CXCursor_UnexposedDecl => {
+ Err(ParseError::Recurse)
+ }
// We allowlist cursors here known to be unhandled, to prevent being
// too noisy about this.
diff --git dom/media/gmp-plugin-openh264/gmp-fake-openh264.cpp dom/media/gmp-plugin-openh264/gmp-fake-openh264.cpp
--- dom/media/gmp-plugin-openh264/gmp-fake-openh264.cpp
+++ dom/media/gmp-plugin-openh264/gmp-fake-openh264.cpp
@@ -97,11 +97,11 @@
uint32_t width_;
uint32_t height_;
uint8_t y_;
uint8_t u_;
uint8_t v_;
- uint32_t timestamp_;
+ uint64_t timestamp_;
} idr_nalu;
};
#pragma pack(pop)
#define ENCODED_FRAME_MAGIC 0x004000b8
diff --git dom/media/gtest/TestGMPRemoveAndDelete.cpp dom/media/gtest/TestGMPRemoveAndDelete.cpp
--- dom/media/gtest/TestGMPRemoveAndDelete.cpp
+++ dom/media/gtest/TestGMPRemoveAndDelete.cpp
@@ -359,11 +359,11 @@
uint32_t width_;
uint32_t height_;
uint8_t y_;
uint8_t u_;
uint8_t v_;
- uint32_t timestamp_;
+ uint64_t timestamp_;
} idr_nalu;
};
#pragma pack(pop)
GMPVideoFrame* absFrame;
diff --git dom/media/webrtc/libwebrtcglue/WebrtcGmpVideoCodec.h dom/media/webrtc/libwebrtcglue/WebrtcGmpVideoCodec.h
--- dom/media/webrtc/libwebrtcglue/WebrtcGmpVideoCodec.h
+++ dom/media/webrtc/libwebrtcglue/WebrtcGmpVideoCodec.h
@@ -300,11 +300,11 @@
struct InputImageData {
int64_t timestamp_us;
};
// Map rtp time -> input image data
- DataMutex<std::map<uint32_t, InputImageData>> mInputImageMap;
+ DataMutex<std::map<uint64_t, InputImageData>> mInputImageMap;
MediaEventProducer<uint64_t> mInitPluginEvent;
MediaEventProducer<uint64_t> mReleasePluginEvent;
};
diff --git dom/media/webrtc/libwebrtcglue/WebrtcGmpVideoCodec.cpp dom/media/webrtc/libwebrtcglue/WebrtcGmpVideoCodec.cpp
--- dom/media/webrtc/libwebrtcglue/WebrtcGmpVideoCodec.cpp
+++ dom/media/webrtc/libwebrtcglue/WebrtcGmpVideoCodec.cpp
@@ -538,11 +538,11 @@
return;
}
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(),
aEncodedFrame->Size());