Squashed 'third_party/autocxx/' changes from fdfb26e26..69eb3d8d2

69eb3d8d2 Merge pull request #1353 from EdmundGoodman/main
e0923cfdf Merge pull request #1354 from google/remove-unused-fields
b78edbaf0 Remove redundant fields.
585d5c1cd Add integration tests for functions taking array parameters
2f84e49f2 Merge pull request #1352 from google/clippy-5
efa122b50 More clippy fixes.
4eeeeb873 Further fix.
d6bf45456 Clippy fix.
d223b2f4a Merge pull request #1345 from google/allow-unused
2dcdff106 Merge pull request #1344 from google/missing-headers
5dd9a002d Fix unused import warnings.
f7bcbc75d Merge pull request #1338 from google/dependabot/cargo/rustix-0.37.25
65afd59d0 Add some missing headers.
ce7f49fd6 Merge pull request #1340 from google/fix-ci-probs
c9e274f68 Missing stdints.
2ebe0b557 Bump rustix from 0.37.23 to 0.37.25
6daf52209 Merge pull request #1335 from google/clippy-4
c25b46565 Clippy fix.
e8012a011 Merge pull request #1330 from google/subclass-opaque
2e8430026 Test for #1328.
762dbf397 Merge pull request #1324 from google/clippy5
c8e5e72d5 Merge pull request #1323 from google/fix-1318
354cec9f8 Clippy fixes.
2ef099dca Fix badly named alloc function - fixes #1318
b9550bda7 Merge pull request #1313 from google/bitfieldthing
748119f2c Merge branch 'main' of github.com:google/autocxx into bitfieldthing
366f3f430 Fix test.
a354a5d95 Better diagnostics on why these types are ignored.
b624e9cdc Adding diagnostics about bitfields.
648f47782 Add bitfield test kindly submitted for #1303

git-subtree-dir: third_party/autocxx
git-subtree-split: 69eb3d8d283c5cceb3829b5f200370353de2bd63
Signed-off-by: James Kuszmaul <jabukuszmaul+collab@gmail.com>
Change-Id: If2569977170bda9cda3ab3f3ee9ccbdc099ad9da
diff --git a/engine/src/conversion/analysis/allocators.rs b/engine/src/conversion/analysis/allocators.rs
index da25a77..aab637c 100644
--- a/engine/src/conversion/analysis/allocators.rs
+++ b/engine/src/conversion/analysis/allocators.rs
@@ -101,11 +101,11 @@
 }
 
 pub(crate) fn get_alloc_name(ty_name: &QualifiedName) -> QualifiedName {
-    get_name(ty_name, "alloc")
+    get_name(ty_name, "autocxx_alloc")
 }
 
 pub(crate) fn get_free_name(ty_name: &QualifiedName) -> QualifiedName {
-    get_name(ty_name, "free")
+    get_name(ty_name, "autocxx_free")
 }
 
 fn get_name(ty_name: &QualifiedName, label: &str) -> QualifiedName {
diff --git a/engine/src/conversion/analysis/depth_first.rs b/engine/src/conversion/analysis/depth_first.rs
index baadbd7..3c6241b 100644
--- a/engine/src/conversion/analysis/depth_first.rs
+++ b/engine/src/conversion/analysis/depth_first.rs
@@ -44,7 +44,7 @@
     type Item = &'a T;
 
     fn next(&mut self) -> Option<Self::Item> {
-        let first_candidate = self.queue.get(0).map(|api| api.name());
+        let first_candidate = self.queue.front().map(|api| api.name());
         while let Some(candidate) = self.queue.pop_front() {
             if !candidate
                 .field_and_base_deps()
@@ -54,7 +54,7 @@
                 return Some(candidate);
             }
             self.queue.push_back(candidate);
-            if self.queue.get(0).map(|api| api.name()) == first_candidate {
+            if self.queue.front().map(|api| api.name()) == first_candidate {
                 panic!(
                     "Failed to find a candidate; there must be a circular dependency. Queue is {}",
                     self.queue
diff --git a/engine/src/conversion/analysis/fun/mod.rs b/engine/src/conversion/analysis/fun/mod.rs
index 415e40a..dc953ad 100644
--- a/engine/src/conversion/analysis/fun/mod.rs
+++ b/engine/src/conversion/analysis/fun/mod.rs
@@ -80,7 +80,7 @@
 
 #[derive(Clone, Debug)]
 pub(crate) enum MethodKind {
-    Normal(ReceiverMutability),
+    Normal,
     Constructor { is_default: bool },
     Static,
     Virtual(ReceiverMutability),
@@ -964,7 +964,7 @@
                     let receiver_mutability =
                         receiver_mutability.expect("Failed to find receiver details");
                     match fun.virtualness {
-                        Virtualness::None => MethodKind::Normal(receiver_mutability),
+                        Virtualness::None => MethodKind::Normal,
                         Virtualness::Virtual => MethodKind::Virtual(receiver_mutability),
                         Virtualness::PureVirtual => MethodKind::PureVirtual(receiver_mutability),
                     }
@@ -1152,7 +1152,7 @@
                     ref impl_for,
                     method_kind:
                         MethodKind::Constructor { .. }
-                        | MethodKind::Normal(..)
+                        | MethodKind::Normal
                         | MethodKind::PureVirtual(..)
                         | MethodKind::Virtual(..),
                     ..
diff --git a/engine/src/conversion/analysis/pod/byvalue_checker.rs b/engine/src/conversion/analysis/pod/byvalue_checker.rs
index 6e2e9b9..d0c828e 100644
--- a/engine/src/conversion/analysis/pod/byvalue_checker.rs
+++ b/engine/src/conversion/analysis/pod/byvalue_checker.rs
@@ -158,6 +158,12 @@
                     ));
                     break;
                 }
+                None if ty_id.get_final_item() == "__BindgenBitfieldUnit" => {
+                    field_safety_problem = PodState::UnsafeToBePod(format!(
+                        "Type {tyname} could not be POD because it is a bitfield"
+                    ));
+                    break;
+                }
                 None => {
                     field_safety_problem = PodState::UnsafeToBePod(format!(
                         "Type {tyname} could not be POD because its dependent type {ty_id} isn't known"
diff --git a/engine/src/conversion/analysis/type_converter.rs b/engine/src/conversion/analysis/type_converter.rs
index 63f7ae9..99cd61d 100644
--- a/engine/src/conversion/analysis/type_converter.rs
+++ b/engine/src/conversion/analysis/type_converter.rs
@@ -251,7 +251,7 @@
                             let i = make_ident(s);
                             parse_quote! { #i }
                         })
-                        .chain(typ.path.segments.into_iter())
+                        .chain(typ.path.segments)
                         .collect();
                 }
             }
diff --git a/engine/src/conversion/codegen_rs/mod.rs b/engine/src/conversion/codegen_rs/mod.rs
index abab612..ee56169 100644
--- a/engine/src/conversion/codegen_rs/mod.rs
+++ b/engine/src/conversion/codegen_rs/mod.rs
@@ -1130,6 +1130,7 @@
         let segs =
             Self::find_output_mod_root(name.get_namespace()).chain(name.get_bindgen_path_idents());
         Item::Use(parse_quote! {
+            #[allow(unused_imports)]
             pub use #(#segs)::*;
         })
     }
diff --git a/engine/src/conversion/mod.rs b/engine/src/conversion/mod.rs
index 61d7d6d..fa24d4d 100644
--- a/engine/src/conversion/mod.rs
+++ b/engine/src/conversion/mod.rs
@@ -114,7 +114,7 @@
             None => Err(ConvertError::NoContent),
             Some((_, items)) => {
                 // Parse the bindgen mod.
-                let items_to_process = items.drain(..).collect();
+                let items_to_process = std::mem::take(items);
                 let parser = ParseBindgen::new(self.config);
                 let apis = parser.parse_items(items_to_process, source_file_contents)?;
                 Self::dump_apis("parsing", &apis);